日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

浅谈推荐系统基础

發(fā)布時(shí)間:2024/1/17 windows 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈推荐系统基础 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這篇文章的技術(shù)難度會(huì)低一些,主要是對(duì)推薦系統(tǒng)所涉及到的各部分內(nèi)容進(jìn)行介紹,以及給出一些推薦系統(tǒng)的常用算法,比起技術(shù),產(chǎn)品色彩會(huì)強(qiáng)不少。參考了《長(zhǎng)尾理論》、《推薦系統(tǒng)實(shí)踐》以及大量相關(guān)博客內(nèi)容。

什么是推薦系統(tǒng)

我之前寫(xiě)過(guò)一篇《長(zhǎng)尾理論》精讀,里面有這樣的觀點(diǎn):

推動(dòng)市場(chǎng)由熱門(mén)經(jīng)濟(jì)學(xué)向長(zhǎng)尾經(jīng)濟(jì)學(xué)轉(zhuǎn)變有三種力量:第一種是生產(chǎn)普及的力量(生產(chǎn)者),第二種是傳播普及的力量(集合器),第三種是供需相連的力量(過(guò)濾器)。

生產(chǎn)普及的力量指,當(dāng)下大眾制作內(nèi)容(圖像、音視頻、文字等)的門(mén)檻大大降低,人們有能力制作并有意愿分享自己產(chǎn)生的內(nèi)容。使得可供展示的內(nèi)容量大大增加。

傳播普及的力量指,相當(dāng)一部分內(nèi)容由原子存在變?yōu)楸忍卮嬖?#xff0c;不再需要占據(jù)物理世界中的『貨架』,而是存儲(chǔ)在硬盤(pán)之中,存儲(chǔ)成本的降低使得大量非熱門(mén)的長(zhǎng)尾內(nèi)容可以被擺上虛擬世界中的『貨架』,真的有了對(duì)外展示的機(jī)會(huì)。

而供需相連的力量,就是指推薦系統(tǒng)。

既然存在大量的長(zhǎng)尾內(nèi)容,那如何供需相連?推薦系統(tǒng)要做的,就是聯(lián)系用戶(hù)和內(nèi)容,一方面幫助用戶(hù)發(fā)現(xiàn)對(duì)自己有價(jià)值的內(nèi)容;另一方面讓內(nèi)容能夠展現(xiàn)在對(duì)它感興趣的用戶(hù)面前,從而實(shí)現(xiàn)內(nèi)容消費(fèi)者和內(nèi)容生產(chǎn)者的雙贏。

為了聯(lián)系用戶(hù)和內(nèi)容,其實(shí)過(guò)去也有很優(yōu)秀的解決方案,有代表性的比如分類(lèi)目錄搜索引擎

隨著互聯(lián)網(wǎng)規(guī)模的不斷擴(kuò)大,分類(lèi)目錄網(wǎng)站也只能覆蓋少量的熱門(mén)網(wǎng)站,越來(lái)越不能滿(mǎn)足用戶(hù)的需求,因此搜索引擎誕生了。搜索引擎可以讓用戶(hù)搜索關(guān)鍵詞來(lái)找到自己所需要的信息,但是,搜索的前提就是用戶(hù)要主動(dòng)提供準(zhǔn)確的關(guān)鍵詞,但是如果用戶(hù)無(wú)法準(zhǔn)確的描述自己需求的關(guān)鍵詞時(shí),搜索引擎就無(wú)能為力了。

而推薦系統(tǒng)不同,它不需要用戶(hù)提供明確的需求,甚至連用戶(hù)主動(dòng)提出需求都不需要。推薦系統(tǒng)通過(guò)分析用戶(hù)的歷史行為給用戶(hù)的興趣建模,從而主動(dòng)給用戶(hù)推薦能夠滿(mǎn)足它們興趣和需求的內(nèi)容。

什么是好的推薦系統(tǒng)?

先總體來(lái)說(shuō),一個(gè)完整的推薦系統(tǒng)一般存在三個(gè)參與方:用戶(hù)內(nèi)容提供者提供推薦系統(tǒng)的網(wǎng)站

首先,推薦系統(tǒng)要滿(mǎn)足用戶(hù)的需求,給用戶(hù)推薦那些讓他們感興趣的內(nèi)容;其次,推薦系統(tǒng)要讓內(nèi)容提供者的內(nèi)容都能被推薦給對(duì)其感興趣的用戶(hù);最后,好的推薦系統(tǒng)設(shè)計(jì),能夠讓推薦系統(tǒng)本身收集到高質(zhì)量的用戶(hù)反饋,不斷提高推薦的質(zhì)量,提高推薦系統(tǒng)的效益。

推薦系統(tǒng)實(shí)驗(yàn)方法

評(píng)價(jià)推薦系統(tǒng)效果的實(shí)驗(yàn)方法主要有三種,分別是離線實(shí)驗(yàn)用戶(hù)調(diào)查在線實(shí)驗(yàn)

離線實(shí)驗(yàn)一般是:

  • 通過(guò)日志系統(tǒng)獲得用戶(hù)行為數(shù)據(jù),并按照一定格式生成一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)集
  • 將數(shù)據(jù)集按一定規(guī)則分成訓(xùn)練集和測(cè)試集
  • 在訓(xùn)練集上訓(xùn)練用戶(hù)興趣模型,在測(cè)試集上進(jìn)行預(yù)測(cè)
  • 通過(guò)事先定義的離線指標(biāo)評(píng)測(cè)算法在測(cè)試集上的預(yù)測(cè)結(jié)果

離線實(shí)驗(yàn)在數(shù)據(jù)集上完成,不需要真實(shí)用戶(hù)參與,可以快速的計(jì)算出來(lái)。主要缺點(diǎn)是離線指標(biāo)往往不包含很多商業(yè)上關(guān)注的指標(biāo),比如點(diǎn)擊率、轉(zhuǎn)化率。

用戶(hù)調(diào)查是理論上最有效的方法,因?yàn)楦哳A(yù)測(cè)準(zhǔn)確率不等于高用戶(hù)滿(mǎn)意度,還是要從用戶(hù)中來(lái),到用戶(hù)中去。

用戶(hù)調(diào)查需要有一些真實(shí)的用戶(hù),讓他們?cè)谛枰獪y(cè)試的推薦系統(tǒng)上完成一些任務(wù),同時(shí)我們觀察和記錄他們的行為,并讓他們回答一些問(wèn)題,最后通過(guò)分析他們的行為和答案了解測(cè)試系統(tǒng)的性能。

但是用戶(hù)調(diào)查成本很高,而且測(cè)試用戶(hù)也需要精心挑選,太麻煩了。

在線實(shí)驗(yàn)一般在離線實(shí)驗(yàn)和必要的用戶(hù)調(diào)查之后,一般是將推薦系統(tǒng)上線做AB測(cè)試,將它和舊的算法進(jìn)行比較。

AB測(cè)試是一種很常用的在線評(píng)測(cè)算法的實(shí)驗(yàn)方法,不僅是算法,對(duì)產(chǎn)品設(shè)計(jì)的改動(dòng)也可以采用這種方法。它通過(guò)一定的規(guī)則將用戶(hù)隨機(jī)分成幾組,并對(duì)不同組的用戶(hù)采用不同的算法,然后通過(guò)統(tǒng)計(jì)不同組的各種不同的評(píng)測(cè)指標(biāo)比較不同的算法性能,比如點(diǎn)擊率。

AB測(cè)試的缺點(diǎn)是周期較長(zhǎng),影響較大,我們通常只用它測(cè)試那些在離線實(shí)驗(yàn)和用戶(hù)調(diào)查中表現(xiàn)很好的算法。

一般而言,我們需要證明新的推薦算法在很多離線指標(biāo)上優(yōu)于現(xiàn)有算法,而且用戶(hù)滿(mǎn)意度不低于現(xiàn)有的算法,最后在線上AB測(cè)試后,發(fā)現(xiàn)在我們關(guān)心的指標(biāo)上也優(yōu)于現(xiàn)有的算法。這樣新的推薦系統(tǒng)才能最終上線發(fā)布。

推薦系統(tǒng)評(píng)測(cè)指標(biāo)

用戶(hù)滿(mǎn)意度

用戶(hù)滿(mǎn)意度是推薦系統(tǒng)最重要的指標(biāo),但是用戶(hù)滿(mǎn)意度沒(méi)法離線計(jì)算,只能通過(guò)用戶(hù)調(diào)查和在線實(shí)驗(yàn)獲得。

用戶(hù)調(diào)查前面講了,是找一些真實(shí)的用戶(hù)去試用,然后統(tǒng)計(jì)行為以及詢(xún)問(wèn)一些問(wèn)題。

在線實(shí)驗(yàn)一般是對(duì)一些線上用戶(hù)的行為進(jìn)行統(tǒng)計(jì)來(lái)得到用戶(hù)滿(mǎn)意度,比如在電子商務(wù)網(wǎng)站中,用戶(hù)如果購(gòu)買(mǎi)了推薦的商品,就表示他們?cè)谝欢ǔ潭壬蠞M(mǎn)意;或者也可以設(shè)計(jì)一些用戶(hù)反饋?lái)?yè)面收集用戶(hù)滿(mǎn)意度。更一般的,我們可以統(tǒng)計(jì)點(diǎn)擊率、用戶(hù)停留時(shí)間和轉(zhuǎn)化率等指標(biāo)。

