首頁>科技>

讀者讀完本文後,你會知道每類正規化常用的演算法有哪些、實現的思路是什麼、以及常用的應用場景。本文也可以作為讀者落地推薦演算法到真實推薦場景的參考指南。

一、推薦演算法與產品介紹

什麼是推薦系統?

在介紹推薦演算法之前需要先介紹一下什麼是資訊過載。

資訊過載就是資訊的數量遠超於人手工可以遍歷的數量。比如,當你沒有目的性的去逛超市,你不可能把所有的商品都看一遍都有什麼。同樣,無論是去書店看書,還是在電影網站上搜索電影,這些物品的量級對於沒有目的性、需求性的使用者而言都是資訊過載。

那麼什麼是推薦系統呢?

就是當用戶的目的不明確、且該服務對於使用者而言構成了資訊過載;但該系統基於一定的策略規則,將物品進行了排序,並將前面的物品展示給了使用者,這樣的系統就可以稱之為推薦系統。

舉例說明,在網站購物過程中,無論是天貓或者京東這樣的平臺,如果我們有明確的需求去搜索框裡檢索。如希望買啤酒,那麼檢索結果就是很多種類的啤酒;如果沒有明確的需求,就會有猜你喜歡等等模組,這些模組就是推薦系統基於一定的規則策略計算出來的,這些規則策略就是個性化推薦演算法。

在工業級推薦系統的推薦業務流程一般分為召回和排序兩個階段,召回就是將使用者可能會感興趣的標的物通過演算法從全量標的物庫中取出來,一般會採用多個演算法來召回,比如熱門召回、協同過濾召回、標籤召回等,排序階段將召回階段的標的物列表根據使用者可能的點選概率大小排序(即所謂的ctr預估)。在實際業務中,在排序後還會增加一層調控邏輯,根據業務規則及運營策略對排序後的列表進一步增補微調,滿足特定的運營需求。

個性化召回

1、什麼是個性化召回? 在item全集中選取一部分作為候選集。這裡就存在一個問題,就是說為什麼要選取一部分作為作為候選集,而不是全部?其原因在於:

1.不同的使用者不會喜歡所有型別的item;2.基於服務效能的考慮,如果選擇了全部的item作為候選集,對於後續的排序就將耗費大量的時間,對於整體推薦的後端,服務響應時間將會是災難性的。

根據使用者的屬性行為上下文等資訊從物品全集中選取其感興趣的物品作為候選集。

下面舉例說明:

如果某個推薦系統中,物品全集是如下左圖中9個item,這裡有兩個使用者A和B,他們分別對不同的item感興趣。這裡拿資訊流產品舉例,如果user A對體育類新聞感興趣,user B對娛樂類新聞感興趣,那就按照簡單的類別召回,得到結果如下右圖所示。

在候選集{a,b,c,….,g,h,i}中為User A,User B選取一部分item作為候選集

2、召回的重要作用 召回決定了最終推薦結果的天花板

為什麼這麼說呢?這裡先看一下推薦系統的整體架構,工業中的個性化推薦系統中的策略部分的架構主要由一下三部分構成:召回、排序、以及最後的策略調整部分(同上文提到),其中召回部分包括各路個性化召回之後將所有的item merge進入rank部分,rank只是調整召回完item的展現順序,rank完之後還有一些策略的調整,比如資訊流場景中的控制相同作者的數目等等,所以可以看到個性化召回的候選集是多麼的重要,因為最終展現給使用者的就是從這個候選集中選出來的。那麼就可能會有疑問,為什麼不能將所有的item進行排序?這是為了保證後端響應時間。

與使用者離的最近的是端,在移動網際網路的時代主要的流量集中在了移動app也可以是網站前端。連線接前後端的是WEB API層。WEB層主要給APP端提供API服務,解析端上發來的請求,呼叫後端rpc服務。得到的結果投全到端上。web api層儘量不做策略業務邏輯,但是會做一些諸如log寫實時資訊佇列,或寫分散式儲存這樣的事情來方便後續的資料分析和模型訓練。

最後是後端的RPC服務。個性化推薦演算法主要發揮作用的部分。

RPC服務的三大策略部分。

第一:個性化召回,基於使用者的行為,通過演算法模型來為使用者精準推薦。或基於使用者畫像的標籤推薦同類型的item。舉個栗子,如果某個使用者過往經常點選體育類的item,那麼使用者畫像就給她標上體育的lable。那麼有較新的體育類新聞,會優先推薦給改使用者。召回決定了最終推薦結果的天花板,因為這一步決定了候選集。第二部分:排序部分。第一部分召回了使用者感興趣的物品集合後,我們需要決策 出展現給使用者的順序。好的順序可以讓使用者在列表的開始找到自己的所需,完成轉化。因為使用者的每一次下拉都是有成本的,如何不能在最初的幾屏裡,顯示使用者的所需,使用者就很可能流失掉。結合剛才召回所舉的例子,給使用者召回了體育類的item,不同的item可能會有不同的瀏覽人數,評論人數,釋出時間,不同的字數,不同的時長,不同的釋出時間等等,同樣該使用者也有體育類的細分的傾向性。第三部分:策略調整部分,基於業務場景的策略調整部分。由於召回和排序大多數是基於模型來做的,所以基於業務場景的策略調整部分可以增加一些規則來fit業務場景。比如在資訊流場景中,我們不希望給使用者一直連續推薦同一個作者的新聞,我們可以加一些打散的策略。

3、工業界個性化召回架構

整體的召回架構可以分為兩大類:

第一大類是離線模型

根據使用者行為基於離線的model file算出推薦結果,這些推薦結果可以是使用者喜歡哪些item集合,也可以是item之間的相似度檔案 ,計算出具有某種lable的item的排序。然後離線計算好的排序的檔案寫入KV儲存。在使用者訪問服務的時候,Recall部分直接從KV中讀取。因為我們直接儲存的是item ID,我們讀取到的item id的時候還需要去Detail Server中得到每個item id的詳情,然後將詳情拼接好傳給rank。(線上的server recall部分直接呼叫這個結果,拿到ID之後訪問detail server得到詳情,再往rank部分傳遞)

第二大類是深度學習模型

