當前位置:
首頁 > 科技 > 推薦系統產品與演算法概述

推薦系統產品與演算法概述

作者丨gongyouliu

本文會從推薦演算法與產品介紹、推薦召回演算法概述、排序演算法概述、推薦演算法落地需要關注的幾個問題等4部分來講解。完全個性化範式和標的物關聯標的物範式是最常用的推薦範式,在互聯網產品中有大量真實場景應用,也是本文重點講解的。

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

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

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

下面圖1是電視貓(一款基於OTT端[智能電視或者智能盒子]的視頻播放軟體)的推薦系統的業務流程,包含召回、排序和業務調控三大演算法和策略模塊,可以作為大家設計推薦系統演算法模塊的參考。本文只講解召回、排序兩個階段涉及到的演算法,業務調控跟具體業務及公司運營策略強相關,本文不做過多描述。

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

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

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

一個是用戶維度,

一個是標的物維度,

一個是用戶與標的物笛卡爾積維度。

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

1. 基於用戶維度的推薦

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

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

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

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

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

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

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

完全個性化也可以基於用戶的好友關係來做推薦。下面圖6是微信最近上線的好物推薦,是基於社交關係的個性化推薦,將你的好友買過的商品推薦給你。

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

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

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

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

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

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

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

上面我們介紹了工業界常用的推薦範式及對應的產品形態,在下面一節我們對每種推薦範式涉及到的召回演算法做一個綜述,希望讀者對這些演算法有初步了解,知道在哪類產品形態上使用哪類演算法。

二、推薦召回演算法概述

在本節我們會根據推薦召回演算法的5種範式來講解每種範式常用的演算法策略,讓大家對各種演算法有一個整體的了解。

1. 非個性化範式

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

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

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

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

2. 完全個性化範式

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

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

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

a 基於用戶特徵表示的推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

基於模型的推薦演算法有三類預測方式,一類是預測標的物的評分,基於評分的大小表示對標的物的偏好程度。第二類是採用概率的思路,預測用戶對標的物的喜好概率,利用概率值的大小來預測用戶對標的物的喜好程度。另外一類是採用分類的思路,將每個標的物看成一類,通過預測用戶下一個(幾個)標的物所屬的類別來做推薦。矩陣分解演算法就是預測用戶對標的物的評分,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)基於用戶行為的推薦

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI科技大本營 的精彩文章:

超Mask RCNN速度4倍,僅在單個GPU訓練的實時實例分割演算法
如何用最快的速度學會Dlib人臉識別開發?

TAG:AI科技大本營 |