預(yù)測(cè)準(zhǔn)確度

在過(guò)去,很多人將推薦準(zhǔn)確度作為推薦系統(tǒng)唯一追求的指標(biāo),比如一個(gè)推薦系統(tǒng)預(yù)測(cè)一個(gè)用戶(hù)將來(lái)會(huì)購(gòu)買(mǎi)一本書(shū),而最后用戶(hù)買(mǎi)了,這樣推薦的準(zhǔn)確度很高。

但是,如果用戶(hù)本來(lái)就準(zhǔn)備買(mǎi)這本書(shū),無(wú)論推薦與否,都會(huì)購(gòu)買(mǎi),那這個(gè)推薦系統(tǒng),實(shí)際上并沒(méi)有讓用戶(hù)購(gòu)買(mǎi)更多的書(shū)。

沒(méi)有幫助用戶(hù)找到新的感興趣的內(nèi)容,沒(méi)有幫內(nèi)容生產(chǎn)者找到新用戶(hù),也沒(méi)增加推薦系統(tǒng)的總成交量(姑且叫成交量)。

所以,預(yù)測(cè)準(zhǔn)確度當(dāng)然很重要,但推薦系統(tǒng)也要能擴(kuò)展用戶(hù)的視野,幫助他們發(fā)現(xiàn)那些他們可能會(huì)感興趣,但卻不那么容易發(fā)現(xiàn)的東西。同時(shí),推薦系統(tǒng)還要能夠把那些埋沒(méi)在長(zhǎng)尾中的內(nèi)容推薦給可能會(huì)對(duì)它們感興趣的用戶(hù)。

預(yù)測(cè)準(zhǔn)確度在不同研究方向中表現(xiàn)形式也不同,比如評(píng)分預(yù)測(cè)中,就是需要預(yù)測(cè),該用戶(hù)在將來(lái)看到一個(gè)他沒(méi)有評(píng)過(guò)分的物品時(shí),會(huì)給這個(gè)物品評(píng)多少分。

在評(píng)分預(yù)測(cè)中,預(yù)測(cè)準(zhǔn)確度一般通過(guò)均方根誤差(RMSE)和平均絕對(duì)誤差(MAE)計(jì)算,如下式:

?

均方根誤差

平均絕對(duì)誤差

式子都很好理解,主要思想就是誤差累加,RMSE因?yàn)槭褂昧似椒巾?xiàng)的懲罰,對(duì)系統(tǒng)的評(píng)測(cè)更加苛刻。

除了評(píng)分預(yù)測(cè),還有TopN推薦,TopN推薦就是給用戶(hù)一個(gè)個(gè)性化的推薦列表。而TopN推薦的預(yù)測(cè)準(zhǔn)確度一般通過(guò)準(zhǔn)確率和召回率度量,如下式:

召回率

?

準(zhǔn)確率

至于準(zhǔn)確率和召回率,我在《淺談機(jī)器學(xué)習(xí)基礎(chǔ)》中有特別詳細(xì)的講解,還專(zhuān)門(mén)畫(huà)了個(gè)圖。而且在《淺談自然語(yǔ)言處理基礎(chǔ)》中,我還講了F1測(cè)度,F1測(cè)度等于(2*準(zhǔn)確率*召回率)/(準(zhǔn)確率+召回率),F1測(cè)度越高越好,這樣就給出了判定兩個(gè)在準(zhǔn)確度和召回率各有優(yōu)勢(shì)算法優(yōu)劣的簡(jiǎn)單方法。除了F1測(cè)度,《淺談機(jī)器學(xué)習(xí)基礎(chǔ)》還提到了ROC曲線,用于協(xié)助決策。

其實(shí)TopN推薦要比評(píng)分預(yù)測(cè)更有價(jià)值,因?yàn)榕袛嘤脩?hù)對(duì)內(nèi)容是否感興趣要比預(yù)測(cè)用戶(hù)對(duì)內(nèi)容的評(píng)價(jià)更有意義,而且現(xiàn)在新的產(chǎn)品,也已經(jīng)很少用評(píng)分來(lái)收集用戶(hù)反饋了。TopN更直接也更有效。

覆蓋率

覆蓋率描述一個(gè)推薦系統(tǒng)對(duì)長(zhǎng)尾內(nèi)容的發(fā)掘能力,也就是著力于達(dá)成前面的『推薦系統(tǒng)要讓內(nèi)容提供者的內(nèi)容都能被推薦給對(duì)其感興趣的用戶(hù)』

先給一個(gè)最簡(jiǎn)單的覆蓋率定義,就是對(duì)所有用戶(hù)的推薦列表取并集,看看其是否覆蓋率所有的內(nèi)容,覆蓋比例是多少。

但是上面的定義過(guò)于粗糙,為了更細(xì)致的描述推薦系統(tǒng)對(duì)長(zhǎng)尾內(nèi)容的發(fā)掘能力,我們選擇統(tǒng)計(jì)所有用戶(hù)的推薦列表中,不同物品出現(xiàn)次數(shù)的分布。

如果所有的物品都出現(xiàn)在推薦列表中,并且出現(xiàn)的次數(shù)差不多,那么推薦系統(tǒng)發(fā)掘長(zhǎng)尾的能力就很好,那么如何度量這種定義下的覆蓋率呢?

前面的文章不止一次的講過(guò)熵,熵指混亂程度,熵最大的分布,就是各種物品出現(xiàn)的概率均勻,熵越小,就代表分布越集中,混亂程度越小。所以我們可以計(jì)算物品分布的熵值,并希望熵越大越好,熵越大指分布越平均,推薦系統(tǒng)也就更接近全覆蓋,而不是只集中在少數(shù)熱門(mén)的物品。熵的計(jì)算公式這里不給了,到處都是。

第二個(gè)指標(biāo)是基尼系數(shù),先給出計(jì)算公式:

?

p函數(shù)是流行度從小到大的排序,ij是按照流行度從大到小排序物品列表中的第j個(gè)物品。

公式不好理解,這里給張圖:

?

這張圖怎么解釋呢,黑色曲線表示最不熱門(mén)的x%物品的總流行度的流行度占系統(tǒng)的比例y%,為什么相交在(0, 0)和(1, 1)呢,(0, 0)是說(shuō),空物品的流行度之和占總物品流行度之和的0%,(1, 1)是說(shuō),所有物品的流行度之和占總物品流行度之和的100%,這個(gè)很好理解。

然后為什么肯定在y=x之下,考慮這樣一個(gè)情況,最均勻的情況,所有物品的流行度都相同,那么每增加固定百分比的物品,那增加的流行度在總流行度中占的比例也是固定的,而且也是相同的。看起來(lái)很繞,實(shí)際上很容易直觀的感覺(jué)出來(lái)。

實(shí)際上,所有物品的流行度不會(huì)是相同的,有熱門(mén)物品也有冷門(mén)物品,因?yàn)槭菑淖畈粺衢T(mén)的物品開(kāi)始計(jì)算的,所以剛開(kāi)始可能很高百分比的冷門(mén)物品的流行度也不多,所以這條線就會(huì)在y=x下面,增加的非常緩慢;后面到了熱門(mén)物品,很少的熱門(mén)物品就能增加很多的流行度,所以這條曲線增加的速度開(kāi)始越來(lái)越快,最后到達(dá)(1, 1)。

然后基尼系數(shù)就是SA/(SA+SB)了,基尼系數(shù)越小,就越接近y=x,最理想情況下,基尼系數(shù)為0,流行度完全均勻分布。

社會(huì)學(xué)中有種現(xiàn)象叫做馬太效應(yīng),強(qiáng)者愈強(qiáng),弱者愈弱。這樣,越熱門(mén)的物品會(huì)越熱門(mén),越冷門(mén)的物品越會(huì)無(wú)人問(wèn)津,推薦系統(tǒng)就希望盡量消除這種馬太效應(yīng),讓冷門(mén)物品也能找到對(duì)自己感興趣的用戶(hù),讓用戶(hù)也不必只看排行榜,自己的興趣和需求也能得到更好的滿(mǎn)足。所以我們先根據(jù)初始用戶(hù)行為(根據(jù)用戶(hù)行為定義的熱門(mén)/冷門(mén))計(jì)算物品的基尼系數(shù),然后再根據(jù)推薦系統(tǒng)行為(根據(jù)推薦系統(tǒng)的推薦次數(shù)定義的熱門(mén)/冷門(mén))計(jì)算物品的基尼系數(shù),如果后者的基尼系數(shù)反而大了,那說(shuō)明推薦算法加劇了馬太效應(yīng)。

稍微解釋一下,如果推薦系統(tǒng)只瘋狂推薦某一種物品,其他物品都不推薦,這樣的馬太效應(yīng)就反而更甚于初始的情況了,又會(huì)進(jìn)一步加劇整個(gè)生態(tài)的馬太效應(yīng)。只有推薦系統(tǒng)對(duì)物品均勻的推薦,初始的熱門(mén)/冷門(mén)物品的推薦次數(shù)都差不多,才能讓初始的冷門(mén)產(chǎn)品熱起來(lái)。

多樣性

