30 views

本文從內容畫像、用戶畫像、召回和排序、推薦策略四方面分析了新聞的個性化推薦機制。

關於個性化推薦,我的理解是:按照每個人的喜好,在合適的時間、合適的場景、把合適的內容以合適的形式呈現在用戶面前,滿足用戶的需求。那麼這裡就涉及到了三部分,用戶——演算法和策略——內容。

下圖是一個簡單的新聞推薦組成部分:

新聞推薦簡圖

我們的「人」和「物」都是複雜的,需要用我們理解的符號去把他們描繪出來,讓我們的程序理解。

一、內容畫像

1.1 新聞文章來源

做新聞,我們首先要有文章源。文章的來源,一般有三部分:

  1. 機器在各個資訊網站抓來的文章。
  2. 公司編輯自己寫的文章。
  3. 入駐作者寫的文章。

1.2 內容分類體系介紹

有了文章,我們需要把文章分門別類的放在一個內容池子里。

那麼該如何分門別類呢?這裡就涉及到了內容分類體系。

在我們逛淘寶的時候,會有各種物品的分類,比如家居,比如圖書,比如衣服。

同樣的,文章也會有分類。當我們打開一個資訊app,比如頭條吧,就可以看到導航欄有:「軍事」「歷史」「時政」等等。

京東和頭條的前台分類

這是我們在前台可見的,其實在它的背後,有一套龐大的分類體系,下面我們來說一下。

分類體系一般有三種形式:結構化,半結構化,非結構化。

  • 結構化的分類:層級分明,有父子關係,分類間相互獨立,比如科技-互聯網-人工智慧。
  • 半結構化的分類:具有結構化的形式,同時也有一些不成體系的分類,我認為知識圖譜算是一種半結構化的分類體系。
  • 非結構化的分類:分類比較靈活,沒有明確的父子關係,如獨立的關鍵詞標籤。

結構化分類體系

知識圖譜

1.3 常見問題和分類原則

  • 一級分類=二級分類的情況:如美食,寵物的一級二級分類名稱相同。
  • 二級分類不夠全或分的較粗:如歷史被分為「古代史,近代史,現代史」。
  • 一些分類較雜:如「科學探索」分類下可能各種內容都有。
  • 一些二級分類歸屬不夠合適:在有一級分類「職場」的情況下,「職業培訓」被放在了「教育」。
  • 一些文章沒有好的歸屬,如辦公軟體的學習類文章沒有歸屬。
  • 人工智慧分類下的文章有一些是玩偶。

在做分類的時候我們會遵循一些原則,這裡我來說一下結構化分類體系搭建的原則。

  1. 相互獨立:各分類間內涵應當相互獨立。
  2. 完全窮盡:各分類應當完全窮盡列舉,下一級分類可以組成上一級分類的全集。
  3. 命名應當短小易懂。
  4. 命名應當準確無歧義。
  5. 命名具有內容代表性。
  6. 分類粒度應當適合,不能較粗或較細。
  7. 每個分類下三級分類不能過於龐大。
  8. 釋義應當相對簡單明了,不應長篇大論太過專業。應當從c端用戶角度考慮,使標註的人可以一下子理解分類的內涵,而非必須具有專業知識才可分辨,否則不符合用戶思維習慣。

1.4 構建分類體系

那麼接下來我們該如何去做分類體系呢?有兩個思路:

1)讓程序根據站內用戶瀏覽記錄,抓取出瀏覽比較多的一些關鍵詞,我們按照這些關鍵詞去整合分類。

但從實際操作來看,用戶的興趣分層是:(一二三級)分類——主題——興趣點——關鍵詞的層級,

舉個例子:科技(一級)——互聯網(二級)——人工智慧(三級)——智能辦公(主題topic)——語音助手(興趣點poi)——小愛(關鍵詞)

如果我們根據關鍵詞往上匯合分類,會比較難實施。

2)人為的定義出一二三級分類。具體操作步驟如下:

  • 了解每個一級分類內涵,查閱大量相關網站,如搜索歷史垂類網站,查看網站內容和分類。②根據網站分類,逐一列舉,從日常用戶興趣角度出發列舉三級分類粒度的分類詞。
  • 從三級分類合併二級,以及從二級分類拆分三級分類雙向進行整理。
  • 對分類給出釋義和邊界,以便標註人員區分。

