常用推薦算法介紹

23 評論 66339 瀏覽 619 收藏 13 分鐘

在本文中,作者主要是介紹了常見推薦算法的基本原理。

0. 從余弦公式講起

先思考一個問題,我們怎么量化兩個事物的相似度呢?當然,這也是推薦系統(tǒng)需要多次面臨的問題。

我們知道向量的概念,可以形象化地表示為帶箭頭的線段。二維空間向量表示方法為,多維空間向量表示為,向量是描述事物一種很好模型。

比如,假設用戶有5個維度:

  1. 對服裝的喜歡程度(1~5分)
  2. 對家居的喜歡程度(1~5分)
  3. 對3C的喜歡程度(1~5分)
  4. 對圖書的喜歡程度(1~5分)
  5. 對化妝品的喜歡程度(1~5分)
  • 一個用戶A:對服裝的喜歡程度3,對家居的喜歡程度1,對3C的喜歡程度4,對圖書的喜歡程度5,對化妝品的喜歡程度0,用戶A可以用向量表示為
  • 一個用戶B:對服裝的喜歡程度3,對家居的喜歡程度4,對3C的喜歡程度5,對圖書的喜歡程度0,對化妝品的喜歡程度2,用戶B可以用向量表示為

這兩個用戶的相似程度是多大呢?既然我們把這兩個用戶表示為向量,那么我們可以考慮向量怎么判斷相似性。沒錯,看這兩個向量的夾角。夾角約小,則相似度越大。

對于向量而言,他們的在多維空間的夾角可以用向量余弦公式計算:

余弦相似度的值本身是一個0~1的值,0代表完全正交,1代表完全一致。就剛才用戶A和用戶B的例子而言,我們可以知道他們的相似度為:

余弦公式本身應用范圍很廣,量化相似度在搜索推薦,商業(yè)策略中都是常見問題,余弦公式是很好的解決方案。就推薦本身而言,計算內(nèi)容的相似度,計算用戶的相似度,計算用戶類型的相似度,計算內(nèi)容類型的相似度,這些都是可以應用的場景。

1. 推薦的本質(zhì)是什么

推薦和搜索本質(zhì)有相似的地方。搜索滿足用戶從海量數(shù)據(jù)中迅速找到自己感興趣內(nèi)容的需求,屬于用戶主動獲取。推薦則是系統(tǒng)從海量數(shù)據(jù)中根據(jù)獲取到的用戶數(shù)據(jù),猜測用戶感興趣的內(nèi)容并推薦給用戶,屬于系統(tǒng)推薦給用戶。本質(zhì)上都是為了在這個信息過載的時代,幫助用戶找到自己感興趣的東西。

推薦系統(tǒng)有很多種形式。運營或者編輯篩選出自己認為最好的內(nèi)容放在首頁,廣義上講這也是一種推薦。不過這個不在我們本期文章的討論范圍,本期主要是討論系統(tǒng)級別的推薦。這里主要介紹四類常見的推薦方法:

  • 基于內(nèi)容的推薦
  • 基于內(nèi)容的協(xié)同過濾
  • 基于用戶的協(xié)同過濾
  • 基于標簽的推薦

2. 基于內(nèi)容的推薦

基于內(nèi)容的推薦是基礎(chǔ)的推薦策略。如果你瀏覽或購買過某種類型的內(nèi)容,則給你推薦這種類型下的其他內(nèi)容。

以電影推薦為例。比如你之前看過《盜夢空間》,則系統(tǒng)會關(guān)聯(lián)數(shù)據(jù)庫中盜夢空間的信息。系統(tǒng)會推薦克里斯托弗·諾蘭導演的其他作品,比如《致命魔術(shù)》;系統(tǒng)會推薦主演里昂納多的其他作品,比如《第十一小時》。

如果這個電影系統(tǒng)的數(shù)據(jù)被很好地分類,那么推薦系統(tǒng)也會給用戶推薦這個分類下的其他作品。盜夢空間如果被歸為科幻作品,那么可能會推薦其他科幻作品,比如《星際迷航》。

基于內(nèi)容的推薦好處在于易于理解,但是壞處是推薦方式比較依賴于完整的內(nèi)容知識庫的建立。如果內(nèi)容格式化比較差,那么基于內(nèi)容的推薦就無法實行。同時如果用戶留下的數(shù)據(jù)比較少,則推薦效果很差,因為無法擴展。

3. 基于內(nèi)容的協(xié)同過濾

