關于新聞個性化推薦你不能不知道的4個部分
本文從內容畫像、用戶畫像、召回和排序、推薦策略四方面分析了新聞的個性化推薦機制。
關于個性化推薦,我的理解是:按照每個人的喜好,在合適的時間、合適的場景、把合適的內容以合適的形式呈現在用戶面前,滿足用戶的需求。那么這里就涉及到了三部分,用戶——算法和策略——內容。
下圖是一個簡單的新聞推薦組成部分:
新聞推薦簡圖
我們的“人”和“物”都是復雜的,需要用我們理解的符號去把他們描繪出來,讓我們的程序理解。
一、內容畫像
1.1 新聞文章來源
做新聞,我們首先要有文章源。文章的來源,一般有三部分:
- 機器在各個資訊網站抓來的文章。
- 公司編輯自己寫的文章。
- 入駐作者寫的文章。
1.2 內容分類體系介紹
有了文章,我們需要把文章分門別類的放在一個內容池子里。
那么該如何分門別類呢?這里就涉及到了內容分類體系。
在我們逛淘寶的時候,會有各種物品的分類,比如家居,比如圖書,比如衣服。
同樣的,文章也會有分類。當我們打開一個資訊app,比如頭條吧,就可以看到導航欄有:“軍事”“歷史”“時政”等等。
京東和頭條的前臺分類
這是我們在前臺可見的,其實在它的背后,有一套龐大的分類體系,下面我們來說一下。
分類體系一般有三種形式:結構化,半結構化,非結構化。
- 結構化的分類:層級分明,有父子關系,分類間相互獨立,比如科技-互聯網-人工智能。
- 半結構化的分類:具有結構化的形式,同時也有一些不成體系的分類,我認為知識圖譜算是一種半結構化的分類體系。
- 非結構化的分類:分類比較靈活,沒有明確的父子關系,如獨立的關鍵詞標簽。
結構化分類體系
知識圖譜
1.3 常見問題和分類原則
- 一級分類=二級分類的情況:如美食,寵物的一級二級分類名稱相同。
- 二級分類不夠全或分的較粗:如歷史被分為“古代史,近代史,現代史”。
- 一些分類較雜:如“科學探索”分類下可能各種內容都有。
- 一些二級分類歸屬不夠合適:在有一級分類“職場”的情況下,“職業培訓”被放在了“教育”。
- 一些文章沒有好的歸屬,如辦公軟件的學習類文章沒有歸屬。
- 人工智能分類下的文章有一些是玩偶。
在做分類的時候我們會遵循一些原則,這里我來說一下結構化分類體系搭建的原則。
- 相互獨立:各分類間內涵應當相互獨立。
- 完全窮盡:各分類應當完全窮盡列舉,下一級分類可以組成上一級分類的全集。
- 命名應當短小易懂。
- 命名應當準確無歧義。
- 命名具有內容代表性。
- 分類粒度應當適合,不能較粗或較細。
- 每個分類下三級分類不能過于龐大。
- 釋義應當相對簡單明了,不應長篇大論太過專業。應當從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 畫像特征獲取
那么畫像的特征數據要怎么獲取呢?
①事實特征里的一部分,是我們通過用戶主動填寫或埋點來獲得的,比如用戶主動填寫的性別,比如埋點獲得的用戶瀏覽時長。
②另一部分是根據業務指標來對事實特征進行復合計算,如:用戶文章平均閱讀時長=用戶閱讀的總時長/用戶閱讀的總文章數。
如果用戶沒有填寫某些信息,或者我們獲取不到怎么辦呀?
一般我們有兩種方式:
- 引入第三方數據補全用戶畫像特征。
- 算法工程師會把填寫了性別的用戶作為樣本,按照男女分別進行有監督的機器學習,從而對性別特征不完整的用戶進行模型訓練,得出這部分用戶的性別,但這里是一個概率值,比如A用戶性別:男70%,女30%。
說完了事實特征,我們來說模型特征。
模型特征則需要我們去制定一些規則,為我們的業務場景服務,比如用戶流失等級,運營可以針對不同流失等級的用戶上不同的運營策略。我們規定:
- 3天未打開新聞客戶端的用戶,流失等級為A;
- 7天未打開新聞客戶端的用戶,流失等級為B;
- 15天未打開新聞客戶端的用戶,流失等級為C;
- 30天未打開新聞客戶端的用戶,流失等級為D;
- 60天未打開新聞客戶端的用戶,流失等級為E;
- 90天未打開新聞客戶端的用戶,流失等級為F(流失了)。
2.6 用戶畫像平臺
搭建好用戶畫像特征體系之后,我們需要有個可視化的平臺,用戶畫像平臺。在功能上一般應分為四部分。
- 群體畫像:我們可以通過特征圈選人群。比如用性別這個特征,分男女去看,不同的用戶群體,喜好的文章一級分類有什么區別。
- 單用戶畫像:當我們輸入用戶的id,可以看到這個用戶所有特征的詳細信息,同時也需要有個用戶畫像豐滿度的總評分。
- 場景賦能:比如我們可以圈選一部分目標用戶,對他們進行廣告投放,看這批用戶后期在每一個環節的轉化。
- 權限和特征管理:畫像平臺應當對不同崗位的員工設置不同的權限,同時也需要對用戶畫像的特征進行管理,支持增刪改查的操作。
三、召回和排序
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文章拆為“我累了,累了晚,了晚安,晚安我,安我睡,我睡了?!?/p>
兩篇文章的相似度=重復詞匯量/(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 常見策略
我接觸過的部分策略如下:
- 新用戶興趣試探策略
- 興趣打散策略
- 本地化推薦
- 網絡狀態推薦
- 分時段推薦策略
- 搜索行為策略
- 負反饋策略
- 分場景策略
- 熱點事件策略
- 通勤場景策略
- 季節性策略
- 流失召回策略
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協議
系統而通俗
謝謝大神