那麼我們如何保證三級分類下的文章充足?以及如何保證人工分類的準確性呢?

我們採取了兩個措施:

  • 針對問題1:我們把三級分類詞,如「人工智慧」放到研發的文章召回系統,進行搜索——可以看到以「人工智慧」為關鍵詞可以召回的文章內容及數量,以此來判斷此三級分類是否文章充足,進行調整。
  • 針對問題2:因為一部分的文章首先要經過標註團隊的人工標註,在標註的時候,標註員會反饋具體某個三級分類存在的問題以及不合理性。此環節產品,運營,編輯都會介入,對於不合適的三級分類會進行修改。

1.5 人工標註和機器學習

當分類體系完成後,接下來是標註環節。

標註團隊標註一定數量的文章,演算法團隊的工程師會用演算法對人工標註的樣本,進行有監督的機器學習,把剩餘的文章用程序給它標上對應的分類。

負責這部分工作的工程師,會用多種方法來對文章進行機器學習,比如有ABC三種。用三種方法對新的文章樣本進行分類。

然後讓標註員對演算法標分類的文章進行校驗,從而得出三種方法為文章分類的準確性,公式如下:

標註員分類和機器分類相同的文章數量/總的文章數量=機器標註準確率

之後演算法工程師會對標註不準確的文章繼續進行學習,不停的迭代優化演算法。

針對外部抓取的文章,演算法工程師也會用這套方法對他們標記分類。到這裡,我們的文章就可以分門別類的被放在內容池的不同地方了。

二、用戶畫像

2.1 什麼是用戶畫像

當有了內容的畫像,我們也需要用戶的畫像。那什麼是用戶畫像呢,我認為是對用戶這個客觀實體的描募。

比如我對自己進行一個總結:男,175cm,65千克,產品經理,26歲,月薪25k,無車……等等。

這就是我的用戶畫像。

那麼為什麼做推薦需要用戶畫像呢?

是因為只有當我們了解了一個人,才能把她最想要的給她。

用戶畫像

2.2 用戶畫像要基於業務存在

做用戶畫像第一步要基於業務,也就是說用戶畫像是要對具體業務場景來服務的。

比如個性化推薦,精準營銷,數據分析,活動運營等等。

所以第一步需要了解業務場景以及各崗位的同事對畫像的需求。

2.3 搭建用戶畫像體系

在了解之後,我們會開始搭建畫像特徵的體系,這裡說明一下,特徵是一點點獲取、建立和利用的;但特徵體系在一開始需要搭建出來,儘可能的囊括各業務場景的需要。

雖然某些特徵可能在初始階段還沒有建立,但需要根據業務需求先列舉出來;以便在做畫像平台功能框架搭建的時候,不會因為沒考慮到某類特徵,而使後期畫像平台的功能框架無法兼容。

以下我從:基本信息、興趣愛好、行為特徵、社交和心理、消費與模型這5個方面做了一個簡單的新聞資訊用戶畫像體系。

一般來說在建立特徵體系的時候,應該包含以下表頭:一級特徵分類、二級特徵分類、特徵描述、特徵欄位、特徵值類型、特徵來源、特徵時效、最近更新內容、特徵示例。

資訊用戶畫像體系

2.4 畫像特徵介紹

用戶畫像主要有兩塊:事實特徵和模型特徵。

事實特徵是用戶的基本信息,以及他在app內產生的行為:如用戶的設備信息,地理位置,主動填寫的性別,年齡,以及在客戶端瀏覽文章中產生的點擊行為等等。

模型特徵是我們基於用戶的事實特徵,制定一些規則建立的:如用戶流失等級,用戶消費等級,用戶滿意度等。

從時效性上來劃分,畫像特徵分為長期,短期,實時。

長期特徵如:用戶基本信息裡面的一部分特徵,性別,年齡,生日,賬號,設備等等。

短期特徵如:用戶的興趣愛好和行為特徵,當然這裡要說明用戶的興趣愛好也分為長期和短期,但這個是相對的,興趣愛好仍然被我放在短期特徵內。

實時特徵如:用戶的實時地理位置,實時網路狀態等等

2.5 畫像特徵獲取