多樣性描述了推薦列表中物品兩兩之間的不相似性,推薦系統(tǒng)的整體多樣性可以定義為所有用戶(hù)推薦列表多樣性的平均值。

相似性或者不相似性的度量方式有多種,比如用物品的內(nèi)容相似度,我們就可以得到內(nèi)容多樣性函數(shù);如果用協(xié)同過(guò)濾的相似度函數(shù)描述物品之間的相似度,就可以得到協(xié)同過(guò)濾的多樣性函數(shù)。

其實(shí)提高覆蓋率也能在側(cè)面對(duì)提高多樣性起到積極作用。

新穎性

新穎的推薦是指給用戶(hù)推薦那些他們之前沒(méi)聽(tīng)說(shuō)過(guò)的物品,最簡(jiǎn)單的方式當(dāng)然是,把那些用戶(hù)之前在系統(tǒng)中有過(guò)行為的物品從推薦列表中過(guò)濾掉。

還有種方式是讓推薦結(jié)果中物品的平均熱門(mén)程度較低,這樣就更可能有較高的新穎性。犧牲精度提高新穎性是很容易的,困難的是不犧牲精度,同時(shí)提高新穎性。

驚喜度

驚喜度是,如果推薦結(jié)果和用戶(hù)的歷史興趣不相似,但卻讓用戶(hù)覺(jué)得滿(mǎn)意。提高推薦驚喜度需要提高用戶(hù)滿(mǎn)意度,同時(shí)降低推薦結(jié)果和用戶(hù)歷史興趣的相似度。

新穎度和驚喜度的區(qū)別在,新穎度說(shuō)的是沒(méi)聽(tīng)過(guò)的物品,沒(méi)聽(tīng)過(guò)的物品是有可能與用戶(hù)的歷史興趣相似的,就沒(méi)有了驚喜度。驚喜度可以說(shuō)是新穎度的升級(jí),因?yàn)闆](méi)聽(tīng)過(guò)的物品中包含與歷史興趣相似的和不相似的物品。也許驚喜度的核心在于讓用戶(hù)無(wú)法理解推薦原因。

信任度

信任度是指用戶(hù)對(duì)于推薦系統(tǒng)的信任程度。我們可以通過(guò)提供給用戶(hù)推薦理由以及利用用戶(hù)的好友/信任的人的信息給用戶(hù)做推薦來(lái)提高信任度。

但是其實(shí)很多情況下,對(duì)于一些很容易直觀感受到推薦結(jié)果好壞的物品,比如音樂(lè),信任度就不那么重要了。

實(shí)時(shí)性

在很多網(wǎng)站中,因?yàn)槲锲肪哂泻軓?qiáng)的實(shí)時(shí)性,比如新聞、微博等,所以推薦系統(tǒng)的實(shí)時(shí)性就顯得至關(guān)重要。

推薦系統(tǒng)的實(shí)時(shí)性包含兩部分,一部分是推薦系統(tǒng)需要實(shí)時(shí)地更新推薦列表來(lái)滿(mǎn)足用戶(hù)新的需求;另一部分是推薦系統(tǒng)需要能夠?qū)⑿录尤胂到y(tǒng)的物品推薦給用戶(hù)。

實(shí)時(shí)性對(duì)完成推薦系統(tǒng)的冷啟動(dòng)也有著重要作用。

健壯性

健壯性指一個(gè)推薦系統(tǒng)防止作弊的能力。

設(shè)計(jì)推薦系統(tǒng)時(shí),應(yīng)盡量使用代價(jià)比較高的用戶(hù)行為。在使用數(shù)據(jù)前,可以進(jìn)行攻擊檢測(cè),從而對(duì)數(shù)據(jù)進(jìn)行清理。

商業(yè)目標(biāo)

推薦系統(tǒng)也需要滿(mǎn)足自身商業(yè)目標(biāo)的需求。

總結(jié)

在上面提到的指標(biāo)里,預(yù)測(cè)準(zhǔn)確度、覆蓋率、多樣性、新穎性是可以離線計(jì)算的。實(shí)際評(píng)測(cè)算法時(shí),我們一般采用預(yù)測(cè)準(zhǔn)確度的正確率和召回率,覆蓋率,還有推薦商品的平均流行度。

綜合一下上面的指標(biāo),我們前面說(shuō)了三個(gè)目標(biāo),分別是讓用戶(hù)滿(mǎn)意、讓物品提供者滿(mǎn)意、讓推薦系統(tǒng)滿(mǎn)意。用戶(hù)滿(mǎn)意度對(duì)應(yīng)第一個(gè)目標(biāo),覆蓋率對(duì)應(yīng)第二個(gè)目標(biāo),商業(yè)目標(biāo)對(duì)應(yīng)第三個(gè)目標(biāo)。因?yàn)橛脩?hù)滿(mǎn)意度不容易獲得,所以實(shí)際上預(yù)測(cè)準(zhǔn)確度替代用戶(hù)滿(mǎn)意度成為了最重要的指標(biāo)。然后我們回到推薦列表上,將其與物品類(lèi)型結(jié)合,物品種類(lèi)多就是多樣性;將其與用戶(hù)認(rèn)知結(jié)合,用戶(hù)沒(méi)聽(tīng)過(guò)就是新穎性驚喜度是新穎性的升級(jí)。然后是整個(gè)推薦系統(tǒng),推薦系統(tǒng)需要實(shí)時(shí)性健壯性,來(lái)穩(wěn)定保證好的推薦結(jié)果。而且有的場(chǎng)景的推薦系統(tǒng)還要考慮到用戶(hù)對(duì)推薦系統(tǒng)的信任度的問(wèn)題。

這樣就把這十個(gè)指標(biāo)串起來(lái)了,也更方便記憶。

當(dāng)然我們?cè)诓捎靡陨现笜?biāo)進(jìn)行評(píng)測(cè)時(shí),也要考慮到評(píng)測(cè)的用戶(hù)維度、物品維度、時(shí)間維度,也就是涉及評(píng)測(cè)的用戶(hù)群,物品的種類(lèi)屬性和評(píng)測(cè)的季節(jié)、時(shí)間等。這可以讓我們發(fā)現(xiàn)不同算法在不同場(chǎng)景下的優(yōu)缺點(diǎn)。

利用用戶(hù)行為數(shù)據(jù)

實(shí)現(xiàn)個(gè)性化推薦最理想的情況,是用戶(hù)告訴我們他喜歡什么,但這種方法有三個(gè)缺點(diǎn):

  • 第一個(gè)是,現(xiàn)在的自然語(yǔ)言處理技術(shù)還很難理解用戶(hù)用來(lái)描述興趣的自然語(yǔ)言;
  • 第二個(gè)是,用戶(hù)的興趣是不斷變化的;
  • 第三個(gè)是,用戶(hù)也不知道自己喜歡什么,或者說(shuō),用戶(hù)也很難用語(yǔ)言描述自己喜歡什么。

這里考慮代入HMM的思想,用戶(hù)的需求會(huì)不斷變化,就是狀態(tài)序列。而且這個(gè)狀態(tài)序列是隱藏的,也就是我們無(wú)法直接獲知用戶(hù)的興趣,不管是因?yàn)橛脩?hù)自己沒(méi)意識(shí)到還是無(wú)法表達(dá)。我們需要通過(guò)觀察序列,也就是用戶(hù)的行為數(shù)據(jù)去做推測(cè),去根據(jù)EM算法估計(jì)這個(gè)HMM的參數(shù),然后再用其來(lái)得到用戶(hù)的需求序列,也就是隱狀態(tài)序列。

基于用戶(hù)行為分析的算法是個(gè)性化推薦系統(tǒng)的重要算法,學(xué)術(shù)界一般將這種算法稱(chēng)為協(xié)同過(guò)濾算法

我們能拿到的用戶(hù)行為一般分為兩種,顯性反饋行為隱性反饋行為,顯性反饋行為就是點(diǎn)擊喜歡不喜歡,或者評(píng)5分1分。隱性反饋行為指的是那些不能明確反應(yīng)用戶(hù)喜好的行為。最具代表性的隱性反饋行為就是頁(yè)面瀏覽行為,雖然不明確,但數(shù)據(jù)量更大。而且隱性反饋只有正反饋,沒(méi)有負(fù)反饋。

即便是反饋也分為有無(wú)上下文,實(shí)際上就是是否記錄了用戶(hù)反饋行為的時(shí)間以及前后行為,這里先只考慮無(wú)上下文的隱性反饋數(shù)據(jù)集。

用戶(hù)行為分析

用戶(hù)活躍度和物品流行度的分布

互聯(lián)網(wǎng)上的很多數(shù)據(jù)其實(shí)都滿(mǎn)足長(zhǎng)尾分布,也叫PowerLaw分布,我在《淺談自然語(yǔ)言處理基礎(chǔ)》中還提到過(guò),就是講平滑方法,古德圖靈估計(jì)法那里。里面提到了Zipf定律,也即,如果將英文單詞出現(xiàn)的頻率按照由高到低排列,則每個(gè)單詞出現(xiàn)的頻率和它在熱門(mén)排行榜中排名的常數(shù)次冪成反比。也可以這么說(shuō),如果x1,x2,x3是三個(gè)熱門(mén)排名相鄰的三類(lèi)單詞,x1最靠前,那么出現(xiàn)的頻率x2/x1 < x2/x3,也就是最開(kāi)始下降的最快,然后下降速度越來(lái)越慢。

