CB算法:基于內(nèi)容的推薦算法的基本原理

4 評論 17211 瀏覽 89 收藏 10 分鐘

推薦系統(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的過程一般包括以下三步:

  1. 內(nèi)容表征(Item Representation):為每個item抽取出一些特征來表示此item;
  2. 特征學(xué)習(xí)(Profile Learning):利用一個用戶過去喜歡(及不喜歡)的item的特征數(shù)據(jù),來學(xué)習(xí)出此用戶的喜好特征(profile);
  3. 生成推薦列表(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é)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. ??

    來自安徽 回復(fù)
  2. 原來的一些權(quán)重是如何收集的。是不是按照查閱次數(shù)與收聽次數(shù)來確定的。

    來自上海 回復(fù)
    1. 權(quán)重的計算會涉及到詞在文章中出現(xiàn)的次數(shù),和所有文章中包含這個詞的文章的數(shù)量,有了這兩個數(shù)據(jù)再通過tf-idf去計算權(quán)重。

      來自天津 回復(fù)