tft每日頭條

 > 科技

 > 推薦算法有幾種模式

推薦算法有幾種模式

科技 更新时间:2025-02-07 23:15:53

作者 | gongyouliu

編輯 | gongyouliu

我們在上面一篇文章中介紹了排序算法的一些基本概念和知識點。大家應該已經非常清楚排序算法可以解決什麼問題,可以用在哪些推薦場景了。上一章也對排序算法做了一個簡單的說明性介紹,從本章開始我們會花3章的篇幅來介紹具體的排序算法的實現原理。本章我們先介紹最簡單、最沒有機器學習含量的規則策略排序方法。

雖然規則策略算法沒有用到複雜的機器學習模型,主要是基于人對業務的理解來定義的排序方法,但在某些場景(比如沒有什麼數據、需要滿足一些運營目标等)是必要的一種方法。規則策略排序算法根據不同的業務場景可以有非常多的實現方案,下面我來介紹幾種非常直接簡單的實施方案。具體來說,我們會講解随機打散排序、按序排列排序、得分歸一化排序、匹配用戶畫像排序、代理算法排序及它們的混合使用的排序等6種規則策略排序算法。

本章的目的是給讀者提供一些思路,大家也可以結合自己公司的具體業務來思考,看是否有更好、更有業務價值、更有特色的實現方案。

在講解具體的排序策略之前,我們先假設我們已經有了k個召回結果,分别記為Recall_1、Recall_2、... 、Recall_k,我們的目标是利用規則策略排序算法來對這k個召回結果進行排序。

推薦算法有幾種模式(從零入門推薦系統)1

圖1:k個召回結果

11.1 多種召回随機打散

這種排序方法是最簡單的。就是将圖1中k個召回結果合并,構成一個召回結果的合集,然後利用随機函數将這個并集随機打散,然後從打散的列表中取前面的topN作為最終的排序結果推薦給最終的用戶,這個過程可以用公式表示如下:

推薦算法有幾種模式(從零入門推薦系統)2

這種實現方式非常簡單高效,可以直接在推薦web服務端實現,不過個人還是建議實現一個排序算子或者排序服務,這樣可以跟推薦web服務解耦(下面講到的排序方法建議都采用類似的處理方式,要麼做成一個算子,要麼做成一個微服務,下面不再贅述)。為了讓讀者可以更直觀地理解這種随機打散的排序方案,下面畫一個示意圖。

推薦算法有幾種模式(從零入門推薦系統)3

圖2:随機打散的排序策略

這個排序策略非常簡單粗暴。它的優勢是非常簡單,每次獲得的結果都是不一樣的,可以提供一定的新穎性和多樣性,特别适合那種召回結果變化不大的召回場景(比如如果我們的推薦算法是T 1的,各個召回算法在前後兩天的召回結果差别不大)。

這個排序算法最大的問題是沒有一緻性,也就是用戶兩次打開推薦系統獲得的結果可能完全不一樣。當然,這個缺點可以部分解決,可以先将排序結果緩存起來,設定一個緩存過期時間,在緩存過期時間内,每次用戶請求推薦服務時,從緩存取推薦結果,這時推薦結果就一緻了。

11.2 按照某種秩序排列

這種排序算法先将k種召回結果按照某種次序排定一個優先級,比如優先級排列如下(

推薦算法有幾種模式(從零入門推薦系統)4

意思是A的優先級大于B

):

推薦算法有幾種模式(從零入門推薦系統)5

排定了優先級後,我們按照優先級的高低,依次從

推薦算法有幾種模式(從零入門推薦系統)6

推薦算法有幾種模式(從零入門推薦系統)7

、... 、

推薦算法有幾種模式(從零入門推薦系統)8

中選擇1個來排列。第一輪選擇好了之後,又開始按照

推薦算法有幾種模式(從零入門推薦系統)9

推薦算法有幾種模式(從零入門推薦系統)10

、... 、

推薦算法有幾種模式(從零入門推薦系統)11

的順序選擇

,直到選擇的數量湊足N個就完成了,下面圖3即說明了這個實現的過程。具體各個召回算法怎麼排定優先級,可以有很多方式,比如基于業務的經驗,基于運營需要,基于召回算法的效果(比如矩陣分解召回的效果好于item-based召回、item-based召回的效果好于熱門召回)等。

推薦算法有幾種模式(從零入門推薦系統)12

圖3:按照某種秩序排列的排序策略

這種實現方案可以做一些調整和推廣。上面每個召回算法隻選擇了1個結果進行排列,其實我們可以從每個召回算法中選擇多個進行排序(可以選擇固定數量的,比如每個召回選擇2個;也可以選擇不一樣的,比如第一個召回選擇3個,第二個召回選擇2個等等,具體每個召回選擇多少可以基于經驗或者業務規則來定)。下面圖4就是先從每個召回中選擇topM個結果,按照順序拼接起來,當第一輪選擇結束後,然後又從第一個召回選擇topM個,依次類推,當湊足了最終需要推薦的topN個推薦結果就停止(當然不會剛好湊足N個,這時當第一次超過N個就可以停止了)。上面多個召回列表中可能存在某些物品出現在多個召回中,隻要在排序過程中将重複的剔除掉就好了。

