常用推薦算法介紹

23 評論 66154 瀏覽 617 收藏 13 分鐘

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

0. 從余弦公式講起

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

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

比如,假設(shè)用戶有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可以用向量表示為

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5. 基于標(biāo)簽的推薦

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

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

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

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

6. 總結(jié)

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

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

#專欄作家#

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

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

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

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

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

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

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

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

    來自浙江 回復(fù)
  7. 寫的真好,學(xué)到很多東西

    來自上海 回復(fù)
  8. “余弦相似度的值本身是一個0~1的值”,這句話不夠嚴(yán)謹(jǐn)。

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

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

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

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

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

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

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

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

    來自廣東 回復(fù)
  14. 謝謝分享,很棒

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

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

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

    來自江蘇 回復(fù)
  17. 挺好,學(xué)渣看看公式表示看不懂

    來自廣東 回復(fù)
  18. 不愧是THU出來的學(xué)院派

    來自廣東 回復(fù)
    1. 客氣了 ??

      來自北京 回復(fù)