自動外鏈工具 在線排版工具 搜索引擎提交入口 wordpress主題推薦 批量打開網址工具 【老域名購買】 思享SEO導航 【網站合作】

一個完整推薦系統的設計實現-以百度關鍵詞搜索推薦為例

文章目錄
  1. 完整的推薦系統肯定不會只用一種推薦算法

在之前一篇博文中, 有同學在評論中問了個問題: 如何解決因式分解帶來的推薦冷門,熱門關鍵詞的問題。 在回答這個問題的時候, 想到了近幾年在做搜索推薦系統的過程中, 學術界和工業界的一些區別。 正好最近正在做技術規劃, 于是寫偏文章說下工業界完整推薦系統的設計。結論是: 沒有某種算法能夠完全解決問題, 多重算法+交互設計, 才能解決特定場景的需求。下文也對之前的一些博文進行梳理,構成一個完整工業界推薦系統所具有的方方面面(主要以百度關鍵詞搜索推薦系統為例)

完整的推薦系統肯定不會只用一種推薦算法

在學術界, 一般說到推薦引擎, 我們都是圍繞著某一種單獨的算法的效果優化進行的, 例如按內容推薦, 協同過濾(包括item-based, user-based, SVD分解等),上下文推薦,Constraint-based推薦,圖關系挖掘等。 很多比較牛的單個算法, 就能在某個指標上取得較好效果, 例如MAE,RMSE。。。不過有自己的優點, 每種算法也有自己的缺點, 例如按內容推薦主要推薦和用戶歷史結果相似的item,一般的item-based容易推薦熱門item(被更多人投票過)。。。。 所以在工業界,例如各互聯網公司, 都會使用多種算法進行互相配合, 取長補短, 配合產品提升效果。而且在完整的推薦系統中,不僅有傳統的Rating推薦, 還需要輔以非常多的挖掘, Ranking來達到預期效果。

推薦系統3大件:User Profile、基礎挖掘推薦、Ranking

在實踐中, 一個完整的推薦系統會主要由3部分組成:

  1. User Profile
  2. 基礎推薦挖掘算法
  3. Ranking

此處之所以將Ranking單獨列出來,是因為其在推薦任務中過于重要,直接決定了推薦的效果。

以下為整個推薦的數據流:

推薦系統策略架構

User Profile

A user profile is a representation of information about an individual user that is essential for the (intelligent) application we are considering user profile主要是用戶(注冊)信息,以及對用戶反饋的信息進行處理,聚合,用于描述用戶的特征; 是后續推薦和排序的基石。 一般情況下,user profile會包含以下具體內容:

用戶興趣數據

用戶的基礎注冊信息,背景信息:例如用戶出生地,年齡,性別,星座,職業等。這些信息一般從用戶注冊信息中獲??;例如高德,百度地圖注冊用戶,淘寶注冊用戶等

用戶行為反饋:包括顯示的反饋(explicit)和隱藏(implicit)的反饋,顯示的反饋包括用戶的評分,點贊等操作,百度關鍵詞搜索推薦工具上的點贊(正向顯示反饋)和垃圾桶(負向顯示反饋),淘寶上的評分;隱式反饋包括用戶的瀏覽行為,例如在百度關鍵詞搜索推薦上搜過那些詞,淘寶上點擊了那些頁面,在高德上點擊了那些POI等

用戶交互偏好:例如用戶喜歡使用哪些入口,喜歡哪些操作,以及從這些操作中分析出來的偏好,比如在高德地圖上根據用戶行為反饋分析出來的用戶對美食的偏好:更喜歡火鍋,粵菜,還是快餐

用戶上下文信息:這些信息有些是分析出來的,例如在LBS中分析出來的用戶的家在哪兒,公司在哪兒,經?;顒拥纳倘?,經常使用的路線等

user profile經常是一份維護好的數據,在使用的時候,會直接使用該數據,或是將該數據存儲在KV系統中,供Online系統實時使用。 在搜索或是推薦的場景下,每次請求一般只會涉及到一次user profile的KV請求,所以online使用的時候,主要的實現困難是存儲,以及快速KV的快速響應。

基礎挖掘推薦算法

