分析:基于文本內容推薦和協同過濾推薦

4 評論 13242 瀏覽 149 收藏 19 分鐘

當用戶看完某個感興趣的事物時,推薦系統會給你推薦類似你喜歡的東西,而本文主要分析一下關于協同過濾推薦和基于文本內容推薦的這兩種推薦方式。

(1)需求背景

  • 當用戶表示出對一些內容感興趣的時候,滿足用戶的一個拓展的興趣;比如:feed流產品,讓你對新的內容既有熟悉感并且有新穎感,這樣的話就能夠促進用戶進一步內容消費。
  • 一般是在內容消費完結時推薦,比如:看完一部小說,會給你推薦通類型的小說,看完一部鋼鐵俠的電影,會給你推薦鋼鐵俠系列電影。

相似內容推薦的核心邏輯——即推薦用戶在當前當刻下最感興趣的或者與這個內容最相似的一個內容。

(2)業務目標

業務目標:推薦內容用戶消費行為的最大化

(3)衡量標準

  • 簡單的方式就是CTR的方式,用戶點擊的數量/推薦的數量。
  • 用戶行為消費的深淺,比如:一個網頁的用戶停留事件,網頁的瀏覽完成時間。

基于文本內容推薦Content-base

1. 基本原理

使用內容的元數據,或者針對內容的自身的分析,對于任意內容A、B,計算AB之間兩兩相似度Sab,推薦給用戶相似度最高的N個內容。

2. 關鍵路徑

(1)定義度量標準

標準類似于坐標軸,例如:人有很多屬性,性別、年齡、身高、體重、文化程度、專業技能等。

這些共同構成的一個多維空間,每一個特定的人,在每一個維度上面都會有一個具體的值,這樣就實現對一個特定人的量化表示。實現從一個人的個體到一個N維度的向量的一個映射,并且由于面對的需求不一樣,我們構建的一個特征空間可能是不一樣的。

繼續上面的例子,如果我們要挑選好的戰士,那么特征空間可能就包括性別、年齡、身高、體重,等維度基本就夠了。那如果要挑選好的產品經理,這些維度肯定不不夠全面。

(2)對內容進行量化

對各個內容,如:文章、商品,通過上面定義的維度進行量化。

(3)計算相似度

  1. 算距離度量,及文本在立體在空間上存在的距離,距離越遠說明個體間的差異越大。
  2. 算相似度度量,相似度度量的值越小,說明個體間相似度越小,差異越大。

距離度量和相似度量是負相關的——距離小、“離得近”、相似度高;距離大、“離得遠”、相似度低。

3. 舉例

(1)定義度量標準:全體有益的詞,如果兩篇文章中相同的詞匯越多,則認為兩篇文章越相似。

首先我們需要對文章進行處理,通過切詞,去掉沒有意義的形容詞,得到關鍵詞的一個集合,這樣完成了一篇文章到一個集合的映射。

(2)對內容進行量化

如果直接對關鍵詞量化,首先想到的是統計一下文檔中每個詞出現的頻率(TF),詞頻越高,這個詞就越重要。但是統計完你可能會發現你得到的關鍵詞基本都是“的”、“是”、“為”這樣沒有實際意義的詞(停用詞)。因此,我們需要通過TF-IDF的方法進行預處理。

TF-IDF指在上出現得越頻繁的一些詞,也就是說越是大眾貨色的詞。那我們認為,對于區分不同內容的貢獻度就越低。他們的權重應該降低,這個權重就是(IDF)。

字詞的重要性隨著它在文件中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。

舉一個例子說明一下:

  • 文章1:我喜歡動漫電視??;
  • 文章2:我愛科幻動作電影;
  • 文章3:我喜歡動畫科幻電影。

在計算IDF時,如果該詞語不在語料庫中,就會導致被除數為零,因此一般情況下會加1為了簡便計算,分母只包含改詞的文檔數,公式如下:

計算結果如下:

  • 文章1:(0.045,0,0.12,0,0.045,0,0,0)
  • 文章2:(0,0.096,0,0.036,0,0.096,0.096,0.036)
  • 文章3:(0.036,0,0,0.036,0.036,0,0.036,0)

