內容APP如何給用戶打標簽&內容推送?

10 評論 31338 瀏覽 316 收藏 12 分鐘

筆者結合自己的項目經驗,分析了內容APP如何通過給文章分類以及打標簽?

17年-18年底我參與了一個資訊內容興趣偏好標簽的項目。什么是內容興趣偏好標簽呢?

簡單來說就是分析用戶喜歡看的文章類型,得到用戶的興趣偏好,在這樣的基礎上,對用戶進行內容的個性化推薦和push推送,來有效促進app的活躍并拉長用戶生命周期。

這件事情簡單來說其實就是兩步走:

  • 一是,給文章進行分類,也就是我們俗稱的給文章打標簽。
  • 二是,給用戶打標簽,也就是用戶閱讀了哪些類型的文章,相應的就會獲取到自己的興趣偏好標簽。比如我愛看科技類型的文章,那我便有極大的可能被打上科技的資訊標簽。整體流程如下;


那么在實際操作中真的如此簡單嗎?看似簡單的兩個環節,究竟是如何實現的呢?

首先我們來聊一聊給文章進行分類

筆者因為這個項目的原因,看了非常多競品app的文章分類,發現基本上趨于一致,但也有一些細節上的差異,更多的問題,在于資訊文章的分類很難窮盡,我們參考了市面上已有的分類,并結合一些資料制定了一整套內容興趣偏好體系,在指定分類時,我們遵循MECE原則,基本達到了相互獨立完全窮盡。

接下來,我們要對文章進行分類,我們采用了分類算法的有監督的學習。理想情況下,流程是這樣的:

但在實際中面臨兩個問題,由于選擇了有監督的學習,就面臨必須要提供有標注的樣本的基礎。一般情況下有三種方式獲取樣本:

  • 一是人工對文章進行標注,優點是準確,缺點是效率低,對于算法要求大量樣本的要求,成本非常高。
  • 而另一種方式則是通過一些開源網站提供的關鍵詞進行模型訓練,比如可以從搜狗詞庫獲取,優點是成本低,但缺點也很明顯,由于不同的分類體系對部分分類的理解不一致,導致分類并不夠準確,后期需要耗費大量的人力進行矯正。
  • 第三種方式是和一些資訊類app進行合作,獲取他們的文章以及分類作為樣本,例如目前做的比較好的如今日頭條、uc等都是不錯的選擇。我們當時其實都嘗試了(一把辛酸淚)。

獲取樣本以后,就是算法模型的訓練及其檢驗了。算法模型的訓練原理,即通過對樣本文章進行分詞,抽取實體,建立特征工程,將每一個特征詞作為向量,擬合出一個函數,這樣,當有新的文章時,該文章通過分詞,并通過模型計算出結果。但模型并不是能夠有樣本一次性就能準確的,模型還需要進行測試和矯正。一般測試流程如下:

通過了測試的模型也并不是一勞永逸的,仍然可能在后期出現一些分類不準確的問題,這可能是樣本造成的,也可能是算法模型造成的。這需要我們找出這些異常的文章及其分類,并矯正分類,再次作為訓練樣本投喂給模型,進行模型的矯正。一方面,我們可以對轉化率比較低的分類的文章進行人工抽檢,確定問題是否出在算法。另外,在這里,由于每一篇文章的標簽都被賦予了一個值,我們可以為這些值設置一個閾值,當最高值低于某個閾值,這些文章及其標簽將被召回,由人工進行標注和矯正,并在此投入樣本庫中。

文章標簽的計算,由于文章具有多種標簽的可能,并非一些二分類非此即彼的結果,因此我們采用的方式是,通過相似性算法,模型計算出文章的標簽,并賦值,值越高則說明和這類標簽越接近,并被打上相應標簽。

至此,文章打標簽的部分就已經完成了。

如何給用戶打標簽

給用戶打標簽的方式其實也可以包含兩種,統計類的打標簽及算法類的打標簽。

  • 統計類相對簡單粗暴式的以用戶一段時間閱讀的文章類型作為用戶的興趣偏好。
  • 而算法類則會增加更多的影響因素,包括文章閱讀的數量,閱讀的時間間隔,文章與當前熱點事件的關系、用戶屬性因素等等。

前者在算法資源不足同時運營需求量大的情況下可以先行,而后者可以在前者的基礎上切分一部分流量對算法模型進行驗證和調整,不斷優化。

但在用第一種方式進行時我們發現,用戶在一段時間內閱讀的文章類型并不是穩定的,大部分用戶會有一個或者幾個主要的興趣偏好,這些類型閱讀的文章篇數會更多,但同時,用戶也會或多或少的閱讀一些其他類型的文章,甚至有些用戶是看到哪里算哪里,什么都會看。