協(xié)同過濾(Collaborative Filtering)與傳統(tǒng)的基于內(nèi)容過濾直接分析內(nèi)容進行推薦不同,協(xié)同過濾會分析系統(tǒng)已有數(shù)據(jù),并結(jié)合用戶表現(xiàn)的數(shù)據(jù),對該指定用戶對此信息的喜好程度預測。

基于內(nèi)容的協(xié)同過濾(item-based CF),通過用戶對不同內(nèi)容的評分來評測內(nèi)容之間的相似性,基于內(nèi)容之間的相似性做出推薦;最典型的例子是著名的“啤酒加尿布”,就是通過分析知道啤酒和尿布經(jīng)常被美國爸爸們一起購買,于是在尿布邊上推薦啤酒,增加了啤酒銷量。

需要計算用戶u對物品j的興趣,公式如下:

這里N(u)表示用戶有關(guān)聯(lián)的商品的集合,wji表示物品j和i的相似度,rui表示用戶u對物品i的打分,示例如下:

這里還有兩個問題沒有仔細描述,如何打分,如何計算相似度。

打分的話需要根據(jù)業(yè)務計算,如果有打分系統(tǒng)最好,沒有打分系統(tǒng),則需要根據(jù)用戶對這個物品的行為得到一個分數(shù)。

計算相似度除了之前我們提到的余弦公式,還可以根據(jù)其他的業(yè)務數(shù)據(jù)。比如對于網(wǎng)易云音樂而言,兩首歌越多的被加入兩個歌單,可以認為兩首歌越相似。對于亞馬遜而言,兩個商品越多的被同時購買,則認為兩個商品相似。這里其實是需要根據(jù)產(chǎn)品的具體情況進行調(diào)整。

4. 基于用戶的協(xié)同過濾

基于用戶的協(xié)同過濾(user-based CF),通過用戶對不同內(nèi)容的行為,來評測用戶之間的相似性,基于用戶之間的相似性做出推薦。這部分推薦本質(zhì)上是給相似的用戶推薦其他用戶喜歡的內(nèi)容,一句話概括就是:和你類似的人還喜歡下列內(nèi)容。

需要計算用戶u對物品i的興趣,公式如下(可以和基于物品的協(xié)同過濾仔細對比):

這里N(i)表示對物品i有過行為的用戶集合,wuv使用用戶u和用戶v的相似度,rvi表示用戶v對物品i的打分,示例如下:

同樣的,這里計算相似度如果用到余弦公式,其實最主要的是選好維度。對于音樂而言,可能是每首歌都作為一個維度,對于電商而言,也可以是每個商品都是一個維度。當然,用一些可理解的用戶標簽作為維度也是可以的。

5. 基于標簽的推薦

標簽系統(tǒng)相對于之前的用戶維度和產(chǎn)品維度的推薦,從結(jié)構(gòu)上講,其實更易于理解一些,也更容易直接干預結(jié)果一些。關(guān)于tag和分類,基本上是互聯(lián)網(wǎng)有信息架構(gòu)以來就有的經(jīng)典設計結(jié)構(gòu)。內(nèi)容有標簽,用戶也會因為用戶行為被打上標簽。通過標簽去關(guān)聯(lián)內(nèi)容。

需要計算用戶u對物品i的興趣,公式如下(可以和基于物品的協(xié)同過濾仔細對比):

這里N(u.,i)表示用戶u和物品i共有的標簽,wuk使用用戶u和標簽k的關(guān)聯(lián)度,rki表示標簽k和物品i的關(guān)聯(lián)性分數(shù),示例如下:

標簽查找的方法這里有很大可以發(fā)揮的空間,比如,通過知識庫進行處理,或者語義分析處理。而對于一些設計之初就有標簽概念的網(wǎng)站, 就比較容易,比如豆瓣和知乎。對于知乎而言,公共編輯的標簽是天然的標簽內(nèi)容,對于知乎的用戶而言,瀏覽回答關(guān)注等行為則是天然的用戶標簽素材。

6. 總結(jié)

對于推薦而言,這幾種基本的方法彼此之前都有些應用場景的差別:比如基于知識的推薦,這是比較老舊的推薦方法,但是對于系統(tǒng)和結(jié)構(gòu)比較好的內(nèi)容,則低成本且高效。比如基于內(nèi)容的協(xié)同過濾,就適用于內(nèi)容比較有限,但是用戶數(shù)特別多的情況,比如電商公司。比如基于用戶的協(xié)同過濾,則比較容易根據(jù)用戶的興趣點,發(fā)覺熱點內(nèi)容,比如新聞門戶。對于基于標簽的推薦,有標簽系統(tǒng)的很占便宜,它在靈活性和可控制性上都好一些,但是做好很難。