在此過程中完成了文章向向量的轉化。

(3)計算相似度

算距離度量常用的算法:

歐式距離

歐式距離是最常見的距離度量,衡量的是多維空間中各點之間的絕對距離,公式如下:

根據距離度量越大差異越大,相似度如下:文章1,文章3> 文章2,文章3> 文章1,文章2。

閔可夫斯基距離

P是一個變參數,當?P=1?時,就是曼哈頓距離當?P=2?時,就是歐氏距離。

曼哈頓距離

和歐氏距離非常相似(把平方換成了絕對值,拿掉了根號),公式如下:

  1. Dist(文章1,文章2=|0.045|+|0.096|+|0.12|+|0.036|+|0.045|+|0.096|+|0.036|=0.47
  2. Dist(文章1,文章3)=0.21
  3. Dist(文章2,文章3)=0.264

與歐式距離結果類似。

算相似度度量, 常用的算法:

余弦相似度

余弦相似度用向量空間中兩個向量夾角的余弦值,作為衡量兩個個體間差異的大小。相比距離度量,余弦相似度更加注重兩個向量在方向上的差異,而非距離或長度上。

公式如下:

根據相似度量越小,相似度如下:文章1,文章3> 文章2,文章3> 文章1,文章2。

皮爾遜相似系數

即相關分析中的相關系數r,分別對X和Y基于自身總體標準化后計算空間向量的余弦夾角。

公式如下:

Jaccard相似度

卡德相似度,指的是文本A與文本B中交集的字數除以并集的字數,杰卡德相似度與文本的位置、順序均無關,并且公式非常簡單:

  • Jaccard(文章1,文章2) =0
  • Jaccard(文章1,文章3)=3/8
  • Jaccard(文章2,文章3)=3/8

相似度結果如下:文章2,文章3=文章1,文章3>文章1,文章2。

使用哪種方法計算相似度都可以,沒有一個明確的答案誰好誰壞,相反,我們怎么定義這種度量標準,如何實現精細化的量化?這相對來說更加重要些。

總結

優點:

  1. 用戶之間具有獨立性:每個用戶的推薦都是根據用戶自身的行為所獲得的,與其他人無關;
  2. 好的可解釋性:你可以向用戶解釋為什么會給他推薦這些內容;
  3. 冷啟動快捷:對于新加入的物品可以直接在推薦結果中曝光。

缺點:

  • 度量標準難定義:上面的例子為文章,我們可以通過 tf-idf? 抽取文章的特征,但是我們在大多數的情況下很難從項目中抽取特征,比如:視頻等多媒體內容中,信息的都蘊含在高緯度中,很難進行抽取。
  • 無法挖掘用戶的潛在興趣:我們推薦的內容只是根據用戶過去的喜好,因此推薦的內容也跟用戶過去喜好的相似。
  • 新用戶無法推薦:由于新用戶沒有瀏覽歷史,因此無法獲得用戶的喜好。

協同過濾推薦 Collaborative Filtering

1. 基本原理

對于每個用戶,采集對每個內容的消費行為,量化構建用戶-內容行為矩陣,通過該矩陣的分析處理計算內容-內容的兩兩相似度。

2. 主要步驟

(1)用戶行為的采集

用戶的反饋通常分為兩種:一種是正反饋行為,一種是負反饋行為。

在正反饋行為中還分為顯性和隱形兩種,,比如說:評價、分享、點贊、收藏、下載等等。用戶主動參與的,認為是一個正反饋顯性的行為,比如:用戶頁面的停留時間,播放視頻等自然操作行為,認為是一個正反饋的隱形行為。

但是由于我們在實際收集數據中,采集到用戶正反饋的顯性行為比較少,往往需要隱形的數據幫助我們推薦更精準的量化。負反饋行為就是負向評價,或者投反對票,不喜歡等。

(2)用戶-內容行為矩陣構建

劃定采集行為的窗口期:從現在開始我要回溯多久的一個數據,確定窗口期的原因在于我們的內容會發生變化,并且用戶的興趣也可能發生變化,因此,具體的窗口期需要根據各個業務領域而定,比如新聞類,窗口期不宜設置過長。

定義正負反饋行為的權重:一般來說,顯性的正反饋的權重大于隱形的正反饋,比如正向的評價,肯定會比頁面停留時間的權重要高,而負反饋的權重需要根據用戶行為的深淺進行判斷,比如:用戶如果明確點擊了不喜歡,或者一個負向的評價,則可以認為是一個權重比較高的行為。

數據的預處理(降噪和歸一化):

  • 降噪:數據是用戶使用過程中產生的,因此會存在大量的噪音和誤操作,需要將這些數據進行過濾,比如:在用戶的生命周期中,只產生了一到兩次的正反饋行為,這種用戶的參考價值比較低。
  • 歸一化:目的是讓大的輸入,大的信號映射到小范圍內。

假設一個產品用戶查看次數為X1、分享次數X2權重分別為Y1、Y2,加權求和 ?X1 Y1+ X2 Y2?。

假設 X1屬于[10~1000],X2屬于[0~1],由于X1遠遠大于X2,那么X2 Y2就可以忽略不計了,整個加權求和就只由X1 Y1決定,小的信號被淹沒了。

常用的函數:

  • y=(x-MinValue)/(MaxValue-MinValue) (歸一到0 1 之間)
  • y=0.1+(x-min)/(max-min)*(0.9-0.1)(歸一到0.1-0.9之間)

(3)矩陣分析計算相似度

此過程中依舊是基于向量,計算兩個向量之間的距離或者計算相似度,算法與上面CB中基本一致。

在用戶-行為矩陣中,有兩種維度計算方式:

  1. 將用戶對所有的物品的偏好,作為一個向量計算用戶之間的相似度。
  2. 將所有用戶對某個物品的偏好,作為向量來計算物品之間的相似度。

3. 例子

(1)用戶行為-矩陣的構建

收集到如下正反饋行為及賦權規則:查看=1、收藏=4、分享=1。

用戶-行為矩陣:每個單元格代表了用戶在該影片的行為量化后的結果。

數據預處理

(2)計算相似度

基于用戶維度

首先計算用戶與其他用戶在商品維度上的相似性,每一個用戶都可以用一個向量表示,首先計算第一個用戶與其他用戶的余弦相似度。

小二的向量可以表示為(4,3,0,0,5,0),其他類似:

Sim(小二,小三)>Sim(小二,小四)> Sim(小二,小五)> Sim(小二,小六) >Sim(小七)。

由結果可以看出,小二,小三的相似度高,和小七完全不相似,根據此計算每個用戶之間的相似度。

首先找到與小二最相似的N個用戶,這個n=2,最相近的用戶為小三、小四,且除去小二的看過的影片還有影片3、影片4。

  • 影片3=(0.7*4+0.6*5)/(0.7+0.6)=4.5
  • 影片4=(0.6*3)/0.6=3.0

因此向用戶推薦影片3和影片4。

基于商品維度

每一個影片都可以通過向量表示,影片1的向量可以表示為(4,5,4,0,0,0)。

根據此計算每影片之間的相似度。

小二,看了影片1、影片2、影片5。

  • 與影片1相似的有:影片3、影片5
  • 與影片2相似的有:影片6、影片5
  • 與影片5相似的有:影片3、影片1、

應該先用戶推薦:影片3和影片6。

總結

優點:不依賴對于內容的理解,甚至可夸異構內容實現推薦。

缺點:

  • 頭部內容的問題:非常熱門的內容容易覆蓋用戶行為更多,比如最近比較火的《延禧攻略》,如果僅僅基于行為來說的話,會有很多用戶都會產生正向的行為,這樣計算出來了,就會更很多內容有相似性,因此還需要進行降權處理。
  • 業務關聯導致的相關性:在內容的生命周期內,由于業務關聯導致用戶既看了這個,又看了那個。
  • 其他:容易受臟數據污染,新內容冷啟動慢,結果解釋性差。

 

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

題圖來自 Pixabay,基于 CC0 協議

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

    來自北京 回復
  2. 非常優秀了

    來自廣東 回復
  3. 學習了,本科論文就是用的jaccard相似度,現在都忘了

    回復
  4. 膩害

    回復