一文簡(jiǎn)單理解“推薦系統(tǒng)”原理及架構(gòu)
原創(chuàng)【51CTO.com原創(chuàng)稿件】本文主要介紹什么是推薦系統(tǒng),為什么需要推薦系統(tǒng),如何實(shí)現(xiàn)推薦系統(tǒng)的方案,包括實(shí)現(xiàn)推薦系統(tǒng)的一些常見模型,希望給讀者提供學(xué)習(xí)實(shí)踐參考。
為什么需要推薦系統(tǒng)
對(duì)于信息消費(fèi)者,需要從大量信息中找到自己感興趣的信息,而在信息過載時(shí)代,用戶難以從大量信息中獲取自己感興趣、或者對(duì)自己有價(jià)值的信息。
對(duì)于信息生產(chǎn)者,需要讓自己生產(chǎn)的信息脫穎而出,受到廣大用戶的關(guān)注。從物品的角度出發(fā),推薦系統(tǒng)可以更好地發(fā)掘物品的長(zhǎng)尾(long tail)。
長(zhǎng)尾效應(yīng)是美國(guó)《連線》雜志主編 Chris Anderson 在 2006 年出版的《長(zhǎng)尾理論》一書中指出,傳統(tǒng)的 80/20 原則(80% 的銷售額來(lái)自于 20% 的熱門品牌)在互聯(lián)網(wǎng)的加入下會(huì)受到挑戰(zhàn)?;ヂ?lián)網(wǎng)條件下,由于貨架成本極端低廉,電子商務(wù)網(wǎng)站往往能出售比傳統(tǒng)零售店更多的商品。這些原來(lái)不受到重視的銷量小但種類多的產(chǎn)品或服務(wù)由于總量巨大,累積起來(lái)的總收益超過主流產(chǎn)品的現(xiàn)象。
主流商品往往代表了絕大多數(shù)用戶的需求,而長(zhǎng)尾商品往往代表了一小部分用戶的個(gè)性化需求。
推薦系統(tǒng)通過發(fā)掘用戶的行為,找到用戶的個(gè)性化需求,從而將長(zhǎng)尾商品準(zhǔn)確地推薦給需要它的用戶,幫助用戶發(fā)現(xiàn)那些他們感興趣但很難發(fā)現(xiàn)的商品。
推薦系統(tǒng)的任務(wù)在于:
- 一方面幫助用戶發(fā)現(xiàn)對(duì)自己有價(jià)值的信息。
- 另一方面讓信息能夠展現(xiàn)在對(duì)它感興趣的用戶面前,從而實(shí)現(xiàn)信息消費(fèi)者和信息生產(chǎn)者的雙贏。
推薦系統(tǒng)的本質(zhì)
通過一定的方式將用戶和物品聯(lián)系起來(lái),而不同的推薦系統(tǒng)利用了不同的方式。
推薦系統(tǒng)就是自動(dòng)聯(lián)系用戶和物品的一種工具,它能夠在信息過載的環(huán)境中幫助用戶發(fā)現(xiàn)令他們感興趣的信息,也能將信息推送給對(duì)它們感興趣的用戶。
評(píng)價(jià)指標(biāo)
從產(chǎn)品的角度出發(fā),評(píng)價(jià)一個(gè)推薦系統(tǒng)可以從以下維度出發(fā):
- 用戶滿意度:用戶作為推薦系統(tǒng)的重要參與者,其滿意度是評(píng)測(cè)推薦系統(tǒng)的最重要指標(biāo)。但是,用戶滿意度沒有辦法離線計(jì)算,只能通過用戶調(diào)查或者在線實(shí)驗(yàn)獲得。
- 預(yù)測(cè)準(zhǔn)確度:預(yù)測(cè)準(zhǔn)確度度量一個(gè)推薦系統(tǒng)或者推薦算法預(yù)測(cè)用戶行為的能力。這個(gè)指標(biāo)是最重要的推薦系統(tǒng)離線評(píng)測(cè)指標(biāo),從推薦系統(tǒng)誕生的那一天起,幾乎 99% 與推薦相關(guān)的論文都在討論這個(gè)指標(biāo)。
在計(jì)算該指標(biāo)時(shí)需要有一個(gè)離線的數(shù)據(jù)集,該數(shù)據(jù)集包含用戶的歷史行為記錄。然后,將該數(shù)據(jù)集通過時(shí)間分成訓(xùn)練集和測(cè)試集。
最后,通過在訓(xùn)練集上建立用戶的行為和興趣模型預(yù)測(cè)用戶在測(cè)試集上的行為,并計(jì)算預(yù)測(cè)行為和測(cè)試集上實(shí)際行為的重合度作為預(yù)測(cè)準(zhǔn)確度。
- 覆蓋率:覆蓋率( coverage )描述一個(gè)推薦系統(tǒng)對(duì)物品長(zhǎng)尾的發(fā)掘能力。覆蓋率有不同的定義方法,最簡(jiǎn)單的定義為推薦系統(tǒng)能夠推薦出來(lái)的物品占總物品集合的比例。
- 多樣性:用戶的興趣是廣泛的,為了滿足用戶廣泛的興趣,推薦列表需要能夠覆蓋用戶不同的興趣領(lǐng)域,即推薦結(jié)果需要具有多樣性。
- 新穎性:新穎的推薦是指給用戶推薦那些他們以前沒有聽說過的物品。在一個(gè)網(wǎng)站中實(shí)現(xiàn)新穎性的最簡(jiǎn)單辦法是,把那些用戶之前在網(wǎng)站中對(duì)其有過行為的物品從推薦列表中過濾掉。
- 驚喜度:與新穎性不同,如果推薦結(jié)果和用戶的歷史興趣不相似,但卻讓用戶覺得滿意,那么就可以說推薦結(jié)果的驚喜度很高,而推薦的新穎性僅僅取決于用戶是否聽說過這個(gè)推薦結(jié)果。
- 信任度:對(duì)于基于機(jī)器學(xué)習(xí)的自動(dòng)推薦系統(tǒng),同樣存在信任度( trust )的問題,如果用戶信任推薦系統(tǒng),那就會(huì)增加用戶和推薦系統(tǒng)的交互。
同樣的推薦結(jié)果,以讓用戶信任的方式推薦給用戶就更能讓用戶產(chǎn)生購(gòu)買欲,而以類似廣告形式的方法推薦給用戶就可能很難讓用戶產(chǎn)生購(gòu)買的意愿。
度量推薦系統(tǒng)的信任度只能通過問卷調(diào)查的方式,詢問用戶是否信任推薦系統(tǒng)的推薦結(jié)果。
- 實(shí)時(shí)性:推薦系統(tǒng)需要實(shí)時(shí)地更新推薦列表來(lái)滿足用戶新的行為變化,推薦系統(tǒng)需要能夠?qū)⑿录尤胂到y(tǒng)的物品推薦給用戶。這主要考驗(yàn)了推薦系統(tǒng)處理物品冷啟動(dòng)的能力。
- 健壯性:任何一個(gè)能帶來(lái)利益的算法系統(tǒng)都會(huì)被人攻擊,這方面最典型的例子就是搜索引擎。
搜索引擎的作弊和反作弊斗爭(zhēng)異常激烈,而健壯性(即 robust,魯棒性)指標(biāo)衡量了一個(gè)推薦系統(tǒng)抗擊作弊的能力。
基于用戶行為推薦
用戶行為
用戶行為可以分為顯性反饋行為(explicit feedback)和隱性反饋行為(implicit feedback)。
顯性反饋行為:指用戶明確表示對(duì)物品喜好的行為,主要方式就是評(píng)分和喜歡/不喜歡。
常見的顯性反饋行為可以參考如下表格:
隱性反饋行為(implicit feedback):指的是那些不能明確反應(yīng)用戶喜好的行為。最具代表性的隱性反饋行為就是頁(yè)面瀏覽行為。
用戶瀏覽一個(gè)物品的頁(yè)面并不代表用戶一定喜歡這個(gè)頁(yè)面展示的物品,比如可能因?yàn)檫@個(gè)頁(yè)面鏈接顯示在首頁(yè),用戶更容易點(diǎn)擊它而已。
相比顯性反饋,隱性反饋雖然不明確,但數(shù)據(jù)量更大。在很多網(wǎng)站中,很多用戶甚至只有隱性反饋數(shù)據(jù),而沒有顯性反饋數(shù)據(jù)。
基于用戶行為數(shù)據(jù)設(shè)計(jì)的推薦算法一般稱為協(xié)同過濾算法。學(xué)術(shù)界對(duì)協(xié)同過濾算法進(jìn)行了深入研究,提出了很多方法。
比如基于鄰域的算法(neighborhood-based)、隱語(yǔ)義模型(latent factor model)、基于圖的隨機(jī)游走算法(random walk on graph)等。
下面主要展開介紹基于領(lǐng)域的算法和隱語(yǔ)義模型算法。
基于領(lǐng)域的算法
基于鄰域的方法是最著名的、在業(yè)界得到最廣泛應(yīng)用的推薦算法,主要包含下面兩種算法:
- 基于用戶的協(xié)同過濾算法(UserCF)。
- 基于物品的協(xié)同過濾算法(ItemCF)。
算法涉及的基本步驟如下:
- 收集用戶偏好,把用戶對(duì)物品的偏好轉(zhuǎn)換成可量化的綜合評(píng)分值。
- 找到相似的用戶或物品。
- 計(jì)算推薦。
相似度計(jì)算
計(jì)算相似度主要有以下 3 種計(jì)算方式:
①歐氏距離(Euclidean Distance)
向量歐式距離:
相似度:
②皮爾遜相關(guān)系數(shù)(Pearson Correlation Coefficient)
協(xié)方差,用來(lái)衡量 2 個(gè)向量的變化趨勢(shì)是否一致:
標(biāo)準(zhǔn)差:
皮爾遜相關(guān)系數(shù):
皮爾遜相關(guān)系數(shù)使用協(xié)方差除以 2 個(gè)向量的標(biāo)準(zhǔn)差得到,值的范圍[-1,1]。
③Cosine 相似度(Cosine Similarity,余弦距離)
Cosine 相似度其實(shí)就是求 2 個(gè)向量的夾角。3 種計(jì)算相關(guān)系數(shù)的算法中,皮爾遜相關(guān)系數(shù)在生產(chǎn)中最為常用。
鄰居的選擇
通過相似度計(jì)算出若干個(gè)最相似的鄰居后,如何選擇鄰居?主要有以下方式:
- 基于固定數(shù)量的鄰居:該方式直接選擇固定數(shù)量的鄰居,有可能把相似度較小的對(duì)象也引入。
- 基于相似度門檻的鄰居:該方式先用相似度門檻篩選出鄰居的一個(gè)集合,再?gòu)募侠锩嫣暨x出相似度較大的鄰居??梢员苊獍严嗨贫容^小的對(duì)象引入,效果更好。
基于用戶的協(xié)同過濾算法(UserCF)
簡(jiǎn)單而言,就是給用戶推薦和他興趣相似的其他用戶喜歡的物品。
在一個(gè)在線個(gè)性化推薦系統(tǒng)中,當(dāng)一個(gè)用戶 A 需要個(gè)性化推薦時(shí),可以先找到和他有相似興趣的其他用戶,然后把那些用戶喜歡的、而用戶 A 沒有聽說過的物品推薦給 A 。這種方法稱為基于用戶的協(xié)同過濾算法。
用戶 A 與用戶 C 的興趣比較相似,用戶 C 喜歡了物品 4,所以給用戶 A 推薦物品 4。
數(shù)學(xué)實(shí)現(xiàn)如下圖:
已知用戶評(píng)分矩陣 Matrix R(一般都是非常稀疏的),推斷矩陣中問號(hào)處的評(píng)分值。
UserCF 模型存在問題:
- 對(duì)于一個(gè)新用戶,很難找到鄰居用戶。
- 對(duì)于一個(gè)新物品,所有最近的鄰居都在其上沒有多少打分。
基礎(chǔ)解決方案:
- 相似度計(jì)算最好使用皮爾遜相似度。
- 計(jì)算用戶相似度考慮共同打分物品的數(shù)目。
比如乘上,n 為共同打分的商品數(shù),N 為指定閾值,這樣可以讓 2 個(gè)用戶的共同打分的商品數(shù)越少,相似度越小。
- 對(duì)打分進(jìn)行歸一化處理,比如把原來(lái)分?jǐn)?shù)值范圍是[0,10],歸一化后變成[0,1]。
- 設(shè)置一個(gè)相似度閾值。
基于用戶的協(xié)同過濾不流行的原因:
數(shù)據(jù)稀疏問題,數(shù)據(jù)存取困難。
數(shù)百萬(wàn)用戶計(jì)算,用戶之間兩兩計(jì)算相似度,計(jì)算量過大。
人是善變的。
基于物品的協(xié)同過濾算法(ItemCF)
基于物品的協(xié)同過濾算法(簡(jiǎn)稱 ItemCF)就是給用戶推薦那些和他們之前喜歡的物品相似的物品。
比如,該算法會(huì)因?yàn)槟阗?gòu)買過《數(shù)據(jù)挖掘?qū)д摗范o你推薦《機(jī)器學(xué)習(xí)》。
不過,ItemCF 算法并不利用物品的內(nèi)容屬性計(jì)算物品之間的相似度,它主要通過分析用戶的行為記錄計(jì)算物品之間的相似度。
該算法認(rèn)為,物品 A 和物品 B 具有很大的相似度是因?yàn)橄矚g物品 A 的用戶大都也喜歡物品 B。
物品 1 和物品 3 都被用戶 A 和用戶 B 喜歡,所以認(rèn)為是相似物品,所以當(dāng)用戶 C 喜歡物品 1,就給用戶 C 推薦物品 3。
算法主要步驟如下:
- 計(jì)算物品之間的相似度。
- 根據(jù)物品的相似度和用戶的歷史行為給用戶生成推薦列表。
數(shù)學(xué)實(shí)現(xiàn)思路如下圖:
需要用戶 5 對(duì)物品 1 的評(píng)分 r_15,由于物品 3、物品 6 是與物品 1 最為相似的 2 個(gè)物品,取相似度作為權(quán)重,所以 r_15 可以預(yù)測(cè)如下:
模型優(yōu)勢(shì):
- 計(jì)算性能高,通常用戶數(shù)量遠(yuǎn)大于物品數(shù)量,實(shí)際計(jì)算物品之間的相似度,可以只選擇同一個(gè)大分類下的類似物品來(lái)計(jì)算,以此減少計(jì)算量。
- 可預(yù)先保留結(jié)果,物品并不善變。
UserCF 和 ItemCF 綜合比較
UserCF 給用戶推薦那些和他有共同興趣愛好的用戶喜歡的物品,而 ItemCF 給用戶推薦那些和他之前喜歡的物品類似的物品。
從這個(gè)算法的原理可以看到:
- UserCF 的推薦結(jié)果著重于反映和用戶興趣相似的小群體的熱點(diǎn)。
- ItemCF 的推薦結(jié)果著重于維系用戶的歷史興趣。
換句話說:
- UserCF 的推薦更社會(huì)化,反映了用戶所在的小型興趣群體中物品的熱門程度。
- ItemCF 的推薦更加個(gè)性化,反映了用戶自己的興趣傳承。
基于用戶標(biāo)簽推薦
推薦系統(tǒng)的目的是聯(lián)系用戶的興趣和物品,這種聯(lián)系需要依賴不同的媒介。
目前流行的推薦系統(tǒng)基本上通過 3 種方式聯(lián)系用戶興趣和物品:
- 基于用戶推薦 UserCF:利用和用戶興趣相似的其他用戶,給用戶推薦那些和他們興趣愛好相似的其他用戶喜歡的物品。
- 基于物品推薦 ItemCF:給用戶推薦與他喜歡過的物品相似的物品。
- 基于特征:這里的特征有不同的表現(xiàn)方式,比如可以表現(xiàn)為物品的屬性集合(比如對(duì)于圖書,屬性集合包括作者、出版社、主題和關(guān)鍵詞等),也可以表現(xiàn)為隱語(yǔ)義向量(latent factor vector)。
標(biāo)簽相關(guān)問題
標(biāo)簽的定義
根據(jù)維基百科的定義,標(biāo)簽是一種無(wú)層次化結(jié)構(gòu)的、用來(lái)描述信息的關(guān)鍵詞,它可以用來(lái)描述物品的語(yǔ)義。
根據(jù)給物品打標(biāo)簽的人的不同,標(biāo)簽應(yīng)用一般分為兩種:
一種是讓作者或者專家給物品打標(biāo)簽。
另一種是讓普通用戶給物品打標(biāo)簽,也就是 UGC(User Generated Content,用戶生成的內(nèi)容)的標(biāo)簽應(yīng)用 UGC 的標(biāo)簽系統(tǒng)是一種表示用戶興趣和物品語(yǔ)義的重要方式。
當(dāng)一個(gè)用戶對(duì)一個(gè)物品打上一個(gè)標(biāo)簽,這個(gè)標(biāo)簽一方面描述了用戶的興趣,另一方面則表示了物品的語(yǔ)義,從而將用戶和物品聯(lián)系了起來(lái)。
因此下面主要討論 UGC 的標(biāo)簽應(yīng)用,研究用戶給物品打標(biāo)簽的行為,探討如何通過分析這種行為給用戶進(jìn)行個(gè)性化推薦。
用戶為什么要打標(biāo)簽
從產(chǎn)品的角度,我們需要理解用戶打標(biāo)簽的行為,為什么要打標(biāo)簽,只有深入了解用戶的行為,我們才能基于這個(gè)行為設(shè)計(jì)出令他們滿意的個(gè)性化推薦系統(tǒng)。
用戶這個(gè)行為背后的原因主要可以從 2 個(gè)維度進(jìn)行探討:
- 社會(huì)維度,有些用戶標(biāo)注是給內(nèi)容上傳者使用的(便于上傳者組織自己的信息),而有些用戶標(biāo)注是給廣大用戶使用的(便于幫助其他用戶找到信息)。
- 功能維度,有些標(biāo)注用于更好地組織內(nèi)容,方便用戶將來(lái)的查找,而另一些標(biāo)注用于傳達(dá)某種信息,比如照片的拍攝時(shí)間和地點(diǎn)等。
用戶打什么樣的標(biāo)簽
用戶常打的標(biāo)簽如下:
- 表明物品是什么。
- 表明物品的種類。
- 表明誰(shuí)擁有物品,比如很多博客的標(biāo)簽中會(huì)包括博客的作者等信息。
- 表達(dá)用戶的觀點(diǎn),比如用戶認(rèn)為網(wǎng)頁(yè)很有趣,就會(huì)打上標(biāo)簽 funny(有趣),認(rèn)為很無(wú)聊,就會(huì)打上標(biāo)簽 boring(無(wú)聊)。
- 用戶相關(guān)的標(biāo)簽,比如 my favorite(我最喜歡的)、my comment(我的評(píng)論)等。
- 用戶的任務(wù),比如 to read(即將閱讀)、 job search(找工作)等。
為什么要給用戶推薦標(biāo)簽
用戶瀏覽某個(gè)物品時(shí),標(biāo)簽系統(tǒng)非常希望用戶能夠給這個(gè)物品打上高質(zhì)量的標(biāo)簽,這樣才能促進(jìn)標(biāo)簽系統(tǒng)的良性循環(huán)。因此,很多標(biāo)簽系統(tǒng)都設(shè)計(jì)了標(biāo)簽推薦模塊給用戶推薦標(biāo)簽。
一般認(rèn)為,給用戶推薦標(biāo)簽有以下好處:
- 方便用戶輸入標(biāo)簽,讓用戶從鍵盤輸入標(biāo)簽無(wú)疑會(huì)增加用戶打標(biāo)簽的難度,這樣很多用戶不愿意給物品打標(biāo)簽,因此我們需要一個(gè)輔助工具來(lái)減小用戶打標(biāo)簽的難度,從而提高用戶打標(biāo)簽的參與度。
- 提高標(biāo)簽質(zhì)量,同一個(gè)語(yǔ)義不同的用戶可能用不同的詞語(yǔ)來(lái)表示。這些同義詞會(huì)使標(biāo)簽的詞表變得很龐大,而且會(huì)使計(jì)算相似度不太準(zhǔn)確。
而使用推薦標(biāo)簽時(shí),我們可以對(duì)詞表進(jìn)行選擇,首先保證詞表不出現(xiàn)太多的同義詞,同時(shí)保證出現(xiàn)的詞都是一些比較熱門的、有代表性的詞。
如何給用戶推薦標(biāo)簽
用戶 u 給物品 i 打標(biāo)簽時(shí),我們有很多方法可以給用戶推薦和物品 i 相關(guān)的標(biāo)簽。
比較簡(jiǎn)單的方法有 4 種:
- 給用戶 u 推薦整個(gè)系統(tǒng)里最熱門的標(biāo)簽(這里將這個(gè)算法稱為 PopularTags),這個(gè)算法太簡(jiǎn)單了,甚至于不能稱為一種標(biāo)簽推薦算法。
- 給用戶 u 推薦物品 i 上最熱門的標(biāo)簽(這里將這個(gè)算法稱為 ItemPopularTags)。
- 用戶 u 推薦他自己經(jīng)常使用的標(biāo)簽(這里將這個(gè)算法稱為 UserPopularTags)。
- 前面兩種的融合(這里記為 HybridPopularTags),該方法通過一個(gè)系數(shù)將上面的推薦結(jié)果線性加權(quán),然后生成最終的推薦結(jié)果。
一個(gè)最簡(jiǎn)單的算法
基本步驟如下:
- 統(tǒng)計(jì)每個(gè)用戶最常用的標(biāo)簽。
- 對(duì)于每個(gè)標(biāo)簽,統(tǒng)計(jì)被打過這個(gè)標(biāo)簽次數(shù)最多的物品。
- 對(duì)于一個(gè)用戶,首先找到他常用的標(biāo)簽,然后找到具有這些標(biāo)簽的最熱門物品推薦給這個(gè)用戶。
對(duì)于上面算法,用戶 u 對(duì)于物品 i 的興趣公式如上:
是用戶 u 打過的標(biāo)簽集合。
是物品 i 被打過標(biāo)簽的集合。
是用戶 u 打過標(biāo)簽 b 的次數(shù)。
是物品 i 被打過標(biāo)簽 b 的次數(shù)。
某用戶使用過“幽默”標(biāo)簽 10 次,“搞笑”標(biāo)簽 3 次,“諷刺”標(biāo)簽 6 次。這 3 個(gè)標(biāo)簽被物品 A 使用的次數(shù)分別的 4、7、2。
由此計(jì)算用戶對(duì)物品的興趣值為:
上面的計(jì)算公式會(huì)傾向于給熱門標(biāo)簽對(duì)應(yīng)的熱門物品很大的權(quán)重,因此會(huì)造成推薦熱門的物品給用戶,從而降低推薦結(jié)果的新穎性,還有數(shù)據(jù)稀疏性的問題,可以通過計(jì)算結(jié)果除以懲罰項(xiàng)來(lái)進(jìn)行修正。
系統(tǒng)冷啟動(dòng)問題
問題簡(jiǎn)介
系統(tǒng)冷啟動(dòng)(cold start)問題主要在于如何在一個(gè)新開發(fā)的網(wǎng)站上(還沒有用戶,也沒有用戶行為,只有一些物品的信息)設(shè)計(jì)個(gè)性化推薦系統(tǒng),從而在網(wǎng)站剛發(fā)布時(shí)就讓用戶體驗(yàn)到個(gè)性化推薦服務(wù)這一問題。
主要可以分為 3 類:
- 用戶冷啟動(dòng):用戶冷啟動(dòng)問題主要在于如何給新用戶做個(gè)性化推薦。當(dāng)新用戶到來(lái)時(shí),我們沒有他的行為數(shù)據(jù),所以也無(wú)法根據(jù)他的歷史行為預(yù)測(cè)其興趣,從而無(wú)法借此給他做個(gè)性化推薦。
- 物品冷啟動(dòng):物品冷啟動(dòng)問題主要在于如何解決將新的物品推薦給可能對(duì)它感興趣的用戶。
- 系統(tǒng)冷啟動(dòng):系統(tǒng)剛剛新上線,用戶、物品數(shù)據(jù)較少。
解決思路
針對(duì)上述 3 類冷啟動(dòng)問題,一般來(lái)說,可以參考如下解決方案:
- 提供非個(gè)性化的推薦:非個(gè)性化推薦的最簡(jiǎn)單例子就是熱門排行榜,我們可以給用戶推薦熱門排行榜,然后等到用戶數(shù)據(jù)收集到一定的時(shí)候,再切換為個(gè)性化推薦。這也是最常見的解決方案。
- 利用用戶注冊(cè)時(shí)提供的年齡、性別等數(shù)據(jù)做粗粒度的個(gè)性化。
- 要求用戶在首次登錄時(shí)提供反饋,比如輸入感興趣的標(biāo)簽,或感興趣的物品。收集用戶對(duì)物品的興趣信息,然后給用戶推薦那些和這些物品相似的物品。
- 對(duì)于新加入的物品,可以利用內(nèi)容信息,將它們推薦給喜歡過和它們相似的物品的用戶。
- 在系統(tǒng)冷啟動(dòng)時(shí),可以引入專家的知識(shí),通過一定的高效方式迅速建立起物品的相關(guān)度表。
評(píng)估指標(biāo)
令是根據(jù)用戶在訓(xùn)練集上的行為給用戶作出的推薦列表,
是用戶在測(cè)試集上的行為列表。
準(zhǔn)確率
用于度量模型的預(yù)測(cè)值與真實(shí)值之間的誤差。
召回率
用于度量有多個(gè)正例被分為正例,這里是正確推薦的數(shù)量占測(cè)試集合上用戶行為列表的比例。
覆蓋率
用戶衡量推薦的物品占全部商品的比例,一般我們推薦的物品希望盡可能覆蓋更多類別 。常見有 2 種計(jì)算方法:
通過推薦的商品占總商品的比例:
或者通過推薦物品的熵值得到覆蓋率,熵值越大,覆蓋率越大:
多樣性
用于衡量每次推薦里面的推送的物品占所有可能性的比率,多樣性越大,每次推薦的物品越豐富。
實(shí)際上,不同的平臺(tái)還有不同的衡量標(biāo)準(zhǔn),例如用戶滿意度,廣告收益,需要結(jié)合實(shí)際業(yè)務(wù)情況做策略調(diào)整。
系統(tǒng)架構(gòu)
基于特征的推薦系統(tǒng)
再次回顧一下上面提到的推薦系統(tǒng)聯(lián)系用戶和物品的 3 種途徑。
將這 3 種方式都抽象一下就可以發(fā)現(xiàn),如果認(rèn)為用戶喜歡的物品也是一種用戶特征,或者和用戶興趣相似的其他用戶也是一種用戶特征,那么用戶就和物品通過特征相聯(lián)系。
用戶特征種類特別多,主要包括以下幾類:
- 用戶注冊(cè)屬性:年齡、性別、國(guó)籍等。
- 用戶行為特征:瀏覽、點(diǎn)贊、評(píng)論、購(gòu)買等。
系統(tǒng)整體架構(gòu)
由于推送策略本身的復(fù)雜性,如果要在一個(gè)系統(tǒng)中把上面提到的各種特征和任務(wù)都統(tǒng)籌考慮,那么系統(tǒng)將會(huì)非常復(fù)雜,而且很難通過配置文件方便地配置不同特征和任務(wù)的權(quán)重。
因此,推薦系統(tǒng)需要由多個(gè)推薦引擎組成,每個(gè)推薦引擎負(fù)責(zé)一類特征和一種任務(wù),而推薦系統(tǒng)的任務(wù)只是將推薦引擎的結(jié)果按照一定權(quán)重或者優(yōu)先級(jí)合并、排序然后返回。
這樣做有 2 個(gè)好處:
- 可以方便地增加/刪除引擎,控制不同引擎對(duì)推薦結(jié)果的影響。對(duì)于絕大多數(shù)需求,只需要通過不同的引擎組合實(shí)現(xiàn)。
- 可以實(shí)現(xiàn)推薦引擎級(jí)別的用戶反饋。每一個(gè)推薦引擎其實(shí)代表了一種推薦策略,而不同的用戶可能喜歡不同的推薦策略:
有些用戶可能喜歡利用他的年齡性別作出的推薦。
有些用戶可能比較喜歡看到新加入的和他興趣相關(guān)的視頻。
有些用戶喜歡比較新穎的推薦。
有些用戶喜歡專注于一個(gè)鄰域的推薦。
有些用戶喜歡多樣的推薦。
我們可以將每一種策略都設(shè)計(jì)成一個(gè)推薦引擎,然后通過分析用戶對(duì)推薦結(jié)果的反饋了解用戶比較喜歡哪些引擎推薦出來(lái)的結(jié)果,從而對(duì)不同的用戶給出不同的引擎組合權(quán)重。
推薦引擎架構(gòu)
推薦引擎使用一種或幾種用戶特征,按照一種推薦策略生成一種類型物品的推薦列表,基本架構(gòu)如下圖:
如上圖,推薦引擎架構(gòu)主要包括 3 部分:
- 用戶行為數(shù)據(jù)模塊:圖中 A 部分,該部分負(fù)責(zé)從數(shù)據(jù)庫(kù)或者緩存中拿到用戶行為數(shù)據(jù),通過分析不同行為,生成當(dāng)前用戶的特征向量。
不過如果是使用非行為特征,就不需要使用行為提取和分析模塊了。該模塊的輸出是用戶特征向量。
- 物品數(shù)據(jù)模塊:圖中 B 部分,該部分負(fù)責(zé)將用戶的特征向量通過特征-物品相關(guān)矩陣轉(zhuǎn)化為初始推薦物品列表。
- 最終結(jié)果生成模塊:圖中 C 部分,該部分負(fù)責(zé)對(duì)初始的推薦列表進(jìn)行過濾、排名等處理,從而生成最終的推薦結(jié)果。
其中,有幾個(gè)模塊需要特別介紹一下:
- 候選物品集合:特征-物品相關(guān)推薦模塊還可以接受一個(gè)候選物品集合。候選物品集合的目的是保證推薦結(jié)果只包含候選物品集合中的物品。它的應(yīng)用場(chǎng)合一般是產(chǎn)品需求希望將某些類型的電視劇推薦給用戶。
比如有些產(chǎn)品要求給用戶推薦最近一周加入的新物品,那么候選物品集合就包括最近一周新加的物品。
- 過濾模塊:在得到初步的推薦列表后,還不能把這個(gè)列表展現(xiàn)給用戶,首先需要按照產(chǎn)品需求對(duì)結(jié)果進(jìn)行過濾,過濾掉那些不符合要求的物品。
一般來(lái)說,過濾模塊會(huì)過濾掉以下物品:
用戶已經(jīng)產(chǎn)生過行為物品,因?yàn)橥扑]系統(tǒng)的目的是幫助用戶發(fā)現(xiàn)物品,因此沒必要給用戶推薦他已經(jīng)知道的物品,這樣可以保證推薦結(jié)果的新穎性。
候選物品以外的物品,候選物品集合一般有兩個(gè)來(lái)源,一個(gè)是產(chǎn)品需求。比如在首頁(yè)可能要求將新加入的物品推薦給用戶,因此需要在過濾模塊中過濾掉不滿足這一條件的物品。
另一個(gè)來(lái)源是用戶自己的選擇,比如用戶選擇了某一個(gè)價(jià)格區(qū)間,只希望看到這個(gè)價(jià)格區(qū)間內(nèi)的物品,那么過濾模塊需要過濾掉不滿足用戶需求的物品。
某些質(zhì)量很差的物品,為了提高用戶的體驗(yàn),推薦系統(tǒng)需要給用戶推薦質(zhì)量好的物品,那么對(duì)于一些絕大多數(shù)用戶評(píng)論都很差的物品,推薦系統(tǒng)需要過濾掉。這種過濾一般以用戶的歷史評(píng)分為依據(jù),比如過濾掉平均分在 2 分以下的物品。
- 排名模塊:經(jīng)過過濾后的推薦結(jié)果直接展示給用戶一般也沒有問題,但如果對(duì)它們進(jìn)行一些排名,則可以更好地提升用戶滿意度。實(shí)際進(jìn)行排名時(shí),可以基于新穎性、多樣性、用戶反饋進(jìn)行排名優(yōu)化。
總結(jié)
除了本文介紹的模型算法,基于用戶行為推薦還有隱語(yǔ)義模型,基于圖的模型比較常見,還有的基于上下文、社交網(wǎng)絡(luò)推薦。實(shí)際有一些常見的算法庫(kù)可以實(shí)現(xiàn)推薦系統(tǒng)運(yùn)算,包括 LibRec,Crab 等。
參考資料:
《推薦系統(tǒng)實(shí)踐》
一文讀懂推薦系統(tǒng)知識(shí)體系
https://cloud.tencent.com/developer/article/1070529
個(gè)性化推薦系統(tǒng)總結(jié)
https://www.jianshu.com/p/319e4933c5ba
推薦系統(tǒng)介紹
https://www.cnblogs.com/redbear/p/8594939.html
陳彩華(caison),從事服務(wù)端開發(fā),善于系統(tǒng)設(shè)計(jì)、優(yōu)化重構(gòu)、線上問題排查工作,主要開發(fā)語(yǔ)言是 Java,微信號(hào):hua1881375。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】