學習這篇總結後,你也能作出每天快報同樣的推薦系統

1、推薦系統概述

1.1 概述

推薦系統目前幾乎無處不在,主流的app都基本應用到了推薦系統。例如,旅遊出行,攜程、去哪兒等都會給你推薦機票、酒店等等;點外賣,餓了麼、美團等會給你推薦飯店;購物的時候,京東、淘寶、亞馬遜等會給你推薦「可能喜歡」的物品;看新聞,今日頭條、騰訊新聞等都會給你推送你感興趣的新聞....幾乎全部的app應用或網站都存在推薦系統。html

究其根本的緣由,推薦系統的流行是由於要去解決一個問題:物品愈來愈多,信息愈來愈多,而人的精力和時間是有限的,須要一個方式去更有效率地獲取信息,連接人與信息。python

推薦系統就是爲了解決這一問題而誕生的,在海量的物品和人之間,架起來一條橋樑。它就像一個私人的專屬導購,根據你的歷史行爲、我的信息等等,爲每一個人diy進行推薦,千人前面,幫助人們更好、更快地選擇本身感興趣的、本身須要的東西。今日頭條系的feed流在推薦算法的加持下,短短几年的用戶增加速度和使用時長數據使人咂舌,受到了市場的追捧和高估值。一晚上之間,幾乎全部的app都開始上feed流、上各類推薦,重要性可見一斑。web

1.2 基本架構

咱們先把推薦系統簡單來看,那麼它能夠簡化爲以下的架構。算法

img圖1 推薦系統通常流程shell

無論是複雜仍是簡單的推薦系統,基本都包含流程:數據庫

  • 1)結果展現部分。無論是app仍是網頁上,會有ui界面用於展現推薦列表。
  • 2)行爲日誌部分。用戶的各類行爲會被時刻記錄並被上傳到後臺的日誌系統,例如點擊行爲、購買行爲、地理位置等等。這些數據後續通常會被進行ETL(extract抽取、transform轉換、load加載),供迭代生成新模型進行預測。
  • 3)特徵工程部分。獲得用戶的行爲數據、物品的特徵、場景數據等等,須要人工或自動地去從原始數據中抽取出特徵。這些特徵做爲輸入,爲後面各種推薦算法提供數據。特徵選取很重要,錯的特徵一定帶來錯誤的結果。
  • 4)召回部分。 有了用戶的畫像,而後利用數據工程和算法的方式,從千萬級的產品中鎖定特定的候選集合,完成對推薦列表的初步篩選,其在必定程度上決定了排序階段的效率和推薦結果的優劣。
  • 5)排序部分。針對上一步的候選集合,會進行更精細化地打分、排序,同時考慮新穎性、驚喜度、商業利益等的一系列指標,得到一份最終的推薦列表並進行展現。

完整的推薦系統還會包括不少輔助模塊,例如線下訓練模塊,讓算法研究人員利用真實的歷史數據,測試各種不一樣算法,初步驗證算法優劣。線下測試效果不錯的算法就會被放到線上測試,即經常使用的A/B test系統。它利用流量分發系統篩選特定的用戶展現待測試算法生成的推薦列表,而後收集這批特定用戶行爲數據進行線上評測。編程

img圖2 蘑菇街推薦系統架構服務器

推薦系統每一個部分可大可小,從圖2可知,各部分涉及的技術棧也較多。終端app每時每刻都在不斷上報各種日誌,點擊、展現、時間、地理位置等等信息,這些海量信息須要依賴大數據相關軟件棧支持,例如Kafka、spark、HDFS、Hive等,其中Kafka常被用於處理海量日誌上報的消費問題。將數據進行ETL後存入Hive數據倉庫,就可進行各種線上、線下測試使用。線下的算法會上線到線上環境進行ABtest,ABtest涉及完整的測試迴路打通,否則拿不到結果,也沒法快速開發迭代算法。線上推薦系統還要關注實時特徵、離線特徵,在性能和各種指標、商業目標間取均衡。網絡

1.3 評測指標

一個東西作得好仍是很差,能不能優化,首要前提是肯定評測指標。只有肯定了評測指標,纔能有優化的方向。評測推薦系統的指標能夠考慮如下幾個方面:架構

1.3.1 用戶滿意度