推薦算法有幾種模式(從零入門推薦系統)13

圖4:每個召回算法選擇topM,然後拼接獲得最終的topN推薦結果

其實這個每組取topM的排序方法在現實生活中是可以找到原型的,我們的高考錄取其實就是這種方式。每個省份的考生的成績按照高低排列就是一個召回。清華北大每年進行招生它們是怎麼做的呢?大家應該都知道清華北大在不同省份都有錄取名額(當然不同省份名額不一樣),這個招生過程的思路跟圖4有異曲同工之妙。

一般各種召回算法的效果怎麼樣,我們是有一定的先驗知識的,比如前面說到的矩陣分解召回的效果好于item-based召回,item-based召回的效果好于熱門召回。有了這些先驗知識,自然采用這種排序方式是一種不錯的選擇。雖然排在後面的召回算法的預期效果沒有排在前面的召回好,但是它們是可以增加推薦的多樣性和泛化能力的。

11.3 召回得分歸一化排序

一般來說,某個召回算法本身是會對召回結果進行排序的,也就是每個召回結果中的物品是有序的,比如矩陣分解召回,每個召回的物品是有預測評分的,按照這個評分是可以給矩陣分解召回的物品按照得分高低排序的,實際召回時就是這麼操作的。這個召回得分是可以被我們用于排序的,下面來講解怎麼使用。

如果我們的k個召回算法都有自己的排序,那麼一種可行的綜合排序方式是:先在每個召回算法内部将排序得分歸一化到0到1之間,這樣不同的召回算法的得分是在同一個區間範圍(即0到1之間),那麼它們之間就是可比較的了。我們可以将這些物品放在一起按照歸一化的得分進行排序(這裡存在一種情況,如果某個物品在多個召回算法中出現,那麼就可以取它們的歸一化得分的平均值),最終基于這個排序就可以選擇歸一化得分的topN作為最終的排序結果推薦給用戶。下面圖5可以非常直觀地說明這個操作過程。

推薦算法有幾種模式(從零入門推薦系統)14

圖5:每個召回算法先基于得分歸一化,然後彙總排序取topN作為最終推薦結果

具體歸一化的方法有很多,大家可以選擇min-max歸一化、分位數歸一化或者正态分布歸一化,下面分别簡單介紹一下這3種歸一化的方法:

  • min-max歸一化

min-max歸一化是通過求得該特征樣本的最大值和最小值,采用如下公式來進行歸一化,歸一化後所有值分布在0-1之間。

推薦算法有幾種模式(從零入門推薦系統)15

  • 分位數歸一化

分位數歸一化是将該特征所有的值從小到大排序,假設一共有N個樣本,某個值x排在第k位,那麼我們用下式來表示x的新值。

推薦算法有幾種模式(從零入門推薦系統)16

  • 正态分布歸一化

正态分布歸一化是通過求出該特征所有樣本值的均值

推薦算法有幾種模式(從零入門推薦系統)17

和标準差

推薦算法有幾種模式(從零入門推薦系統)18

,再采用下式來進行歸一化。

推薦算法有幾種模式(從零入門推薦系統)19

召回得分歸一化排序方法比較簡單,有一定的合理性。作者之前在做視頻的排行榜推薦時就采用了這個方法。我們先分别計算電影、電視劇、綜藝、動漫、少兒等各種類型節目的top100(按照播放量),然後按照本節介紹的方法歸一化取最終的top100作為綜合的熱門推薦結果,這個結果中就會包含各種類型的視頻了。

11.4 匹配用戶畫像排序

如果我們的物品是有标簽的,那麼我們基于用戶行為是可以給用戶構建用戶興趣畫像的,這些物品的标簽就可以作為用戶的興趣畫像标簽。例如,如果用戶看了一些科幻、恐怖、美國的電影,那麼就可以給該用戶打上科幻、恐怖、美國的興趣标簽,代表了該用戶對科幻、恐怖、美國相關題材的電影感興趣。

用戶對每個興趣标簽是可以有權重的,這個權重代表的就是用戶對該标簽的興趣度,怎麼計算這個權重,作者已經在第7章7.2.2.2節“利用用戶興趣标簽召回”中進行了說明,讀者可以去那篇文章看看,這裡不再贅述。

有了用戶的興趣标簽,每個物品也是有标簽的,那麼我們就可以計算每個物品與用戶興趣畫像的相似得分,然後基于相似得分降序排列,取topN作為最終的推薦結果,這個過程可以很好地用下面的圖6來說明。

推薦算法有幾種模式(從零入門推薦系統)20