基于這樣的情況,我們需要對用戶的興趣偏好進行排名,即通過對用戶一段時間內每種文章類型閱讀的文章數進行排名,并取用戶top 10的標簽,清晰告訴運營用戶喜歡什么類型的文章,這些類型中,用戶喜歡類型的優先級是怎樣的,便于運營同學進行推送選擇。

因此,用戶的標簽也需要更加靈活,能夠讓運營同學基于事件發生時間及事件發生次數等權重進行靈活組合選擇用戶群。

由于目前push推送很大一部分是由人工進行的,從選擇文章,到選擇用戶,到文章和用戶的匹配,在正式進行推送前一般都會進行大批量的A/B test ,而資訊文章的類型非常多,僅一級標簽已經達到30+種,二級標簽從100到幾百不等,總體的標簽極有可能會有成千的標簽,單靠運營同學進行推送,是絕對無法完成的。

因此,在運營資源有限又無法實現自動化的的情況下一般運營同學會對標簽進行測試,并選擇其中覆蓋用戶量大且轉化率較高的標簽。但同時這樣的情況就會導致部分興趣偏好比較小眾的用戶被排除出推送的人群。

針對這樣的情況,我們取了用戶top 10的二級標簽及其對應的一級標簽作為用戶的一級和二級標簽。這樣,解決了用戶覆蓋量的問題,也可以讓運營人員集中精力對主體標簽及人群進行推送。

但同時,另一個問題又出現了,選擇用戶一段時間內的行為,那么這個一段時間究竟是多長會更加合適,使得既達到能充分反應用戶興趣,同時又覆蓋到更多的人群(每天都會有流失的用戶,因此時間線越長覆蓋用戶量越大,時間線越短覆蓋用戶量越少)

我們發現,用戶長期的興趣偏好趨于某種程度的穩定,但短期的興趣偏好卻又反應了用戶短期內跟隨熱點的行為。因此從這個層面來看,短期可能更能滿足用戶的需求,但短期覆蓋用戶量小。在這里,始終有覆蓋量和轉化率之間永恒的矛盾。

我們的方式是,對用戶根據瀏覽時間進行分段。賦予用戶長期興趣偏好和短期興趣偏好,并優先短期興趣偏好,從長期興趣偏好中則將短期興趣用戶進行排除,進行不同的推送。而對于流失用戶,極有可能在最近3個月(資訊當時定義流失用戶時間為3個月)沒有任何訪問記錄,針對于這樣的用戶,我們取用戶最后一次有記錄的標簽作為用戶標簽,并進行流失挽回。

至此,所有的用戶也都有了屬于自己的標簽,而運營同學也可以根據用戶的活躍時間以及閱讀的頻率對不同的用戶進行不同的文章推送,真正的實現千人千面。

在這個問題上我們可以說是踩了不少的坑。

而第二種方式,是通過算法直接為用戶打上標簽,除了時間和閱讀頻次,在算法模型中還可以增加更多的特征緯度,比如用戶閱讀文章距離現在的時間、閱讀文章的時長、評論、點贊等等,同時,還可以針對于熱點文章、熱點事件,降低文章的權重。

結語

當我回首去總結這一段經歷的時候,甚至當讀者你跟隨我去了解這一段經歷的時候可能會覺得其實很簡單,但是,在這一段經歷中我們真的踩了無數的坑,尤其是我們不僅僅要去采集數據、制作標簽,甚至還要去指導業務進行投放以及問題分析,那段經歷可以說是痛苦并快樂的——

痛苦是因為問題實在太多,業務每天都在追著我問今天為什么轉化率又低了;快樂是因為我們最終轉化率終于提高了一倍不止,甚至高于行業水平,也算是最好的回報了。

 

本文由 @糖糖是老壇酸菜女王 原創發布于人人都是產品經理,未經作者許可,禁止轉載。

題圖來自Unsplash,基于CC0協議。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 好像流程圖畫錯了,應該在判斷筐那里過擬合吧

    來自北京 回復
  2. 流程圖的,最后的模型檢驗—怎么是過擬合了?

    來自北京 回復
    1. 好像流程圖畫錯了,應該在判斷筐那里過擬合吧

      來自北京 回復
  3. 寫得不錯啊,有學習到!

    回復
  4. 請問一下什么是A/B TEST?怎么進行操作?

    來自湖南 回復
  5. 我最近也準備做這塊的,請問怎么才能跟UC和頭條合作得到他們的帶標簽的文章呢?

    來自廣東 回復
  6. UC指的是?

    來自北京 回復
  7. 最近正在研究標簽,受用~

    回復
    1. 能有點小幫助就好

      回復
  8. 用戶內容偏好的收集于利用1.內容收集,清洗,分類,存儲,匹配。2.用于消費場景和找回場景。3.樣本:人工標注,開源模型,成熟算法。

    回復