本期主要是介紹了常見推薦算法的基本原理,那么在推薦系統(tǒng)策略設計的時候,有哪些需要特別注意的地方呢?我們怎么衡量一個推薦系統(tǒng)的優(yōu)劣呢?推薦系統(tǒng)有哪些典型的應用場景呢?歡迎關(guān)注專欄,繼續(xù)閱讀下期。

#專欄作家#

潘一鳴,公眾號:產(chǎn)品邏輯之美,人人都是產(chǎn)品經(jīng)理專欄作家。畢業(yè)于清華大學,暢銷書《產(chǎn)品邏輯之美》作者;先后在多家互聯(lián)網(wǎng)公司從事產(chǎn)品經(jīng)理工作,有很多復雜系統(tǒng)的構(gòu)建實踐經(jīng)驗。

本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

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

    來自浙江 回復
  2. “比如對于網(wǎng)易云音樂而言,兩首歌越多的被加入兩個歌單,可以認為兩首歌越相似。”你好,這個是不是寫錯了呢?兩首歌越多被加入同一個歌單,可認為兩首歌越相似?(不知道是不是我理解有偏差。)

    回復
  3. 最好舉一些例子,這樣看起來很生硬,若不是提前看了別人的文章,根本不懂

    來自廣東 回復
  4. 作者一個文科產(chǎn)品經(jīng)理,懂了這些數(shù)學知識,不簡單了

    來自上海 回復
  5. 對于一個文科生。表示一臉懵逼。

    回復
  6. 對于剛?cè)胨阉骱蛿?shù)據(jù)分析的新人,入門學習,有沒有推薦的書籍呢(淘寶電商)

    來自浙江 回復
  7. 寫的真好,學到很多東西

    來自上海 回復
  8. “余弦相似度的值本身是一個0~1的值”,這句話不夠嚴謹。

    來自上海 回復
  9. 寫的很好,果然是沒有對比就沒傷害?。?!

    來自浙江 回復
  10. 對于剛?cè)胨阉餍袠I(yè)的產(chǎn)品運營新人,想快速了解推薦及搜索的相關(guān)內(nèi)容,有沒有推薦的書籍呢(新聞類產(chǎn)品)

    回復
    1. 《推薦算法實踐》,這個作者寫的這四種方法,都可以歸納為基于物與物的推薦和基于人與人的推薦。

      來自北京 回復
  11. 請教作者前輩一個問題:對于剛上線的項目,應用第3類和第4類算法時如果沒有最初始的種子數(shù)據(jù),也就是沒有“1.6”或者“0.8”這樣的初值,如何啟動這個推薦呢?

    來自北京 回復
    1. 冷啟動問題。我們項目中采取的方法是采用基于內(nèi)容推薦的算法為用戶推薦相似的item作為過渡,待積累了用戶行為數(shù)據(jù)之后可以切換至CF或者多種推薦算法結(jié)合的方式。

      來自陜西 回復
  12. 基于內(nèi)容的推薦雖然難做,但卻是用戶體驗最好的一種,因為它能真正做到關(guān)聯(lián)推薦,而不是相似推薦。所有基于相似的推薦最大的問題就是重復推薦,我剛買量自行車還給我推薦自行車,這時候推薦任何周邊產(chǎn)品都可以就是不該推薦重復品類的東西,可是目前大多網(wǎng)站都在犯這類錯誤。

    來自北京 回復
    1. 推薦算法不是相似推薦,而是相關(guān)推薦。內(nèi)容推薦上限是遠低于推薦算法的推薦的。

      來自北京 回復
  13. 基于內(nèi)容推薦特別難做,需要產(chǎn)品有一個完整的內(nèi)容體系,并且這些內(nèi)容還要在某一個場景有所聯(lián)系最好。這也是我最近在給界面添加一些推薦功能時所煩躁的,只能一個流程需要一個功能時臨時添加,等這些界面功能都添加好了我還要想辦法讓它們有聯(lián)系,做到這些不容易。。。哎

    來自廣東 回復
  14. 謝謝分享,很棒

    來自廣東 回復
  15. 從第三段開始,三個圖看不懂,能不能解釋下?

    來自上海 回復
    1. 圖只是在解釋上面的公式。如果仔細看還沒看明白的話,可以看下書《推薦系統(tǒng)實踐》。

      來自北京 回復
  16. 寫的很完整,收藏了慢慢看。

    來自江蘇 回復
  17. 挺好,學渣看看公式表示看不懂

    來自廣東 回復
  18. 不愧是THU出來的學院派

    來自廣東 回復
    1. 客氣了 ??

      來自北京 回復