基礎挖掘推薦算法, 主要使用傳統推薦算法, 結合分析的item profile和user profile, 建立user和item的關系,此時并不會過多考慮其他因素,例如是否冷門/熱門,最主要的就是建立user和item的關系。?在各種論文中狹義的推薦,主要就是指該部分內容。 主要圍繞著Rating,以及Top N進行該處的Top N(更像是直接Rating值最高的Top N) 傳統的推薦算法研究主要圍著這塊工作進行,現在已經有很多比較成熟的算法,這些算法相關的研究可參見博文:《推薦系統經典論文文獻及資料》;其中也能找到業界較多成功推薦系統的實踐分享 主要包含以下幾類:

Content Based推薦: 按內容推薦,主要的工作是user profile, item profile的提取和維護,然后研究各種相似度度量方法(具體相似度度量參見博文:《推薦系統中的相似度度量》)

協同過濾:相當于應用了用戶的行為進行推薦(區別于Content based算法),比較經典的算法包括傳統的item-based/user-based算法(參見博文:《協同過濾中item-based與user-based選擇依據》,《collaborative-filtering根據近鄰推薦時需要考慮的3要素》),SVD,SVD++(具體原理及源碼參見博文:《SVD因式分解實現協同過濾-及源碼實現》)

上下文相關推薦:和傳統推薦相比, 考慮更多上下文因素,LBS, 移動場景下使用比較多(具體參見博文:《context-aware-recommendation》)

基于圖的關系挖掘推薦:主要是利用圖論原理,根據item,user之間的數據,反饋關聯關系,挖掘更深層次的關系進行推薦,該類方法一般效果都不錯,當然資源要求也較高。具體參見博文:《級聯二步圖關系挖掘關鍵詞推薦系統》,《頻繁二項集合的hadoop實現》《itemrankrandom-walk-based-scoring-algorithm-for-recommener-system

Constrainted-based推薦:根據限制性條件進行演繹推薦

在實際應用時,我們經常使用按內容推薦,item-based尋找從感知的角度比較靠譜的結果,使用SVD,SVD++,圖關系尋找更深層次的聯系結果。同時在推薦時,會結合很多因素來進行綜合排序,例如關鍵詞, 或是LBS中POI的熱度等。具體可參見下文ranking部分。

算法效果衡量

以上這些算法, 我們在離線的時候,使用Cross-Validation方式,就可以分析出其效果,而且離線分析的時候,代價比較小,比較容易操作。當然,對于不同的問題會使用對應的指標進行衡量。 對于預測Rating準確性主要是用RMSE,或是MAE;具體可參見博文:《關鍵詞搜索推薦系統中的推薦準確性度量》 如果是排序, 則更多使用NDCG,MAP, ?MRR等指標;具體可參見博文:《使用ndcg評估關鍵詞推薦系統的相關性》 在具體應用場景中,對于特定推薦問題,會涉及到選用哪種算法的問題。推薦不像CTR預估這樣的問題,目標比較單一,經常我們需要考慮多個指標,而且這些指標可能此消彼長,需要做權衡,例如需要考慮算法的準確性(accuracy),同時也需要考慮算法的覆蓋(coverage),置信度(confidence),新鮮度(novelty)和驚喜度(Serendipity),同時還需要考慮推薦為系統帶來的收益和效用(utility)。 這些指標經常需要權衡,而且經常提升某一個的時候會導致其它下降,所以有時候存在一定的主觀性:我們到底看中哪一個指標? ?而且這個問題可能隨著系統,平臺所處的階段而不同。 例如在建立口碑的時候,我們可能不太關注coverage,而更關注accuracy,因為要讓用戶建立一種:該系統很準的認知;如果在系統已經比較成熟了,此時可能需要考慮novelty, serendipity的同時,還需要考慮utility:該推薦能為系統帶來什么收益,例如對百度的變現有多大收益? 對淘寶的銷售有多少收益等 具體這些指標的選擇可參見博文:《選擇推薦算法時需要考慮得因素

Ranking,此部分是成熟的搜索,推薦系統具有的核心邏輯

比較簡單的實現方法, 是直接對各種特征拍閾值進行線性加權,比較成熟的系統一般會使用機器學習的方式和綜合個維特征, 學習出模型后進行排序, 例如使用Learning to rank技術。 該部分需要考慮的因素較多較為復雜。 和傳統的推薦相比, 此處單獨將Ranking拿出來。 基礎推薦挖掘, 和傳統的推薦部分比較類似,主要結合user profile, 挖掘哪些item適合推給哪些user。 但僅根據這些挖掘就直接進行推薦是不夠的。 真實online推薦場景中, 需要考慮更多其他因素, 例如:相關性,推薦的上下文,CTR預估,以及商業業務規則。