用戶做爲推動系統的主要參與者,其滿意度是評測系統的最重要指標。滿意度能夠經過作用戶調查或線上實驗得到。在在線系統中,通常經過對用戶行爲的統計獲得,例如點擊率、用戶停留時間和轉化率等指標度量用戶的滿意度。

1.3.2 預測精確度precision

預測準確度度量一個推薦系統或者推薦算法預測用戶行爲的能力。這個指標是最重要的離線評測指標。因爲離線數據可計算,絕大部分科研人員都在討論這個指標。

評分預測問題通常使用RMSE、MAE等,TopN預測問題通常使用Recall、Precision等。

img圖3 常見的指標準確率(Precision)、召回率(Recall)、誤檢率

其實目前國內不少地方和資料混淆了兩個指標的叫法,把準確度對應英文precision指標。不過儘可能仍是用英文比較好。

準確度Accuracy = (TP + TN) / (TP + FP + TN + FN)

精確度Precision=TP/(TP+FP)

1.3.3 覆蓋率coverage

覆蓋率描述一個推薦系統對物品長尾的發掘能力。覆蓋率有不少定義方法,最簡單的計算就是推薦列表中的物品數量,除以全部的物品數量。

在信息論和經濟學中有兩個著名的指標用來定義覆蓋率,一個是信息熵,一個是基尼係數。具體公式和介紹能夠google。

ps:長尾在推薦系統中是個常見的名詞。舉個例子幫助你們理解,在商店裏,因爲貨架和場地有限,擺在最顯眼的地方的物品一般是出名的、熱門的,從而銷量也是最好的。不少不出名或者小知名度的商品因爲在貨架角落或者根本上不了貨架,這些商品銷量不好。在互聯網時代,這一現象會被打破。電子商城擁有幾乎無限長的「貨架」,它能夠爲用戶展示不少知足他小衆需求的商品,這樣總的銷量加起來將遠遠超過以前的模式。

Google是一個最典型的「長尾」公司,其成長曆程就是把廣告商和出版商的「長尾」商業化的過程。數以百萬計的小企業和我的,此前他們從未打過廣告,或從沒大規模地打過廣告。他們小得讓廣告商不屑一顧,甚至連他們本身都未曾想過能夠打廣告。但Google的AdSense把廣告這一門檻降下來了:廣告再也不遙不可及,它是自助的,價廉的,誰均可以作的;另外一方面,對成千上萬的Blog站點和小規模的商業網站來講,在本身的站點放上廣告已成舉手之勞。Google目前有一半的生意來自這些小網站而不是搜索結果中放置的廣告。數以百萬計的中小企業表明了一個巨大的長尾廣告市場。這條長尾能有多長,恐怕誰也沒法預知。無數的小數積累在一塊兒就是一個不可估量的大數,無數的小生意集合在一塊兒就是一個不可限量的大市場。

img圖4 長尾曲線

1.3.4多樣性

用戶的興趣是多樣的,推薦系統須要能覆蓋用戶各類方面的喜愛。這裏有個假設,若是推薦列表比較多樣,覆蓋了用戶各類各樣的興趣,那麼真實命中用戶的興趣機率也會越大,那麼就會增長用戶找到本身感興趣的物品的機率。

1.3.5 新穎性

新穎的推薦是指給用戶推薦那些他們之前沒有據說過的物品。要準確地統計新穎性須要作用戶調查。

1.3.6 驚喜度

若是推薦結果和用戶的歷史興趣不類似,但卻讓用戶以爲滿意,那麼就能夠說推薦結果的驚喜度很高,而推薦的新穎性僅僅取決於用戶是否據說過這個推薦結果。

1.3.7 信任度

用戶對推薦系統的信任程度。若是用戶信任推薦系統,那就會增長用戶和推薦系統的交互。特別是在電子商務推薦系統中,讓用戶對推薦結果產生信任是很是重要的。一樣的推薦結果,以讓用戶信任的方式推薦給用戶就更能讓用戶產生購買慾,而以相似廣告形式的方法推薦給用戶就可能很難讓用戶產生購買的意願。提升推薦系統的信任度主要有兩種方法。首先須要增長推薦系統的透明度(transparency),而增長推薦系統透明度的主要辦法是提供推薦解釋。其次是考慮用戶的社交網絡信息,利用用戶的好友信息給用戶作推薦,而且用好友進行推薦解釋。

1.3.8 實時性

