推薦系統的目的是聯絡使用者的興趣和物品,這種聯絡需要以來不同的媒介。grouplens在一篇文章中表示目前流行的推薦系統基本上通過3種方式聯絡童虎興趣和物品。
delicious允許使用者給網際網路上的每個網頁打標籤,從而通過標籤重新組織整個網際網路。
打標籤作為一種重要的使用者行為,蘊含了很多使用者興趣資訊,深入研究和利用使用者打標籤的行為可以很好地知道我們改進個性化推薦系統的推薦質量。同事標籤的表示形式非常簡單,便於很多演算法處理。
標籤系統中的推薦問題主要有以下兩個:
為了研究上面的兩個問題,首先需要回答3個問題:
在設計基於標籤的個性化推薦系統之前,需要深入了解使用者的標註行為(即打標籤的行為),知道使用者為什麼要標註,使用者怎麼標註,只有深入了解使用者的行為,才能基於這個行為設計出令他們滿意的個性化推薦系統。
morgan ames從兩個維度**。首先是社會維度,有些使用者標註是給內容上傳者使用的(便於上傳者組織自己的資訊),而有些使用者標註是給廣大使用者使用的(便於幫助其他使用者找到資訊)。利用乙個維度是功能維度,有些標註使用者更好地組織內容,方便使用者將來的查詢,而另一些標註使用者傳達某種資訊,比如**的拍攝時間和地點等。
在網際網路中,儘管每個使用者的行為看起來是隨機的,但其實這些表面隨機的行為背後蘊含著很多規律。
使用者活躍度和物品流行度的分布都遵循長尾分布,發現標籤流行度的分布也呈現非常典型的長尾分布。
常見的情況是提供許多各種各樣的標籤供使用者選擇,給物品打上他認為的標籤。
使用者用標籤來描述對物品的看法,因此標籤是聯絡使用者和物品的紐帶,也是反應使用者興趣的重要資料來源,如何利用使用者的標籤資料提高個性化推薦結果的質量?
乙個使用者標籤行為的資料集一般由乙個三元組的集合表示,其中記錄(u,i,b)表示使用者u給物品i打上了b標籤。使用者真實標籤行為資料遠遠比三元組表示的複雜,比如使用者打標籤的時間、使用者的屬性資料、物品的屬性資料等。
演算法描述如下:
對於上面演算法,使用者u對物品i的興趣公式如下:
\(p(u,i) = \sum_n_n_\)
b(u)是使用者u打過的標籤集合,b(i)是物品i被打過的標籤集合,\(n_\)是使用者u打過標籤b的次數,\(n_\)是物品i被打過標籤b的次數。
**使用者u對物品i的興趣公式,可以發現很多缺點。
1.tf-idf
原來的計算公式傾向於給熱門標籤對應的熱門物品很大的比重,會造成推薦熱門的物品給使用者,從而降低推薦結果的新穎性。另外,利用使用者的標籤向量對使用者興趣建模,其中每個標籤都是使用者使用過的標籤,而標籤的權重是使用者使用該標籤的次數。這種建模方法的缺點是給熱門標籤過大的權重,從而不能反應使用者個性化的興趣。借鑑tf-idf思想,對其進行改進:
\(p(u,i) = \sum_\frac})}n_\)
\(n_b^\)記錄標籤b被多少個不同的使用者使用過。
也可以對熱門物品進行懲罰,得到如下公式:
\(p(u,i) = \sum_\frac})}\frac})}\)
其中,\(n_i^\)表示物品i被多少不同的使用者打過標籤。
實驗表明,適當懲罰熱門標籤和熱門物品,在增進推薦結果個性化的同時並不會降低推薦結果的離線精度。
2.資料稀疏性
在前面的演算法中,使用者興趣和物品的聯絡是通過\(b(u)\cap b(i)\)中的標籤建立的。但對於新使用者或者新物品,這個集合中的標籤數量會很少。為了提高推薦的準確率,可能要對標籤集合做擴充套件,比如使用者曾經用過「推薦系統」這個標籤,可以將這個標籤的相似標籤也加入到使用者標籤集合中,比如「個性化」,「協同過濾」等標籤。
進行標籤擴充套件有很多方法,常用的有話題模型(topic model),簡單的方法有基於鄰域的方法。
標籤擴充套件的本質是對每個標籤找到和它相似的標籤,也就是計算標籤之間的相似度。最簡單的相似度可以是同義詞,如果有乙個同義詞詞典,可以根據詞典進行標籤擴充套件;如果沒有詞典,可以從資料中統計出標籤的相似度。
如果認為同乙個物品上的不同標籤具有某種相似度,那麼當兩個標籤同時出現在很多物品的標籤集合中時,可以認為這兩個標籤具有較大的相似度。
實驗發現,進行標籤擴充套件確實能夠提高基於標籤的物品推薦的準確率和召回率,但可能會稍微降低推薦結果的覆蓋率和新穎度。
3.標籤清理
不是所有標籤都能反應使用者的興趣。標籤清理的另乙個重要意義在於將標籤作為推薦解釋。如果我們要把標籤呈現給使用者,將其作為給使用者推薦某乙個物品的解釋,對標籤的質量要求就很高。首先,這些標籤不能包含沒有意義的停止詞或者表示情緒的詞,其次這些推薦解釋裡不能包含很多意義相同的詞語。
一般標籤清理方法:
為了控制標籤的質量,很多**也採用了讓使用者進行反饋的思想,即讓使用者告訴系統某個標籤是否合適。
首先,我們需要將使用者打標籤的行為表示到一張圖上。帶權圖是由頂點、邊和邊上的權重組成的。而在使用者標籤資料集上,有3種不同的元素,即使用者、物品和標籤。因此,需要定義3種不同的頂點,即使用者頂點、物品頂點和標籤頂點。然後,如果我們得到乙個表示使用者u給物品i打了標籤b的使用者標籤行為 (u,i,b),那麼在圖中增加3條邊,首先需要在使用者u對應的頂點v(u)和物品i對應的頂點v(i)之間增加一條邊(如果這兩個頂點已經有邊相連,那麼就應該將邊的權重加1),同理,在v(u) 和v(b)之間需要增加一條邊, v(i)和v(b)之間也需要邊相連線。
用圖模型解釋前面的簡單演算法。使用者對物品的興趣公式表示為:
\(p(i|u) = \sum_p(i|b)p(b|u)\)
公式假定使用者對物品的興趣通過標籤傳遞。因此,可以更簡單的建模,省去使用者和物品之前的連線。
基於標籤的推薦其最大好處是可以利用標籤做推薦解釋,這方面的代表性應用是豆瓣的個性化推薦系統。
要讓使用者直觀上感覺推薦結果有道理是很困難的,而豆瓣將推薦結果的可解釋性拆分成了兩部分,首先讓使用者覺得標籤雲是有道理的,然後讓使用者覺得從某個標籤推薦出某本書也是有道理的。
當使用者瀏覽某個物品時,標籤系統非常希望使用者能夠給這個物品打上高質量的標籤,這樣才能促進標籤系統的良性迴圈。因此,很多標籤系統都設計了標籤推薦模組給使用者推薦標籤。
使用者u給物品i打標籤時,有很多方法可以給使用者推薦和物品i相關的標籤。比較簡單的方法有4種。
第1種方法就是給使用者u推薦整個系統裡最熱門的標籤;令tags[b]表示標籤b的熱門程度,
def recommendpopulartags(user, item, tags, n):
return sorted(tags.items(),key=lambda a:a[1],reverse=true)[:n]
第2種方法是給使用者u推薦物品i上最熱門的標籤;item_tags[i][b]為物品i被打上標籤b的次數,
def recommenditempopulartags(user, item, item_tags, n):
return sorted(item_tags[item].items(),key=lambda a:a[1],reverse=true)[:n]
def recommenduserpopulartags(user,item,user_tags,n):
return sorted(user_tags[user].items(),key=lambda a:a[1],reverse=true)[:n]
def recommendhybridpopulartags(user,item,user_tags,item_tags,alpha,n):
max_user_tag_weight = max(user_tags[user].values())
for tag,weight in user_tags[user].items():
ret[tag] = (1-alpha)*weight / max_user_tag_weight
max_item_tag_weight = max(item_tags[item].values())
for tag,weight in item_tags[item].items():
if tag not in ret:
ret[tag] = alpha * weight / max_item_tag_weight
else:
ret[tag] += alpha*weight/max_item_tag_weight
return sorted(ret.items(),key=lambda a:a[1],reverse=true)[:n]
在將兩個列表線性相加時將兩個列表按最大值做了歸一化,好處是便於控制兩個列表對最終結果的影響,不至於因為物品非常熱門而淹沒使用者對推薦結果的影響,或因為使用者非常活躍淹沒物品對推薦結果的影響。
針對有結果,但結果不太多的情況。對標籤進行標籤擴充套件。標籤擴充套件的關鍵在於計算標籤之間的相似度。
圖模型可以用於標籤推薦。
《推薦系統實踐》閱讀筆記二 利用使用者標籤進行推薦
定義 應用 delicious,citeulike,last.fm,豆瓣,hulu 使用方法 因此我們需要解答 使用者為什麼要打標籤 使用者如何打標籤 使用者打什麼樣的標籤。因此我們可以通過衡量標籤的余弦相似性來衡量物品之間的相似性,同時也可以根據給物品打過標籤的使用者數來衡量物品的平均熱門度。同時...
推薦系統讀書筆記
標籤 空格分隔 演算法 基於內容的推薦 基於知識的推薦 混合推薦方法 主要思想 給定乙個評分資料集和當前 活躍 使用者的id作為輸入,找出與當前使用者過去有相似偏好的其它使用者,這些使用者被稱為對等使用者或最近鄰.物品1物品2 物品3物品4 物品5alice53 44?使用者131 233使用者24...
推薦系統實踐讀書筆記
最近大概複習了一下這本書,了解了較早的推薦系統的一些方法,記錄如下,以便大家對本書內容有個快速地了解。略去了第一張,詳細的 和細節可以參考其他部落格。需要關注的地方直接標出了頁碼。書裡面的 不是很完整,用來學習還可以。第八章介紹了一些svd等機器學習的演算法,在2020年的今天可以回顧一下。推薦系統...