推薦系統(tǒng)[一]:超詳細(xì)知識介紹,一份完整的入門指南,解答推薦系統(tǒng)相關(guān)算法流程

1. 推薦算法的初步理解
如果說互聯(lián)網(wǎng)的目標(biāo)就是連接一切,那么推薦系統(tǒng)的作用就是建立更加有效率的連接,推薦系統(tǒng)可以更有效率的連接用戶與內(nèi)容和服務(wù),節(jié)約了大量的時間和成本。
1.1?推薦系統(tǒng)主要解決問題
任務(wù)一:挖掘長尾:幫助用戶找到想要的物品(音樂、商品、新聞),挖掘長尾效應(yīng)中的非流行市場。
我們在網(wǎng)上沖浪時,常常被大量的物品信息所淹沒。從海量信息中找到自己想要的信息,實屬不易(如面對淘寶各種各樣的打折活動不知所措)。在經(jīng)濟(jì)學(xué)上,有一個經(jīng)典的名詞叫“長尾效應(yīng)”,該效應(yīng)的內(nèi)容是:從人們需求的角度上看,大多數(shù)的需求會集中在某一小部分,而這部分我們可以稱之為流行,而分布在剩余部分的需求是個性化的、零散的和小量的需求。這就意味著,有大量資源是鮮有人問津的,這不僅造成了資源利用上的浪費,也會使口味偏小眾的用戶被流行的內(nèi)容所淹沒。
任務(wù)二:降低信息過載
進(jìn)入互聯(lián)網(wǎng)時代后,信息量已處于爆炸的狀態(tài)。如果把所有內(nèi)容都展示出來,用戶肯定無法全部接收,這必然會造成信息過載,信息的利用率將十分低下。因此就需要推薦系統(tǒng)來幫我們把低價值的信息給篩選掉。
任務(wù)三:提高站點的點擊率、轉(zhuǎn)化率
好的推薦系統(tǒng)總是能給用戶推薦出想要的內(nèi)容,讓用戶更頻繁地訪問站點,增強(qiáng)用戶黏度。
任務(wù)四:加深對用戶的了解,為用戶提供個性化的定制服務(wù)
當(dāng)系統(tǒng)成功推薦了一個用戶感興趣的內(nèi)容后,我們對該用戶的興趣愛好就越清晰。當(dāng)我們精準(zhǔn)地描繪出每個用戶的形象后(精準(zhǔn)的用戶畫像),就可以為他們定制出一系列個性化的定制服務(wù),讓擁有各種各樣需求的用戶都能在我們平臺上得到滿足。
如果把推薦系統(tǒng)簡單拆開來看,推薦系統(tǒng)主要是由數(shù)據(jù)、算法、架構(gòu)三個方面組成。
數(shù)據(jù)提供了信息。數(shù)據(jù)儲存了信息,包括用戶與內(nèi)容的屬性,用戶的行為偏好例如對新聞的點擊、玩過的英雄、購買的物品等等。這些數(shù)據(jù)特征非常關(guān)鍵,甚至可以說它們決定了一個算法的上限。
算法提供了邏輯。數(shù)據(jù)通過不斷的積累,存儲了巨量的信息。在巨大的數(shù)據(jù)量與數(shù)據(jù)維度下,人已經(jīng)無法通過人工策略進(jìn)行分析干預(yù),因此需要基于一套復(fù)雜的信息處理邏輯,基于邏輯返回推薦的內(nèi)容或服務(wù)。
架構(gòu)解放了雙手。架構(gòu)保證整個推薦自動化、實時性的運行。架構(gòu)包含了接收用戶請求,收集、處理,存儲用戶數(shù)據(jù),推薦算法計算,返回推薦結(jié)果等。有了架構(gòu)之后算法不再依賴于手動計算,可以進(jìn)行實時化、自動化的運行。例如在淘寶推薦中,對于數(shù)據(jù)實時性的處理,就保證了用戶在點擊一個物品后,后續(xù)返回的推薦結(jié)果就可以立刻根據(jù)該點擊而改變。一個推薦系統(tǒng)的實時性要求越高、訪問量越大那么這個推薦系統(tǒng)的架構(gòu)就會越復(fù)雜。
1.2推薦系統(tǒng)的整體框架