在不少網站中,由於物品(新聞、微博等)具備很強的時效性,因此須要在物品還具備時效性時就將它們推薦給用戶。所以,在這些網站中,推薦系統的實時性就顯得相當重要。

推薦系統的實時性包括兩個方面。首先,推薦系統須要實時地更新推薦列表來知足用戶新的行爲變化。實時性的第二個方面是推薦系統須要可以將新加入系統的物品推薦給用戶。這主要考驗了推薦系統處理物品冷啓動的能力。

1.3.9 健壯性

衡量了一個推薦系統抗擊做弊的能力。算法健壯性的評測主要利用模擬攻擊。首先,給定一個數據集和一個算法,能夠用這個算法給這個數據集中的用戶生成推薦列表。而後,用經常使用的攻擊方法向數據集中注入噪聲數據,而後利用算法在注入噪聲後的數據集上再次給用戶生成推薦列表。最後,經過比較攻擊先後推薦列表的類似度評測算法的健壯性。若是攻擊後的推薦列表相對於攻擊前沒有發生大的變化,就說明算法比較健壯。

1.3.10 商業目標

不少時候,評測推薦系統更加註重商業目標是否達成,而商業目標和盈利模式是息息相關的。通常來講,最本質的商業目標就是平均一個用戶給公司帶來的盈利。不過這種指標不是很難計算,只是計算一次須要比較大的代價。所以,不少公司會根據本身的盈利模式設計不一樣的商業目標。

1.3.11 參考資料

推薦系統的評測問題有不少的相關研究和資料,預詳細研究可閱讀參考:

2、經常使用算法

推薦算法的演化能夠簡單分爲3個階段,也是推薦系統由簡單到複雜的迭代。

2.1 推薦算法演化

2.1.1 人工運營

這個階段是隨機的,人工根據運營目的,手工給特定類別的用戶推送特定的內容。

優勢是:

  • 方便推廣特定的內容;
  • 推薦的內容易解釋;

缺點是:

  • 千人一面,推送的內容同樣;
  • 人工篩選,推送,耗費人力巨大;
  • 運營根據本身的知識,主觀性比較大;

2.1.2 基於統計的推薦

會基於一些簡單的統計學知識作推薦,例如某個內別賣得最好的熱門榜;再細緻一些,將用戶按我的特質劃分,再求各類熱度榜等。

優勢是:

  • 熱門就是大部分用戶喜愛的擬合,效果好;
  • 推薦的內容易解釋;

缺點是:

  • 千人一面,推送的內容同樣;
  • 馬太效應,熱門的會愈來愈熱門,冷門的愈來愈冷門;
  • 效果很容易達到天花板;

2.1.3 個性化推薦

當前階段的推薦,會基於協同過濾算法、基於模型的算法、基於社交關係等,機器學習、深度學習逐漸引入,提升了推薦效果。

優勢是:

  • 效果要相對於以前,要好不少;
  • 千人前面,每一個人都有本身獨特的推薦列表;

缺點是:

  • 門檻較高,推薦系統搭建、算法設計、調優等等,都對開發者有較高的要求;
  • 成本較高,並且是個長期迭代優化的過程,人力物力投入很高;

2.2 推薦算法彙總

內部一個分享這樣分類經常使用的推薦算法:

img圖5 推薦算法分類

這裏提到的Memory-based算法和Model-based算法的差異是什麼?這也是我以前關注的問題,找到個資料,講解得比較透徹。

Memory-based techniques use the data (likes, votes, clicks, etc) that you have to establish correlations (similarities?) between either users (Collaborative Filtering) or items (Content-Based Recommendation) to recommend an item i to a user u who’s never seen it before. In the case of collaborative filtering, we get the recommendations from items seen by the user’s who are closest to u, hence the term collaborative. In contrast, content-based recommendation tries to compare items using their characteristics (movie genre, actors, book’s publisher or author… etc) to recommend similar new items.

In a nutshell, memory-based techniques rely heavily on simple similarity measures (Cosine similarity, Pearson correlation, Jaccard coefficient… etc) to match similar people or items together. If we have a huge matrix with users on one dimension and items on the other, with the cells containing votes or likes, then memory-based techniques use similarity measures on two vectors (rows or columns) of such a matrix to generate a number representing similarity.