如果採用深度學習的一些model,這是需要將model file算出來的item embedding的向量也需要離線存入KV中,但是使用者在訪問我們的KV的時候,線上訪問深度學習模型服務(recall server)的User embedding。同時去將user embedding層的向量和item embedding層的向量做最近鄰計算,並得到召回。

下面是電視貓(一款基於OTT端[智慧電視或者智慧盒子]的視訊播放軟體)的推薦系統的業務流程,包含召回、排序和業務調控三大演算法和策略模組,可以作為大家設計推薦系統演算法模組的參考。

推薦演算法是一種機器學習演算法,所以演算法模型的品質強依賴於用於演算法訓練的資料集,這裡我們簡單提下推薦系統可以利用的資料有哪些(參考下面圖及上面圖的資料來源)。一般推薦系統依賴三大類資料:標的物metadata資料(標的物相關的描述資訊)、使用者畫像資料(使用者相關資料,如年齡、地域、性別、收入等)、使用者行為資料(使用者對標的物的操作行為,如播放、點選、購買、收藏等)。這三類資料是主要可用的模型資料。另外人工標註資料、第三方資料等也可以用來補充完善上述三類資料。

相信大家對推薦流程及演算法依賴的資料有了初步了解,下面我們來根據不同的推薦正規化重點講解對應的推薦產品及可行的推薦演算法,方便大家將不同的推薦演算法對應到不同的推薦產品中。

上面我們提到的5類推薦正規化,可以從三個維度來理解:

一個是使用者維度 -一 個是標的物維度一個是使用者與標的物笛卡爾積維度

從使用者維度來看就是為使用者推薦可能感興趣的標的物,從標的物維度來看,就是使用者在訪問標的物詳情頁(或者退出標的物詳情頁)時,關聯一組標的物作為推薦。第三個維度是將使用者維度和標的物維度結合起來,不同的使用者訪問同樣的標的物詳情頁看到的內容也不一樣。

1. 基於使用者維度的推薦

基於使用者維度的推薦可以根據個性化的力度分為非個性化、群組個性化、完全個性化。這三種粒度對應我們前面提到的非個性化正規化、群組個性化正規化、完全個性化正規化。

非個性化是每個使用者看到的推薦內容都完全一樣,傳統入口網站的編輯對內容的編排就是非個性化的方式,每個使用者看到的內容都是一樣的。對於各類網站或者APP的排行榜的推薦形態也是非個性化的。下面圖是網易雲音樂的排行榜推薦,根據各個維度計算各類榜單。

群組個性化就是將相同特徵的使用者聚合成一組,同一組使用者在某些特徵上具備相似性,我們為這一組使用者推薦完全一樣的內容。

精細化運營一般會採用該方式,通過使用者畫像系統圈一批人,並對這批人做統一的運營。比如視訊行業的會員精細化運營,當會員快到期時,可以藉助精準運營留住使用者,具體可以將快到期的會員使用者圈出來,針對這批使用者做會員打折活動,促進使用者產生新的購買。

下圖是電視貓電視劇頻道”戰爭風雲“tab的基於群組的個性化重排序。我們將使用者根據興趣分組(聚類),同一組內的使用者看到的內容是一樣的順序,但是不同組的使用者的排序是不一樣的。但是不管哪個使用者其實看到的內容集合(戰爭風雲tab的全部內容)是相同的,只不過根據使用者的興趣做了排序,把使用者更喜歡的內容排在了前面。

對於天貓這類購物網站來說,對未登入使用者或是冷啟動的使用者,可以採用基於人群屬性來做推薦。通過將使用者按照性別、年齡段、收貨城市等粗粒度的屬性劃分為若干人群,然後基於每個人群的行為資料挑選出該人群點選率最高的TopK個商品作為該人群感興趣的商品推薦給他們。該方法也是一種群組個性化推薦策略。

完全個性化就是為每個使用者推薦的內容都不一樣,是根據使用者的行為及興趣來為使用者做推薦,是最常用的一種推薦形式。大多數時候我們所說的推薦就是指這種形式的推薦。下圖是淘寶首頁的猜你喜歡推薦,這個推薦就是完全個性化的,每個人推薦的都不一樣。

從另外一個角度看,完全個性化推薦可以分為只基於使用者個人行為的推薦和基於群組行為的推薦。基於個人行為的推薦,在構建推薦演算法時只依賴個人的行為,不需要其他使用者的行為,常見的基於內容推薦就是這類推薦。基於群組行為的推薦,除了利用自己的行為外,還依賴其他使用者的行為構建演算法模型,這類推薦可以認為是全體使用者的“協同進化“,像協同過濾、基於模型的推薦等都是這類推薦形式。

2. 基於標的物維度的推薦

基於標的物維度的推薦是使用者在訪問標的物詳情頁時,或者訪問後退出時,關聯一批相似或者相關的標的物列表,對應我們上面提到的標的物關聯標的物正規化。下圖是電視貓APP節目詳情頁的相似影片,就是常見的一類標的物關聯標的物的推薦模式。

除了視訊網站外,電商、短視訊等APP都大量使用基於標的物維度的推薦。下圖分別是淘寶APP和網易新聞APP上的標的物關聯標的物推薦。淘寶APP上當你點選某個衣服詳情頁後從該詳情頁退出,就會在該衣服圖片下面用小圖展示4個相關的衣服(下面左圖紅色圈圈部分),網易新聞視訊模組當你點選播放一個視訊超過幾秒後就會在該視訊下面展示一行相關視訊(見下面右圖紅色圈圈部分),如果你一直播放,當該視訊播完後會播放後面的相似視訊,最終形成連播推薦的效果。這兩款APP的相似推薦都是非常好的推薦形態,互動非常自然流暢,毫無違和感。

3. 基於使用者和標的物交叉維度的推薦

這類推薦,不同使用者對同一個標的物的關聯推薦是不一樣的,對應我們上面提到的笛卡爾積正規化。還是拿電視貓來舉例,如果該推薦是使用者與標的物笛卡爾積式的推薦的話,不同使用者看到雙重約會這個電影,下面的相似影片是不一樣的,推薦會整合使用者的興趣特徵,過濾掉使用者已經看過的電影等等。對於搜尋來說,不同的人搜尋同一個關鍵詞得到的搜尋結果及排序是不同的,搜尋結果及排序整合了個人的歷史行為特徵及興趣。