相關性: item與用戶的相關性,這是大多數搜索和推薦任務的基石,例如在搜索中判定一個query和一個document的相關性,或是一個query 和 另一個query的相關性,或是在特征比較多的情況下, 一個user 和一個item 記錄的相關性;實現方式可以很簡單,例如傳統的相似度度量方式(參見博文:《推薦系統中的相似度度量》),對于文本,業界使用簡單的TF*IDF,或是BM25; 不過很多時候我們需要增加更多維度特征,包括推薦item本身的重要性,例如IDF,Pagerank(具體參見博文:《pagerank的經濟學效用解釋》),同時使用模型來提升相關性判斷的準確性。使用模型的方式會更加復雜,但效果提升也非常明顯。具體可參見博文:《集成樹類模型及其在搜索推薦系統中的應用》,《分類模型在關鍵詞推薦系統中的應用》,《adaboost

推薦的上下文:例如推薦產品的入口,交互方式, 不同的入口,甚至同一入口的不同交互方式, 推薦的結果有可能都需要不一樣; 在LBS生活服務中, 請求發生的時間, 地點也是推薦需要重點考慮的上下文因素,例如飯點對餐飲item的提權; 異地情況下對酒店等結果的加權等

CTR預估:成熟的商業系統都會使用模型來完成CTR預估,或是轉化預估

以及商業業務規則:例如黑白名單,或者強制調權。例如在百度關鍵詞搜索推薦中,某些有比較高變現潛力的詞, 就應該加權往前排; 比如在高德LBS服務中,有些海底撈的店點評評分較低, 但我們也應該往前排;或是在搜索引擎中,搜國家領導人的名字, 有些最相關的結果可能因為法律因素是需要屏蔽的

算法評估

很直接,離線調研的時候看就看算法的評估指標,參見博文:《關鍵詞搜索推薦系統中的推薦準確性度量》,《使用ndcg評估關鍵詞推薦系統的相關性》 上線的時候,進行圈用戶(圈定某兩個user集合作為實驗/對照用戶組)實驗, 或者圈請求實驗(例如隨機圈定5%流量進行實驗),之后根據系統效果監控中的指標值判斷實驗效果。以下為一個典型的效果監控截圖: 實驗如果證明成功,達到預期效果,一般之后推廣到全流量;反之,如果實驗未達到預期效果,則需要分析什么地方有問題,如何改進,之后繼續調整算法繼續實驗。當實驗較多時,還會涉及較多工程問題,例如分層實驗框架等。

系統效果監控

對于整個系統,需要建立晚上的效果監控平臺進行效果的實時監控,以便發現用戶的行為模型,系統的不足,分析后續的發力點等。一般這樣的監控平臺會使用Dashboard來完成,基本的框架是前段UI + 后端數據庫。很多時候,離線統計策略在hadoop上處理統計日志計算指標,并將計算出來的指標存入數據庫,前端UI訪問數據庫,拉出指定時間段內某些指標的值,并進行簡單分析。 具體的監控指標,及指標體系的建立,可參見博文:《搜索引擎變現策略指標體系

交互設計

完整的產品包括便捷的交互和背后牛叉的算法。很多時候,要提升推薦的效果,需要算法和交互配合,才能達到理想的效果: 交互需要有健壯的算法產出結果;而算法也需要有配套的交互,才能達到預期效果,否則再牛叉的算法,對結果的影響也可能沒那么明顯。

一些交互的例子參見博文:

關鍵詞推薦工具中的用戶引導機制之一:總述

關鍵詞推薦工具中的用戶引導機制之二:suggestion架構

關鍵詞推薦工具中的用戶引導機制之三:相關搜索query技術

關鍵詞推薦工具中的用戶引導機制之四:種子query推薦

說了那么多,中心就是想說明, 一個完整的推薦系統,遠遠不止是一兩個rating算法能夠覆蓋的,而且此處還未涉及工程部分。

轉載于: http://semocean.com

來源:本文由思享SEO博客原創撰寫,歡迎分享本文,轉載請保留出處和鏈接!
seo培訓評論廣告

搶沙發

昵稱*

郵箱*

網址

经典街机电玩捕鱼游戏