推薦系統(一)——概述

推薦系統(二)——用戶行為數據

<推薦系統實踐> 第三章,推薦系統冷啟動問題

推薦系統需要根據用戶的歷史行為和興趣預測用戶未來的行為和興趣,因此大量的用戶行為

數據就成為推薦系統的重要組成部分和先決條件。

在開始階段就希望有個性化推薦應用的網站來說,如何在沒有大量用戶數據的情況下設計個性化推薦系統並且讓用戶對推薦結果滿意從而願意使用推薦系統,就是冷啟動的問題。

冷啟動問題 (cold start) 主要分3類:

  • 用戶冷啟動。用戶冷啟動主要解決如何給新用戶做個性化推薦的問題。當新用戶到來時,我們沒有他的行為數據,所以也無法根據他的歷史行為預測其興趣,從而無法藉此給他做個性化推薦。
  • 物品冷啟動。物品冷啟動主要解決如何將新的物品推薦給可能對它感興趣的用戶這一問題。
  • 系統冷啟動。 系統冷啟動主要解決如何在一個新開發的網站上(還沒有用戶,也沒有用戶行為,只有一些物品的信息)設計個性化推薦系統,從而在網站剛發布時就讓用戶體驗到個性化推薦服務這一問題。

下面將詳細闡述其中的幾種解決方案。

  1. 利用用戶註冊信息

在網站中,當新用戶剛註冊時,我們不知道他喜歡什麼物品,於是只能給他推薦一些熱門的商品。但如果我們知道她是一位女性,那麼可以給她推薦女性都喜歡的熱門商品。這也是一種個性化的推薦。當然這個個性化的粒度很粗,因為所有剛註冊的女性看到的都是同樣的結果,但相對於不區分男女的方式,這種推薦的精度已經大大提高了。因此,利用用戶的註冊信息可以很好地解決註冊用戶的冷啟動問題。

個性化電台Pandora的註冊界面就要求用戶提供生日、郵編和性別等數據

用戶註冊信息分3種:

  • 人口統計學信息。包括用戶的年齡、性別、居住地、職業和學歷等信息。
  • 用戶的興趣描述。有一些網站會讓用戶用文字描述他們的興趣。
  • 從其他網站導入的用戶站外行為數據。 比如用戶通過豆瓣、新浪微博的賬號登錄,就可以在得到用戶同意的情況下獲取用戶在豆瓣或者新浪微博的一些行為數據和社交網路數據。

人口統計學特徵包括年齡、性別、工作、學歷、居住地、國籍、民族等,這些特徵對預測用戶的興趣有很重要的作用,比如男性和女性的興趣不同,不同年齡的人興趣也不同。

IMDB中不同美劇的評分用戶的性別分布

基於註冊信息的個性化推薦流程基本如下:

  • 獲取用戶的註冊信息
  • 根據用戶的註冊信息對用戶分類
  • 給用戶推薦他所屬分類中用戶喜歡的物品

當一個新的註冊用戶訪問推薦系統時,我們首先從用戶註冊信息資料庫中查詢他的註冊信息。比如上圖中的用戶,我們查到他是一位28歲的男性,是一位物理學家。然後,查詢3張離線計算好的相關表:一張是性別-電視劇相關表,從中可以查詢男性最喜歡的電視劇;一張是年齡-電視劇相關表,從中可以查詢到28歲用戶最喜歡的電視劇;一張是職業-電視劇相關表,可以查詢到物理學家最喜歡的電視劇。然後,我們可以將用這3張相關表查詢出的電視劇列表按照一定權重相加,得到給用戶的最終推薦列表。

基於用戶註冊信息的推薦演算法其核心問題是計算每種特徵的用戶喜 歡的物品。也就是說,對於每種特徵f,計算具有這種特徵的用戶對各個物品的喜好程度p(f, i)。

p( f ,i) 可以簡單地定義為物品i在具有f的特徵的用戶中的熱門程度:

p(f, i) = left| N(i) cap U(f)
ight|

其中 N(i) 是喜歡物品i的用戶集合,U( f ) 是具有特徵f的用戶集合。

上面這種定義可以比較準確地預測具有某種特徵的用戶是否喜歡某個物品。但是,在這種定義下,往往熱門的物品會在各種特徵的用戶中都具有比較高的權重。也就是說具有比較高的 N(i) 的物品會在每一類用戶中都有比較高的 p( f ,i) 。給用戶推薦熱門物品並不是推薦系統的主要任 務,推薦系統應該幫助用戶發現他們不容易發現的物品。

可以將 p( f ,i) 定義為喜歡物 品i的用戶中具有特徵f的比例: p(f, i) = frac{left| N(i) cap U(f)
ight|}{ left| N(i)
ight| + alpha}

這裡分母中使用參數 alpha 的目的是解決數據稀疏問題。比如有一個物品只被1個用戶喜歡過, 而這個用戶剛好就有特徵f,那麼就有 p( f , i) = 1 。但是,這種情況並沒有統計意義,因此我們為 分母加上一個比較大的數,可以避免這樣的物品產生比較大的權重。

評測:

我們按照不同的粒度給用戶分類,對比了4種不同的演算法。

  • MostPopular 給用戶推薦最熱門的歌手。
  • GenderMostPopular 給用戶推薦對於和他同性別的用戶最熱門的歌手,這裡我們將用戶分成男女兩類。
  • AgeMostPopular 給用戶推薦對於和他同一個年齡段的用戶最熱門的歌手,這裡我們將10歲作為一個年齡段,將用戶按照不同的年齡段分類。
  • CountryMostPopular 給用戶推薦對於和他同一個國家的用戶最熱門的歌手。
  • DemographicMostPopular 給用戶推薦對於和他同性別、年齡段、國家的用戶最熱門的歌手。

4種不同粒度演算法在實驗數據集上的召回率、準確率和覆蓋率

如上圖,利用的用戶人口統計學特徵越多,粒度越細,精度和覆蓋率也會越高,越能準確地預測用戶興趣。

2. 選擇合適的物品啟動用戶的興趣

解決用戶冷啟動問題的另一個方法是在新用戶第一次訪問推薦系統時,不立即給用戶展示推薦結果,而是給用戶提供一些物品,讓用戶反饋他們對這些物品的興趣,然後根據用戶反饋給提 供個性化推薦。

Jinni在新用戶登錄推薦系統時提示用戶需要給多部電影評分

Jinni讓用戶選擇自己喜歡的電影類別

對於這些通過讓用戶對物品進行評分來收集用戶興趣,從而對用戶進行冷啟動的系統,它們 需要解決的首要問題就是如何選擇物品讓用戶進行反饋。

一般來說,能夠用來啟動用戶興趣的物品需要具有以下特點:

  • 比較熱門。如果要讓用戶對一個物品進行反饋,前提是用戶知道這個物品是什麼東西。 以電影為例,如果一開始讓用戶進行反饋的電影都很冷門,而用戶不知道這些電影的情 節和內容,也就無法對它們做出準確的反饋。
  • 具有代表性和區分性。啟動用戶興趣的物品不能是大眾化或老少咸宜的,因為這樣的物品對用戶的興趣沒有區分性。還以電影為例,用一部票房很高且廣受歡迎的電影做啟動物品,可以想像的到的是幾乎所有用戶都會喜歡這部電影,因而無法區分用戶個性化的興趣。
  • 啟動物品集合需要有多樣性。在冷啟動時,我們不知道用戶的興趣,而用戶興趣的可能性非常多,為了匹配多樣的興趣,我們需要提供具有很高覆蓋率的啟動物品集合,這些物品能覆蓋幾乎所有主流的用戶興趣。

首先,給定一群用戶,用這群用戶對物品評分的方差度量這群用戶興趣的一 致程度。如果方差很大,說明這一群用戶的興趣不太一致,反之則說明這群用戶的興趣比較一致。

一個物品的區分度: D(i) = sigma_{uin N^{+}(i)} + sigma_{uin N^{-}(i)}  + sigma_{uin ar{ N}(i)}

其中,  N^{+}(i) 是喜歡物品i的用戶集合,  N^{-}(i) 是不喜歡物品i的用戶集合, ar{ N }(i) 是沒有對物品i評分的用戶集合。  sigma_{uin N^{+}(i)} 是喜歡物品i的用戶對其他物品評分的方差, sigma_{uin N^{-}(i)} 是不喜歡物品i的用戶對其他物品評分的方差, sigma_{uin ar{ N}(i)} 是沒有對物品i評分的用戶對其他物品評分的方差。也就是說,對於物品i,將用戶分成3類——喜歡物品i的用戶、不喜歡物品i的用戶和不知道物品i的用戶(即沒有給i評分的用戶)。如果這3類用戶集合內的用戶對其他的物品興趣很不一致,說明物品i具有較高的區分度。

首先會從所有用戶中找到具有最高區分度的物品i,然後將用戶分成3 類。然後在每類用戶中再找到最具區分度的物品,然後將每一類用戶又各自分為3類,也就是將總用戶分成9類,然後這樣繼續下去,最終可以通過對一系列物品的看法將用戶進行分類。

給用戶選擇物品以解決冷啟動問題的例子

以上圖為例,假設通過分析用戶數據, 我們發現《變形金剛》最有區分度。而在喜歡《變形金剛》的用戶中《鋼鐵俠》最有區分度,不知道《變形金剛》的用戶中《阿甘正傳》最有區分度,不喜歡《變形金剛》的用戶中《泰坦尼克號》最有區分度。進一步分析,我們發現不喜歡《變形金剛》但喜歡《泰坦尼克號》的用戶中,《人鬼情未了》最有區分度。

假設來了一個新用戶,系統會首先詢問他對《變形金剛》的看法,如果他說不喜歡,我們就會問他對《泰坦尼克》號的看法,如果他說喜歡,我們就會問他對《人鬼情未了》的看法,如果這個時候用戶停止了反饋,我們也大概能知道該用戶可能對愛情片比較感興趣,對科幻片興趣不大。

3. 利用物品的內容信息(ContentItemKNN)

物品冷啟動需要解決的問題是如何將新加入的物品推薦給對它感興趣的用戶。物品冷啟動在新聞網站等時效性很強的網站中非常重要,因為那些網站中時時刻刻都有新加入的物品,而且每 個物品必須能夠在第一時間展現給用戶,否則經過一段時間後,物品的價值就大大降低了。

Joooor:推薦系統(二)——用戶行為數據?

zhuanlan.zhihu.com
圖標

在《推薦系統(二)——用戶行為數據》中講過UserCF和ItemCF。UserCF對物品冷啟動問題並不非常敏感,因為,UserCF在給用戶進行推薦時,會首先找到和用戶興趣相似的一群用戶,然後給用戶推薦這一群用戶喜歡的物品。在很多網站中,推薦列表並不是給用戶展示內容的唯一列表,那麼當一個新物品加入時,總會有用戶從某些途徑看到這些物品,對這些物品產生反饋。那麼,當一個用戶對某個物品產生反饋後,和他歷史興趣相似的其他用戶的推 薦列表中就有可能出現這一物品,從而更多的人就會對這個物品產生反饋,導致更多的人的推薦列表中會出現這一物品,因此該物品就能不斷地擴散開來,從而逐步展示到對它感興趣用戶的推薦列表中。

但是,有些網站中推薦列表可能是用戶獲取信息的主要途徑,比如豆瓣網路電台。那麼對於 UserCF演算法就需要解決第一推動力的問題,即第一個用戶從哪兒發現新的物品。只要有一小部分 人能夠發現並喜歡新的物品,UserCF演算法就能將這些物品擴散到更多的用戶中。解決第一推動力 最簡單的方法是將新的物品隨機展示給用戶,但這樣顯然不太個性化,因此可以考慮利用物品的 內容信息,將新物品先投放給曾經喜歡過和它內容相似的其他物品的用戶。

對於ItemCF演算法來說,物品冷啟動就是一個嚴重的問題了。因為ItemCF演算法的原理是給用戶 推薦和他之前喜歡的物品相似的物品。ItemCF演算法會每隔一段時間利用用戶行為計算物品相似度 表(一般一天計算一次),在線服務時ItemCF演算法會將之前計算好的物品相關度矩陣放在內存中。 因此,當新物品加入時,內存中的物品相關表中不會存在這個物品,從而ItemCF演算法無法推薦新 的物品。解決這一問題的辦法是頻繁更新物品相似度表,但基於用戶行為計算物品相似度是非常 耗時的事情,主要原因是用戶行為日誌非常龐大。而且,新物品如果不展示給用戶,用戶就無法 對它產生行為,通過行為日誌計算是計算不出包含新物品的相關矩陣的。為此,我們只能利用物 品的內容信息計算物品相關表,並且頻繁地更新相關表(比如半小時計算一次)。

物品的內容信息多種多樣,不同類型的物品有不同的內容信息。

常見物品的內容信息

通過物品的內容信息來計算物品的相似度。

一般來說,物品的內容可以通過向量空間模型表示,該模型會將物品表示成一個關鍵詞向量。如果物品的內容是一些諸如導演、演員等實體的話,可以直接將這些實體作為關鍵詞。但如 果內容是文本的形式,則需要引入一些理解自然語言的技術抽取關鍵詞。下圖展示了從文本生 成關鍵詞向量的主要步驟。對於中文,首先要對文本進行分詞,將字流變成詞流,然後從詞流中 檢測出命名實體(如人名、地名、組織名等),這些實體和一些其他重要的詞將組成關鍵詞集合, 最後對關鍵詞進行排名,計算每個關鍵詞的權重,從而生成關鍵詞向量。

關鍵詞向量的生成過程

對物品d,它的內容表示成一個關鍵詞向量如下: d_{i} = {(e_{1},w_{1}),(e_{2},w_{2}), ...}

其中, e_{i} 就是關鍵詞, w_{i} 是關鍵詞對應的權重。如果物品是文本,我們可以用信息檢索領域著名的TF-IDF公式計算詞的權重: w_{i} = frac{TF(e_{i})}{logDF_{e_{i}}}

如果物品是電影,可以根據演員在劇中的重要程度賦予他們權重。

在給定物品內容的關鍵詞向量後,物品的內容相似度可以通過向量之間的餘弦相似度計算:

w_{ij} = frac{d_{i}·d_{j}}{sqrt{left|d_{i}
ight|left|d_{j}
ight|}}

得到物品的相似度之後,可以利用上一章提到的ItemCF演算法的思想,給用戶推薦和他歷史上喜歡的物品內容相似的物品。

MovieLens/GitHub數據集中幾種推薦演算法性能的對比,為了對比,同時加入了Random和MostPopular兩個非個性化的推薦 演算法作為基準

從MovieLens數據集上的結果可以發現,ContentItemKNN的準確率和召回率僅僅優於Random 演算法,明顯差於ItemCF演算法,甚至比MostPopular演算法還要差。不過在覆蓋率和流行度指標上 ContentItemKNN卻優於ItemCF。這主要是因為內容過濾演算法忽視了用戶行為,從而也忽視了物 品的流行度以及用戶行為中所包含的規律,所以它的精度比較低,但結果的新穎度卻比較高。

不過,事情不是絕對的。如果看GitHub數據集的結果,我們會發現完全相反的現象——Content-ItemKNN在所有指標上都優於ItemCF。這主要是因為GitHub提供了一個非常強的內容特徵,就是開 源項目的作者。在GitHub中,程序員會經常會關注同一個作者的不同項目,這一點是GitHub數據 集最重要的特徵。而協同過濾演算法由於數據稀疏的影響,不能從用戶行為中完全統計出這一特徵, 所以協同過濾演算法反而不如利用了先驗信息的內容過濾演算法。

這一點也說明,如果用戶的行為強烈受某一內容屬性的影響,那麼內容過濾的演算法還是可以在精度上超過協同過濾演算法的。不過這 種強的內容特徵不是所有物品都具有的,而且需要豐富的領域知識才能獲得,所以很多時候內容 過濾演算法的精度比協同過濾演算法差。

4. 專家標註

很多推薦系統在建立時,既沒有用戶的行為數據,也沒有充足的物品內容信息來計算準確的 物品相似度。那麼,為了在推薦系統建立時就讓用戶得到比較好的體驗,很多系統都利用專家進行標註。這方面的代表系統是個性化網路電台Pandora和電影推薦網站Jinni。

Pandora是一個給用戶播放音樂的個性化電台應用。眾所周知,計算音樂之間的相似度是比較困難的。首先,音樂是多媒體,如果從音頻分析入手計算歌曲之間的相似度,則技術門檻很高,而且也很難計算得令人滿意。其次,僅僅利用歌曲的專輯、歌手等屬性信息很難獲得令人滿意的歌曲相似度表,因為一名歌手、一部專輯往往只有一兩首好歌。為了解決這個問題,Pandora僱用了一批懂計算機的音樂人進行了一項稱為音樂基因的項目。他們聽了幾萬名歌手的歌,並對這些歌的各個維度進行標註。

Jinni中專家給《功夫熊貓》標註的基因

Jinni在電影基因工程中採用了半人工、半自動的方式。首先,它讓專家對電影進行標記,每 個電影都有大約50個基因,這些基因來自大約1000個基因庫。然後,在專家標記一定的樣本後, Jinni會使用自然語言理解和機器學習技術,通過分析用戶對電影的評論和電影的一些內容屬性對 電影(特別是新電影)進行自己的標記。同時,Jinni也設計了讓用戶對基因進行反饋的界面,希 望通過用戶反饋不斷改進電影基因系統。

推薦閱讀:

查看原文 >>
相关文章