Model-based techniques on the other hand try to further fill out this matrix. They tackle the task of 「guessing」 how much a user will like an item that they did not encounter before. For that they utilize several machine learning algorithms to train on the vector of items for a specific user, then they can build a model that can predict the user’s rating for a new item that has just been added to the system.

Since I’ll be working on news recommendations, the latter technique sounds much more interesting. Particularly since news items emerge very quickly (and disappear also very quickly), it makes sense that the system develops some smart way of detecting when a new piece of news will be interesting to the user even before other users see/rate it.

Popular model-based techniques are Bayesian Networks, Singular Value Decomposition, and Probabilistic Latent Semantic Analysis (or Probabilistic Latent Semantic Indexing). For some reason, all model-based techniques do not enjoy particularly happy-sounding names.


《攜程個性化推薦算法實踐》一文中梳理了工業界應用的排序模型,大體經歷三個階段:

img圖6 排序模型演進

本文不對上面的這些算法進行詳細的原理探討,會比較複雜,有興趣能夠再自行學習。

2.3 CF算法示例

爲了學習這塊的技術知識,跟着參加了下內部舉辦的srtc推薦比賽。重在參與,主要是學習整個基本流程,體會下推薦場景,瞭解騰訊內部作得好的團隊和產品是什麼樣子。

2.3.1(內部敏感資料,刪除)

2.3.2 CF算法

在web平臺上點一點,可能失去了學習的意義。因此本着學習的態度,我在線下本身的機器上實現了一些經常使用的算法,例如CF等。

推薦算法裏CF算是比較常見的,核心仍是很簡單的。

  • user-cf基本原理

A.找到和目標用戶興趣類似的的用戶集合; B.找到這個集合中的用戶喜歡的,且目標用戶沒聽過的物品推薦給目標用戶。

  • item-cf基本原理

A.計算物品之間的類似度; B.根據物品的類似度和用戶的歷史行爲給用戶生成推薦列表。

結合前面總結的,cf屬於memory-base的算法,很大一個特徵就是會用到類似度的函數。這個user-cf須要計算用戶興趣的類似度,item-cf須要計算物品間的類似度。基於類似度函數的選擇、編程語言的選擇、實現方式的選擇、優化的不一樣,結果和整個運行時間會很大不一樣。當時就簡單用python實現的,8個process跑滿cpu同時處理,須要近10個小時跑完。後面瞭解到有底層進行過優化的pandas、numpy等,基於這些工具來實現速度會快不少。

2.3.3 收穫

哈哈,第一次參加這種比賽,雖然成績不好,但本身以爲非常學到不少東西,基本達到了參賽的目的。在真實的場景和數據下去思考各類影響因素,體會各類算法從設計、實現、訓練、評價等各階段,不少東西確實比看資料和書來得更深刻。果真實踐纔是學習的最好手段。若是想更深刻去搞推薦算法這塊,感受須要繼續學習目前各類熱門算法的原理、潛規則,kaggle上多練手,以及鍛鍊相關的平臺及工程化能力。

3、業界推薦系統調研

收集、研究了下網上一些推薦系統落地總結的文章,能夠開拓視野,加深總體理解。

如下只是一些重要內容,有興趣能夠閱讀原文:

3.1 今日頭條推薦系統

今日頭條算法架構師曹歡歡博士,作過一次 《今日頭條算法原理》的報告。主要涉及4部分:系統概覽、內容分析、用戶標籤、評估分析。

  • 四類典型推薦特徵

img

第一類是相關性特徵,就是評估內容的屬性和與用戶是否匹配。 第二類是環境特徵,包括地理位置、時間。這些既是bias特徵,也能以此構建一些匹配特徵。 第三類是熱度特徵。包括全局熱度、分類熱度,主題熱度,以及關鍵詞熱度等。 第四類是協同特徵,它能夠在部分程度上幫助解決所謂算法越推越窄的問題。

  • 模型的訓練上,頭條系大部分推薦產品採用實時訓練

img

模型的訓練上,頭條系大部分推薦產品採用實時訓練。實時訓練省資源而且反饋快,這對信息流產品很是重要。用戶須要行爲信息能夠被模型快速捕捉並反饋至下一刷的推薦效果。咱們線上目前基於storm集羣實時處理樣本數據,包括點擊、展示、收藏、分享等動做類型。模型參數服務器是內部開發的一套高性能的系統,由於頭條數據規模增加太快,相似的開源系統穩定性和性能沒法知足,而咱們自研的系統底層作了不少針對性的優化,提供了完善運維工具,更適配現有的業務場景。