我們發(fā)現(xiàn),用戶(hù)活躍度和物品流行度都滿(mǎn)足長(zhǎng)尾分布。

用戶(hù)活躍度和物品流行度的關(guān)系

我們認(rèn)為,新用戶(hù)傾向于瀏覽熱門(mén)的物品,老用戶(hù)會(huì)逐漸開(kāi)始瀏覽冷門(mén)的物品。用戶(hù)越活躍,越傾向于瀏覽冷門(mén)的物品。

僅僅基于用戶(hù)數(shù)據(jù)設(shè)計(jì)的推薦算法一般稱(chēng)為協(xié)同過(guò)濾算法,協(xié)同過(guò)濾算法也分為不同種類(lèi),比如基于鄰域的方法隱語(yǔ)義模型基于圖的隨機(jī)游走算法等。其中應(yīng)用的最廣的是基于鄰域的方法,而基于鄰域的方法主要包括以下兩種:

  • 基于用戶(hù)的協(xié)同過(guò)濾算法:給用戶(hù)推薦和他興趣相似的用戶(hù)喜歡的物品
  • 基于物品的協(xié)同過(guò)濾算法:給用戶(hù)推薦和他之前喜歡的物品相似的物品

簡(jiǎn)便起見(jiàn),我們通常使用準(zhǔn)確率、召回率、覆蓋率和新穎度來(lái)對(duì)算法進(jìn)行離線實(shí)驗(yàn),覆蓋率就用最簡(jiǎn)單的覆蓋率定義,新穎度用推薦物品的平均流行度代替。

基于鄰域的算法

基于用戶(hù)的協(xié)同過(guò)濾算法

基于用戶(hù)的協(xié)同過(guò)濾算法主要包括兩個(gè)步驟:

  • 找到和目標(biāo)用戶(hù)興趣相似的用戶(hù)集合
  • 找到這個(gè)集合中的用戶(hù)喜歡的,且目標(biāo)用戶(hù)沒(méi)有聽(tīng)說(shuō)過(guò)的物品推薦給目標(biāo)用戶(hù)

第一步的關(guān)鍵就是找到和目標(biāo)用戶(hù)興趣相似的用戶(hù),我們可以用兩個(gè)用戶(hù)興趣的交集比上興趣的并集來(lái)求得相似度(Jaccard相似度),或者利用余弦相似度計(jì)算。

如果用余弦相似度:

?

分子是兩個(gè)用戶(hù)興趣交集的模,分母是兩個(gè)用戶(hù)興趣的模的乘積的平方根。

要注意的是,有很多用戶(hù)之間根本就沒(méi)有興趣的交集,所以就不需要浪費(fèi)時(shí)間在這種情況的計(jì)算上。

得到用戶(hù)之間的興趣相似度之后,UserCF算法會(huì)推薦給用戶(hù)和他興趣最相似的K個(gè)用戶(hù)最喜歡的若干個(gè)物品

判斷該用戶(hù)u對(duì)某一件物品i的感興趣程度時(shí)的公式如下:

?

也即用K個(gè)和他興趣最相似用戶(hù)的平均興趣代表這個(gè)用戶(hù)的興趣。w代表兩個(gè)用戶(hù)興趣之間的相似程度,r指感興趣程度的大小,這里統(tǒng)一為1。Σ下面的意思是,K個(gè)和u興趣最相似的用戶(hù),而且同時(shí)要對(duì)物品i有過(guò)行為。可以這么理解,如果這K個(gè)用戶(hù)都沒(méi)有對(duì)某個(gè)物品有過(guò)行為,那基本就可以認(rèn)為他們對(duì)該物品都不感興趣,就不應(yīng)該加到式子中。

換句話(huà)說(shuō),這K個(gè)用戶(hù),與用戶(hù)u的相似度決定了他們的話(huà)語(yǔ)權(quán),他們表決的方式就是自己是否對(duì)該物品有過(guò)正面行為。

最后我們只需要取感興趣程度TopN的物品出來(lái)推薦給用戶(hù)就好了,當(dāng)然還要去掉該用戶(hù)已經(jīng)有過(guò)行為的物品。

K是UserCF算法的一個(gè)重要參數(shù)。K的選取會(huì)影響UserCF算法的結(jié)果。

一般進(jìn)行算法評(píng)測(cè)時(shí),我們會(huì)有兩個(gè)標(biāo)準(zhǔn)算法,分別是MostPopular和Random算法,一個(gè)是按最高流行度來(lái),一個(gè)是完全隨機(jī),都只是簡(jiǎn)單的去掉用戶(hù)有過(guò)行為的物品。

UserCF算法的平均性能要遠(yuǎn)好于以上兩個(gè)算法。

當(dāng)然UserCF算法也有改進(jìn)的空間,比如在計(jì)算用戶(hù)相似度的時(shí)候,大家同樣購(gòu)買(mǎi)了熱門(mén)物品其實(shí)沒(méi)有什么說(shuō)服力,并不能以此說(shuō)明兩個(gè)用戶(hù)就相似了,所以我們需要對(duì)熱門(mén)物品進(jìn)行降權(quán),如下式:

?

該公式與原公式相比,懲罰了用戶(hù)u和用戶(hù)v共同興趣列表中熱門(mén)物品對(duì)他們相似度的影響。這里先提一下TF-IDF,后面還要提,《淺談機(jī)器學(xué)習(xí)基礎(chǔ)》中講K-means的時(shí)候就講過(guò)TF-IDF,TF-IDF里的這個(gè)IDF,就是對(duì)出現(xiàn)在幾乎所有文檔中的熱門(mén)詞進(jìn)行降權(quán)懲罰。

基于物品的協(xié)同過(guò)濾算法

基于物品的協(xié)同過(guò)濾算法是目前業(yè)界應(yīng)用最多的算法。

如果網(wǎng)站的用戶(hù)數(shù)目增加較快,計(jì)算用戶(hù)興趣的相似度矩陣就越來(lái)越難。而ItemCF算法不計(jì)算用戶(hù)興趣的相似度矩陣,而是計(jì)算物品之間的相似度。還有,我們前面說(shuō)過(guò)基于鄰域的這兩個(gè)算法都是協(xié)同過(guò)濾算法,協(xié)同過(guò)濾算法的定義就是只使用用戶(hù)行為數(shù)據(jù),所以這里所定義的物品的相似度,不利用物品本身的內(nèi)容信息去計(jì)算,而是主要通過(guò)分析用戶(hù)的行為記錄計(jì)算物品之間的相似度。

如果喜歡A的用戶(hù)大多都喜歡B,那么A和B可以講擁有一定的相似性。或者說(shuō),就算不相似,那我們把B推薦給喜歡A的用戶(hù)也是沒(méi)錯(cuò)的。

基于物品的協(xié)同過(guò)濾算法主要分為兩步:

  • 計(jì)算物品之間的相似度
  • 根據(jù)物品的相似度和用戶(hù)的歷史行為給用戶(hù)生成推薦列表

我們可以用下面的公式定義物品之間的相似度:

?

意思就是,買(mǎi)了i的用戶(hù)有多少也買(mǎi)了j。如果兩者的用戶(hù)群重合比例越大,那么認(rèn)為i和j就更相似。

但是還有個(gè)問(wèn)題,就是如果按照上面的公式算,所有的物品都和熱門(mén)商品相似,如果j是大熱門(mén)商品的話(huà),基本上喜歡i的全都喜歡j,這樣就有問(wèn)題,為了提高覆蓋率,我們要對(duì)熱門(mén)物品進(jìn)行懲罰:

?

上面的式子就對(duì)熱門(mén)物品的權(quán)重進(jìn)行了懲罰。

得到物品的相似度之后,ItemCF通過(guò)如下公式計(jì)算用戶(hù)u對(duì)物品i的興趣:

?

與UserCF對(duì)比著來(lái)說(shuō),UserCF是用K個(gè)和用戶(hù)u興趣最相似用戶(hù)的平均興趣代表這個(gè)用戶(hù)u的興趣;ItemCF就是用K個(gè)和物品j最相似的物品來(lái)代表這個(gè)物品j。UserCF是,這K個(gè)用戶(hù),與用戶(hù)u的相似度決定了他們的話(huà)語(yǔ)權(quán),他們表決的方式就是自己是否對(duì)該物品有過(guò)正面行為;ItemCF是,這K個(gè)物品,與物品j的相似度決定了他們的話(huà)語(yǔ)權(quán),他們表決的方式就是自己是否被該用戶(hù)有過(guò)正面行為。

然后我們?cè)倩氐轿锲废嗨贫?#xff0c;雖然上面已經(jīng)給熱門(mén)物品降了權(quán),但是我們還要考慮到熱門(mén)用戶(hù)的問(wèn)題。我們認(rèn)為,一個(gè)活躍用戶(hù)可能會(huì)喜歡很多種類(lèi)的物品,他對(duì)物品相似度的貢獻(xiàn)應(yīng)該小于不活躍的用戶(hù),因?yàn)椴换钴S的用戶(hù)往往喜歡比較專(zhuān)一,在衡量物品相似度上更有價(jià)值,這叫IUF(Inverse User Frequence)。如下式:

?

