CB算法:基于內(nèi)容的推薦算法的基本原理
![](http://image.woshipm.com/wp-files/img/66.jpg)
推薦系統(tǒng)能有效幫助用戶快速發(fā)現(xiàn)感興趣和高質(zhì)量的信息,增加用戶使用產(chǎn)品的時長。推薦系統(tǒng)越精準(zhǔn),用戶的使用體驗就越好,產(chǎn)品越容易留住用戶。近幾年,今日頭條、抖音等產(chǎn)品的誕生,也使得基于內(nèi)容的推薦算法這一古老算法的崛起。本文將簡要闡述基于內(nèi)容的推薦算法的基本原理,enjoy~
基于內(nèi)容的推薦算法是眾多推薦算法中的一種,是一種機(jī)器學(xué)習(xí)算法。可以說推薦系統(tǒng)算法是機(jī)器學(xué)習(xí)算法應(yīng)用在我們生活中最普及的算法。基于內(nèi)容的推薦算法(Content-Based Recommendations CB),下文中簡稱CB。
CB的思想非常簡單:根據(jù)用戶過去喜歡的內(nèi)容,為用戶推薦和他過去喜歡的內(nèi)容相似的內(nèi)容。而關(guān)鍵就在于這里的內(nèi)容相似性的度量,這才是算法運用過程中的核心。
CB的過程一般包括以下三步:
- 內(nèi)容表征(Item Representation):為每個item抽取出一些特征來表示此item;
- 特征學(xué)習(xí)(Profile Learning):利用一個用戶過去喜歡(及不喜歡)的item的特征數(shù)據(jù),來學(xué)習(xí)出此用戶的喜好特征(profile);
- 生成推薦列表(Recommendation Generation):通過比較上一步得到的用戶特征(profile)與候選item的特征,為此用戶推薦一組相關(guān)性最大的item。
我們通過一個例子,來簡單體驗一下CB的過程。我們以今日頭條為例,今日頭條利用基于內(nèi)容的文本推薦算法,在今日頭條中,一個item就是一篇文章。
1. 內(nèi)容表征
首先要從文章內(nèi)容中抽取出代表它們的屬性。常用的方法就是利用出現(xiàn)在一篇文章中的詞來代表這篇文章,而每個詞對應(yīng)的權(quán)重往往使用加權(quán)技術(shù)算法來計算。利用這種方法,一篇抽象的文章就可以使用具體的一個向量來表示了。
應(yīng)用中的item會有一些屬性對它進(jìn)行描述。這些屬性通??梢苑譃閮煞N:結(jié)構(gòu)化的屬性與非結(jié)構(gòu)化的屬性。
結(jié)構(gòu)化的屬性就是這個屬性的意義比較明確,其取值限定在某個范圍;而非結(jié)構(gòu)化的屬性往往其意義不太明確,取值也沒什么限制,不好直接使用。
比如在社交網(wǎng)站上,item是人,一個item會有結(jié)構(gòu)化屬性如身高、學(xué)歷、籍貫等,也會有非結(jié)構(gòu)化屬性,如item寫的個人簽名,發(fā)布的內(nèi)容等等。對于結(jié)構(gòu)化數(shù)據(jù),可以拿來就用;但對于非結(jié)構(gòu)化數(shù)據(jù)(如文章),往往要先把它轉(zhuǎn)化為結(jié)構(gòu)化數(shù)據(jù)后才能在模型里加以使用。
真實場景中碰到最多的非結(jié)構(gòu)化數(shù)據(jù)可能就是文章了。那么,如何將非結(jié)構(gòu)化的文章結(jié)構(gòu)化呢?
我們要表征的所有文章集合為 D={d1,d2,…,dN},而所有文章中出現(xiàn)的詞的集合為T={t1,t2,…,tn}。也就是說,我們有N篇要處理的文章,而這些文章里包含了n個不同的詞。
最終要使用一個向量來表示一篇文章,比如第j篇文章被表示為dj={w1j,w2j,…,wnj},其中wij表示第i個詞在文章j中的權(quán)重,值越大表示越重要。
所以,為了表示第j篇文章,現(xiàn)在關(guān)鍵的就是如何計算dj各分量的值了。全部i個詞在文章j中對應(yīng)的權(quán)重可以通過TF-IDF(一種用于信息檢索與數(shù)據(jù)挖掘的常用加權(quán)技術(shù))計算獲得。
通過以上的方法,我們得到了每個item特征的表示(每篇文章中,全部詞的權(quán)重向量模型)。
2. 特征學(xué)習(xí)
假設(shè)用戶已經(jīng)對一些item做出了喜好判斷,喜歡其中的一部分item,不喜歡其中的另一部分。那么,這一步要做的就是通過用戶過去的這些喜好判斷,為他形成一個模型。
通過這個模型,就可以判斷用戶是否會喜歡一個新的item。所以,我們要解決的是一個有監(jiān)督的分類問題,這里可以采用一些機(jī)器學(xué)習(xí)的分類算法。
2.1 K近鄰(KNN)算法
對于一個新的item,KNN算法首先去尋找該用戶已經(jīng)評判過并且與此新item最相似的k個item。
然后依據(jù)該用戶對這k個item的喜好程度來判斷其對此新item的喜好程度。
對于這個方法,比較關(guān)鍵的就是如何通過item的屬性向量計算item之間的相似度。對于結(jié)構(gòu)化數(shù)據(jù),相似度計算可以使用歐式距離,而如果使用向量空間模型來表示item的話,則相似度計算可以使用cosine(余弦相似度)。
2.2 決策樹算法
當(dāng)item的屬性較少而且是結(jié)構(gòu)化屬性時,決策樹會是個很好的選擇。
這種情況下決策樹可以產(chǎn)生簡單直觀、容易讓人理解的決策結(jié)果。但是如果item的屬性較多,且都來源于非結(jié)構(gòu)化數(shù)據(jù),例如文章,那么決策樹的效果可能并不會很好。
2.3 樸素貝葉斯算法
樸素貝葉斯算法經(jīng)常被用來做文本分類,假設(shè)在給定一篇文章的類別后,其中各個詞出現(xiàn)的概率相互獨立。
由于樸素貝葉斯算法的代碼實現(xiàn)比較簡單,所以往往是很多分類問題里最先被嘗試的算法。
我們當(dāng)前的問題中包括兩個類別:用戶喜歡的item,以及他不喜歡的item。在給定一個item的類別后,其各個屬性的取值概率互相獨立。我們可以利用該用戶的歷史喜好數(shù)據(jù)進(jìn)行訓(xùn)練,之后再用訓(xùn)練好的貝葉斯分類器對給定的item做分類。
3. 生成推薦列表
如果特征學(xué)習(xí)中我們使用了分類模型,那么只要把模型預(yù)測的用戶最可能感興趣的n個item作為推薦返回給用戶即可。
4. CB的缺點
4.1 無法挖掘出用戶的潛在興趣
CB的推薦只依賴于用戶過去對某些item的喜好,它產(chǎn)生的推薦也都會和用戶過去喜歡的item相似。如果一個用戶以前只看與科技有關(guān)的文章,那CB只會給他推薦更多與科技相關(guān)的文章,它不會知道用戶可能還喜歡政治類的文章。
4.2 無法為新用戶產(chǎn)生推薦
新用戶沒有喜好歷史,自然無法獲得他的特征,所以也就無法為他產(chǎn)生推薦內(nèi)容了。
5. 總結(jié)
由于CB算法的一些缺點,目前大部分的推薦系統(tǒng)都是以其他算法為主(如協(xié)同過濾算法),而輔助使用CB來解決主算法在某些情況下的不精確性(如解決新item問題)。
但CB的作用是不可否認(rèn)的,只要具體應(yīng)用中有可用的屬性,那么基本都能在系統(tǒng)里看到CB的影子。組合CB和其他推薦算法的方式有很多,最常用的可能是就用CB來過濾其他算法的候選集,把一些不太合適的候選去掉。
我們也可以看到,機(jī)器學(xué)習(xí)算法是推薦系統(tǒng)的基石與核心,未來,隨著機(jī)器學(xué)習(xí)、深度學(xué)習(xí)算法的普及,相信也會出現(xiàn)更加優(yōu)秀的組合推薦算法。
#專欄作家#
流年,人人都是產(chǎn)品經(jīng)理專欄作家?;ヂ?lián)網(wǎng)產(chǎn)品設(shè)計師,4年互聯(lián)網(wǎng)產(chǎn)品設(shè)計經(jīng)驗。擅長用戶體驗設(shè)計,喜歡鉆研需求功能背后的技術(shù)實現(xiàn)方式;在成為綜合型產(chǎn)品設(shè)計師的道路上不斷努力前進(jìn)!
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自 Pexels,基于 CC0 協(xié)議
??
原來的一些權(quán)重是如何收集的。是不是按照查閱次數(shù)與收聽次數(shù)來確定的。
權(quán)重的計算會涉及到詞在文章中出現(xiàn)的次數(shù),和所有文章中包含這個詞的文章的數(shù)量,有了這兩個數(shù)據(jù)再通過tf-idf去計算權(quán)重。