目前,頭條的推薦算法模型在世界範圍內也是比較大的,包含幾百億原始特徵和數十億向量特徵。總體的訓練過程是線上服務器記錄實時特徵,導入到Kafka文件隊列中,而後進一步導入Storm集羣消費Kafka數據,客戶端回傳推薦的label構造訓練樣本,隨後根據最新樣本進行在線訓練更新模型參數,最終線上模型獲得更新。這個過程當中主要的延遲在用戶的動做反饋延時,由於文章推薦後用戶不必定立刻看,不考慮這部分時間,整個系統是幾乎實時的。

img

但由於頭條目前的內容量很是大,加上小視頻內容有千萬級別,推薦系統不可能全部內容所有由模型預估。因此須要設計一些召回策略,每次推薦時從海量內容中篩選出千級別的內容庫。召回策略最重要的要求是性能要極致,通常超時不能超過50毫秒。

  • 用戶標籤工程挑戰更大

img

內容分析和用戶標籤是推薦系統的兩大基石。內容分析涉及到機器學習的內容多一些,相比而言,用戶標籤工程挑戰更大。 今日頭條經常使用的用戶標籤包括用戶感興趣的類別和主題、關鍵詞、來源、基於興趣的用戶聚類以及各類垂直興趣特徵(車型,體育球隊,股票等)。還有性別、年齡、地點等信息。性別信息經過用戶第三方社交帳號登陸獲得。年齡信息一般由模型預測,經過機型、閱讀時間分佈等預估。常駐地點來自用戶受權訪問位置信息,在位置信息的基礎上經過傳統聚類的方法拿到常駐點。常駐點結合其餘信息,能夠推測用戶的工做地點、出差地點、旅遊地點。這些用戶標籤很是有助於推薦。

img

固然最簡單的用戶標籤是瀏覽過的內容標籤。但這裏涉及到一些數據處理策略。主要包括:1、過濾噪聲。經過停留時間短的點擊,過濾標題黨。2、熱點懲罰。對用戶在一些熱門文章(如前段時間PG One的新聞)上的動做作降權處理。理論上,傳播範圍較大的內容,置信度會降低。3、時間衰減。用戶興趣會發生偏移,所以策略更偏向新的用戶行爲。所以,隨着用戶動做的增長,老的特徵權重會隨時間衰減,新動做貢獻的特徵權重會更大。4、懲罰展示。若是一篇推薦給用戶的文章沒有被點擊,相關特徵(類別,關鍵詞,來源)權重會被懲罰。固然同時,也要考慮全局背景,是否是相關內容推送比較多,以及相關的關閉和dislike信號等。

  • Hadoop集羣壓力過大,上線 Storm集羣流式計算系統

img

面對這些挑戰。2014年末今日頭條上線了用戶標籤Storm集羣流式計算系統。改爲流式以後,只要有用戶動做更新就更新標籤,CPU代價比較小,能夠節省80%的CPU時間,大大下降了計算資源開銷。同時,只需幾十臺機器就能夠支撐天天數千萬用戶的興趣模型更新,而且特徵更新速度很是快,基本能夠作到準實時。這套系統從上線一直使用至今。

  • 不少公司算法作的很差,並不是是工程師能力不夠,而是須要一個強大的實驗平臺,還有便捷的實驗分析工具

img

A/B test系統原理

img

這是頭條A/B Test實驗系統的基本原理。首先咱們會作在離線狀態下作好用戶分桶,而後線上分配實驗流量,將桶裏用戶打上標籤,分給實驗組。舉個例子,開一個10%流量的實驗,兩個實驗組各5%,一個5%是基線,策略和線上大盤同樣,另一個是新的策略。

img

實驗過程當中用戶動做會被蒐集,基本上是準實時,每小時均可以看到。但由於小時數據有波動,一般是以天爲時間節點來看。動做蒐集後會有日誌處理、分佈式統計、寫入數據庫,很是便捷。

3.2 推薦算法在閒魚小商品池的探索與實踐

  • 閒魚中個性化推薦流程

img