那麼畫像的特徵數據要怎麼獲取呢?

①事實特徵里的一部分,是我們通過用戶主動填寫或埋點來獲得的,比如用戶主動填寫的性別,比如埋點獲得的用戶瀏覽時長。

②另一部分是根據業務指標來對事實特徵進行複合計算,如:用戶文章平均閱讀時長=用戶閱讀的總時長/用戶閱讀的總文章數。

如果用戶沒有填寫某些信息,或者我們獲取不到怎麼辦呀?

一般我們有兩種方式:

  1. 引入第三方數據補全用戶畫像特徵。
  2. 演算法工程師會把填寫了性別的用戶作為樣本,按照男女分別進行有監督的機器學習,從而對性別特徵不完整的用戶進行模型訓練,得出這部分用戶的性別,但這裡是一個概率值,比如A用戶性別:男70%,女30%。

說完了事實特徵,我們來說模型特徵。

模型特徵則需要我們去制定一些規則,為我們的業務場景服務,比如用戶流失等級,運營可以針對不同流失等級的用戶上不同的運營策略。我們規定:

  • 3天未打開新聞客戶端的用戶,流失等級為A;
  • 7天未打開新聞客戶端的用戶,流失等級為B;
  • 15天未打開新聞客戶端的用戶,流失等級為C;
  • 30天未打開新聞客戶端的用戶,流失等級為D;
  • 60天未打開新聞客戶端的用戶,流失等級為E;
  • 90天未打開新聞客戶端的用戶,流失等級為F(流失了)。

2.6 用戶畫像平台

搭建好用戶畫像特徵體系之後,我們需要有個可視化的平台,用戶畫像平台。在功能上一般應分為四部分。

  1. 群體畫像:我們可以通過特徵圈選人群。比如用性別這個特徵,分男女去看,不同的用戶群體,喜好的文章一級分類有什麼區別。
  2. 單用戶畫像:當我們輸入用戶的id,可以看到這個用戶所有特徵的詳細信息,同時也需要有個用戶畫像豐滿度的總評分。
  3. 場景賦能:比如我們可以圈選一部分目標用戶,對他們進行廣告投放,看這批用戶後期在每一個環節的轉化。
  4. 許可權和特徵管理:畫像平台應當對不同崗位的員工設置不同的許可權,同時也需要對用戶畫像的特徵進行管理,支持增刪改查的操作。

三、召回和排序

3.1 什麼是召回

首先我來解釋一下什麼是召回,通俗易懂的理解就是:根據用戶的一些「條件」把符合這些「條件」的文章從廣闊的內容池裡召喚出來,放到一個小的池子里。

3.2 文章的信息抽取

在召回前我們會做一些準備工作。

第一步是信息的抽取,文章是由html語言編寫的,有<title>有<head>有<body>,是成對出現的,都是半結構化的數據。

程序對文章進行信息抽取的時候,也是按照這樣的結構,用深度優先遍歷,按照棧結構先進後出的特點來抽取的。

深度優先遍歷這裡我來說一下,如果是學計算機的同學,在《數據結構》這門課程中會學到。

如下圖是一個樹結構,我們需要把每個節點都走一遍,「深度優先」顧名思義就是縱向最深,那麼我們按照從左到右深度優先的規則,走一遍。

得出的順序就是:A-B-E-F-C-G-D-H-I。

那麼為什麼抽取文章信息的時候,要用深度優先遍歷呢?

就是因為上文提到的文章的結構是有標題有正文,在html語言中代表標題和正文的標識在每個部分的前後出現,相互一層層嵌套,採用深度優先遍歷,抽取出的信息結構不會混亂。

抽取后,程序需要識別出哪些是正文,哪些是廣告。對於我們人來說,可以輕易辨別;但是對於程序而言,需要一些規則去讓程序識別出來——
比如我們用投票方法來對文章文本塊進行打分。

規定文本塊的位置:在頁面中間的為3分,在頁面左右兩端的為1分,在頁面底部的為2分。

再比如我們規定文本塊的長度:不同的長度給不同的分值。

3.3 文章的分詞

抽取信息之後,我們要對文章內容進行分詞,對於我們人來說,我們可以根據學習經驗對文本進行斷句,但機器卻並不知道。

