1. 程式人生 > >[推薦系統讀書筆記]推薦系統冷啟動問題

[推薦系統讀書筆記]推薦系統冷啟動問題

步驟 分布 判斷 必備 就會 基於用戶 對照組 發布 alpha

推薦系統需要根據用戶的歷史行為和興趣預測用戶未來的行為和興趣,因此大量的用戶行為數據就稱為推薦系統的重要組成部分和先決條件。很多在開始階段就希望有個性化推薦應用的網站來說,如何在沒有大量用戶數據的情況下設計個性化推薦系統並且讓用戶對推薦結果滿意從而願意使用推薦系統,就是冷啟動問題

冷啟動問題簡介

冷啟動問題主要分為3類:

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

對於這3種不同的冷啟動問題,有不同的解決方法。一般來說,可以參考如下解決方案。

  • 提供非個性化的推薦 非個性化推薦的最簡單例子就是熱門排行榜,可以給用戶推薦熱門排行榜,然後等到用戶數據收集到移動的時候,再切換為個性化推薦。
  • 利用用戶註冊時提供的年齡、性別等數據做粗粒度的個性化。
  • 利用用戶的社交網絡賬號登錄(需要用戶授權),導入用戶在社交網站上的好友信息,然後給用戶推薦其好友喜歡的物品。
  • 需要用戶在登錄時對一些物品進行反饋,收集用戶對這些物品的興趣信息,然後給用戶推薦那些和這些物品相似的物品。
  • 對於新加入的物品,可以利用內容信息,將它們推薦給喜歡過和它們相似的物品的用戶。
  • 在系統冷啟動時,可以引入專家的知識,通過一定的高效方式迅速建立起物品的相關度表。

利用用戶註冊信息

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

用戶的註冊信息分3種。

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

人口統計學特征包括年齡、性別、工作、學歷、居住地、國籍、民族等,這些特征對預測用戶的興趣有很重要的作用,比如男性和女性的興趣不同,不同年齡的人性卻也不同。
基於人口統計學特征的推薦系統其典型代表是Bruce Krulwich開發的Lifestyle Finder.首先Bruce將美國人群根據人口統計學屬性分成62類,然後對比每個新用戶根據其填寫個個人資料判斷他屬於什麽分類,最後給他推薦這類用戶最喜歡的15個鏈接,其中5個鏈接是推薦他購買的商品,5個鏈接是推薦他旅遊的地點,剩下的5個鏈接是推薦他去逛的商店。

為了證明利用用戶人口統計學特征後的推薦結果好於隨機推薦的結果, Krulwich做了一個AB測試。相對於利用人口統計學特征的算法,Krulwich設計了一個對照組,該組用戶看到的推薦結果是完全隨機的。實驗結果顯示,對於利用人口統計學特征的個性化推薦算法,其用戶點擊率為89%,而隨機算法的點擊率只有27%。對於利用人口統計學特征的個性化算法,44%的用戶覺得推薦結果是他們喜歡的,而對於隨機算法只有31%的用戶覺得推薦結果是自己喜歡的。因此,我們得到一個結論——使用人口統計學信息相對於隨機推薦能夠獲得更好的推薦效果。當然,Krulwich的實驗也有明顯的缺點,即他沒有對比和給用戶推薦最熱門的物品的推薦算法。因為熱門排行榜作為一種非個性化推薦算法,一般也比隨機推薦具有更高的點擊率。

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

  1. 獲取用戶的註冊信息;
  2. 根據用戶的註冊信息對用戶分類;
  3. 給用戶推薦他所屬分類中用戶喜歡的物品。

技術分享圖片

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

p(f,i)可以簡單地定義為物品i在具有f的特征的用戶中的熱門程度:
\(p(f,i) = |N(i) \cap U(f)|\)

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

根據這種定義可以比較準確地預測具有某種特征的用戶是否喜歡某個物品。但是,在這種定義下,往往熱門的物品會在各種特征用戶中都具有比較高的權重。也就是說具有比較高的|N(i)|的物品會在每一類用戶中都有比較高的p(f,i)。對公式進行修正,將p(f,i)定義為喜歡物品i的用戶中具有特征f的比例:

\(p(f,i) = \frac{|N(i) \cap U(f)|}{|N(i)| + \alpha}\)

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

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

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

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

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

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

上面這些因素是選擇啟動物品時需要考慮的,但如何設計一個選擇啟動物品集合的系統?Nadav Golbandi提出可以使用一個決策樹解決這個問題。

技術分享圖片
技術分享圖片

技術分享圖片

利用物品的內容信息

物品冷啟動需要解決的問題是如何將新加入的物品推薦給對它感興趣的用戶。物品冷啟動在新聞網站等時效性很強的網站中非常重要。

UserCF算法對物品冷啟動問題並不非常敏感。因為,USerCF在給用戶進行推薦時,會首先找到和用戶興趣相似的一群用戶,然後給用戶推薦這一群用戶喜歡的物品。在很多網站中,推薦列表並不是給用戶展示內容的唯一列表,當一個用戶對某個物品產生反饋後,和他歷史興趣相似的其他用戶的推薦列表中就有可能出現這一物品,從而更多的人就會對這個物品產生反饋,導致更多的人的推薦列表中就會出現這一物品,因此該物品就能不斷地擴散開來,從而逐步展示到對它感興趣用戶的推薦列表中。

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

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

物品的內容可以用向量空間模型表示,該模型會將物品表示成一個關鍵詞向量。對於文本,該模型通過分詞、實體檢測、關鍵詞排名等步驟將文本表示成一個關鍵詞向量 {(e1,w1),(e2,w2),...} 。其中,ei是關鍵詞,wi是關鍵詞對應的權重。次的權重可以用TF-IDF計算權重:

\(w_i = \frac{TF(e_i)}{logDF(e_i)}\)

向量空間模型的優點是簡單,缺點是丟失了一些信息,比如關鍵詞之間的關系信息。不過在絕倒數應用中,向量空間模型對於文本的分類、聚類、相似度計算已經可以給出令人滿意的結果。

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

\(w_{ij} = \frac{d_i*d_j}{\sqrt{||d_i||*||d_j||}}\)

代碼:

function CalculateSimilarity(D)#D文檔集合
    for di in D:
        for dj in D:
            w[i][j] = CosineSimilarity(di, dj)
    return w

向量空間模型的一個問題是不能理解含義近似的關鍵詞,因此在內容較少時準確度很差。話題模型通過首先計算文本的話題分布,然後再計算相似度來解決這個問題,如LDA模型。

任何模型都有一個假設, LDA 作為一種生成模型,對一篇文檔產生的過程進行了建模。話題模型的基本思想是,一個人在寫一篇文檔的時候,會首先想這篇文章要討論哪些話題,然後
思考這些話題應該用什麽詞描述,從而最終用詞寫成一篇文章
。因此,文章和詞之間是通過話
題聯系的
.

LDA包含文檔、話題、詞3種元素,每個詞屬於一個話題,通過叠代收斂得到話題的分布,文檔的相似度由話題分布的相似度來度量. 每一篇文檔都會表現為詞的集合。這稱為詞袋模型(bag of words).每個詞在一篇文檔中屬於一個話題。令D為文檔集合,D[i]是第i篇文檔,w[i][j]是第i篇文檔的第j個詞,z[i][j]是第i篇文檔的第j個詞屬於的話題。

LDA的計算過程包括初始化和叠代兩部分。首先要對z進行初始化,而初始化的方法很多簡單,假設一共有K個話題,那麽對第i篇文章中的第j個詞,可以隨機給它賦予一個話題在初始化之後,通過叠代使話題的分布收斂到一個合理的分布上去

在使用 LDA 計算物品的內容相似度時,我們可以先計算出物品在話題上的分布,然後利用兩個物品的話題分布計算物品的相似度。比如,如果兩個物品的話題分布相似,則認為兩個物品具有較高的相似度,反之則認為兩個物品的相似度較低。計算分布的相似度可以利用 KL 散度:

技術分享圖片

其中p和q是兩個分布,KL散度越大說明分布的相似度越低

發揮專家的作用

很多推薦系統在建立時,既沒有用戶的行為數據,也沒有充足的物品內容信息來計算準確的物品相似度。為了在推薦系統建立時就讓用戶得到比較好的體驗,很多系統都利用專家進行標註

[推薦系統讀書筆記]推薦系統冷啟動問題