商品個性化推薦算法主要包含Match和Rank兩個階段:Match階段也稱爲商品召回階段,在推薦系統中用戶對商品的行爲稱爲用戶Trigger,經過長期收集用戶做用在商品上的行爲,創建用戶行爲和商品的矩陣稱爲X2I,最後經過用戶的Trigger和關係矩陣X2I進行商品召回。Rank階段利用不一樣指標的目標函數對商品進行打分,根據推薦系統的規則對商品的多個維度進行綜合排序。下面以閒魚的首頁feeds爲例,簡單介紹閒魚的個性化推薦流程。

所示步驟1.1,利用用戶的信息獲取用戶Trigger,用戶信息包括用戶的惟一標識userId,用戶的設備信息惟一標識uttid。

所示步驟1.2,返回用戶Trigger其中包括用戶的點擊、購買過的商品、喜歡的類目、用戶的標籤、常逛的店鋪、購物車中的商品、喜歡的品牌等。

所示步驟1.3,進行商品召回,利用Trigger和X2I矩陣進行join完成對商品的召回。

所示步驟1.4,返回召回的商品列表,在商品召回中通常以I2I關係矩陣召回的商品爲主,其餘X2I關係矩陣召回爲輔助。

步驟2.1,進行商品過濾,對召回商品進行去重,過濾購買過的商品,剔除過分曝光的商品。

所示步驟2.2,進行商品打分,打分階段利用itemInfo和不一樣算法指標對商品多個維度打分。

步驟2.3,進行商品排序,根據規則對商品多個維度的分數進行綜合排序。

步驟2.4,進行返回列表截斷,截斷TopN商品返回給用戶。

閒魚經過以上Match和Rank兩個階段八個步驟完成商品的推薦,同時從圖中能夠看出爲了支持商品的個性化推薦,須要對X2I、itemInfo、userTrigger數據迴流到搜索引擎,這些數據包含天級別迴流數據和小時級別迴流數據。

  • 小商品的特色

小商品池存在如下幾個特色。

實時性:在閒魚搭建的小商品池中要求商品能夠實時的流入到該規則下的商品池,爲用戶提供最新的優質商品。

週期性:在小商品池中,不少商品擁有周期屬性,例如免費送的拍賣場景,拍賣週期爲6小時,超過6小時後將被下架。

目前頻道導購頁面大多仍是利用搜索引擎把商品呈現給用戶,爲了保證商品的曝光,通常利用搜索的時間窗口在商品池中對商品進一步篩選,可是仍存在商品曝光的問題,若是時間窗口過大,那麼將會形成商品過分曝光,若是商品窗口太小那麼就會形成商品曝光不足,同時還存在一個搜索沒法解決的問題,同一時刻每一個用戶看到的商品都是相同的,沒法針對用戶進行個性化推薦,爲了進一步提高對用戶的服務,小商品池亟需引入個性化推薦。

  • 推薦在小商品池的解決方案

在上文中利用全站X2I數據對小商品池的商品進行推薦過程當中,發如今Match階段,當小商品池太小時會形成商品召回不足的問題,爲了提高小商品池推薦過程當中有效召回數量,提出了以下三種解決方案。

提早過濾法:數據迴流到搜索引擎前,小商品池對數據進行過濾,產生小商品池的迴流數據,在商品進行召回階段,利用小商品池的X2I進行商品召回,以此提高商品的召回率。

img

商品向量化法: 在Match階段利用向量類似性進行商品召回,商品向量化是利用向量搜索的能力,把商品的特性和規則經過函數映射成商品向量,同時把用戶的Trigger和規則映射成用戶向量,文本轉換向量經常使用詞袋模型和機器學習方法,詞袋模型在文本長度較短時能夠很好的把文本用詞向量標識,可是文本長度過長時受限於詞袋大小,若是詞袋太小效果將會不好,機器學習的方法是利用Word2Vector把文本訓練成向量,根據經驗值向量維度通常爲200維時效果較好。而後利用向量搜索引擎,根據用戶向量搜索出類似商品向量,以此做爲召回的商品。如圖5所示商品的向量分兩部分,前20位表明該商品的規則,後200位表明商品的基本特徵信息。

img

商品搜索引擎法: 在Match階段利用商品搜索引擎對商品進行召回,如圖6所示在商品進入搜索引擎時,對商品結構進行理解,在商品引擎中加入Tag和規則,而後根據用戶的Trigger和規則做爲搜索條件,利用搜索引擎完成商品的召回。搜索引擎的自然實時性解決了小商品池推薦強實時性的問題。