這類推薦由於每個使用者在每個標的物上的推薦列表都不一樣,我們沒法事先將所有的組合算出並存下來(否則儲存量是使用者數 × 標的物數,對於網際網路公司,這個數量是巨大的),我們必須在使用者請求的過程中快速地為使用者計算個性化的推薦列表,這對整個推薦系統的架構有更高的要求,所以在實際場景中用得比較少。

二、召回演算法概述一、推薦召回演算法概述

1. 非個性化正規化 非個性化正規化就是所有使用者推薦一樣的標的物列表,一般各種榜單就是這類推薦,如最新榜、最熱榜等等。這類排行榜就是基於某個規則來對標的物降序排列,將排序後的標的物取topN推薦給使用者。比如最新榜可以根據標的物上線的時間順序來倒序排列,取前面的topN推薦給使用者。最熱榜可以根據使用者播放量(點選量)降序排列。

這裡面可能需要考慮標的物的多品類特性,甚至還會考慮地域、時間、價格等各個維度。在具體實施時會比較複雜,需要根據具體的產品及業務場景來設計。

非個性化正規化可以基於簡單的計數統計來生成推薦,基本不會用到很複雜的機器學習演算法。當然,用來取topN的排行榜計算公式可能會整合各類使用者行為資料,公式會比較複雜(如豆瓣評分公式就比較複雜)。

非個性化正規化的排行榜等演算法,實現起來很簡單,可解釋性也很強。雖然每個使用者推薦的內容都一樣,但是(從生物進化上)人都是有從眾心理的,大家都喜歡的東西,我們也喜歡的概率還是很大的,所以這類推薦效果還是非常不錯的。這類演算法也可以作為冷啟動或者預設的推薦演算法。

2. 完全個性化正規化

完全個性化正規化是最常用的推薦模式,可用的推薦方法非常多。下面對常用的演算法及最新的演算法進展進行簡單梳理。

(1)基於內容的個性化推薦演算法

這類推薦演算法只依賴於使用者自己的歷史行為而不必知道其他使用者的行為。該演算法的核心思想是:標的物是有描述屬性的,使用者對標的物的操作行為為使用者打上了相關屬性的烙印,這些屬性就是使用者的興趣標籤,那麼我們就可以基於使用者的興趣來為使用者生成推薦列表。拿視訊推薦來舉例,如果使用者過去看了科幻和恐怖兩類電影,那麼恐怖、科幻就是使用者的偏好標籤了,這時我們就可以給使用者推薦科幻、恐怖類的其他電影。具體來說,我們有如下兩類方法來為使用者做推薦。

a 基於使用者特徵表示的推薦

標的物是具備很多文字特徵的,比如標籤、描述資訊、metadata資訊等。我們可以將這些文字資訊採用TF-IDF或者LDA等演算法轉化為特徵向量,如果是用標籤來描述標的物,那麼我們可以構建一個以標籤為特徵的特徵向量。

有了特徵向量,就可以將使用者所有操作過的標的物的特徵向量的(時間加權)平均作為使用者的特徵向量,利用使用者特徵向量與標的物特徵向量的乘積就可以計算使用者與標的物的相似度,從而計算出使用者的推薦列表。

b 基於倒排索引查詢的推薦

如果我們基於標籤來表示標的物屬性,那麼基於使用者的歷史行為,可以構建使用者的興趣畫像,該畫像即是使用者對各個標籤的偏好,並且有相應的偏好權重。

構建完使用者畫像後,我們可以構建出標籤與標的物的倒排索引查詢表(熟悉搜尋的同學應該不難理解)。基於該反向索引表及使用者的興趣畫像,我們就可以為使用者做個性化推薦了。該類演算法其實就是基於標籤的召回演算法。

具體推薦過程是這樣的(見下面圖):從使用者畫像中獲取使用者的興趣標籤,基於使用者的興趣標籤從倒排索引表中獲取該標籤對應的節目,這樣就可以從使用者關聯到節目了。其中使用者的每個興趣標籤及標籤關聯到的標的物都是有權重的。

該類推薦演算法是非常自然直觀的,可解釋性強。同時可以較好地解決冷啟動,只要使用者有一次行為,就可以基於該行為做推薦。但是,該類演算法往往新穎性不足,給使用者的推薦往往侷限在一個狹小的範圍中,如果使用者不主動拓展自己的興趣空間,該方法很難為使用者推薦新穎的內容。

(2)基於協同過濾的推薦演算法

基於協同過濾的推薦演算法,核心思想是很樸素的”物以類聚、人以群分“的思想。所謂物以類聚,就是計算出每個標的物最相似的標的物列表,我們就可以為使用者推薦使用者喜歡的標的物相似的標的物,這就是基於物品的協同過濾。所謂人以群分,就是我們可以將與該使用者相似的使用者喜歡過的標的物(而該使用者未曾操作過)的標的物推薦給該使用者,這就是基於使用者的協同過濾。具體思想可以參考下圖。

協同過濾的核心是怎麼計算標的物之間的相似度以及使用者之間的相似度。我們可以採用非常樸素的思想來計算相似度。

我們將使用者對標的物的評分(或者隱式反饋,如點選等)構建如下矩陣(見下) 矩陣的某個元素代表某個使用者對某個標的物的評分(如果是隱式反饋,值為1),如果某個使用者對某個標的物未產生行為,值為0。其中行向量代表某個使用者對所有標的物的評分向量,列向量代表所有使用者對某個標的物的評分向量。有了行向量和列向量,我們就可以計算使用者與使用者之間、標的物與標的物之間的相似度了。具體來說,行向量之間的相似度就是使用者之間的相似度,列向量之間的相似度就是標的物之間的相似度。相似度的計算可以採用cos餘弦相似度演算法。

在網際網路產品中一般會採用基於物品的協同過濾,因為對於網際網路產品來說,使用者相對於標的物變化更大,使用者是增長較快的,標的物增長相對較慢,利用基於物品的協同過濾演算法效果更穩定。

協同過濾演算法思路非常直觀易懂,計算也相對簡單,易於分散式實現,也不依賴於使用者及標的物的其他資訊,效果也非常好,也能夠為使用者推薦新穎性內容,所以在工業界得到非常廣泛的應用。