又進(jìn)一步對(duì)活躍用戶(hù)進(jìn)行了降權(quán)

另外,在有物品分類(lèi)的情況下,我們需要對(duì)類(lèi)內(nèi)物品相似度進(jìn)行歸一化,因?yàn)橥ǔ衢T(mén)類(lèi)別類(lèi)內(nèi)相似度也較高。如果一個(gè)用戶(hù)同時(shí)喜歡了熱門(mén)類(lèi)別和非熱門(mén)類(lèi)別的物品,如果純按照相似度推薦,那就會(huì)都推薦給用戶(hù)熱門(mén)類(lèi)別中的物品,會(huì)降低覆蓋度、多樣性。所以我們利用類(lèi)內(nèi)最大的相似度,對(duì)類(lèi)內(nèi)所有的相似度進(jìn)行歸一化。

UserCF和ItemCF的綜合比較

主要從兩個(gè)方面來(lái)講,第一個(gè),UserCF的推薦結(jié)果著重于反應(yīng)和用戶(hù)興趣相似的小群體的熱點(diǎn),著重于維系用戶(hù)的歷史興趣,因?yàn)榫褪歉鶕?jù)歷史興趣計(jì)算出來(lái)的相似用戶(hù),進(jìn)而計(jì)算出來(lái)的推薦商品。而ItemCF的推薦更加個(gè)性化,反映用戶(hù)自己的興趣傳承,因?yàn)橐坏┯脩?hù)的興趣有了更新,喜歡了新物品,那么與該物品相關(guān)的物品在參與ItemCF進(jìn)行計(jì)算時(shí),就會(huì)馬上有權(quán)重提高,被推薦出來(lái)。

這么說(shuō),UserCF幫你找了一些用戶(hù)來(lái)代表你,他們的興趣是不可能統(tǒng)一的發(fā)生大幅改變的,所以你得到的推薦結(jié)果都是這一類(lèi)的東西;而ItemCF,一旦你興趣列表變了,那接著就認(rèn)為你興趣變了,喜歡你這個(gè)新興趣的人喜歡的物品就會(huì)被推薦給你。

UserCF認(rèn)為喜歡同樣物品的人相似,ItemCF認(rèn)為被同樣人喜歡的物品相似。UserCF對(duì)用戶(hù)聚類(lèi),整體對(duì)待他們的喜好,ItemCF對(duì)物品聚類(lèi),喜歡一個(gè)就是喜歡一堆。

對(duì)于UserCF和ItemCF,再舉一下典型的例子,首先是新聞網(wǎng)站,新聞網(wǎng)站必然要用UserCF,相似用戶(hù)的興趣基本相同,沒(méi)問(wèn)題;如果用了ItemCF,難道要推薦和這篇新聞相似的舊新聞?當(dāng)然這兩種方法也不是一定要絕對(duì)分開(kāi)。

比如音樂(lè)網(wǎng)站,網(wǎng)易云音樂(lè)的推薦算法,就更接近ItemCF,你喜歡了一種新風(fēng)格,這一風(fēng)格的歌就會(huì)被推薦給你,而不是認(rèn)為你一輩子只喜歡聽(tīng)一種類(lèi)型的音樂(lè),把你和與過(guò)去的你相似的人綁在一起。

第二個(gè)是從技術(shù)角度想,物品和用戶(hù)表,哪個(gè)穩(wěn)定就用哪個(gè)建模。物品迅速增加那就建立用戶(hù)相似度表,用戶(hù)迅速增加就建立物品相似度表。

隱語(yǔ)義模型

隱語(yǔ)義模型(latent factor model,LFM)是最近幾年推薦系統(tǒng)最為熱門(mén)的研究話(huà)題,它的核心思想是通過(guò)隱含特征聯(lián)系用戶(hù)興趣和物品。

前面已經(jīng)詳細(xì)的介紹了UserCF和ItemCF,這里說(shuō)一下LFM的主要思想,首先回憶一下SVD,SVD將矩陣拆解為三部分的乘積。《淺談機(jī)器學(xué)習(xí)基礎(chǔ)》中這樣講過(guò):

SVD的第二個(gè)用途是在自然語(yǔ)言處理中,我在《數(shù)學(xué)之美》這本書(shū)上讀到。我們用A矩陣來(lái)描述成千上萬(wàn)篇文章和幾十上百萬(wàn)個(gè)詞的關(guān)聯(lián)性,A里面每一列是一篇文章,每一行代表一個(gè)詞,對(duì)應(yīng)位置上是這個(gè)詞的加權(quán)詞頻(比如TF-IDF值),然后我們對(duì)A進(jìn)行奇異值分解,分成這樣:A=XBY,這里和前面的:A=XY的關(guān)聯(lián)性在于,兩式的X相同,第二式的Y等于第一式中的BY,X是M*K,B是K*K,Y是K*N。

第一個(gè)矩陣X是對(duì)詞分類(lèi)的結(jié)果,它的每一行表示一個(gè)詞,每一列表示一個(gè)同義詞類(lèi),對(duì)應(yīng)位置的值表示該詞和該同義詞類(lèi)的相關(guān)性大小。

第三個(gè)矩陣Y是對(duì)文章分類(lèi)的結(jié)果,它的每一列對(duì)應(yīng)一篇文章,每一行表示一個(gè)主題,對(duì)應(yīng)位置的值表示該文章和該主題的相關(guān)性大小。

第二個(gè)矩陣則展示了不同同義詞類(lèi)和不同文章主題的相關(guān)性大小。

推薦系統(tǒng)這里也是同理,如果將原數(shù)據(jù)按照SVD分解成三個(gè)矩陣的話(huà),所得到的就是對(duì)用戶(hù)興趣的分類(lèi)、對(duì)物品的分類(lèi)以及用戶(hù)興趣類(lèi)別與物品類(lèi)別之間的關(guān)系。當(dāng)然我們也知道SVD不僅能分解成三個(gè)矩陣的形式,也能分解為兩矩陣的形式,意義是用戶(hù)興趣與某隱類(lèi)的關(guān)系和該隱類(lèi)與物品的關(guān)系。SVD的詳細(xì)講解可以參考前面的《淺談機(jī)器學(xué)習(xí)基礎(chǔ)》,其實(shí)下面要講的LFM方法,也就是《淺談機(jī)器學(xué)習(xí)基礎(chǔ)》所講的,SVD在推薦系統(tǒng)中的應(yīng)用。

當(dāng)然對(duì)用戶(hù)興趣和物品進(jìn)行分類(lèi)這件事情人工也是可以做的,但成本較大,而且效果也并不太好,所以這里就不詳細(xì)說(shuō)了。

隱含語(yǔ)義分析技術(shù)其實(shí)有很多著名的模型和方法,其中和該技術(shù)相關(guān)的有pLSA、LDA、隱含類(lèi)別模型、隱含主題模型、矩陣分解等。這些方法在本質(zhì)上是相通的。這里主要講解LFM。

LFM通過(guò)如下公式計(jì)算用戶(hù)u對(duì)物品i的興趣:

?

累加式子中的p代表用戶(hù)u的興趣和第k個(gè)隱類(lèi)之間的關(guān)系,q代表第k個(gè)隱類(lèi)和物品i之間的關(guān)系。對(duì)所有隱類(lèi)求和的結(jié)果就是總的興趣程度。

這其實(shí)是種機(jī)器學(xué)習(xí)方法,模型就是這個(gè)模型,然后我們可以用平方誤差來(lái)做損失函數(shù),就是給定訓(xùn)練集下,度量用戶(hù)感興趣與否的實(shí)際情況與預(yù)測(cè)結(jié)果是否相符,再用梯度下降最小化損失函數(shù),減小模型預(yù)測(cè)結(jié)果與實(shí)際情況的誤差,最終收斂就可以了。我們還可以在損失函數(shù)中添加正則項(xiàng)來(lái)防止過(guò)擬合。這些都是《淺談機(jī)器學(xué)習(xí)基礎(chǔ)》里面反復(fù)講過(guò)的東西。

而且為了應(yīng)對(duì)隱性反饋數(shù)據(jù)集只有正樣本的情況,我們傾向于從用戶(hù)沒(méi)有行為的熱門(mén)物品中選取適量(與正樣本數(shù)平衡)的負(fù)樣本。適量就不用說(shuō)了,選擇熱門(mén)物品的原因在于,物品熱門(mén)而用戶(hù)對(duì)其無(wú)正面反饋,比冷門(mén)物品更能說(shuō)明用戶(hù)對(duì)其不感興趣,而不是因?yàn)橐苍S根本就沒(méi)有發(fā)現(xiàn)。

LFM還有個(gè)問(wèn)題,就是它很難實(shí)現(xiàn)實(shí)時(shí)的推薦,因?yàn)榻?jīng)典的LFM模型每次訓(xùn)練時(shí)都要掃描所有的用戶(hù)行為記錄,不是分分鐘就能訓(xùn)練好就能更新用戶(hù)隱類(lèi)向量p和物品隱類(lèi)向量q的。如果要將LFM應(yīng)用在新聞網(wǎng)站這種內(nèi)容實(shí)時(shí)更新的系統(tǒng)中,那是肯定無(wú)法滿(mǎn)足需求的。

雅虎為了解決傳統(tǒng)LFM不能實(shí)時(shí)化的問(wèn)題,提出了一個(gè)解決方案,公式如下:

?

后面那部分就是原先的用戶(hù)隱類(lèi)向量和物品隱類(lèi)向量,幾個(gè)小時(shí)更新一次。實(shí)時(shí)性體現(xiàn)在前面的式子上,x是根據(jù)用戶(hù)歷史行為特別訓(xùn)練的用戶(hù)向量,y是根據(jù)物品的內(nèi)容(關(guān)鍵詞、屬性、種類(lèi))去生成的物品內(nèi)容特征向量。這樣兩者的乘積就能實(shí)時(shí)的估計(jì)出用戶(hù)對(duì)該物品的興趣,幾小時(shí)后,通過(guò)傳統(tǒng)的LFM就能得到更精確的數(shù)據(jù)。

就像上面說(shuō)的,LFM與基于鄰域的這兩種方法UserCF和ItemCF相比,LFM不能在線實(shí)時(shí)推薦,需要提前訓(xùn)練好模型,而ItemCF可以,至于UserCF,只要和他相似的用戶(hù)喜歡了新的物品,也可以做到實(shí)時(shí)推薦。

基于圖的方法較麻煩,而且效果也比不上LFM,這里就不詳細(xì)說(shuō)了。

推薦系統(tǒng)冷啟動(dòng)問(wèn)題

前面我們講過(guò)如何使用用戶(hù)行為數(shù)據(jù)去設(shè)計(jì)一個(gè)推薦系統(tǒng),但是推薦系統(tǒng)該如何完成冷啟動(dòng)?

冷啟動(dòng)問(wèn)題主要分為三種,一種是用戶(hù)冷啟動(dòng),對(duì)于一個(gè)新用戶(hù),我們沒(méi)有他的歷史行為數(shù)據(jù),該怎么為其做個(gè)性化推薦;第二種是物品冷啟動(dòng),就是如何將新的物品推薦給可能對(duì)它感興趣的人;第三種是系統(tǒng)冷啟動(dòng),也就是整個(gè)系統(tǒng)沒(méi)有用戶(hù),只有一些物品的信息,該怎么辦。

利用專(zhuān)家做初始標(biāo)注

我們可以利用專(zhuān)家在若干個(gè)維度上對(duì)物品完成初始標(biāo)記,后面再利用機(jī)器學(xué)習(xí)算法去計(jì)算相似度。這里不詳細(xì)說(shuō)了。

利用用戶(hù)注冊(cè)信息

比如我們可以利用用戶(hù)的人口統(tǒng)計(jì)學(xué)信息、用戶(hù)興趣描述(很少)、從其他網(wǎng)站導(dǎo)入的用戶(hù)站外行為數(shù)據(jù)。

我們可以計(jì)算擁有每種特征的人對(duì)各個(gè)物品的喜好程度,比如可以簡(jiǎn)單的定義為喜歡某種物品的人在擁有這種特征的人中所占的比例,而且我們還要注意要對(duì)熱門(mén)物品降權(quán),免得給所有特征的人都推薦熱門(mén)物品。

選擇合適的物品啟動(dòng)用戶(hù)的興趣

比如我們可以在用戶(hù)注冊(cè)后給用戶(hù)提供一些物品,讓用戶(hù)反饋他們對(duì)這些物品的興趣。

那啟動(dòng)物品集合該怎么選?該怎么設(shè)置題目給新用戶(hù)做才最有效果?

回想一下《淺談機(jī)器學(xué)習(xí)基礎(chǔ)》里講的決策樹(shù)算法,這也就是一個(gè)對(duì)用戶(hù)的分類(lèi)問(wèn)題,決策樹(shù)算法里面,我們的思想是依次選擇讓整個(gè)數(shù)據(jù)集熵減小最大的特征對(duì)用戶(hù)進(jìn)行劃分。如果我們已經(jīng)擁有對(duì)用戶(hù)興趣的劃分,也即可以方便的計(jì)算熵,那直接用決策樹(shù)算法是最好的,但是如果我們沒(méi)有,那也可以選擇一種近似的決策樹(shù)算法。

不過(guò)與決策樹(shù)的思想相同,仍然要去選擇區(qū)分度最大的物品對(duì)用戶(hù)進(jìn)行分類(lèi),我們可以用用戶(hù)對(duì)物品評(píng)分的方差來(lái)度量,方差越大說(shuō)明意見(jiàn)分歧越大,越有區(qū)分度。我們先選擇最有區(qū)分度的物品對(duì)用戶(hù)分類(lèi),然后再對(duì)不同類(lèi)別的用戶(hù)選擇對(duì)該類(lèi)別下的用戶(hù)最有區(qū)分度的物品進(jìn)行分類(lèi),不斷迭代。在決策樹(shù)算法中,我們用熵減,或者叫信息增益定義物品的區(qū)分度,而這里我們用的是評(píng)分方差。

利用社交網(wǎng)絡(luò)

我們可以導(dǎo)入用戶(hù)在其他系統(tǒng)中的社會(huì)化關(guān)系,然后按照UserCF算法的思想,把與用戶(hù)有好友關(guān)系的用戶(hù)臨時(shí)當(dāng)做相似用戶(hù),熟悉度替代相似度來(lái)使用UserCF算法進(jìn)行推薦。

如果推薦系統(tǒng)是直接用來(lái)起到推薦好友的作用,那要考慮到網(wǎng)站的類(lèi)型,如果用戶(hù)的目的是為了獲取內(nèi)容,那盡量為其推薦與他愛(ài)好相似的用戶(hù);如果用戶(hù)的目的是認(rèn)識(shí)熟人,那根據(jù)社交關(guān)系鏈推薦會(huì)更有效果,比如推薦給他朋友的朋友,利用手機(jī)通訊錄也是很好的選擇。

還有一種是信息流推薦,這里也一并講了,Facebook的EdgeRank是很流行的信息流推薦算法,該算法綜合考慮了每個(gè)會(huì)話(huà)的時(shí)間、長(zhǎng)度和與用戶(hù)興趣的相似度。

比如這樣定義一條對(duì)話(huà)的權(quán)重:

?

u指產(chǎn)生行為的用戶(hù)和當(dāng)前用戶(hù)的熟悉度,熟悉度可以用共同好友數(shù)量來(lái)衡量;w指行為的權(quán)重,比如原創(chuàng)、評(píng)論、點(diǎn)贊、轉(zhuǎn)發(fā)等,不同的行為應(yīng)該有不同的權(quán)重;d指時(shí)間權(quán)重,越早的行為權(quán)重越低。

除了上面這些社會(huì)化因素之外,我們還可以進(jìn)一步考慮用戶(hù)本身對(duì)會(huì)話(huà)內(nèi)容的偏好,比如會(huì)話(huà)的長(zhǎng)度、會(huì)話(huà)話(huà)題與用戶(hù)興趣之間的相關(guān)性,這樣再結(jié)合前面的社會(huì)化屬性,就會(huì)比較全面了。

利用物品的內(nèi)容信息

其實(shí)UserCF算法對(duì)物品冷啟動(dòng)并不敏感,新加入的物品,如果有推薦系統(tǒng)之外的方式能讓用戶(hù)看到,只要一個(gè)用戶(hù)群中有一個(gè)人喜歡了,那這個(gè)物品就會(huì)擴(kuò)散開(kāi)來(lái),然后又帶動(dòng)了進(jìn)一步擴(kuò)散。離線訓(xùn)練的用戶(hù)相似度表是不需要?jiǎng)拥摹?/p>

但是ItemCF算法就不行了,對(duì)于新的物品,我們根本不知道它跟哪些物品相似,推薦系統(tǒng)就推薦不出來(lái)它,這涉及到物品相似度表,解決方案只能是頻繁的更新相關(guān)表了,比如半小時(shí)更新一次。

我們還可以利用物品的內(nèi)容信息來(lái)解決基于ItemCF的推薦系統(tǒng)的冷啟動(dòng)問(wèn)題,我們可以將物品通過(guò)向量空間模型表示,維度可以是一些導(dǎo)演、演員之類(lèi)的實(shí)體,如果內(nèi)容是文本的,可以利用NLP技術(shù)抽取一些關(guān)鍵詞,也就是《淺談自然語(yǔ)言處理基礎(chǔ)》里面提過(guò)的命名實(shí)體識(shí)別。

這樣我們就得到了物品的一個(gè)關(guān)鍵詞向量,里面的維度是較能夠體現(xiàn)物品特征的關(guān)鍵詞,然后再回想一下TF-IDF算法,我們就把一個(gè)個(gè)物品當(dāng)成一篇篇文章,一個(gè)個(gè)關(guān)鍵詞當(dāng)做文章里的詞。如果物品真的是文本,那就可以直接用TF-IDF算法,把每個(gè)維度替換成相應(yīng)的TF-IDF值;如果不是文本,可以根據(jù)知識(shí),人工的賦予TF權(quán)重,當(dāng)然還可以計(jì)算出相應(yīng)的IDF值來(lái)使模型更為精確。

然后我們的關(guān)鍵詞向量就可以利用余弦相似度去參與計(jì)算物品的內(nèi)容相似度了。對(duì)物品歸類(lèi)的話(huà),可以直接用KNN,這樣就得到了內(nèi)容過(guò)濾算法ContentItemKNN。

