CB算法:基于內容的推薦算法的基本原理

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

推薦系統能有效幫助用戶快速發現感興趣和高質量的信息,增加用戶使用產品的時長。推薦系統越精準,用戶的使用體驗就越好,產品越容易留住用戶。近幾年,今日頭條、抖音等產品的誕生,也使得基于內容的推薦算法這一古老算法的崛起。本文將簡要闡述基于內容的推薦算法的基本原理,enjoy~

基于內容的推薦算法是眾多推薦算法中的一種,是一種機器學習算法。可以說推薦系統算法是機器學習算法應用在我們生活中最普及的算法。基于內容的推薦算法(Content-Based Recommendations CB),下文中簡稱CB。

CB的思想非常簡單:根據用戶過去喜歡的內容,為用戶推薦和他過去喜歡的內容相似的內容。而關鍵就在于這里的內容相似性的度量,這才是算法運用過程中的核心。

CB的過程一般包括以下三步:

  1. 內容表征(Item Representation):為每個item抽取出一些特征來表示此item;
  2. 特征學習(Profile Learning):利用一個用戶過去喜歡(及不喜歡)的item的特征數據,來學習出此用戶的喜好特征(profile);
  3. 生成推薦列表(Recommendation Generation):通過比較上一步得到的用戶特征(profile)與候選item的特征,為此用戶推薦一組相關性最大的item。

我們通過一個例子,來簡單體驗一下CB的過程。我們以今日頭條為例,今日頭條利用基于內容的文本推薦算法,在今日頭條中,一個item就是一篇文章。

1. 內容表征

首先要從文章內容中抽取出代表它們的屬性。常用的方法就是利用出現在一篇文章中的詞來代表這篇文章,而每個詞對應的權重往往使用加權技術算法來計算。利用這種方法,一篇抽象的文章就可以使用具體的一個向量來表示了。

應用中的item會有一些屬性對它進行描述。這些屬性通??梢苑譃閮煞N:結構化的屬性與非結構化的屬性。

結構化的屬性就是這個屬性的意義比較明確,其取值限定在某個范圍;而非結構化的屬性往往其意義不太明確,取值也沒什么限制,不好直接使用。

比如在社交網站上,item是人,一個item會有結構化屬性如身高、學歷、籍貫等,也會有非結構化屬性,如item寫的個人簽名,發布的內容等等。對于結構化數據,可以拿來就用;但對于非結構化數據(如文章),往往要先把它轉化為結構化數據后才能在模型里加以使用。

真實場景中碰到最多的非結構化數據可能就是文章了。那么,如何將非結構化的文章結構化呢?

我們要表征的所有文章集合為 D={d1,d2,…,dN},而所有文章中出現的詞的集合為T={t1,t2,…,tn}。也就是說,我們有N篇要處理的文章,而這些文章里包含了n個不同的詞。

最終要使用一個向量來表示一篇文章,比如第j篇文章被表示為dj={w1j,w2j,…,wnj},其中wij表示第i個詞在文章j中的權重,值越大表示越重要。

所以,為了表示第j篇文章,現在關鍵的就是如何計算dj各分量的值了。全部i個詞在文章j中對應的權重可以通過TF-IDF(一種用于信息檢索與數據挖掘的常用加權技術)計算獲得。

通過以上的方法,我們得到了每個item特征的表示(每篇文章中,全部詞的權重向量模型)。

2. 特征學習

假設用戶已經對一些item做出了喜好判斷,喜歡其中的一部分item,不喜歡其中的另一部分。那么,這一步要做的就是通過用戶過去的這些喜好判斷,為他形成一個模型。

通過這個模型,就可以判斷用戶是否會喜歡一個新的item。所以,我們要解決的是一個有監督的分類問題,這里可以采用一些機器學習的分類算法。

2.1 K近鄰(KNN)算法

對于一個新的item,KNN算法首先去尋找該用戶已經評判過并且與此新item最相似的k個item。

然后依據該用戶對這k個item的喜好程度來判斷其對此新item的喜好程度。

對于這個方法,比較關鍵的就是如何通過item的屬性向量計算item之間的相似度。對于結構化數據,相似度計算可以使用歐式距離,而如果使用向量空間模型來表示item的話,則相似度計算可以使用cosine(余弦相似度)。

2.2 決策樹算法

當item的屬性較少而且是結構化屬性時,決策樹會是個很好的選擇。

這種情況下決策樹可以產生簡單直觀、容易讓人理解的決策結果。但是如果item的屬性較多,且都來源于非結構化數據,例如文章,那么決策樹的效果可能并不會很好。

2.3 樸素貝葉斯算法

樸素貝葉斯算法經常被用來做文本分類,假設在給定一篇文章的類別后,其中各個詞出現的概率相互獨立。

由于樸素貝葉斯算法的代碼實現比較簡單,所以往往是很多分類問題里最先被嘗試的算法。

我們當前的問題中包括兩個類別:用戶喜歡的item,以及他不喜歡的item。在給定一個item的類別后,其各個屬性的取值概率互相獨立。我們可以利用該用戶的歷史喜好數據進行訓練,之后再用訓練好的貝葉斯分類器對給定的item做分類。

3. 生成推薦列表

如果特征學習中我們使用了分類模型,那么只要把模型預測的用戶最可能感興趣的n個item作為推薦返回給用戶即可。

4. CB的缺點

4.1 無法挖掘出用戶的潛在興趣

CB的推薦只依賴于用戶過去對某些item的喜好,它產生的推薦也都會和用戶過去喜歡的item相似。如果一個用戶以前只看與科技有關的文章,那CB只會給他推薦更多與科技相關的文章,它不會知道用戶可能還喜歡政治類的文章。

4.2 無法為新用戶產生推薦

新用戶沒有喜好歷史,自然無法獲得他的特征,所以也就無法為他產生推薦內容了。

5. 總結

由于CB算法的一些缺點,目前大部分的推薦系統都是以其他算法為主(如協同過濾算法),而輔助使用CB來解決主算法在某些情況下的不精確性(如解決新item問題)。

但CB的作用是不可否認的,只要具體應用中有可用的屬性,那么基本都能在系統里看到CB的影子。組合CB和其他推薦算法的方式有很多,最常用的可能是就用CB來過濾其他算法的候選集,把一些不太合適的候選去掉。

我們也可以看到,機器學習算法是推薦系統的基石與核心,未來,隨著機器學習、深度學習算法的普及,相信也會出現更加優秀的組合推薦算法。

#專欄作家#

流年,人人都是產品經理專欄作家。互聯網產品設計師,4年互聯網產品設計經驗。擅長用戶體驗設計,喜歡鉆研需求功能背后的技術實現方式;在成為綜合型產品設計師的道路上不斷努力前進!

本文原創發布于人人都是產品經理。未經許可,禁止轉載

題圖來自 Pexels,基于 CC0 協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. ??

    來自安徽 回復
  2. 原來的一些權重是如何收集的。是不是按照查閱次數與收聽次數來確定的。

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

      來自天津 回復