(3)基於模型的推薦演算法

基於模型的推薦演算法種類非常多,最常用的有矩陣分解演算法、分解機演算法等。目前深度學習演算法、強化學習演算法、遷移學習演算法也在推薦系統中得到大規模採用。

基於模型的推薦演算法,基於使用者歷史行為資料、標的物metadata、使用者畫像資料等構建一個機器學習模型,利用資料訓練模型,求解模型引數。最終利用該模型來預測使用者對未知標的物的偏好。下面圖就是基於模型的推薦系統模型訓練與預測的流程。

基於模型的推薦演算法有三類預測方式,一類是預測標的物的評分,基於評分的大小表示對標的物的偏好程度。第二類是採用概率的思路,預測使用者對標的物的喜好概率,利用概率值的大小來預測使用者對標的物的喜好程度。另外一類是採用分類的思路,將每個標的物看成一類,通過預測使用者下一個(幾個)標的物所屬的類別來做推薦。矩陣分解演算法就是預測使用者對標的物的評分,logistic迴歸演算法就是概率預測方法,而youtube發表的深度學習推薦就是基於分類思路的演算法(參見參考文獻10)。

矩陣分解演算法是將使用者評分矩陣M分解為兩個矩陣U、V的乘積。U代表的使用者特徵矩陣,V代表標的物特徵矩陣。某個使用者對某個標的物的評分,就可以採用矩陣U對應的行(該使用者的特徵向量)與矩陣V對應的列(該標的物的特徵向量)的乘積。分解機演算法是矩陣分解演算法的推廣,這裡不做介紹。

隨著最近幾年深度學習在影象識別、語音識別領域的大獲成功。有很多研究者及工業實踐者將深度學習用於推薦系統,也取得了非常好的成績,如youtube、Netflix、阿里、京東、網易、攜程等,都將深度學習部署到了實際推薦業務中,並取得了非常好的轉化效果(參考後面的參考文獻中對應的論文)。

強化學習及遷移學習等新的方法也開始在推薦業務中嶄露頭角,有興趣的讀者可以閱讀文末對應的參考文獻。

3. 群組個性化正規化

群組個性化正規化需要先將使用者分組,分組的原則是非常重要的。一般有如下兩類分組方案。

(1)基於使用者畫像圈人的推薦

先基於使用者的人口統計學資料或者使用者行為資料構建使用者畫像。使用者畫像一般用於做精準的運營,通過顯示特徵將一批人圈起來,對這批人做針對性的運營。在前面也做了介紹,這裡不再說明。

(2)採用聚類演算法的推薦

聚類是非常直觀的一種思路,將行為偏好相似的使用者聚成一類,他們有相似的興趣。常用的聚類策略有如下兩類。

a 將使用者嵌入一個高維向量空間,基於使用者的向量表示做聚類

將使用者相關特徵嵌入向量空間的方式有很多,下面都是非常主流的做法。

採用基於內容推薦的思路,可以構建使用者的特徵向量(TF-IDF,LDA,標籤等,前面已經介紹過)。有了使用者的特徵向量就可以聚類,該類所有使用者特徵向量的加權平均就是該組使用者的特徵向量,再利用群組特徵向量與標的物特徵向量的內積來計算群組與標的物的相似度,從而為該群組做個性化推薦。

採用基於使用者的協同過濾的思路,可以構建使用者和標的物的行為矩陣,矩陣的元素就是使用者對標的物的評分,利用該矩陣的行向量就構建了一個衡量使用者特徵的向量,基於該特徵向量可以對使用者聚類。先對該組使用者所有的特徵向量求均值,可以取k個最大的特徵,其他特徵忽略不計(設定為0),最終得到該組使用者的特徵。最後就可以根據基於使用者協同過濾的思路來為該組使用者計算推薦列表了。

利用矩陣分解可以得到每個使用者的特徵向量,我們可以用該組使用者特徵向量的均值來作為該使用者組的特徵向量。再利用使用者組的特徵向量與標的物特徵向量的內積來計算群組對該標的物的偏好,所有偏好計算出來後,通過降序排列就可以為該組使用者推薦topN的標的物列表了。前面我們提到的電視貓的重排序演算法就是基於該思路實現的。

還可以基於詞嵌入的方式,將每個使用者對標的物的所有操作(購買、觀看等)看成一個文件集合,標的物的sid就是一個單詞,採用類似word2vec的方式可以獲得標的物的向量表示(見參考文獻9),那麼使用者的向量表示就是使用者操作過的所有標的物的向量表示的均值(可以採用時間加權,對最早操作的標的物給予最低的權重),這樣就獲得了每個使用者的特徵向量了。該組所有使用者的平均特徵向量就是該組的特徵向量。這時可以採用類似上面矩陣分解的方式計算該組特徵向量與標的物特徵向量的內積為該組使用者做個性化推薦。

除了上面幾種計算群組推薦的方法外,還有一種基於計數統計的更直觀的推薦方法。當我們對使用者進行聚類後,我們可以對這一組使用者操作過的標的物採用計數的方式統計每個標的物被操作的次數,將同一標的物的操作次數累加,最後按照標的物計數大小按照降序排列。 將標的物列表topn推薦給該組,這個topN列表就是絕大多數人喜歡的標的物。

b 基於圖的聚類

我們可以構建使用者關係圖,頂點是使用者,邊是使用者之間的關係,我們可以採用圖的分割技術,將圖分割成若干個聯通子圖,這些子圖即是使用者的聚類。還有一種方法是將圖嵌入到高維向量空間中,這樣就可以採用kmeans聚類方法做聚類了。有了使用者的聚類就可以採用上面基於計數統計的直觀方法做推薦了,或者採用更復雜的方案做推薦。

那怎麼構建使用者關係圖呢?一般有兩種方法。如果是社交類產品,可以基於社交關係來構建使用者關係圖,使用者之間的邊,代表好友關係。如果是非社交類產品,如果兩個使用者對同一標的物都有操作行為,那麼這兩個使用者之間可以構建一條邊。