所以這裡我們也有一些方法,下面來介紹3種。

1)字典-最大前綴

首先我們有一個字典集,這個裡面包含我們所有的詞語,當機器「讀」一句話的時候,例如「個性化推薦真好玩」

按照字典裡面存在的詞語去從左到右進行匹配,「個性」是一個詞,做個記錄,繼續往下。「個性化」又是一個詞,再做個記錄。「個性化推」不是一個詞語,繼續向下「個性化推薦」是一個詞語。

直到找到最大的片語。

2)N-gram分詞

這個N代表的就是對這句話用幾個字去拆分,比如N=3,原句就會被拆分為「個性化」「性化推」「化推薦」……。

3)基於統計學的分詞

如貝葉斯,根據語料庫的歷史信息,分析當一個漢字出現時,另一個漢字出現在它後面的概率,從而進行分詞。

字典-最大前綴樹

貝葉斯公式

3.4 文章的過濾與排重

分詞后我們會進行一波過濾:敏感詞過濾、低質過濾、排重。

敏感詞過濾:會根據既定的一些敏感詞列表,把包含這些敏感詞的文章過濾掉。

低質過濾:會根據機器學習的歷史低質文章演算法,加標註人員標註的低質文章,對文章進行過濾。

排重:這裡要對相似度較高的文章進行去重。我們來介紹兩種方法:

1)I-Match演算法

假設有A和B兩篇文章,分詞后,我們首先統計出兩篇文章的高頻,中頻,低頻詞。去掉高頻和低頻詞。比較A和B兩篇文章中頻辭彙表的相似度,卡一個相似度的閾值。

2)Shingle演算法

假設有A和B兩篇文章,A是:我困了晚安我睡了,B是:我累了晚安我睡了。

shingle會把A文章拆分為「我困了,困了晚,了晚安,晚安我,安我睡,我睡了。」;B文章拆為「我累了,累了晚,了晚安,晚安我,安我睡,我睡了。」

兩篇文章的相似度=重複辭彙量/(A文辭彙量+B文辭彙量-重複辭彙量)=4/(6+6-4)=50%,卡一個相似度的閾值。

對相似度達到閾值的文章進行過濾,僅留一篇,比如按照發表的先後順序留,或者按照文章質量的判定留等等。

3.5 文章的召回

召回

1)基於人口屬性的召回。

如根據用戶的地理位置召回的文章。

2)基於用戶興趣的召回

如根據用戶對各分類文章的興趣程度進行召回。舉個例子:我們選取用戶近7天內點擊的文章所屬的三級分類下的文章,按照當下點擊數由高到低的選取30篇文章進入這路召回的集合。

3)基於用戶行為特徵的召回

如根據用戶在站內的行為特徵來進行召回。舉個例子:我們規定用戶對文章有以下行為就代表了用戶的行為特徵,對某篇文章點贊(1分),評論(2分),轉發(3分)。

我們選取出這個用戶近7天內,得分最高的5篇文章,所在的三級分類下的30篇新文章,進入這路召回的集合。

4)基於協同的召回。

空間向量模型在說協同之前,我們先介紹一個空間向量模型。

我們把每個用戶表達成了一個個的標籤特徵,我們想象每個標籤就是一個坐標軸,每個特徵的分值,就是這個特徵在坐標軸上的長度。這樣我們可以在一個多維坐標軸上,用一個向量來描述一個用戶,代表不同用戶的兩個向量的夾角越小,就表示兩個用戶越相似。

兩篇不同文章的相似度計算也是一樣。具體的公式如下:

餘弦相似度公式

協同

1)基於用戶的協同

比如A用戶和B用戶向量化后很相似,那麼我們認為B用戶喜歡的東西,A用戶也會喜歡,於是我們把B用戶喜歡的東西推薦給了A用戶。

2)基於內容的協同

比如A用戶喜歡甲文章,甲乙文章向量化后很相似,那麼我們認為乙文章A用戶也會喜歡,於是我們把乙文章推薦給了A用戶。

3)基於整體的協同

比如有ABC三個用戶,A用戶喜歡甲乙文章,B用戶喜歡甲乙丙文章,C用戶喜歡甲文章,於是我們認為喜歡甲文章的用戶都會喜歡乙文章,於是把乙文章推薦給了C用戶。