img

3.3 餓了麼推薦系統:從0到1

對於任何一個外部請求, 系統都會構建一個QueryInfo(查詢請求), 同時從各類數據源提取UserInfo(用戶信息)、ShopInfo(商戶信息)、FoodInfo(食物信息)以及ABTest配置信息等, 而後調用Ranker排序。如下是排序的基本流程(以下圖所示):

#調取RankerManager, 初始化排序器Ranker:

  1. 根據ABTest配置信息, 構建排序器Ranker;
  2. 調取ScorerManger, 指定所需打分器Scorer(能夠多個); 同時, Scorer會從ModelManager獲取對應Model, 並校驗;
  3. 調取FeatureManager, 指定及校驗Scorer所需特徵Features。

#調取InstanceBuilder, 彙總全部打分器Scorer的特徵, 計算對應排序項EntityInfo(餐廳/食物)排序所需特徵Features;

#對EntityInfo進行打分, 並按需對Records進行排序。

img

這裏須要說明的是:任何一個模型Model都必須以打分器Scorer形式展現或者被調用。主要是基於如下幾點考慮:

  • 模型迭代:好比同一個Model,根據時間、地點、數據抽樣等衍生出多個版本Version;
  • 模型參數:好比組合模式(見下一小節)時的權重與輪次設定,模型是否支持並行化等;
  • 特徵參數:特徵Feature計算參數,好比距離在不一樣城市具備不一樣的分段參數。

3.4 愛奇藝個性化推薦排序實踐

咱們的推薦系統主要分爲兩個階段,召回階段和排序階段。

召回階段根據用戶的興趣和歷史行爲,同千萬級的視頻庫中挑選出一個小的候選集(幾百到幾千個視頻)。這些候選都是用戶感興趣的內容,排序階段在此基礎上進行更精準的計算,可以給每個視頻進行精確打分,進而從成千上萬的候選中選出用戶最感興趣的少許高質量內容(十幾個視頻)。

img

推薦系統的總體結構如圖所示,各個模塊的做用以下:

用戶畫像:包含用戶的人羣屬性、歷史行爲、興趣內容和偏好傾向等多維度的分析,是個性化的基石

特徵工程:包含了了視頻的類別屬性,內容分析,人羣偏好和統計特徵等全方位的描繪和度量,是視頻內容和質量分析的基礎

召回算法:包含了多個通道的召回模型,好比協同過濾,主題模型,內容召回和SNS等通道,可以從視頻庫中選出多樣性的偏好內容

排序模型:對多個召回通道的內容進行同一個打分排序,選出最優的少許結果。

除了這些以外推薦系統還兼顧了推薦結果的多樣性,新鮮度,逼格和驚喜度等多個維度,更可以知足用戶多樣性的需求。

而後,介紹了推薦排序系統架構、推薦機器學習排序算法演進。

3.5 攜程個性化推薦算法實踐

推薦流程大致上能夠分爲3個部分,召回、排序、推薦結果生成,總體的架構以下圖所示。

img

召回階段,主要是利用數據工程和算法的方式,從千萬級的產品中鎖定特定的候選集合,完成對產品的初步篩選,其在必定程度上決定了排序階段的效率和推薦結果的優劣。

業內比較傳統的算法,主要是CF[1][2]、基於統計的Contextual推薦和LBS,但近期來深度學習被普遍引入,算法性取得較大的提高,如:2015年Netflix和Gravity R&D Inc提出的利用RNN的Session-based推薦[5],2016年Recsys上提出的結合CNN和PMF應用於Context-aware推薦[10],2016年Google提出的將DNN做爲MF的推廣,能夠很容易地將任意連續和分類特徵添加到模型中[9],2017年IJCAI會議中提出的利用LSTM進行序列推薦[6]。2017年攜程個性化團隊在AAAI會議上提出的深度模型aSDAE,經過將附加的side information集成到輸入中,能夠改善數據稀疏和冷啓動問題[4]。

對於召回階段獲得的候選集,會對其進行更加複雜和精確的打分與重排序,進而獲得一個更小的用戶可能感興趣的產品列表。攜程的推薦排序並不單純追求點擊率或者轉化率,還須要考慮距離控制,產品質量控制等因素。相比適用於搜索排序,文本相關性檢索等領域的pairwise和listwise方法,pointwise方法能夠經過疊加其餘控制項進行干預,適用於多目標優化問題。