群組個性化推薦的優勢是每組給出一樣的推薦,可以減少推薦的計算和儲存。但該方案有一個最大的問題,同一組推薦一樣的標的物列表,很可能對某個使用者來說,推薦的標的物他已經看過,但是其他使用者沒有看過,所以無法過濾掉該標的物,針對某些使用者推薦體驗不夠好。另外,同一組使用者在興趣特徵上多少是有差別的,無法精細地照顧到每個使用者的興趣點。

群組個性化推薦的思路和優點也可以用於完全個性化正規化的推薦。可以將使用者先分組,每一個分組看成一個等價類(熟悉數學的同學應該很容易理解,不熟悉的同學可以理解為一個興趣小組),同一組的使用者當成一個使用者,這樣就可以利用完全個性化正規化中的演算法思路來做推薦。Google在07年發表的一篇論文(參考文獻17)就是採用該思路的協同過濾實現。將使用者分組可以減少計算量,支援大規模平行計算。

4. 標的物關聯標的物正規化

標的物關聯標的物就是為每個標的物推薦一組標的物。該推薦正規化的核心是怎麼從一個標的物關聯到一組標的物。這種關聯關係可以是相似的,也可以是基於其他維度的關聯。常用的推薦策略是相似推薦。下面給出4種常用的生成關聯推薦的策略。

(1)基於內容的推薦

這類方法一般可以利用已知的資料和資訊利用向量來描述標的物,如果每個標的物都被向量化了,那麼我們就可以利用向量之間的相似度來計算標的物之間的相似度。

如果標的物是新聞等文字資訊,可以採用TF-IDF將標的物對映為詞向量,我們可以通過詞向量的相似度來計算標的物之間的相似度。

即使不是文字,只要標的物具備metadata等文字資訊,也可以採用該方法。很多網際網路產品是具備使用者評論功能的,這些評論文字就可以看成是標的物的描述資訊。

LDA模型也非常適合文字類的推薦,通過LDA模型將文章(文件)表示為主題及相關詞的概率,我們可以通過如下方式計算兩個文件的相似度:先計算兩個文件某個主題的相似度,將所有主題的相似度加權平均就可以得到兩篇文件的相似度,而主題的相似度可以採用主題的詞向量的餘弦內積來表示。

(2)基於使用者行為的推薦

在一個成熟的推薦產品中,會包含很多使用者的行為,如使用者的收藏、點贊、購買、播放、瀏覽、搜尋等,這些行為代表了使用者對標的物的某種偏好。我們可以基於該使用者行為來進行關聯推薦。具體的策略有如下4類。

a 比如常用的矩陣分解演算法

可以將使用者的行為矩陣分解為使用者特徵矩陣和物品特徵矩陣,物品特徵矩陣可以看成是衡量物品的一個向量,利用該向量我們就可以計算兩個標的物之間的相似度了。

b 採用嵌入的思路做推薦

使用者的所有行為可以看成是一個文件,每個標的物可以看成是一個詞,我們可以採用類似word2vec的思路,最終訓練出每個詞(即標的物)的向量表示,利用該向量表示可以計算標的物之間的相似度。

c 我們可以將使用者對標的物的所有操作行為投射到一個二維表(或者矩陣)上

行是使用者,列是標的物,表中的元素就是使用者對該標的物的操作(評分或者點選等隱式行為),通過這種方式我們就構建了一個二維表。這個二維表的列向量就可以用來表示標的物。這樣我們就可以採用向量相似來計算標的物之間的相似度了。

d 採用購物籃的思路做推薦,這種思路非常適合圖書、電商等的推薦

經常一起購買(或者瀏覽)的標的物形成一個列表(一個購物籃),將過去一段時間所有的購物籃收集起來。 任何一個標的物,我們可以找到跟它出現在同一個購物籃的標的物及次數,統計完該次數後,我們就可以按照該次數降序排列,那麼這個列表就可以當做標的物的關聯推薦了。該推薦思路非常直觀易懂,可解釋性強。下面圖就是亞馬遜網站上採用該思路的兩類關聯推薦。

(3) 基於標籤推薦

如果標的物是包含標籤的,比如視訊推薦。我們就可以利用標籤來構建向量,每個標籤代表一個維度。總標籤的個數就是向量的維度,這樣每個標的物就可以利用標籤的向量來表示了。一般標的物的標籤個數遠遠小於總標籤的個數,所以這個向量是稀疏向量。這樣我們就可以基於稀疏向量的表示來計算標的物之間的相似度了。

(4)基於標的物聚類的推薦

我們可以將標的物按照某個維度聚類,同一類具備某些相似性,那麼我們在推薦時,就可以將同一類的其他標的物作為關聯推薦。我們需要解決的問題是,某些類可能數量很小,不夠做推薦,這時可以採用一些策略來補充(如補充熱門推薦等)不足的數量。

5. 笛卡爾積正規化

笛卡爾積正規化的推薦演算法一般可以先採用標的物關聯標的物正規化計算出待推薦的標的物列表。再根據使用者的興趣來對該推薦列表做重排(調整標的物列表的順序)、增補(增加使用者的個性化興趣)、刪除(比如過濾掉使用者看過的)等。由於笛卡爾積正規化的推薦演算法在真實業務場景中使用不多,這裡不再詳細講解。

到目前為止,我們講完了常用的召回策略。召回除了根據上面的一些演算法策略外,還跟具體業務及產品形態有關,可以基於更多的其他維度(如時間、地點、使用者屬性、收入、職業等)來做召回。

智慧電視上的推薦,早上、白天、晚上推薦的不一樣,節假日和平常推薦的也不一樣。上班族早上需要上班,時間不充足,可能推薦短視訊或者新聞更加合適,白天一般是老人在家,可以推薦戲曲、抗戰類節目等,晚上主人回家又會推薦不一樣的內容。

基於地點的召回,要求在不同的地方推薦不一樣的標的物,典型的應用有美團外賣,你在不同的地方,給你推薦的是你所在地附近幾公里範圍內的餐廳。

個性化召回演算法

本章節主要講解itemcf與usercf的基礎理論部分與理論公式升級部分,並詳細介紹itemcf與usercf的優缺點分析

Item Collaborative Filtering(Item CF) 背景

資訊過載,使用者需求不明確強依賴於使用者行為

工業界主流落地場景

資訊流電商o2oLBS

含義:給使用者推薦他之前喜歡的物品相似的物品

如何衡量相似

物品之間相似度公式:

u(i)表示喜歡物品i的使用者數,表示同時喜歡物品i和物品j的使用者數

根據使用者行為計算出使用者相似度矩陣:

分子:u(i)表示對item (i)有過行為的使用者集合 ,u(j)表示對item (j)有過行為的使用者集合 ,分子表示user的重合程度,重合度越高,越相似。分母:歸一化(舉例:對item(i)有過行為的使用者2個,對item(j)有過行為的使用者3個,物理意義:懲罰的熱門物品與其他物品的相似度,因為熱門物品對應的user倒排會非常長造成了與很多物品都有重合,如果分母除以一個很大的數,將相似度的數值趨於0。使用者u對物品j的興趣公式: N(u) 表示使用者喜歡的物品集合,表示和物品j最相似的k個物品的集合。表示物品i和j的相似度.表示使用者u對物品i的興趣。 表示user對 i的行為得分,表示物品的相似度得分 對user進行item(j)的推薦,根據item(i)來完成推薦的,item(i)是user行為過的物品並且取與item(i)最相似的top k個(一般50個)

Item CF在工業界落地公式升級1:

理論意義:針對於活躍使用者應該被降低在相似度公式中的貢獻度。

如果在某電商系統中,如果某User A是批發商,他購買了很多物品,可能有啤酒,書刊等,這都不能真實的表現他的興趣。還有一名User B,他只買了啤酒和書刊,這能完全表現他的興趣。如果我們在計算啤酒和書刊的相似度的時候,如果按照之前相似度公式User A和User B對啤酒和書刊的相似度貢獻是一樣的。這樣子顯然是不合理的。我們需要降低User A在相似度計算過程中的貢獻度。

u(i)表示喜歡物品i的使用者數,表示同時喜歡物品i和物品j的使用者數

與之前的相似度計算公式公式相比,分母部門沒有發生任何變化。那麼我們重點看分子部分。之前的相似度計算公式中每個重合使用者對相似度的貢獻是一樣的,都是1.但是升級後的公式,我們發現每個使用者對相似度的貢獻變成了不一樣。N(u)表示使用者u所行為過的item的總數。如果一個使用者行為過的item的總數越多,那麼他的相似度就越低。這樣子是符合常理的認知的。

分子:N(u)表示使用者u所行為過的item總數,如果使用者行為過的總數越多,對相似度貢獻越低。

Item CF在工業界落地公式升級2

理論意義:使用者在不同時間對item的操作應給予時間衰減懲罰。

因為在很多場景中,使用者的興趣隨時間是有變化的。如在資訊流場景中,可能30前看過的短視訊,30天后就不一定喜歡了。因為在做物品相似度矩陣計算的時候,就假定了使用者的行為可以反映使用者的興趣。所以需要給予時間衰減降權。

的物理意義就是說如果item i與item j被行為時間的差異越小,那麼就越逼近於1.如果他們item i與item j被行為時間的差異越大,那麼這個貢獻就越低。

與之前的相似度計算公式相比,分母部門沒有發生任何變化。那麼我們重點看分子部分。每個使用者對相似度的貢獻也發生了變化。這裡的變化主要由決定的。是指使用者item i與 item j所行為的時間的差異。

User Collaborative Filtering(User CF) 意義:給使用者推薦相似興趣使用者感興趣的物品。

舉個栗子:在我們讀書的時候是否經常問學長學姐該讀什麼樣的書或者下載什麼樣的論文?學長學姐就會給你推薦。在這個栗子中學長學姐和你就屬於具有相同愛好的使用者群體,因為你們具有相同的研究領域。

那麼所以基於使用者的協同過濾的演算法有兩個步驟:

1、找到相似興趣使用者的集合

那麼問題來了,如何評價相似興趣使用者集合?區別於很多傳統做法,這裡主要採用基於使用者行為重合度的方法,舉例來說,如果兩個使用者的行為具有很高的重合度,那麼他們具有很高的相似性。那麼他們可以稱為相似興趣使用者集合。

2、推薦相似使用者行為過,而該使用者並沒有行為過的item。舉個栗子,如果我們發現兩個使用者A、B都非常喜歡足球相關的視訊,行為重合度極高。而使用者B經常點選天下足球相關的視訊,使用者A並沒有行為,那麼我們可以推薦天下足球相關的視訊給使用者A。

栗子:

User A 可以給User D 推薦b

基於使用者的協同過濾演算法的步驟

1、計算相似使用者的相似度矩陣

相似度公式

N(u)表示使用者u有過行為item的集合。N(v)表示使用者v有過行為item的集合。

分子是item的重合程度。顯然重合程度越高,user越相似。

分母做了一個歸一化,物理意義上解釋了懲罰了操作過多的使用者與其他使用者的相似程度。因為操作過多的使用者對應的item的序列會非常的長,造成了與很多的使用者都有相似。分母除以一個很大的數之後呢,就能把相似度得分的數值趨於0.在得到使用者相似度矩陣過後,我們根據使用者的行為點選,來完成相似使用者的item推薦。

下面來看公式

表示使用者v對item i的行為得分。在前面介紹item cf公式的時候,我們提到過對於不同的行為,我們對使用者的行為得分定義不同。我們這裡將行為得分歸一化為1.

表示user u與uer v的相似度得分。這裡根據使用者v來完成對使用者u的推薦。所以這裡要介紹使用者v。使用者v是使用者u的前TOP k個的相似使用者。並且使用者v行為過的物品 item i,使用者user u 沒有行為。那麼我們便得到了使用者u對item i的推薦度得分。

工業界落地時公式升級1:

理論意義:降低那些異常活躍物品對與使用者相似度的貢獻

舉個栗子解釋:

如果某個電商系統中,User (A) 與User(B)同時購買了《新華字典》,User (A) 與User(C)同時購買了《機器學習》,並且他們都只有這一本書重合,User (A) 與User(B)、User (A) 與User(C)的重合度都是1,顯然不合理,因為購買《新華字典》並不能十分準確的反映使用者的興趣,也許是給家裡孩子買,換言之《新華字典》的使用者倒排會非常的長,而購買《機器學習》的使用者大概率可以反映他們的興趣,因為這本書的購書群體很窄,因此我們需要降低那些很多人購買的在重合度中的貢獻。

分子:基礎版本的相似度計算公式當中重合的每一item對整體的貢獻都是相同的。在升級版中貢獻變得不同的。u(i)表示對item(i)有過行為的使用者集合,如果一個item被更多的使用者行為過,那麼它在重合度的貢獻越低。這也符合我們的認知。

公式升級2(工業界) 理論意義,不同使用者對同一item行為的時間段不同應該給予時間懲罰 (因為很多使用者不同時間段,興趣是發生變化的,比如,2個使用者都曾經點選過足球類短視訊,一個使用者是近期點選,另一個使用者是在好幾個月之前歐洲盃比賽期間,也許在目前時間節點,已經不再喜歡足球類短視訊了,我們在計算使用者相似度矩陣的時候,假定了使用者行為可以反映出使用者的興趣,所以我們要給予時間衰減降權)

與基礎版本的使用者相似度矩陣計算公式,分母沒有發生任何變化。

分子:每一個重合的item的貢獻度得分都變得不同,它們的貢獻度得分由函式決定。函式具體的得分是2個使用者對同一item操作時間的差,如果越短的話,的得分越高;如果越長的話,的得分越低。相應的在重合度貢獻中也就越低。

Itemcf VS Usercf優缺點比較:

推薦實時性

User cf使用者有了新的行為,不會對結果造成很快的變化,因為Usercf是基於相似度矩陣來完成推薦的,User本身的行為並不能造成自己的推薦結果發生改變。Item cf使用者一旦有了新的行為,推薦結果立刻發生改變,因為Itemcf是基於相似度矩陣來完成推薦的,所以點選了物品,會立馬推薦出相似的物品

新使用者/新物品的推薦

Usercf新使用者的到來是不能立即推薦的,需要等使用者有了一定的行為並且得到了與其他使用者相似度矩陣之後才可以完成推薦,新使用者一旦被使用者點選,Usercf可以通過相似度使用者矩陣將該物品推薦給相似的使用者。Item cf新使用者一旦完成了Item點選,便可以推薦該Item相似的其餘Item,新物品的到來,由於此時新物品,並沒有與其他物品在相似度矩陣中出現,所以Itemcf並不能將新物品及時地推薦出去

推薦理由的可解釋性

User cf由於是通過使用者相似度矩陣來完成推薦的,結果會略顯難以解釋。Item cf通過使用者歷史點選行為完成的推薦,所以推薦結果更加令人信服。

Item cf VS User cf適用場景 效能層面考量

User cf通過計算使用者相似度矩陣,所以它並不適合使用者很多的場合。因為相似度矩陣計算起來代價非常大。Item cf需要計算物品的相似度矩陣,所以Itemcf適用於物品數遠小於使用者數場合。由於實戰中使用者量往往遠大於物品的數量級,所以實戰中更傾向於Item cf。

個性化層面考量

User cf適用於物品及時推薦下發且個性化需求不太強烈的領域。Itemcf適用於長尾物品豐富並且個性化需要強烈的領域。由於真實的推薦系統中,各種個性化召回演算法組合,會有一些召回方法解決新物品及時下發問題,而我們需要個性化程度強烈,所以從個性化層面考慮,更傾向於在落地實戰中採用Itemcf。

ItemCF的優勢:

(1)計算效能高,通常使用者數量遠大於物品數量。

(2)可預先計算保留,物品並不善變。

ItemCF存在的問題: 物品冷啟動問題:當平臺中物品資料較少或缺失時,無法精確計算物品相似度,解決辦法:

(1)文字分析,通過分析物品的介紹文字,計算相似度。 (2)主題模型,通過主題模型分析物品文字主題得出主題相似度。 (3)打標籤,對物品打標籤求得相似度。 (4)推薦排行榜單。

三、排序演算法概述

推薦系統排序模組將召回模組產生的標的物列表(一般幾百個標的物),通過排序演算法做重排,更好的反應使用者的點選偏好,通過排序優化使用者的點選行為,將使用者更可能點選的標的物(一般幾十個)取出來推薦給使用者,最終提升使用者體驗。

排序模組會用到很多特徵,基於這些特徵構建排序模型,排序特徵在排序的效果中起到非常關鍵的作用,常用的特徵可以抽象為如下5大類:

使用者側的特徵,如使用者的性別、年齡、地域、購買力、家庭結構等。商品側的特徵,如商品描述資訊、價格、標籤等。上下文及場景特徵,如位置、頁面、是否是週末節假日等。交叉特徵,如使用者側特徵與商品側特徵的交叉等。使用者的行為特徵,如使用者點選、收藏、購買、觀看等。

包括:個性化召回演算法、個性化排序演算法

排序框架需要充分利用上述五大類特徵,以便更好的預測使用者的點選行為。排序學習是機器學習中一個重要的研究領域,廣泛應用於資訊檢索、搜尋引擎、推薦系統、計算廣告等的排序任務中,有興趣的讀者可以參考微軟亞洲研究院劉鐵巖博士的專著《Learning to Rank for Information Retrieval》。常用的排序演算法框架有pointwise、pairwise、listwise三類,見下圖。

上圖中x1,x2,... 代表的是訓練樣本1,2,... 的特徵,y1,y2,s1,... 等是訓練集的label(目標函式值)。pointwise學習單個樣本,如果最終預測目標是一個實數值,就是迴歸問題,如果目標是概率預測,就是一個分類問題,例如CTR預估。pairwise和listwise分別學習一對有序對和一個有序序列的樣本特徵,考慮得更加精細。在推薦系統中常用pointwise方法來做排序,它更直觀,易於理解,也更簡單。

常用的排序學習演算法有logistic迴歸、GBDT、Wide & Deep等,這裡對這些演算法的實現原理做一個簡單描述。

1. logistic迴歸模型

其中, 是使用者喜歡某個標的物的概率;

是權重,是需要學習的模型引數;

是特徵i的值,特徵如上面所述,有5大類可用特徵。

我們可以通過上述公式計算待推薦標的物的p值。最終我們可以按照p值的大小降序排列來對召回的標的物列表做排序。

在工業界,為了更好地將該模型應用到真實業務場景中,很多公司對logistic迴歸模型做了推廣。比如用到線上實時推薦場景中做排序,有Google在2013年推廣的FTRL(見參考文獻14),以及阿里推廣的分片線性模型(見參考文獻13)。

2. GBDT模型

GBDT(Gradient Boosting Decision Tree)是一種基於迭代思路構造的決策樹演算法(可以參考文獻15),該演算法在實際問題中將生成多棵決策樹,並將所有樹的結果進行彙總來得到最終答案,該演算法將決策樹與整合思想進行了有效的結合,通過將弱學習器提升為強學習器的整合方法來提高預測精度。GBDT是一類泛化能力較強的學習演算法。

2014年Facebook發表了一篇介紹將GBDT+LR(Logistic Regression)模型用於其廣告CTR預估的論文(參考文獻16),開啟了利用GBDT模型應用於搜尋、推薦、廣告業務的先河。GBDT作為一種常用的樹模型,可天然地對原始特徵進行特徵劃分、特徵組合和特徵選擇,並得到高階特徵屬性和非線性對映。從而可將GBDT模型抽象為一個特徵處理器,通過GBDT分析原始特徵獲取到更利於LR分析的新特徵,這也正是GBDT+LR模型的核心思想——利用GBDT構造的新特徵來訓練LR模型。

3. Wide & deep模型

Wide&deep模型最早被Google提出來,並用於Android手機應用商店上APP的推薦排序。目前該演算法在國內很多網際網路企業得到大規模的採用,有比較好的效果。該模型將傳統模型和深度學習模型相結合。wide部分(傳統模型,如logistic迴歸)起記憶(memorization)的作用,即從歷史資料中發現item(推薦內容)或者特徵之間的相關性,deep部分(深度學習模型)起泛化(generalization)的作用,即相關性的傳遞,發現在歷史資料中很少或者沒有出現的新的特徵組合,尋找使用者的新偏好。通過將這兩個模型結合起來可以更好地在使用者的歷史興趣和探索新的興趣點之間做到平衡。感興趣的讀者可以閱讀參考文獻12。

評估指標: 包括:線上評估指標和離線評估指標

四、推薦演算法落地需要關注的幾個問題

前面幾節對推薦系統演算法和產品做了初步描述,相信大家對常用演算法實現思路、怎麼用於真實產品中有了比較直觀的認識。在本節作者對演算法落地中幾個重要問題加以說明,以便你可以更好地將推薦演算法落地到真實業務場景中。

推薦演算法工程落地是否一定需要排序模組

工業上的推薦演算法一般分為召回和排序模組,召回的作用是從全量標的物集合(幾萬甚至上億)中將使用者可能喜歡的標的物取出來(幾百個),排序階段將召回的標的物集按照使用者點選的可能性再做一次排序。但是排序階段不是必須的,特別是對於標的物池不大的產品及團隊資源較少的情形,沒必要一開始就開發出排序框架。召回演算法一般也會對標的物做排序(如果是評分預測模型,如矩陣分解,可以按照評分大小排序,如果是概率模型,可以按照對標的物的偏好概率大小排序)。缺失了排序模組的推薦系統可能精準度沒有那麼高,但是工程實現上相對更加簡單,可以快速落地上線。特別對於剛做推薦系統的團隊,可以讓系統快速上線,後面再逐步迭代,補全缺失模組。

推薦演算法服務於使用者的兩種形式

推薦演算法計算出的推薦結果可以直接插入資料庫(如Redis等),直接為使用者提供服務,另外一種方式是將核心特徵計算好儲存下來,當用戶請求推薦業務時,推薦web服務通過簡單計算將特徵轉化為最終給使用者的推薦結果返回給使用者。這兩種方式一個是事先計算好,拿來就用,另外一種是準備好核心資料,在請求時實時計算最終結果。

我拿餐廳服務外賣來類比說明,第一種方式是將餐廳有的菜先做好很多份,如果有外賣單過來,直接將做好的送出。第二種是將所有的配菜都準備好,接到外賣單立馬將配菜加上調料炒熟再送出去,只要配菜準備足夠好,炒菜的時間不太長並且可控,也是可以很好的服務使用者的。第一種方式是事先做好的,無法滿足使用者個性化需求,同時如果做好了沒人點的話就浪費了,第二種可以更好滿足使用者個性化需求,比如使用者說不要香菜多放辣椒就可以在現做的時候滿足。

第二種方式對整個推薦系統要求更高,服務更加精細,但是第一種方案更加簡單,不過也需要更多的儲存資源(將所有使用者的推薦結果事先存下來)。在推薦系統構建的初級階段建議採用方案一。

某些推薦業務用方案一是不可行的,比如上面的笛卡爾積正規化的推薦系統,因為使用者數乘以標的物數是一個巨大的天文數字,公司不可能有這麼多的資源將每個使用者關聯的每個標的物的推薦結果事先計算好儲存下來。

推薦系統評估

推薦系統是服務於公司商業目標的(盈利目標,提升使用者體驗、使用時長、DAU等,最終也是為了盈利),所以推薦系統落地到真實業務場景中一定要定義推薦系統的優化目標,只有目標具體而清晰,並可量化,才能更好的通過不斷迭代優化推薦效果。大家可以參考《推薦系統的商業價值》,了解怎麼定義推薦系統的商業指標。

參考文獻:

1.Multi-Interest Network with Dynamic Routing for Recommendation at Tmall2.Deep Session Interest Network for Click-Through Rate Prediction3.Behavior Sequence Transformer for E-commerce Recommendation in Alibaba4.Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba5.Personal Recommendation Using Deep Recurrent Neural Networks in NetEase6.Deep Reinforcement Learning for List-wise Recommendations7.Recommendations with Negative Feedback via Pairwise Deep Reinforcement Learning8.Learning Tree-based Deep Model for Recommender Systems9.Item2Vec- Neural Item Embedding for Collaborative Filtering10.Deep Neural Networks for YouTube Recommendations11.Deep Learning based Recommender System- A Survey and New Perspectives12.Wide & Deep Learning for Recommender Systems13.Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction14.Ad Click Prediction- a View from the Trenches15.Greedy function approximation: a gradient boosting machine16.Practical Lessons from Predicting Clicks on Ads at Facebook17.Google News Personalization: Scalable Online Collaborative Filtering

最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 直播電商坑位費高轉化低,未來在哪裡?三點道破直播電商本質