推薦的框架主要有以下幾個模塊
協(xié)議調(diào)度:請求的發(fā)送和結(jié)果的回傳。在請求中,用戶會發(fā)送自己的 ID,地理位置等信息。結(jié)果回傳中會返回推薦系統(tǒng)給用戶推薦的結(jié)果。
推薦算法:算法按照一定的邏輯為用戶產(chǎn)生最終的推薦結(jié)果。不同的推薦算法基于不同的邏輯與數(shù)據(jù)運算過程。
消息隊列:數(shù)據(jù)的上報與處理。根據(jù)用戶的 ID,拉取例如用戶的性別、之前的點擊、收藏等用戶信息。而用戶在 APP 中產(chǎn)生的新行為,例如新的點擊會儲存在存儲單元里面。
存儲單元:不同的數(shù)據(jù)類型和用途會儲存在不同的存儲單元中,例如內(nèi)容標(biāo)簽與內(nèi)容的索引存儲在 mysql?里,實時性數(shù)據(jù)存儲在 redis 里,需要進(jìn)行數(shù)據(jù)統(tǒng)計的數(shù)據(jù)存儲在 TDW 里。
2.推薦系統(tǒng)
2.1 推薦算法流程介紹
推薦算法其實本質(zhì)上是一種信息處理邏輯,當(dāng)獲取了用戶與內(nèi)容的信息之后,按照一定的邏輯處理信息后,產(chǎn)生推薦結(jié)果。熱度排行榜就是最簡單的一種推薦方法,它依賴的邏輯就是當(dāng)一個內(nèi)容被大多數(shù)用戶喜歡,那大概率其他用戶也會喜歡。但是基于粗放的推薦往往會不夠精確,想要挖掘用戶個性化的,小眾化的興趣,需要制定復(fù)雜的規(guī)則運算邏輯,并由機(jī)器完成。
推薦算法主要分為以下幾步:
召回:當(dāng)用戶以及內(nèi)容量比較大的時候,往往先通過召回策略,將百萬量級的內(nèi)容先縮小到百量級。
過濾:對于內(nèi)容不可重復(fù)消費的領(lǐng)域,例如實時性比較強(qiáng)的新聞等,在用戶已經(jīng)曝光和點擊后不會再推送到用戶面前。
精排:對于召回并過濾后的內(nèi)容進(jìn)行排序,將百量級的內(nèi)容并按照順序推送。
混排:為避免內(nèi)容越推越窄,將精排后的推薦結(jié)果進(jìn)行一定修改,例如控制某一類型的頻次。
強(qiáng)規(guī)則:根據(jù)業(yè)務(wù)規(guī)則進(jìn)行修改,例如在活動時將某些文章置頂。
例如在抖音與快手的分發(fā)中:抖音強(qiáng)平臺基于內(nèi)容質(zhì)量分發(fā),快手輕平臺基于社交和興趣分發(fā),抖音:內(nèi)容質(zhì)量>關(guān)系>雙向互動??焓郑簝?nèi)容質(zhì)量 約等于 關(guān)系 > 雙向互動。抖音基于將內(nèi)容從小流量開始,其中表現(xiàn)優(yōu)質(zhì)的內(nèi)容將不斷的進(jìn)入更大的流量池中,最終進(jìn)入推薦池,形成 90 天+精品召回池,最終的結(jié)果也是優(yōu)質(zhì)內(nèi)容的熱度隨著時間推移逐漸累積增加,頭部內(nèi)容的集中度很高。

來源:方正證券《抖音 vs 快手深度復(fù)盤與前瞻-短視頻 130 頁分析框架》
2.1.1 召回策略
召回的目的:當(dāng)用戶與內(nèi)容的量級比較大,例如對百萬量級的用戶與內(nèi)容計算概率,就會產(chǎn)生百萬*百萬量級的計算量。但同時,大量內(nèi)容中真正的精品只是少數(shù),對所有內(nèi)容進(jìn)行一次計算將非常的低效,會浪費大量的資源和時間。因此采用召回策略,例如熱銷召回,召回一段時間內(nèi)最熱門的 100 個內(nèi)容,只需進(jìn)行一次計算動作,就可以對所有用戶應(yīng)用。
召回的重要性:雖然精排模型一直是優(yōu)化的重點,但召回模型也非常的重要,因為如果召回的內(nèi)容不對,怎么精排都是錯誤的。
召回方法:召回的策略不應(yīng)該是簡單的策略堆砌,而應(yīng)該是方法的相互補(bǔ)充。
熱銷召回:將一段時間內(nèi)的熱門內(nèi)容召回。
協(xié)同召回:基于用戶與用戶行為的相似性推薦,可以很好的突破一定的限制,發(fā)現(xiàn)用戶潛在的興趣偏好。
標(biāo)簽召回:根據(jù)每個用戶的行為,構(gòu)建標(biāo)簽,并根據(jù)標(biāo)簽召回內(nèi)容。
時間召回:將一段時間內(nèi)最新的內(nèi)容召回,在新聞視頻等有時效性的領(lǐng)域常用。是常見的幾種召回方法。
2.1.2 精排策略
精排模型的不同類別

精排模型的基本原理

2.2?常見推薦算法介紹