工業界的推薦方法經歷從線性模型+大量人工特徵工程[11] -> 複雜非線性模型-> 深度學習的發展。Microsoft首先於2007年提出採用Logistic Regression來預估搜索廣告的點擊率[12],並於同年提出OWLQN優化算法用於求解帶L1正則的LR問題[13],以後於2010年提出基於L2正則的在線學習版本Ad Predictor[14]。

Google在2013年提出基於L1正則化的LR優化算法FTRL-Proximal[15]。2010年提出的Factorization Machine算法[17]和進一步2014年提出的Filed-aware Factorization Machine[18]旨在解決稀疏數據下的特徵組合問題,從而避免採用LR時須要的大量人工特徵組合工做。

阿里於2011年提出Mixture of Logistic Regression直接在原始空間學習特徵之間的非線性關係[19]。Facebook於2014年提出採用GBDT作自動特徵組合,同時融合Logistic Regression[20]。

近年來,深度學習也被成功應用於推薦排序領域。Google在2016年提出wide and deep learning方法[21],綜合模型的記憶和泛化能力。進一步華爲提出DeepFM[15]模型用於替換wdl中的人工特徵組合部分。阿里在2017年將attention機制引入,提出Deep Interest Network[23]。

攜程在實踐相應的模型中積累了必定的經驗,不管是最經常使用的邏輯迴歸模型(Logistic Regression),樹模型(GBDT,Random Forest)[16],因子分解機(FactorizationMachine),以及近期提出的wdl模型。同時,咱們認爲即便在深度學習大行其道的今下,精細化的特徵工程仍然是不可或缺的。

基於排序後的列表,在綜合考慮多樣性、新穎性、Exploit & Explore等因素後,生成最終的推薦結果。

4、總結

以前沒有接觸過推薦系統,如今因爲工做須要開始接觸這塊內容。不少概念和技術不懂,須要補不少東西。近期也去參加了內部推薦大賽真實地操做了一輪,同時開始學習推薦系統的基礎知識,相關架構等,爲下一步工做打下必要的基礎。

推薦系統是能在幾乎全部產品中存在的載體,它幾乎能夠無延時地以用戶需求爲導向,來知足用戶。其表明的意義和效率,遠遠超過傳統模式。毋庸置疑,牛逼的推薦系統就是將來。但這裏有個難點就在於,推薦系統是否作得足夠的好。而從目前來看,推薦算法和推薦系統並無達到人們的預期。由於人的需求是極難猜想的。

又想到以前知乎看到一篇文章,說的是國內不少互聯網公司都有的運營崗位,在國外是沒有專設這個崗位的。還記得做者分析的較突出緣由就是:外國人比較規矩,生活和飲食較單調,例如高興了都點披薩。而中國不同,從千千萬萬的菜品就能管中窺豹,國人的愛好極其普遍,衆口難調。加上國外人工時很貴,那麼利用算法去擬合用戶的愛好和需求,自動地去挖掘用戶需求,進行下一步的深耕和推薦就是一個替代方案。這也是國外很推崇推薦系統的側面緣由。而在中國,人相對來講是便宜的,加上國人的口味更多更刁鑽,算法表現很差,因此會設不少專門的運營崗位。但慢慢也開始意識到這將是一個趨勢,加上最近ai大熱,各家大廠都在這塊不斷深耕。

回到推薦系統上,從現實中客觀的緣由就能夠看到,真正能擬合出用戶的需求和愛好確實是很困難的事情。甚至有時候用戶都不知道本身想要的是啥,做爲中國人,沒有主見和想法是正常的,太有主見是違背標準答案的。但推薦系統背後表明的意義是:你的產品知道用戶的興趣,能知足用戶的興趣,那麼一定用戶就會離不開你。用戶離不開的產品,確定會佔領市場,確定就有極高的估值和想象空間。這也就是你們都在作推薦系統,雖然用起來傻傻的,效果也差強人意,依然願意大力投入的根本緣由。

幾句胡謅,前期學習事後的簡單總結,本身還有不少東西和細節須要繼續學習和研究。能力有限,文中不妥之處還請指正~

(ps:文中一些截圖和文字的版權歸屬原做者,且均已標註引用資料來源地址,本文只是學習總結之用,若有侵權,聯繫我刪除)

相關文章
相關標籤/搜索