內(nèi)容過(guò)濾算法忽視了用戶(hù)行為,從而也忽視了物品的流行度以及用戶(hù)行為中所包含的規(guī)律,所以它的精度比較低,但新穎度卻比較高。

為了優(yōu)化內(nèi)容過(guò)濾算法,這里提出主題模型LDA(Latent Dirichlet Allocation),先說(shuō)一下LDA和LFM的關(guān)系,它們最相似的部分都是發(fā)現(xiàn)內(nèi)容背后的隱含主題,但其它的關(guān)系真是不大,有人講它們是雷鋒和雷峰塔,Java和Javasript的關(guān)系。

LFM用的是矩陣分解的思想,然后梯度下降去學(xué)習(xí),與SVD的思想相似。

而LDA由pLSA、LSA這兩種主題模型演化而來(lái),這里詳細(xì)講解一下,參考了主題模型-LDA淺析,不過(guò)我覺(jué)得我講的好理解得多_(:з」∠)_

LDA模型對(duì)的基本思想是,一篇文章的每個(gè)詞都是通過(guò)以一定概率選擇了某個(gè)主題,并從這個(gè)主題中以一定概率選擇某個(gè)詞語(yǔ)來(lái)得到的。

我們先引入一個(gè)問(wèn)題,如何生成M篇文章,每篇文章包含N個(gè)單詞。

先說(shuō)第一種最簡(jiǎn)單的方法:

?

我們先搞一批訓(xùn)練語(yǔ)料,學(xué)出單詞w的概率分布p(w),然后把這個(gè)分布用N次,得到一篇N個(gè)單詞的文章,然后把這個(gè)方法用M次,得到M篇N個(gè)單詞的文章。實(shí)際上也就是連著用p(w)這個(gè)分布M*N次。

這個(gè)方法的缺點(diǎn)就是單詞沒(méi)有主題,沒(méi)有聯(lián)系,亂七八糟。

然后是第二種方法:

?

這種方法增加了主題z,主題z也有主題的分布p(z)。

先只看圖,這個(gè)z在方框N外面,說(shuō)明一篇N個(gè)詞的文章只有一個(gè)主題;其次,這個(gè)z在方框M里面,M篇不同的文章有不同的主題z。

這樣,這M篇文章,我們?yōu)槊恳黄恼露枷雀鶕?jù)p(z)生成一個(gè)z,然后在這篇文章內(nèi),再使用N次條件概率p(w|z)生成N個(gè)單詞,由此得到M篇N個(gè)單詞的文章。一個(gè)任務(wù)里面有M篇不同主題的文章,每篇文章的單詞都是根據(jù)自己的主題生成的。

這個(gè)方法的缺點(diǎn)在于,每篇文章里只能有一個(gè)主題。

然后就是LDA方法了:

?

LDA一下子多了三個(gè)參數(shù)α、β和θ,我們先只看圖,我們發(fā)現(xiàn)主題z放在了方框N里面,說(shuō)明N個(gè)詞,每個(gè)詞都有自己的主題了,一個(gè)詞的分布就成了p(w|z)*p(z)。然后我們看到θ,θ是一個(gè)主題向量,決定了p(z),θ在方框N外面,說(shuō)明每篇文章的N個(gè)詞都有一個(gè)相同的θ,用于決定這篇文章內(nèi)所有N個(gè)詞的p(z)。θ在方框M里面,說(shuō)明M篇文章,每篇文章都有一個(gè)不同的θ,而p(θ)也就被需要了,p(θ)是θ的分布,具體為Dirichlet分布,決定每篇文章的所有N個(gè)詞都對(duì)應(yīng)哪一個(gè)θ。然后再外面是α,α在方框M外面,也就說(shuō)對(duì)于一個(gè)任務(wù)的這M篇文章,都是同一個(gè)α,而這個(gè)α決定了p(θ)。此外還有一個(gè)β,這個(gè)β是希望,詞的分布概率不只被z決定,也即詞的分布不是p(w|z)*p(z)而是p(w|z,β)*p(z)。

上面扯了這么多,都是為了方便理解,實(shí)際上就是這個(gè)公式:

?

LDA聯(lián)合概率分布

這么說(shuō),對(duì)于一個(gè)任務(wù),我們先給定α、β(一個(gè)任務(wù)一個(gè)α、β),這個(gè)α決定了M篇文章都分別對(duì)應(yīng)哪個(gè)主題向量θ(一篇文章一個(gè)θ),然后每篇文章的主題向量θ決定了這篇文章的主題分布p(z),也就是這篇文章每個(gè)詞都分別對(duì)應(yīng)哪個(gè)主題z(一個(gè)詞一個(gè)z)。然后每個(gè)詞是由這個(gè)詞的z和β共同決定的。

再精簡(jiǎn)一點(diǎn),一個(gè)任務(wù)一個(gè)α、β,一篇文章一個(gè)主題向量θ,一個(gè)詞一個(gè)主題z,α決定主題向量θ,主題向量θ決定主題z,主題z和β一塊決定詞w。

傳統(tǒng)判斷兩個(gè)文檔相似性的方法是通過(guò)查看兩個(gè)文檔共同出現(xiàn)的單詞的多少,如TF-IDF等,這種方法沒(méi)有考慮到文字背后的語(yǔ)義關(guān)聯(lián),可能在兩個(gè)文檔共同出現(xiàn)的單詞很少甚至沒(méi)有,而LDA是主題模型,可以通過(guò)隱含主題發(fā)現(xiàn)沒(méi)有重復(fù)單詞的文檔的相似性。LDA在個(gè)性化推薦、社交網(wǎng)絡(luò)、廣告預(yù)測(cè)等各個(gè)領(lǐng)域的應(yīng)用都非常廣泛。

然后LDA的訓(xùn)練與HMM相似,采用的也是EM算法,最后會(huì)收斂到一個(gè)合理的分布上去。

我再?lài)L試回答幾個(gè)更本質(zhì)的問(wèn)題。

為什么一個(gè)重復(fù)單詞都沒(méi)有,還能判定文章相似?
用的單詞雖然不重復(fù),但都語(yǔ)義上相似。

怎么判斷單詞語(yǔ)義上相似?
出現(xiàn)在了相似文章中。

那這不是個(gè)雞生蛋蛋生雞的問(wèn)題嗎?
EM算法就是解決這種雞蛋問(wèn)題的,回憶《淺談自然語(yǔ)言處理》里面對(duì)EM算法的講解即可。

LDA可以合理的將單詞歸類(lèi)到不同的隱含主題之中。而且如果文檔的主題向量θ,也即主題z的分布較為相似,那我們就可以認(rèn)為兩篇文檔具有較高的相似度,計(jì)算分布的相似度可以用KL散度,也就是相對(duì)熵。

與上下文信息結(jié)合

之前提到的推薦算法主要研究了如何聯(lián)系用戶(hù)興趣和物品,將最符合用戶(hù)興趣的物品推薦給用戶(hù),但卻都沒(méi)有考慮到上下文。

比如舉幾個(gè)例子,不能因?yàn)橛脩?hù)在夏天喜歡過(guò)某件T恤,就在冬天也給該用戶(hù)推薦類(lèi)似的T恤;用戶(hù)在中關(guān)村打開(kāi)一個(gè)美食推薦系統(tǒng)時(shí),不能給他推薦河北省的餐館;用戶(hù)在上班時(shí)和下班后的興趣會(huì)有區(qū)別,在平時(shí)和周末的興趣會(huì)有區(qū)別,甚至上廁所時(shí)和在辦公桌旁閱讀的喜好也是不同的。

時(shí)間上下文信息

一般認(rèn)為,時(shí)間對(duì)用戶(hù)興趣的影響表現(xiàn)在用戶(hù)的興趣是變化的物品也是有生命周期的季節(jié)\節(jié)日效應(yīng)

推薦系統(tǒng)需要擁有實(shí)時(shí)性來(lái)滿(mǎn)足用戶(hù)變化的興趣,比如用戶(hù)一旦產(chǎn)生了新的行為,推薦系統(tǒng)就應(yīng)該有恰當(dāng)?shù)姆磻?yīng)。而且還有一點(diǎn)需要注意的是,推薦系統(tǒng)需要有時(shí)間多樣性,也就是,即便是用戶(hù)實(shí)際上沒(méi)有進(jìn)行任何操作,但我們也不應(yīng)該每天給用戶(hù)推薦相同的內(nèi)容。

比如我們可以在生成推薦結(jié)果時(shí)加入一定的隨機(jī)性,或者記錄用戶(hù)每天看到的推薦結(jié)果,對(duì)這些推薦結(jié)果進(jìn)行適當(dāng)?shù)慕禉?quán),又或者每天給用戶(hù)使用不同的推薦算法。

這里我們主要考慮,時(shí)間上下文信息對(duì)我們經(jīng)典的基于鄰域的兩個(gè)算法ItemCF和UserCF能夠起到什么優(yōu)化作用。

對(duì)于ItemCF,考慮第一點(diǎn),用戶(hù)在相隔很短的時(shí)間內(nèi)喜歡的物品具有更高的相似度;然后是第二點(diǎn),用戶(hù)近期行為比用戶(hù)很久之前的行為,更能體現(xiàn)用戶(hù)現(xiàn)在的興趣。