參考:Learning and Reasoning on Graph for Recommendation?http://staff.ustc.edu.cn/~hexn/slides/cikm19-tutorial-graph-rec.pdf
推薦算法大致可以分為以下幾種類型:
基于流行度的算法
協(xié)同過濾算法(collaborative filtering)
基于內(nèi)容的算法
基于模型的算法
混合算法
基于流行度的算法
更多內(nèi)容查看
項目原鏈接:https://blog.csdn.net/sinat_39620217/article/details/129046810
專欄鏈接:https://blog.csdn.net/sinat39620217/category12205194.html
2.2.1 基于流行度的算法
基于流行度的算法非常簡單粗暴,直接根據(jù)內(nèi)容的PV(Page View,訪問量)和UV(Unique Visitor,獨立訪客)等數(shù)據(jù)來進(jìn)行熱度排序來推薦給用戶。常見場景有熱歌榜、微博熱門話題、知乎熱榜等等。
這種類型的算法特點是簡單,適用于剛注冊不久的用戶(冷啟動)。但是其缺點也很明顯,無法針對特定的用戶進(jìn)行個性化的推薦,也就意味著一百個讀者只能讀出同一個哈姆雷特。當(dāng)然,也可以進(jìn)一步對基于流行度的算法進(jìn)行改進(jìn),使推薦內(nèi)容擁有一定程度的個性化,例如加入用戶分群特性,只把熱榜上的體育新聞推薦給體育迷,只把熱榜上的娛樂新聞推薦給喜歡看八卦新聞的用戶。
2.2.2 協(xié)同過濾算法
協(xié)同過濾算法(Collaborative Filtering)是一種十分常用的算法,在很多購物平臺中都會用到。協(xié)同過濾算法有兩種類型,分別是基于用戶(User)和基于物品(Item)的協(xié)同過濾算法。
a.基于用戶的協(xié)同過濾算法
步驟一:獲得每個用戶對各個物品的評價或喜愛程度(可通過瀏覽、收藏和購買等記錄來計算)。
步驟二:依據(jù)用戶對物品的評價計算出所有用戶之間的相似度。(也就是利用用戶對所有物品的評價來形容用戶)
步驟三:選出與當(dāng)前用戶最相似的K個用戶。
步驟四:將這K個用戶評價最高并且當(dāng)前用戶又沒有瀏覽過的N個物品推薦給當(dāng)前用戶。
b.基于物品的協(xié)同過濾算法
步驟一:與基于用戶的算法一樣,獲得獲得每個用戶對各個物品的評價或喜愛程度。
步驟二:依據(jù)用戶對物品的評價計算出所有物品之間的相似度。(也就是用所有用戶對物品的評價來形容物品)
步驟三:對于當(dāng)前用戶評價高的物品,找出與之相似度最高的N個物品。
步驟四:把這相似度最高的N個物品推薦給當(dāng)前用戶。
一個簡單的基于用戶的協(xié)同過濾算法例子。首先我們根據(jù)用戶對物品的評價構(gòu)建出一個用戶和物品的關(guān)聯(lián)矩陣,如下:

圖中的行是不同的用戶,列是不同的物品,單元格(x,y)的值則是x用戶對y物品的評價(或喜愛程度)。我們可以把某一行視為某一個用戶對所有物品偏好的向量,這樣把用戶向量化后,就可以計算出每兩個用戶之間的向量距離了,這里我們使用余弦相似度來作為向量距離。


如果我們要為用戶1推薦物品,則需要找出與用戶1相似度最高的K名用戶(設(shè)K=2)評價的物品,并且去掉用戶1已經(jīng)評價過的物品,最后按照評價大小進(jìn)行排序,推薦出N個物品(設(shè)N=2)給用戶1。

同樣地,接下來舉一個簡單的基于物品的協(xié)同過濾算法例子。
基于物品的計算方式大致相同,把用戶和物品的關(guān)聯(lián)矩陣中的某一列視為所有用戶對該物品的評價,這樣把物品向量化后,就可以計算出物品之間的相似度矩陣。

計算出所有物品之間的相似度如下。

最后,如果我們要為用戶1推薦物品,則需要先找到用戶1評價最高的物品。然后找到與該物品相似度最高且用戶1未有評價過的N(設(shè)N=2)個物品,將其推薦給用戶1。

