此文是根據(jù)《推薦系統(tǒng)實(shí)踐》部分整理而來(lái)吱晒。
PART 1 介紹
GroupLens在一篇文章中表示目前流行的推薦系統(tǒng)基本上通過(guò)3種方式聯(lián)系用戶興趣和物品:
- 喜歡過(guò)的物品
- 有相似興趣的用戶
- 特征
其中,這里的特征有不同的表現(xiàn)方式,比如尅表現(xiàn)為物品的屬性集合,也可以表現(xiàn)為隱語(yǔ)義向量。本文將討論一種重要的特征表現(xiàn)方式----標(biāo)簽汇陆。
標(biāo)簽應(yīng)用一般分為兩種:一種是讓作者或者專家給物品打標(biāo)簽;另一種是讓普通用戶給物品打標(biāo)簽带饱,也就是UGC的標(biāo)簽應(yīng)用毡代。
UGC的標(biāo)簽應(yīng)用對(duì)用戶來(lái)說(shuō)有幾個(gè)好處:
- 表達(dá)。標(biāo)簽系統(tǒng)幫助用戶表達(dá)對(duì)物品的看法勺疼。
- 組織教寂。打標(biāo)簽幫助用戶組織喜歡的物品。
- 學(xué)習(xí)执庐。打標(biāo)簽幫助用戶增加對(duì)物品的了解酪耕。
- 發(fā)現(xiàn)。標(biāo)簽系統(tǒng)幫助用戶更容易發(fā)現(xiàn)喜歡的物品轨淌。
- 決策迂烁。標(biāo)簽系統(tǒng)幫助用戶判定是否去購(gòu)買/使用某個(gè)物品。
PART 2 標(biāo)簽系統(tǒng)中的推薦問(wèn)題
標(biāo)簽系統(tǒng)中的推薦問(wèn)題主要有以下兩個(gè):
- 如何利用用戶打標(biāo)簽的行為為其推薦物品(基于標(biāo)簽的推薦)递鹉?
- 如何在用戶給物品打標(biāo)簽時(shí)為其推薦適合該物品的標(biāo)簽(標(biāo)簽推薦)盟步?
為了研究上面兩個(gè)問(wèn)題,我們首先需要解答下面3個(gè)問(wèn)題:
- 用戶為什么要打標(biāo)簽躏结?
- 用戶怎么打標(biāo)簽却盘?
- 用戶打什么樣的標(biāo)簽?
第一個(gè)問(wèn)題從兩個(gè)維度進(jìn)行探討:
- 社會(huì)維度,有些用戶標(biāo)注是給內(nèi)容上傳者使用的谷炸,有些用戶標(biāo)注是給廣大用戶使用的北专。
- 功能維度,有些標(biāo)注用于更好地組織內(nèi)容旬陡,方便用戶的查找拓颓,另一些標(biāo)注用于傳達(dá)某種信息,比如照片的拍攝時(shí)間地點(diǎn)描孟。
第二個(gè)問(wèn)題驶睦,盡管每個(gè)用戶的行為看起來(lái)的隨機(jī)的,但是之前提到匿醒,用戶行為中用戶活躍度和物品流行度都是遵循著長(zhǎng)尾分布场航。研究后發(fā)現(xiàn)標(biāo)簽流行度的分布也遵循長(zhǎng)尾分布,下圖橫坐標(biāo)是流行度k廉羔,縱坐標(biāo)是流行度為k的標(biāo)簽總數(shù)n(k):
第三個(gè)問(wèn)題溉痢,用戶會(huì)給物品打上奇奇怪怪的標(biāo)簽,分為以下幾類:
- 表明物品是什么
- 表明物品的種類
- 表明誰(shuí)的物品
- 表達(dá)用戶的觀點(diǎn)
- 用戶相關(guān)的標(biāo)簽
- 用戶的任務(wù)
- 類型
- 時(shí)間
- 任務(wù)
- 地點(diǎn)
- 語(yǔ)言
- 獎(jiǎng)項(xiàng)
- 其他
PART 2 基于標(biāo)簽的推薦系統(tǒng)
之前的一個(gè)問(wèn)題是:如何利用用戶的標(biāo)簽數(shù)據(jù)提高個(gè)性化推薦結(jié)果的質(zhì)量憋他。
以豆瓣為例孩饼,將標(biāo)簽系統(tǒng)融入產(chǎn)品線,在每本書的頁(yè)面上竹挡,都提供了這本書上用戶最常打的標(biāo)簽镀娶,同時(shí)在用戶給書做評(píng)價(jià)時(shí),豆瓣也會(huì)讓用戶給圖書打標(biāo)簽揪罕。最后梯码,豆瓣利用標(biāo)簽將用戶的推薦結(jié)果做了聚類,顯示了對(duì)不同標(biāo)簽下用戶的推薦結(jié)果好啰,從而增加了推薦的多樣性和可解釋性轩娶。
一個(gè)用戶標(biāo)簽行為的數(shù)據(jù)集一般由一個(gè)三元組的集合表示,其中記錄(u,i,b)表示用戶u給物品i打上了標(biāo)簽b坎怪,當(dāng)然實(shí)際上維度會(huì)更多罢坝,這里只考慮最簡(jiǎn)單的形式廓握。中間的實(shí)驗(yàn)設(shè)置略過(guò)搅窿,直接進(jìn)入算法。
首先一個(gè)最簡(jiǎn)單的算法是:
- 統(tǒng)計(jì)每個(gè)用戶最常用的標(biāo)簽隙券。
- 對(duì)于每個(gè)標(biāo)簽男应,統(tǒng)計(jì)被打過(guò)這個(gè)標(biāo)簽次數(shù)最多的物品。
- 對(duì)于一個(gè)用戶娱仔,首先找到他常用的標(biāo)簽沐飘,然后找到具有這些標(biāo)簽的最熱門物品推薦給這個(gè)用戶。
對(duì)于上面的算法,用戶u對(duì)物品i的興趣公式如下:
這里耐朴,B(u)是用戶u打過(guò)的標(biāo)簽集合借卧,B(i)是物品i被打過(guò)的標(biāo)簽集合,Nu,b是用戶u打過(guò)標(biāo)簽b的次數(shù)筛峭,Nb,i是物品i被打過(guò)標(biāo)簽b的次數(shù)铐刘。這個(gè)算法被作者稱為SimpleTagBased。
評(píng)測(cè)結(jié)果為:
上面的公式會(huì)有很多缺點(diǎn)影晓,以下逐條分析并且提出修改意見:
-
TF-IDF
前面這個(gè)公式傾向于給熱門標(biāo)簽對(duì)應(yīng)的熱門物品很大的權(quán)重镰吵,因此會(huì)降低新穎性,并且不能反映個(gè)性化的興趣挂签。在這里可以借鑒 TF-IDF的思想疤祭,對(duì)這一公式進(jìn)行改進(jìn):
這里nb(u)記錄了標(biāo)簽b被多少個(gè)不同的用戶使用過(guò),這個(gè)算法記為TagBasedTFIDF饵婆。下圖給出了這個(gè)算法在兩個(gè)數(shù)據(jù)集上的離線實(shí)驗(yàn)性能勺馆,可以看到所有指標(biāo)上都比SimpleTagBased高。
同理侨核,借鑒TF-IDF的思想對(duì)熱門物品進(jìn)行懲罰谓传,從而得到如下公式:
ni(u)記錄了物品i被多少個(gè)不同的用戶打過(guò)標(biāo)簽,這個(gè)算法記為TagBasedTFIDF++芹关。下圖展示了這個(gè)算法的離線實(shí)驗(yàn)性能续挟,和TagBasedTFIDF相比,除了多樣性有所下降侥衬,其他指標(biāo)都有明顯提高诗祸。這一結(jié)果表明,適當(dāng)懲罰熱門標(biāo)簽和熱門物品轴总,在增進(jìn)推薦結(jié)果個(gè)性化的同時(shí)并不會(huì)降低推薦結(jié)果的離線精度:
- 數(shù)據(jù)的稀疏性
由于用戶興趣和物品是通過(guò)B(u)∩B(i)中的標(biāo)簽建立的直颅,但是對(duì)于新用戶或者新物品,這個(gè)集合中的標(biāo)簽數(shù)量會(huì)很少怀樟,為了提高推薦的準(zhǔn)確率功偿,我們可能要對(duì)標(biāo)簽集合做擴(kuò)展,進(jìn)行標(biāo)簽擴(kuò)展有很多方法往堡,其中常用的有話題模型械荷,不過(guò)這里遵循簡(jiǎn)單的原則介紹一種基于鄰域的方法。
標(biāo)簽擴(kuò)展本質(zhì)是對(duì)每個(gè)標(biāo)簽找到和它相似的標(biāo)簽虑灰,也就是計(jì)算標(biāo)簽的相似度吨瞎。如果認(rèn)為同一個(gè)物品上的不同標(biāo)簽具有某種相似度,那么當(dāng)兩個(gè)標(biāo)簽同時(shí)出現(xiàn)在很多物品的標(biāo)簽集合中時(shí)穆咐,我們就可以認(rèn)為這兩個(gè)標(biāo)簽具有較大的相似度颤诀。對(duì)于標(biāo)簽b字旭,令N(b)為有標(biāo)簽b的物品的集合,n_{b,i}為給物品i打上標(biāo)簽b的用戶數(shù)崖叫,我們可以通過(guò)如下余弦相似度公式計(jì)算標(biāo)簽b和標(biāo)簽b'的相似度:
為了測(cè)試性能進(jìn)行試驗(yàn)遗淳,對(duì)于曾經(jīng)打過(guò)標(biāo)簽數(shù)少于20的用戶,我們找到其所打標(biāo)簽的相關(guān)標(biāo)簽心傀,然后將這些標(biāo)簽聚合排序洲脂,結(jié)果前20標(biāo)簽作為用戶相關(guān)的標(biāo)簽,下表展示了離線實(shí)驗(yàn)的性能剧包,相比之前而言恐锦,進(jìn)行標(biāo)簽擴(kuò)展確實(shí)能提高準(zhǔn)確率和召回率,但可能會(huì)稍微降低推薦結(jié)果的覆蓋率和新穎度疆液。
- 標(biāo)簽清理
有些標(biāo)簽不能反應(yīng)用戶的興趣一铅,比如一個(gè)用戶說(shuō)一個(gè)物品“差”,那么就并不是他喜歡的標(biāo)簽堕油。標(biāo)簽清理的另一個(gè)重要意義在于將標(biāo)簽作為推薦解釋潘飘,如果我們要把標(biāo)簽呈現(xiàn)給用戶,將其作為給用戶推薦某一物品的解釋掉缺,對(duì)標(biāo)簽的質(zhì)量要求就很高卜录。首先標(biāo)簽不能包含沒有意義的停止詞或者表示情緒的詞,其次這些推薦解釋里不能包含很多意義相同的詞語(yǔ)眶明。一般來(lái)說(shuō)有以下清理方法:
- 去除詞頻很高的停止詞艰毒;
- 去除因詞根不同造成的同義詞;
- 去除因分隔符造成的同義詞搜囱。
為了控制標(biāo)簽的質(zhì)量丑瞧,很多網(wǎng)站也采用了讓用戶進(jìn)行反饋的思想,即讓用戶告訴系統(tǒng)某個(gè)標(biāo)簽是否合適蜀肘。
同樣這里基于圖的推薦算法也不介紹了绊汹。介紹下基于標(biāo)簽的推薦解釋,這是基于標(biāo)簽的推薦的一個(gè)好處扮宠。舉例豆瓣西乖,豆瓣有一個(gè)標(biāo)簽云,表示用戶的興趣分布坛增,標(biāo)簽的尺寸越大获雕,表示用戶對(duì)這個(gè)標(biāo)簽相關(guān)的圖書越感興趣。這樣組織頁(yè)面轿偎,首先提高了推薦結(jié)果的多樣性典鸡,讓用戶自己根據(jù)他今天的興趣選擇相關(guān)的標(biāo)簽被廓,從而得到推薦結(jié)果坏晦。同時(shí),標(biāo)簽云也提供了推薦解釋功能,其他的也不多做介紹昆婿,下圖為豆瓣的頁(yè)面:
PART 4 給用戶推薦標(biāo)簽
首先球碉,給用戶推薦標(biāo)簽有以下好處:
- 方便用戶輸入標(biāo)簽
- 提高標(biāo)簽質(zhì)量
如何給用戶推薦標(biāo)簽?zāi)兀?/p>
用戶u給物品i打標(biāo)簽時(shí),我們有很多方法可以給用戶推薦和物品i相關(guān)的標(biāo)簽仓蛆,比較簡(jiǎn)單的方法有 4 種:
- 給用戶u推薦整個(gè)系統(tǒng)最熱門的標(biāo)簽睁冬,稱為PopularTags;
- 給用戶u推薦物品i上最熱門的標(biāo)簽,稱為ItemPopularTags看疙;
- 給用戶u推薦他自己經(jīng)常使用的標(biāo)簽豆拨,稱為UserPopularTags;
- 前面兩種的融合,該方法通過(guò)一個(gè)系數(shù)將上面的推薦結(jié)果線性加權(quán)能庆,然后生成最終的推薦結(jié)果施禾,稱為HybirdPopularTags.
下圖列出了PopularTags、ItemPopularTags搁胆、UserPopularTags三種算法在N=10(N為推薦標(biāo)簽數(shù)量)的準(zhǔn)確率和召回率:
結(jié)果看出弥搞,ItemPopularTags具有最好的準(zhǔn)確率和召回率,這一點(diǎn)是直觀的渠旁,因?yàn)橛脩襞d趣廣泛攀例,基于物品的精度理應(yīng)是最高的。
再看下HybirdPopularTags算法顾腊,下圖給出了在不同顯性融合系數(shù)α下的準(zhǔn)確率和召回率:
其中α=0.8時(shí)(ItemPopularTags權(quán)重更大)粤铭,取得了最好的準(zhǔn)確度,并且超過(guò)了ItemPopularTags的精度杂靶。
不過(guò)有一個(gè)缺點(diǎn)承耿,就是對(duì)新用戶或者不熱門的物品很難有推薦結(jié)果,解決這個(gè)問(wèn)題有兩個(gè)思路:
- 從內(nèi)容數(shù)據(jù)中抽取關(guān)鍵詞作為標(biāo)簽伪煤;
- 針對(duì)有結(jié)果加袋,但結(jié)果不太多的情況,進(jìn)行標(biāo)簽擴(kuò)展抱既。