對(duì)于UserCF,考慮第一點(diǎn),如果兩個(gè)用戶(hù)同時(shí)喜歡相同的物品,那么這兩個(gè)用戶(hù)應(yīng)該有更大的興趣相似度;然后是第二點(diǎn),與當(dāng)前用戶(hù)最相似的這一組用戶(hù)最近的興趣,應(yīng)該比這組用戶(hù)很久之前的興趣更加接近當(dāng)前用戶(hù)今天的興趣。

畢竟ItemCF和UserCF都各有兩個(gè)過(guò)程,只要將兩個(gè)過(guò)程分別與時(shí)間結(jié)合起來(lái),很容易就能知道該往哪個(gè)方向優(yōu)化。

地點(diǎn)上下文信息

地點(diǎn)上下文與用戶(hù)興趣也有一定的關(guān)系,比如不同城市/國(guó)家的人的興趣愛(ài)好會(huì)有不同,這叫興趣本地化,還有用戶(hù)往往在附近地區(qū)活動(dòng),一般不會(huì)因?yàn)橐詡€(gè)飯坐高鐵去別的地方,這叫活動(dòng)本地化

所以我們?cè)诜治鲇脩?hù)行為數(shù)據(jù)時(shí),可以考慮到用戶(hù)位置和物品位置,當(dāng)然這是一些實(shí)體化的服務(wù)提供者需要考慮的問(wèn)題,如果講網(wǎng)購(gòu),用戶(hù)和物品位置對(duì)喜好的影響就小多了,但也并不是完全消失。

推薦系統(tǒng)實(shí)例

這里主要是講好四張圖,首先是第一張,推薦系統(tǒng)和其他系統(tǒng)之間的關(guān)系:

?

推薦系統(tǒng)和其他系統(tǒng)之間的關(guān)系

我們通過(guò)用戶(hù)行為以及其他數(shù)據(jù)設(shè)計(jì)推薦系統(tǒng),推薦系統(tǒng)通過(guò)前臺(tái)頁(yè)面與用戶(hù)產(chǎn)生交互,所得到的數(shù)據(jù)又被日志系統(tǒng)記錄,處理后又回到用戶(hù)行為數(shù)據(jù)庫(kù)中,被用來(lái)設(shè)計(jì)更好的推薦系統(tǒng)。

然后是第二張,基于特征的推薦系統(tǒng)架構(gòu)思路:

?

基于特征的推薦系統(tǒng)架構(gòu)思路

其實(shí)推薦系統(tǒng)做的就是文章最開(kāi)頭長(zhǎng)尾理論里面講的供需相連,就是連接用戶(hù)與物品,那么用戶(hù)與物品通過(guò)什么相連呢,我們統(tǒng)一的定義其為『特征』。

比如ItemCF,用戶(hù)喜歡了一個(gè)物品,就相當(dāng)于是有了一個(gè)特征,我們根據(jù)這個(gè)特征找到相似物品推薦給用戶(hù)。

比如UserCF,用戶(hù)和某K個(gè)用戶(hù)最相似,這就也是一個(gè)特征,我們根據(jù)這個(gè)特征找到這K個(gè)用戶(hù)最喜歡的物品推薦給用戶(hù)。

至于LFM,那就與本質(zhì)更接近了,它的隱含主題/語(yǔ)義就是特征。

還有LDA,LDA與ItemCF其實(shí)同理,用戶(hù)喜歡了一篇文檔,就相當(dāng)于是有了一個(gè)特征,那根據(jù)主題向量θ找到相似的文檔推薦給用戶(hù)即可。

然后是第三張,推薦系統(tǒng)的架構(gòu)圖:

?

推薦系統(tǒng)的架構(gòu)圖

我們可以看到推薦系統(tǒng)可以有不止一個(gè)推薦引擎,有了多個(gè)推薦引擎,我們可以統(tǒng)籌兼顧,方便的配置不同特征和任務(wù)的權(quán)重,推薦系統(tǒng)只負(fù)責(zé)將多個(gè)推薦引擎的結(jié)果按照一定權(quán)重或者優(yōu)先級(jí)合并、排序然后返回。

然后是第四張,推薦引擎的架構(gòu)圖:

?

推薦引擎的架構(gòu)圖

推薦引擎架構(gòu)主要包括三部分:

  • 部分A負(fù)責(zé)從數(shù)據(jù)庫(kù)或緩存中拿到用戶(hù)行為數(shù)據(jù),通過(guò)分析不同行為,生成當(dāng)前用戶(hù)的特征向量,如果使用非行為特征,就不需要行為提取和分析模塊了,該模塊的輸出就是用戶(hù)特征向量。
  • 部分B負(fù)責(zé)將用戶(hù)的特征向量通過(guò)特征-物品相關(guān)矩陣轉(zhuǎn)化為該推薦引擎的初始推薦物品列表。
  • 部分C負(fù)責(zé)對(duì)初始的推薦列表進(jìn)行過(guò)濾、排名等處理,從而生成該引擎的最終推薦結(jié)果。

部分A和部分B都和算法的選擇有關(guān),這里主要說(shuō)一下部分C,首先是過(guò)濾模塊,我們通常要過(guò)濾掉用戶(hù)已經(jīng)產(chǎn)生過(guò)行為的物品、過(guò)濾掉候選物品以外的物品、過(guò)濾掉某些質(zhì)量很差的商品。

過(guò)濾掉候選物品以外的物品有些難理解,意思是,比如說(shuō),有產(chǎn)品需求,是要求推薦這個(gè)種類(lèi)的產(chǎn)品,或者用戶(hù)自主設(shè)置了篩選條件,比如一定的價(jià)格區(qū)間或者限定了SPU等。

然后是排名模塊,這個(gè)各個(gè)算法都有考慮,不過(guò)這里還是統(tǒng)一的說(shuō)一下,對(duì)于各種推薦算法,我們往往都需要對(duì)熱門(mén)物品進(jìn)行降權(quán),排名模塊這里往往也需要一個(gè)對(duì)熱門(mén)物品進(jìn)行降權(quán)的子模塊,來(lái)再一次提高新穎性。而且還可以考慮這樣一個(gè)問(wèn)題,與用戶(hù)喜歡的物品相似的熱門(mén)物品,用戶(hù)更有可能已經(jīng)知道了,可以在對(duì)熱門(mén)物品降權(quán)時(shí)著重照顧一下這部分物品。

說(shuō)完了新穎性,這里提一下多樣性,如果僅按相似度去計(jì)算,很可能推薦出的物品都屬于同一個(gè)類(lèi)別。我們可以將原始推薦結(jié)果按某種內(nèi)容屬性分為幾類(lèi),然后推薦每類(lèi)前幾名的物品。就像星際爭(zhēng)霸比賽,雖然說(shuō)是要看實(shí)力,但是也總是要分賽區(qū)的,每個(gè)賽區(qū)多少個(gè)名額,要是純按實(shí)力,可能所有的名額都是韓國(guó)人的了。盡量讓推薦結(jié)果來(lái)自不同的特征。

還有時(shí)間多樣性,前面也提過(guò)了,即便是用戶(hù)不操作,也盡量不讓用戶(hù)每天看到相同的推薦內(nèi)容。可以引入隨機(jī)、記錄用戶(hù)看過(guò)的推薦結(jié)果進(jìn)行降權(quán)或者直接每天用不同的推薦算法。

排名模塊最重要的部分就是用戶(hù)反饋模塊,用戶(hù)反饋模塊主要是通過(guò)分析用戶(hù)之前和推薦結(jié)果的交互日志,預(yù)測(cè)用戶(hù)會(huì)對(duì)什么樣的推薦結(jié)果比較感興趣,然后根據(jù)用戶(hù)的興趣進(jìn)一步優(yōu)化推薦結(jié)果。

比如推薦系統(tǒng)的目標(biāo)是提高用戶(hù)對(duì)于推薦結(jié)果的點(diǎn)擊率,那么可以利用點(diǎn)擊模型預(yù)測(cè)用戶(hù)是否會(huì)點(diǎn)擊推薦結(jié)果。比如搜索結(jié)果的點(diǎn)擊預(yù)測(cè)、搜索廣告的點(diǎn)擊預(yù)測(cè)、上下文廣告的點(diǎn)擊預(yù)測(cè)。

構(gòu)建這個(gè)預(yù)測(cè)模型首先需要提取特征,比如:

  • 用戶(hù)相關(guān)的特征:年齡、性別、活躍度
  • 物品相關(guān)的特征:流行度、內(nèi)容屬性、評(píng)分
  • 物品在推薦列表中的位置
  • 用戶(hù)之前是否點(diǎn)擊過(guò)和推薦物品有同樣推薦解釋的其他推薦結(jié)果
  • 用戶(hù)之前是否點(diǎn)擊過(guò)和推薦物品來(lái)自同樣推薦引擎的其他推薦結(jié)果

本篇文章的推薦算法基本以推薦物品的推薦算法為主,上面的架構(gòu)也更傾向于去解決物品推薦問(wèn)題,不太適合解決社會(huì)化推薦問(wèn)題。



作者:我偏笑_NSNirvana
鏈接:https://www.jianshu.com/p/c8711ff27eb0
來(lái)源:簡(jiǎn)書(shū)
簡(jiǎn)書(shū)著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的浅谈推荐系统基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。