2.2.3 基于內(nèi)容的算法
地位:最早被使用的推薦算法,年代久遠(yuǎn),但當(dāng)今仍然被廣泛使用,效果良好
定義:給用戶X推薦和之前喜歡過的物品相似的物品,即U2I2I,U2Tag2I
上面提到的兩種算法看起來很好很強(qiáng)大,通過進(jìn)一步改進(jìn)也能克服各種缺陷。但是有一個問題是,如果我是《哈利波特》的粉絲,我曾經(jīng)在商城買過一本《哈利波特與魔法石》。這時商城的書庫又上架了一本《哈利波特與死亡圣器》,顯然,我應(yīng)該會很感興趣。然而上面提到的算法這時候就都不太好使了,因此基于內(nèi)容的推薦算法就因運而生了。
這里舉一個簡單的例子,現(xiàn)在系統(tǒng)里有一個用戶和一條新聞。通過分析用戶最近的行為(可以是該用戶最近看過什么新聞)和新聞的文本內(nèi)容,提取出數(shù)個關(guān)鍵字,
將這些關(guān)鍵字作為屬性,也就可以把用戶和新聞向量化:
接著計算向量距離,得出用戶和該新聞的相似度,再根據(jù)相似度進(jìn)行推薦。在向量化的時候,我們也可以進(jìn)一步地改進(jìn)。如,在為一名喜歡看英超聯(lián)賽的足球迷推薦新聞時,如果有某一條新聞里存在體育、足球、英超關(guān)鍵詞,顯然前兩個詞都不如英超這個詞來得準(zhǔn)確。那么我們?nèi)绾卧谙到y(tǒng)里突顯這種“重要性”呢?這時候我們可以不再簡單地用0,1或者詞頻來進(jìn)行向量化,而是為每個詞都賦予權(quán)重。這個權(quán)重可以從整個新聞?wù)Z料庫中計算出來(如TF-IDF算法),在向量化時引入權(quán)重的影響,可以獲得更準(zhǔn)確的效果。
然而,又有一個問題出現(xiàn)了。要是用戶的關(guān)鍵詞是足球,而新聞的關(guān)鍵詞是德甲、英超,那么按照上面方法計算出的相似度為0。顯然這不符合常理,在此,我們引入主題聚類:

我們可以通過預(yù)訓(xùn)練好的Word2Vec對關(guān)鍵詞進(jìn)行表征,然后再聚類出多個主題,最后用主題代替關(guān)鍵詞來向量化文本。這樣,足球和德甲、英超等關(guān)鍵詞就可以通過主題來關(guān)聯(lián)在一起了。
基于內(nèi)容的推薦算法能夠很好地解決冷啟動問題,同時也不會受熱度的限制,因為它是直接基于內(nèi)容進(jìn)行匹配的。然而,它也會存在一些缺陷,如過度專業(yè)化(over-specialisation),該缺陷會一直給用戶推薦內(nèi)容相關(guān)的物品,而失去了推薦內(nèi)容的多樣性和讓用戶接觸新內(nèi)容的機(jī)會。
c.基于內(nèi)容的推薦系統(tǒng)demo
更多內(nèi)容查看
項目原鏈接:https://blog.csdn.net/sinat_39620217/article/details/129046810
專欄鏈接:https://blog.csdn.net/sinat39620217/category12205194.html
2.2.4 精排模型——邏輯回歸為例
2.2.5 融合算法
實際上,現(xiàn)實世界的推薦系統(tǒng)往往都不會只用某一種算法來構(gòu)建。一些比較大型的系統(tǒng)甚至?xí)诤蠑?shù)十種算法。我們可以通過加權(quán)、變換、層疊等多種方法來綜合不同算法的推薦結(jié)果,或者是在不同的計算環(huán)節(jié)(如召回,排序等)中運用不同的算法來混合,達(dá)到更貼合實際業(yè)務(wù)的需要。
2.3 算法衡量指標(biāo)以及獲得推薦效果
2.3.2 推薦效果評估
3.用戶畫像(提高推薦算法效果的大殺器)
3.1 原始數(shù)據(jù)
3.2 事實標(biāo)簽
3.3 模型標(biāo)簽
3.4 內(nèi)容畫像
更多內(nèi)容查看
項目原鏈接:https://blog.csdn.net/sinat_39620217/article/details/129046810
專欄鏈接:https://blog.csdn.net/sinat39620217/category12205194.html
4.結(jié)巴分詞用于內(nèi)容相似推薦
計算物品最相似的其他物品,直接用于I2I相似推薦,或者U2I2I推薦
以文章為例,進(jìn)行內(nèi)容相似推薦,一般需要以下幾個步驟:

4.1 內(nèi)容獲取
4.2 中文分詞:提取關(guān)鍵詞
4.3 Doc2Vec:平均、加權(quán)平均
4.3 Word2vec:語意擴(kuò)展
4.4 TopN相似近鄰搜索
4.5?redis緩存
4.6Flask/Java Web服務(wù)
必看!!
更多內(nèi)容查看
項目原鏈接:https://blog.csdn.net/sinat_39620217/article/details/129046810
專欄鏈接:https://blog.csdn.net/sinat39620217/category12205194.html