搜狐新闻推荐算法原理 | “呈现给你的,都是你所关心的”
導讀
? ? 在當前這個移動互聯網時代,各種信息內容爆炸,面對海量數據,用戶希望在有限的時間和空間內,找到自己感興趣的內容,這就是推薦需要解決的問題。接下來主要講解新聞推薦的算法原理。
01.新聞推薦算法架構
新聞算法的核心主要分為兩個階段:召回階段(retrieval)和排序階段(ranking)。之所以分為兩個階段,主要是從性能考慮。召回階段面臨的是百萬級別甚至千萬級別的文章,單篇文章的性能開銷必須要小;而排序階段的算法則非常消耗資源,不可能對所有文章都算一遍,也沒有必要這樣做,因為一般來說通不過召回粗選的文章,大部分在排序階段排名也會很低。
召回階段,根據用戶的歷史行為和短期行為,分析用戶的興趣偏好,從千萬級的文章庫中挑選出一個小的候選集(通常幾百到幾千篇文章),這些候選集都是用戶感興趣的內容集合。
排序階段,在召回集的基礎上進行更加精準的個性化計算,給每篇文章進行精確打分,這個分值就是文章與用戶的個性化匹配分值,利用該分值進行排序,進而從幾千篇文章中選出用戶最感興趣的幾篇或者幾十篇少量高質量內容。
推薦算法的核心部分兩個階段組成如圖所示,大致包含:
(1)用戶畫像:包含用戶的人口屬性(性別,學歷等)、歷史行為、短期行為、興趣內容和個人偏好等多個維度的數據,是給用戶做個性化推薦的基礎。
(2)特征工程:包含文章的類別屬性、主題屬性、關鍵詞信息、內容分析、人群偏好和統計特征等比較全面的描述和度量,是新聞內容和質量分析的基礎,也是做好用戶與文章個性化匹配的基礎。
(3)召回算法:包含多個通道的召回模型,例如協同過濾(itemcf、usercf等)、主題模型、內容召回、矩陣分解等。
(4)排序算法:對多個通道召回的內容進行統一的打分排序,選出最優的少量結果,這里常用的模型有lr、gbdt、fm以及DNN的一些模型。
除此之外,推薦系統一般還要有一個rerank的過程,要兼顧推薦結果的多樣性、新鮮度、驚喜度以及部分的人工的產品邏輯等多個維度,更能夠滿足用戶個性化的需求。
02.新聞推薦算法原理
·??召回??·
召回最重要的要求是性能要好,一般不超過30ms。
召回策略的種類有很多,我們主要用的是倒排的思路:離線維護一個倒排索引,這個倒排的key可以是分類,topic,關鍵詞,媒體來源等文章屬性;也可以是協同過濾計算的結果,排序時需要考慮點擊率、時效性、相關性等。線上召回可以迅速從倒排中根據用戶的畫像標簽對內容進行截斷召回,高效地從很大的內容庫中篩選和用戶比較匹配的一小部分內容。
基于內容的召回
基于內容的召回(content-base),是根據文章內容本身的語義特征或者字面特征做召回,這類特征通常有關鍵詞,topic,分類,媒體來源等。
基于協同過濾召回
協同過濾算法(CF)的原理是匯總所有用戶(user)和文章(item)的行為,利用集體智慧進行推薦。主要分為兩大類,User-CF和Item-CF。
User-CF,就像朋友推薦,比如通過用戶點擊的文章進行分析,發現用戶A和用戶B很相似,就可以把A點擊文章而用戶B還未點擊的,推薦給用戶B,這里重點是找出用戶的朋友,即相似用戶。
Item-CF,分析每篇文章的點擊行為,可以得出所有文章之間的相似度,找出與當前點擊的文章最相似的N篇文章推薦給用戶。
協同過濾通常能推薦出很多有驚喜的結果,而且只依賴用戶行為不需要對內容做深入分析;但是這種推薦需要大量的用戶行為數據并且很難給出合理的解釋。
基于矩陣分解召回
協同過濾的核心是相似度計算,比較依賴用戶行為,而在實際應用中,一方面,用戶行為矩陣比較稀疏,計算結果不穩定,另一方面如果用戶u沒有對文章i的相似度得分,那么這個協同結果差異會很大。而這些問題在矩陣分解中可以得到很好的解決。?
矩陣分解,直觀上就是把稀疏的用戶評分矩陣近似的分解成兩個小矩陣的乘積,在推薦計算時不再使用大矩陣而是使用分解得到的兩個小矩陣。
常用的矩陣分解算法有SVD、SVD++、timeSVD++以及Spark自帶的SparkALS等,學習過程基本相同,大致如下:
(1)準備好用戶文章評分矩陣,點擊曝光數據模擬評分(1、0)
(2)隨機初始化來構造矩陣U和V
(3)用U和V計算預測后的分數,然后計算與實際分數的誤差
(4)按照梯度下降方式更新U和V的元素值
(5)重復步驟3和4直到到達停止條件
最后會生成user_weight user_vector和doc_weight doc_vector的模型文件,在召回計算的時候使用user向量矩陣和doc向量矩陣做內積,排序取topN。
矩陣分解相比CF預測精度更高,但其缺點也很明顯,推薦結果的解釋性不好而且受限于矩陣維度。
?
基于熱點召回
熱點召回一般用來做兜底,但是熱點不能單純的按ctr排序,因為文章的曝光不同,ctr不具有可比性,通常的做法有威爾遜置信區間、貝葉斯平滑、時間衰減等。
·??排序? ·
我們把推薦問題建模成一個“超大規模分類”問題,即在時刻T和上下文C的情況下,為用戶U在文章庫V中精準的預測出文章I的類別,這里召回已經幫我們解決了超大規模的問題,而排序的核心就是擬合一個用戶對內容滿意度的函數y=Fun(U, I, C),這個函數需要輸入的就是這三個維度的特征:用戶信息U、文章信息I和上下文信息C。
?
特征
特征對于排序模型來說非常重要,好的特征能夠提升模型的性能,更能幫我們理解用戶數據、文章內容數據的特點,這對進一步改善模型、算法都有著重要作用。我們常用的幾類推薦特征:
相關性特征,可以理解為語義特征或者字面特征,用于描述用戶和內容是否匹配。比較常見的匹配有;分類匹配、topic匹配、關鍵詞匹配、媒體來源匹配等。
上下文特征,包括用戶的位置,時間,移動設備,聯網狀態等,這些就是bias特征,也能由此構建一些匹配特征。
熱度特征,包括文章的ctr、分類熱度、topic熱度等,這種內容熱度信息不僅在推薦特征中起著重要作用,而且在用戶冷啟動的時候也非常有效。
挖掘類特征,例如協同特征,聚類特征等,這類特征并非考慮用戶的歷史,而是根據用戶點擊行為分析不同用戶的相似性,比如點擊相似、興趣相似或者屬于同一個類簇,從而獲取到新穎的結果,擴展了模型的探索能力,也能有效的解決越推越窄的問題。
?
模型
推薦系統中比較典型的幾種模型,也是近幾年推薦算法模型發展的趨勢:
?LR?
LR是線性分類模型,要求輸入線性獨立特征。
LR可以視作單層節點的“DNN” ,是一種寬而不深的結構,所有的特征直接作用在最后的結果上。模型優點是簡單、可控性好、可解釋性強,但是效果的好壞直接取決于特征工程的程度,需要非常精細的連續型、離散型等特征以及對應的特征組合,而這種特征組合是需要人工進行轉換的,十分耗費人力并且隨著特征的增加,這種組合復雜度越來越高,增加特征變得異常困難。
?
?GBDT?
GBDT是一種迭代的決策樹算法,它由多棵決策樹組成,所有的樹結論累加起來作為最終答案。它能自動發現多種有區分性的特征以及特征組合,并省去了復雜特征預處理邏輯。之前Facebook實現了GBDT+LR的模型,相比單純的LR或者GBDT都有不錯的提升。
GBDT+LR模型雖然特征泛化能力良好,但是記憶能力比較差,通常需要增加高維特征來增強推薦的記憶能力,包括UserID、各種標簽等特征。
?
?FM & FFM?
由于GBDT是不支持高維稀疏特征的,如果將高維特征加到LR中,一方面需要人工組合高維特征,這種復雜度、難度以及準確度是顯而易見的,另一方面模型維度和計算復雜度都是劇烈增加。所以后面有了FM&FFM模型。FM可以看作是帶特征交叉的LR:
相比一般的線性模型,FM考慮了特征間的關聯,在多項式模型中,特征xi和xj的組合用xixj表示,這一部分就是FM模型多出來的特征組合,從NN的角度考慮:
FM模型覆蓋了LR的寬模型結構,同時也引入了交叉特征,增加了模型的非線性和泛化能力,提升了模型容量,能夠捕捉更多額外的信息,對于像新聞推薦這樣復雜的場景能有更好的預測能力。
FFM模型中引入域(Field)的概念,把n個特征歸屬到f個field里,得到nf個隱向量的二次項:
所以FFM可以看作是帶多個域(Field)的FM,FM是只有一個域(Field)的FFM,其中,fj是第j個特征所屬的field。如果隱向量的長度為k,那么FFM的二次參數有nfk個,遠多于FM的nk個。另外,由于隱向量與field相關,FFM二次項是不能簡化的,其預測復雜度是O(kn^2)。因此,性能往往是制約FFM大規模應用的因素,如果規模不是很大,而且特征比較稀疏的場景下,FFM有很好的效果。
在實際應用中,FM比FFM更廣泛一些,是對性能和效果的一些折中,比較常用的像dmlc下的FM,支持全量和增量的分布式計算,比較適合新聞推薦中場景和興趣多變而且很多稀疏特征的情況。
?DNN?
隨著推薦場景的多樣化,復雜度也隨之增加,上面提到的幾個淺層網絡模型對于更多的隱層信息無法捕獲以及更多的稀疏特征表達不夠充分,DNN的方式逐步成為一種趨勢。但是單純的DNN模型對ctr的提升并不一定會有明顯的提升,而且單一的DNN本身也有一些瓶頸。如果用戶是一個非活躍用戶時,由于自身于item之間的交互很少,根據用戶行為得到的特征向量也會異常稀疏,而DNN在處理這類問題時會過度泛化,導致推薦結果與用戶相關較差。為了更好的解決這類問題,通常會用DNN+具有記憶能力的模型,相互補充。
?wide & deep?
該模型是谷歌在2016年發布的用于分類和回歸的模型,并成功應用于google play的應用推薦中。隨后該模型速度被普及開來,尤其在新聞推薦中,能取得不錯的效果。wide & deep模型的核心思想是結合線性模型的記憶能力和DNN模型的泛化能力,在訓練中同時優化2個模型的參數,達到整體模型的預測能力最優,從而避免了線性模型無法學習訓練集中未出現的特征組合以及神經網絡過度泛化的問題
wide端對應的線性模型,輸入特征可以是連續特征,也可以是稀疏的離散特征,離散特征之間進行進行交叉后可以構成更高維的特征,通過L1正則化能夠很快收斂到有效的特征組合中。
deep端對應的是DNN模型,每個特征對應一個低維的稠密向量,我們稱之為特征的embedding,DNN能夠通過反向傳播調整隱藏層的權重,并且更新特征的embedding
在實際的新聞推薦場景中,wide model側主要包含文章分類id、topic id、曝光位置以及其他部分離散特征,主要為了提高模型的記憶能力;deep model側主要包含離散特征和部分連續特征,例如UserID、DocId、用戶位置、分類ID、關鍵詞ID以及各種統計類特征離散化結果,這些特征通常需要embedding向量然后拼接進行信息融合。
?總結
本文以新聞推薦為例,第一部分講解了推薦算法的架構,主要包含召回和排序兩個階段;第二部分重點介紹了召回算法以及常用排序模型的原理和實現。在新聞推薦領域,排序模型逐步趨向DNN,但是單純的模型更替意義不大,需要在特征工程、模型架構、多樣性、冷啟動、多策略召回以及多目標學習中做更多的嘗試,更好地解決用戶的個性化需求才是我們技術的立身之本。
來源 | 搜狐技術產品
算法數學之美微信公眾號歡迎賜稿
稿件涉及數學、物理、算法、計算機、編程等相關領域,經采用我們將奉上稿酬。
投稿郵箱:math_alg@163.com
總結
以上是生活随笔為你收集整理的搜狐新闻推荐算法原理 | “呈现给你的,都是你所关心的”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 柯洁获清华大学免试入学推荐资格
- 下一篇: 问答丨按量子力学来说,一个人撞墙,有多大