如何構建推薦系統
1.概述
最近有被諮詢到一些關於推薦系統的問題,今天筆者將為大家分享一些關於如何構建一個推薦系統。
2.內容
2.1 什麼是推薦系統?
推薦系統是一種資訊過濾系統,它旨在預測用戶對某項商品的評價。然後,此預測的評分用於向用戶推薦商品。預測評分較高的商品將推薦給用戶,這個推薦系統用於推薦範圍廣泛的項目。比如,它可以用於推薦電影、產品、影片、影片、音樂、新聞、書籍、衣服、遊戲、酒店、餐飲、路線等等。幾乎所有的大公司都使用它來增強業務,豐富用戶的體驗,例如騰訊、優酷、愛奇藝這類推薦影片,淘寶、京東推薦商品,微信、QQ推薦好友等。
2.2 USER-ITEM矩陣
在上圖中的USER-ITEM矩陣中,每一行代表一個用戶,每一列代表一個物品,每一個單元格代表一個用戶對一個物品的評分。總共有N個用戶和M和物品。這裡Aij是用戶Ui對物品Ij的評分,Aij級別範圍這裡定義為1到5。如果一個矩陣表示一個用戶Ui是否觀察了一個物品Ij,同樣也可以使用二進位來表示,例如這裡Aij要麼是0,要麼是1。
USER-ITEM矩陣是非常稀疏的矩陣,這意味著此矩陣中的許多單元格都是空的。因為,單個用戶無法對所有的物品進行評分。在現實情況中,一個用戶給總物品數的評分不到1%。因此,這個矩陣中大約99%的單元都是空的。這些空單元格可以使用NaN表示,而不是數字。假如,N是100萬,M是1萬,那麼N*M=106*104=1010就是一個非常大的數字。現在一個普通用戶給5個物品打分,那麼平均給出的評級總數將是5*100萬=5*106評級。矩陣稀疏度計算公式如下:
矩陣稀疏度 = 空單元數 / 總單元數
將案例中的值帶入公式計算,矩陣稀疏度 = (1010-5*106) / 1010 = 0.9995
這意味著99.95%的單元格都是空的,這實際上是極端稀疏的。而推薦系統的任務是,假設一個用戶Ui喜歡物品I1、I5、I7。然後我們必須向用戶Ui推薦一個他/她最可能喜歡的Ij物品。
2.3 推薦系統類型
下面我們通過一些例子來理解推薦系統的類型。
2.3.1 協同過濾
假設有4個用戶和4個物品如上圖所示,4個用戶都購買了物品1和物品2。用戶1、用戶2、用戶3也購買了物品3,但是用戶4還沒有看到物品3.因此,物品3可以推薦給用戶4,現在只有用戶3購買了物品4,因此,我們不能向用戶4推薦物品4,因為只有用戶4購買了物品4,而其他用戶沒有購買物品4,這就是協作過濾的工作原理。
注意:
在這裡,用戶1、用戶2、用戶3,這三個用戶過去都統一購買了物品3,因此在未來用戶4可能會喜歡物品3,這是用戶1、用戶2、和用戶3過去對物品3的統一喜好
2.3.2 內容過濾
基於內容的過濾在方法上與經典的機器學習技術相似。它需要一種表示物品Ij和用戶Ui的方法。在這裡,我們需要收集關於物品Ij和用戶Ui的資訊,然後我們需要創建物品Ij和用戶Ui的特性。最後,我們將這些特徵結合起來,並將它們輸入到機器學習模型中進行訓練。這裡Label是用戶Ui對物品Ij給出的評分。
一旦我們有了上面提到的關於物品和用戶的資訊,我們就可以創建一個物品向量,其中應該包含關於上面提到的物品資訊。然後,我們可以類似的創建一個用戶向量,該向量應該包含關於上述用戶的資訊,我們可以為每個用戶Ui和物品Ij生成特性。最後結合這些特性,建立適合於機器學習模型的大數據集。
注意:
在這裡,剛剛解釋了一種創建基於內容的過濾特性的近似方法。這些功能應經過精心設計,以便在不相互依賴的情況下直接影響評分(標籤)。最後儘可能創建獨立的功能,同時它們應該非常依賴於評分(標籤),這意味著它們應該直接影響評分(標籤)。
2.3.3 相似過濾
2.3.3.1 用戶相似
上圖是一個非常簡單的基於用戶相似的推薦。實現步驟如下:
第一步:構建用戶與用戶之間的相似矩陣
如上圖,每一行代表一個用戶,其中包含一個用戶對所有物品給出的評分。例如,對應於用戶Ui的行是大小為m的向量。因此,上述矩陣的每一行都是一個列向量(默認情況下,每個向量都是列向量),大小為m。現在,我們可以構造一個用戶之間的相似矩陣,它將是一個大小為n*n的平方對稱矩陣,在這裡,我們可以使用餘弦相似度計算兩個用戶之間的相似度。
在這裡,兩個用戶將是相似的基礎上,他們給出了相似的評分。如果任何兩個用戶是相似的,那麼這意味著他們都對物品給出了非常相似的評分,因為這裡的用戶向量只不過是USER-ITEM矩陣的一行,而該行又包含了用戶對物品給出的評分。因為餘弦相似度可以從0到1,並且1表示最高相似度,所以所有對角線元素都將是1,因為用戶與用戶之間的相似度最高。這裡Sim12是用戶U1和用戶U2的相似性得分。以此類推,Simij是用戶Ui和用戶Uj的相似性得分。
第二步:找到相似用戶
第三步:選擇相似用戶喜歡的物品
第四步:推薦物品
2.3.3.2 物品相似
第一步:創建物品之間的相似矩陣
在這裡,兩個物品將在所有用戶對兩個物品給出相似評分的基礎上相似。如果任何兩個物品是相似的,那麼這意味著所有用戶對它們都給出了非常相似的評分,因為這裡的物品向量只是USER-ITEM矩陣的列,而USER-ITEM矩陣的列又包含用戶對物品的評分。因為餘弦相似度可以從0到1,並且1表示最高相似度,所以所有對角線元素都將是1,因為具有相同項的相似度最高。這裡Sim12是用戶I1和用戶I2的相似性得分。以此類推,Simij是用戶Ii和用戶Ij的相似性得分。
第二步:找出相似的物品然後推薦
2.3.4 矩陣分解
關於矩陣分解是比較有意思的,這裡我們可以來看看一個計算公式:
這裡以日常生活中的電影來作為例子。例如,每個用戶看電影的時候都有偏好,這些偏好可以直觀的理解成:喜劇、動作、愛情、動漫等。特性矩陣(用戶)表示的就是用戶對這些因素的喜歡程度。同樣,每一部電影也可以用這些因素描述,因此物品矩陣表示的就是每一部電影這些因素的含量,也就是電影的類型。這樣子兩個矩陣相乘就會得到用戶對這個電影的喜歡程度。
3.總結
推薦系統的類型,簡要概述如下:
- 協同過濾:簡單來說,就是利用某興趣相投,擁有功能經驗的群體喜好來推薦用戶感興趣的資訊,個人通過合作的機制給予資訊相當程度的評分,並記錄下來以達到過濾的目的,進而幫助別人篩選資訊,回應不一定局限於特別感興趣的,特別不感興趣資訊的記錄也是相當重要。
- 內容過濾:通過在抓取每個物品的一系列特徵來構建物品檔案,以及用戶購買的商品特徵來構建基於內容的用戶檔案。用戶檔案和商品檔案都以使用資訊提取技術或資訊過濾技術,提取的關鍵詞集合來表示。鑒於兩個檔案都以權重向量的形式來表,則相似度分別則可以使用如餘弦近似度方程等啟發式方程來計算得到。其他的技術如分類模型,構建一個統計方法或者數據挖掘方法,來判斷文檔內容和用戶是否相關。
- 相似過濾:找到和目標用戶興趣相似的用戶集合,以及找到這個集合中的用戶喜歡的,且目標用戶沒有聽說過的物品推薦給目標用戶(基於用戶相似)。計算物品之間的相似度,以及根據物品的相似度和用戶的歷史行為給用戶生成推薦列表(基於物品相似)。
- 矩陣分解:簡單來說,就是每一個用戶和每一個物品都會有自己的一些特性,用矩陣分解的方法可以從評分矩陣中分解出用戶(如特性矩陣、物品矩陣)。這樣做的好處其一是得到了用戶的偏好和每一件物品的特性,其二是分解了矩陣的維度。
4.結束語
這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或發送郵件給我,我會盡我所能為您解答,與君共勉!
另外,部落客出書了《Kafka並不難學》和《Hadoop大數據挖掘從入門到進階實戰》,喜歡的朋友或同學, 可以在公告欄那裡點擊購買鏈接購買部落客的書進行學習,在此感謝大家的支援。關注下面公眾號,根據提示,可免費獲取書籍的教學影片。