3.6 文章的排序

每路召回形成的是一個基於每個用戶的文章集合,我們需要把多路集合作為輸入集灌入到我們的排序模型中。

排序模型會通過模型對用戶和文章的眾多特徵,每個特徵的權重進行計算。

常用的排序模型有:LR(邏輯回歸),GBDT(決策樹),FM(因子分解機)等以及他們的複合變種。

經過排序之後,對於每個用戶,會輸出一個新聞的信息流按照排序的規則(由高到低)。

四、推薦策略

下面我們來說一下重排序,也就是上產品策略的階段。

4.1 常見策略

我接觸過的部分策略如下:

  1. 新用戶興趣試探策略
  2. 興趣打散策略
  3. 本地化推薦
  4. 網路狀態推薦
  5. 分時段推薦策略
  6. 搜索行為策略
  7. 負反饋策略
  8. 分場景策略
  9. 熱點事件策略
  10. 通勤場景策略
  11. 季節性策略
  12. 流失召回策略

4.2 策略的目標

在工作中,我們都會有一個目標,為一個目標服務。比如:新聞的個性化推薦看重,uv點擊率,次日留存率,用戶的平均閱讀時長等。

對於新用戶來說:我的理解是要儘快發現他們的興趣,把他們留下來,然後提升點擊。

對於老用戶來說:我的理解是要發掘他們更多的興趣,提升他們的點擊和閱讀時長,減少流失。

4.3 策略案例

這裡來分享1個案例:分網路狀態推薦策略。

需要說明的是:這裡只進行思路簡述,實際策略方案會比這個更加嚴謹和複雜。

4.3.1 猜想與調研

猜想

從實際體驗出發,當我們在無線網路下,會更肆無忌憚的去點視頻圖文觀看,而在有線環境下會更少一些。

如果用戶的行為符合這個猜想,那麼在不同的網路狀態調整不同類型文章的佔比,可以提升用戶的點擊。

調研

為了驗證這個猜想,我們可以做一個競品調研。比如我們的新聞客戶端是A,調研BCD三家新聞客戶端在有線和無線狀態下,前100條資訊,首頁信息流中純視頻的數量(廣告除外)

假設我們得到的結果如下圖。我們發現競品確實也做了這樣的策略,那麼我們需要做個ABtest來看下效果:

4.3.2 實驗設計

1)網路狀態:

實驗組和對照組按照要求處在不同網路狀態下。

2)人群劃分:

圈選20w人群,多維度均勻選取等量分為4組,使4組用戶同質。

3)變數控制:

只有首頁信息流視頻出現的比例不同這一個變數。

4)用戶要求:

每個組的5w用戶,只有當此用戶當日有分別在有線和無線網路下瀏覽新聞的行為,才會被計入統計。

對照組1:5w用戶保持線上邏輯,有線和無線網路狀態,首頁信息流推薦視頻比例相等。

對照組2:5w用戶保持線上邏輯,有線和無線網路狀態,首頁信息流推薦視頻比例相等。

(說明:AAtest,保證實驗組和對照組的變化,不是由於人群包切分或其他因素造成不同。)

實驗組1:5w用戶在無線網路下推薦視頻比例與對照組相同,有線網路狀態下首頁信息流降低5%比例的視頻。

實驗組2:5w用戶在無線網路下推薦視頻比例與對照組相同,有線網路狀態下首頁信息流降低10%比例的視頻。

實驗組3:5w用戶在無線網路下推薦視頻比例與對照組相同,有線網路狀態下首頁信息流降低15%比例的視頻。

4.3.3 實驗結果評估

1)觀測指標

各個分組(按日):人均曝光量,人均點擊量,人均點擊率,人均閱讀時長,次日留存率等。

2)實驗數據觀測

親自體驗線上情況,同時觀測每個對照組和實驗組的數據表現。

3)策略復盤

實驗設計是否合理,是否引入了其他變數,策略是否在線上生效,數據是否符合預期,用戶對此需求的真偽,策略總結。

#專欄作家#

大鵬,公眾號:一個數據人的自留地。人人都是產品經理專欄作家《數據產品經理修鍊手冊》作者。

本文原創發佈於人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基於CC0協議

Go Top