圖6:基于物品跟用戶畫像的匹配度排序,然後取topN作為最終推薦

具體怎麼計算用戶U和某個物品W的标簽匹配度,我們簡單說明一下。首先我們先求出用戶标簽跟物品标簽的交集。如果交集為空,那麼它們的相似度為0。如果交集不為空,我們記交集為T,那麼用戶U的興趣畫像跟物品W的匹配度為

推薦算法有幾種模式(從零入門推薦系統)21

,這裡

推薦算法有幾種模式(從零入門推薦系統)22

是用戶U的興趣标簽t的權重,

推薦算法有幾種模式(從零入門推薦系統)23

是物品W的标簽t的權重(如果物品的标簽沒有權重,那麼可以是1)。

上面是基于用戶興趣标簽計算的用戶跟物品的匹配度,如果用戶或者物品可以嵌入到某個低維向量空間,那麼也可以用向量的相似度(如cosine餘弦相似度)來表示用戶和物品的相似度。具體怎麼嵌入,我們在第9章9.1.3.2節“個性化召回”中已經介紹了核心思想,這裡不再贅述。

匹配用戶畫像的排序算法結合了用戶的行為,是一種個性化的排序算法,所以是比較合理的一種排序方式。這種排序方式其實就是基于内容的推薦排序算法,隻要用戶有部分操作行為,這種排序算法就可以實施。它的缺點是可能給用戶推薦的物品局限于用戶比較有興趣的類别中,容易産生信息繭房效應。

11.5 利用代理算法排序

如果我們有一個代理算法能夠對物品進行排序,那麼我們也可以基于這個排序算法來對多個召回結果進行綜合排序。這裡舉一個例子說明一下:比如我們推薦的物品是文章,假設我們有一個文章質量的算法,能夠基于文章的一些特征(比如标題、長度、裡面圖片、創作者等級、錯别字多少、排版是否優美、點擊率等特征)來給文章排序,那麼這個文章質量算法就可以用來為多個召回結果進行排序。假設我們的代理排序算法為F,那麼基于代理算法的排序可以用公式記為:

推薦算法有幾種模式(從零入門推薦系統)24

這種基于物品本身的代理排序算法最大的問題是非個性化的(即是沒有包含用戶特征的),所以排在前面的可能不一定是匹配用戶興趣的。為了讓讀者有更直觀的理解,下面圖7說明了利用代理算法的排序過程。

推薦算法有幾種模式(從零入門推薦系統)25

圖7:基于某個代理算法對所有召回結果排序,然後取topN作為最終推薦

前面提到文章質量算法也是可以用到用戶點擊數據的(這些點擊數據可能是通過爬蟲爬取的外網數據),因此排序算法也代表了群體的一種行為偏好質量,所以代理排序算法是有一定科學性的。

11.6 幾種策略的融合排序

上面我們講到了5種可行的排序策略,這些排序策略是可以結合在一起使用的。比如我們可以先對每個召回列表按照11.4節介紹的方法對每個召回列表進行排序,那麼這個排序後的召回列表中排在前面的就是與用戶興趣匹配度最高的,然後我們可以從排序好的召回結果中依次取1個按序排列(即上面11.2中的方法)獲得最終的topN推薦結果,具體實現方案如下面圖8所示。

推薦算法有幾種模式(從零入門推薦系統)26

圖8:先基于用戶畫像對每個召回排序得到新的有序列表,然後每個排序後的召回列表選擇1個按序排列

下面我們再介紹一種更複雜的混合策略。我們可以先将召回結果分為兩組,一組利用前面介紹的匹配用戶畫像排序獲得最終的排序結果,我們記為Recall_P,另外一組我們可以用代理算法進行排序,排序後的列表我們記為Recall_k` ,然後對Recall_P和Recall_k`這兩組列表,我們可以采用11.2節介紹的方法從每個列表中選取topM,然後将他們按照順序拼接起來形成最終的topN推薦結果,具體實現過程可以參考下面圖9。

推薦算法有幾種模式(從零入門推薦系統)27

圖9:召回算法先分組,每組用不同排序策略,最終再一次排序

上面隻是舉了兩個混合排序的例子,其它各種可行的混合排序策略大家可以自行嘗試。可以說,上面提到的任何兩個策略都是可以混合使用的,具體怎麼使用需要結合具體場景和業務來實施,這裡不再贅述。

總結

本章我們介紹了5種非常簡單的基于規則和策略的排序算法,這幾種方法也是可以混合使用的。這5種排序算法的原理非常簡單,比較适合在沒有太多用戶行為數據(比如某個産品剛推入市場,還在拓展用戶階段)的場景下使用。雖然這5個排序方法簡單粗暴,但是還是非常有适用價值的,這些思想讀者可以好好掌握。我們會在接下來的2章介紹真正的基于機器學習算法的排序模型,這些方法就是更加科學有效的排序方式了。

推薦算法有幾種模式(從零入門推薦系統)28

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved