1. 程式人生 > >機器學習->推薦系統->冷啟動問題

機器學習->推薦系統->冷啟動問題

我們之前討論推薦系統的UserCF演算法和ItemCF等演算法都是以擁有大量使用者行為資料為先決條件,並以此對物品或者使用者進行自動聚類。但是對於一個剛剛開始執行推薦系統的應用的網站來說,如何在沒有大量使用者行為資料的情況下設計個性化推薦系統並且讓使用者對推薦系統滿意,從而願意使用推薦系統,這就是冷啟動問題。

對於冷啟動問題,一般分為三類:
一)使用者冷啟動:如何對新使用者做個性化推薦。
二)物品冷啟動:如何將新加進來的物品推薦給對它感興趣的使用者。
三)系統冷啟動:新開發的網站如何設計個性化推薦系統。

對以上三個冷啟動,通常參考如下解決方案:
一)提供個性化的推薦:比如熱門排行榜。等使用者行為資料收集到一定時候再切換為個性化推薦。
二)利用註冊資訊,比如提供的年齡,性別等做粗粒化的推薦。
三)利用使用者社交網路賬號登入。
四)要求使用者在註冊時對一些物品進行反饋。收集使用者興趣資訊。
五)對新加的物品,利用內容資訊,將他們推薦給喜歡過和他們內容類似的使用者。
六)系統冷啟動時,可引入專家知識,通過一定高效方式迅速建立物品的相關度表。

以下詳細說明以上的解決方案

一 新使用者冷啟動問題:

方法一 : 利用使用者註冊資訊

(1)人口統計學:使用者年齡,性別,職業,民族,學歷和居住地
(2)使用者興趣描述:一些網站會讓使用者描述他們的興趣愛好
(3)從其他網站匯入使用者站外行為資料

基於註冊資訊的個性化推薦流程基本如下:
①獲取使用者註冊資訊
②根據使用者註冊資訊對使用者進行分類,分類可以是多分類(也即是多個特徵)
③給使用者推薦他所在分類的使用者最喜歡的物品,每個分類(特徵)使用者最喜歡的物品加權求和。

實際應用中也會考慮組合特徵,但是新使用者不一定具有所有的特徵,因為有些時候並不要求使用者填寫相關特徵資訊。

由以上可知,基於使用者註冊資訊的推薦演算法其核心問題是計算出每種特徵(所屬分類)使用者喜歡的物品,也就是說,對於每種特徵f,計算具有這種特徵的使用者對每個物品的喜歡程度p(f,i)
p(f,i)可以簡單定義為具有特徵f的使用者對物品i的喜好程度:
這裡寫圖片描述
其中N(i)表示喜歡物品i的使用者集合,U(f)表示具有特徵f的使用者集合。
跟之前講到推薦系統演算法類似,這個公式也有一個缺點,如果一個物品是熱門物品那麼他的p(f,i)將會非常高,則在給使用者推薦物品時會傾向於推薦熱門物品,由此則覆蓋率極低。我們在設計推薦系統時,主要任務不是給使用者推薦熱門物品,而是幫助使用者發現他喜歡但是卻不太容易發現的物品。因此我們可以對上面公式做以下改進,同以前一樣,對熱門物品進行懲罰:
這裡寫圖片描述

上面公式中分母的作用是解決資料稀疏的問題。比如一個物品只被一個使用者喜歡過,而這個使用者剛好有特徵f,那麼p(f,i)=1,這樣的統計量沒有意義,因此我們在分母上加上一個比較大的數,可以避免這樣的物品產生比較大的權重。

這樣我們就可以計算出每一類使用者中最受歡迎的物品列表。

方法二:選擇合適的物品啟動使用者興趣
使用者第一次訪問推薦系統時,不立即進行推薦,而是提供一些物品讓使用者進行反饋。然後根據反饋結果進行個性化推薦。

而這些提供的物品應該具有哪些特性呢?一般來講應該符合以下幾個原則:
①比較熱門
②具有代表性和區分性
③具有多樣性

上面只是物品冷啟動的原則,那麼在實際選擇啟動的物品集合時應該怎麼做呢?可以利用決策樹的思想,給定一群使用者,利用這群使用者對物品評分的方差度量這群使用者興趣的一致程度,如果方差很大說明這個物品的區分性很好。
這裡寫圖片描述
其中這裡寫圖片描述喜歡物品i的使用者對其他物品評分方差;這裡寫圖片描述表示沒有對物品i評分的使用者對其他物品評分的方差;這裡寫圖片描述表示不喜歡物品i的使用者對其他物品評分的方差。如果這三類使用者集合內的使用者對其他的物品興趣很不一致,說明物品i具有較高的區分度。

首先會從所有使用者中尋找具有最高區分度的物品i,然後將使用者分成3類,然後從每類中在尋找最高區分度的物品,再將使用者分三類,這樣就9類了,一直繼續下去,最終可以通過對一系列物品的看法對使用者進行分類。而在冷啟動時,我們從根節點開始詢問使用者對該節點物品的看法,然後根據使用者的選擇將使用者放到不同的分支,直至最後進入葉子節點。這樣我們就可以對使用者的興趣有了比較清楚的瞭解。從而可以對使用者進行個性化推薦。

二:物品冷啟動問題
物品冷啟動要解決的問題是如何將新加的物品推薦給對它感興趣的使用者。

之前我們介紹了UserCF演算法和ItemCF演算法。UserCF演算法並不對新物品很敏感,在很多網站中,推薦列表並不是給使用者展示物品的唯一列表。當一個使用者在某個地方發現了新加的物品並對其進行了反饋。通過UserCF演算法給類似具有相同興趣的使用者推薦這個物品。這樣新加的物品就會源源不斷的擴散開來。

但是有些網站中推薦列表就是使用者獲取新加物品唯一的或者是主要途徑。這時就要解決第一推動力的問題。也即是第一個使用者在哪發現新加物品的問題。解決這個問題的最簡單的辦法就是將新加的物品隨機的展示給使用者,但是這樣做顯然並不個性化。因此可以考慮利用物品內容資訊,將新物品投放給曾經喜歡過和他類似內容的其他物品的使用者,這類似於ItemCF思想。不過這是先通過ItemCF找到一個可能對物品感興趣的使用者,然後再通過USerCF推薦給與此使用者興趣類似的其他使用者。

如果用ItemCF演算法解決物品冷啟動問題,就有點麻煩了,因為ItemCF通過使用者行為對物品進行相似度的計算,形成物品相似度矩陣。再根據這個相似度矩陣把物品推薦給喜歡過類似這個物品的使用者。這個物品相似度矩陣是線下計算好,線上放進記憶體。從而新物品不會出現在物品相似度矩陣中。解決的辦法是頻繁的更新相似度矩陣。這是一件非常耗時的事情。為此我們只能通過物品內容來計算物品相似度矩陣。這就涉及到如何通過物品內容來計算物品相似度的問題,下面來詳細講述這個問題。

一般來說,物品的內容可以用向量空間模型表示,該模型會把物品表示成一個關鍵詞向量。對於物品d,他的內容表示成一個關鍵詞向量如下:
這裡寫圖片描述
其中e是關鍵詞,w是這個詞對於權重,其中w的計算公式就是著名的TF-IDF公式:
TF-IDF重要思想就是:一個不常見的詞在一篇文章中出現多次,那麼對於這篇文章來說他肯定是關鍵詞。
第一步計算詞頻TF:
這裡寫圖片描述
因為不同的文章長度不一樣,需要進行標準化:
這裡寫圖片描述
然後第二步,計算逆文件頻率。
這裡寫圖片描述
如果一個詞越常見,那麼分母就越大,逆文件頻率就越小越接近0。分母之所以要加1,是為了避免分母為0(即所有文件都不包含該詞)。log表示對得到的值取對數。

再計算TF-IDF值:
這裡寫圖片描述
可以看到,TF-IDF與一個詞在文件中的出現次數成正比,與該詞在整個語言中的出現次數成反比。所以,自動提取關鍵詞的演算法就很清楚了,就是計算出文件的每個詞的TF-IDF值,然後按降序排列,取排在最前面的幾個詞。如此可以得出關鍵詞排名。

在得出給定物品內容的關鍵詞向量後,物品的內容相似度可以通過向量之間的餘弦相似度計算:
這裡寫圖片描述
實際應用中,首先建立 關鍵詞-物品的倒排表。由此建立物品相似度矩陣。得出物品相似度以後,可以根據ItemCF思想給使用者推薦物品。

可能我們會有疑惑,內容相似度能頻繁更新,而且能夠解決物品冷啟動問題,那麼為什麼還要用協同過濾演算法?通過大量的實驗我們可以得出這樣一個結論:如果使用者的行為強烈受到某一內容屬性的影響,那麼內容過濾的演算法可以在精度上超過協同過濾,但是大多數情況下這種強的內容特徵並不是所有物品都具備的,大多數情況下,內容過濾的演算法精度比協同過濾演算法差。

向量空間模型在內容資料豐富的情況下可以獲得很好的效果,但是如果文字很短,關鍵詞很少,又或者是兩篇文章的關鍵詞不同,但是所包含的意思很近,也即是話題相同。在這種情況下,向量空間模型很難計算出準確的相似度。此時就要研究文章的話題分佈,才能準確的計算出文章的相似度。
代表性的話題模型有LDA模型,關於LDA話題模型的講解請看如下連結:
LDA模型原理以及推導推導

LDA模型能將詞很好組成不同的話題,我們可以先計算物品在話題上的分佈,然後利用兩個物品在話題分佈計算物品的相似度。

發揮專家作用:利用專家(對物品進行標註,在計算物品的相似度。也即是人工辦法對物品進行標註分類,計算相似度。