1. 程式人生 > >今天來學習下美團推薦演算法實踐:機器學習重排序模型

今天來學習下美團推薦演算法實踐:機器學習重排序模型

轉載,來自小象學院。
美團推薦演算法實踐:機器學習重排序模型
文章介紹了美團推薦系統的構架和優化過程,包括資料層,觸發層,融合過濾層和排序層,採用了Hbase,Hive,Storm,Spark和機器學習等技術。兩個優化兩點將是候選集進行融合與引入重排序模型。
看的到這裡頓時覺得高大上了,有木有……
在使用者意圖明確時,我們通過用搜索引擎來結局網際網路時代的資訊過載問題,但當用戶的意圖不明確的時候或則很難用清洗的語義表達的時候,搜尋引擎就無能為力。此時,藉助推薦系統通過使用者行為的分析理解其意圖,為其推送個性化的結果,變成了好的選擇。美團作為國內發展較快的o2o網站,有著大量的使用者和豐富的使用者行為,這些為推薦系統的應用和優化提供了很好的條件。

1:從框架來看
從框架的角度看,推薦系統基本可以分為資料層,觸發層,融合過程和排序層。資料層包括了資料生產層和資料儲存層,主要是利用各種資料處理工具對原始的日誌經行清洗,處理成格式化的資料,落地到不同型別的儲存系統中,供下游的演算法和模型使用。候選集觸發層主要是從使用者的歷史行為,實時行為,地理位置等角度利用各種觸發策略產生推薦的候選集。候選集融合和過濾層有2個功能,一是對不同的候選集進行融合,提高推薦策略的覆蓋度和精度;2是承擔一定的過濾職責,從產品,運營角度確定一些人工規則,過濾掉不符合調教的item。排序層主要是利用機器學習的模型對觸發層篩選出來的候選集經行重排序。

這裡寫圖片描述

LR:是邏輯迴歸,GBDT是隨機森林(這裡錯誤了,我把gbdt和隨機森林搞混淆了以前),AG不知道。
location-based基於位置。Query-based基於查詢。Graph-based基於圖計算。替補策略是熱門推薦麼?*
PS:一般來說,到候選集的時候,然後通過一些方法(對物品興趣度排序,從高往下取item,人工定義規則之後就玩了),但是美團新增加了一個使用演算法重排序的過程。為什麼?,後面講到了。


同時,對與候選集觸發和重排序兩層而言,為了效果迭代是需要頻繁修改的兩層。一次需要支援ABTest(強行插入,ABTest就是,那兩個模型的效果去上線測試,看那個的好)。為了支援高效率的迭代,我們對候選集觸發和重排序兩層經行了解耦,這兩層的結果是正交的,因此可以分別進行對比試驗,不會互相影響。同時在每一層的內部,我們會根據使用者的流量劃分為多份,支援多個策略同時線上對比。
PS:這段話的意思是,候選集層和排序層是分離的,這兩個要做對比試驗。而對於候選集層也是更加使用者量分離成多個的,對於排序層也一樣。組類對比,組外對比。
2資料應用
資料乃演算法,模型的根本。美團做為一個交易平臺,同時具有快速增長的使用者量,因此產生了海量豐富的使用者行為資料。當然,不同型別的資料價值和反映的使用者意圖的強索也有所不同。

行為類別 行為詳情
主動行為資料 搜尋,篩選,點選,收藏,下單,支付,評分
UGC 文字評價,上傳圖片
負反饋資料 左滑刪除,取消收藏,取消訂單,退款,負評,低評
使用者畫像 人口屬性,美團NDA,品種偏好,消費水平,工作地和居住地

1使用者主動行為資料記錄了使用者在美團平臺上不同的環節的各種行為,這些行為一方面用於候選集觸發演算法中的離線運算,另一方面這些行為代表的意圖強弱不同,因此在訓練重排序模型時可以針對不同的行為設定不同的迴歸目標值,以更細地刻畫使用者的行為強弱。此外使用者對deal的這些行為還可以作為重排序模型的交叉特徵每使用者模型的離線訓練和線上預測。
這句話“因此在訓練重排序模型時可以針對不同的行為設定不同的迴歸目標值”,每沒看看懂,LR邏輯回顧是2分類問題,GBTD是可以處理分類和迴歸問題的。它的意思是確定y值,求出各個行為的係數,也就是各個行為的意圖強弱麼,這種到時可以。
2負反饋資料反映了當前的結果可能在某些方面不能滿足使用者的需求,因此在後續的候選集觸發過程中需要考慮對特定的因素經行過濾或者降權,降低負面因素的再次出現的機率,提高使用者體驗,同時在重排序的模型訓練中,負反饋資料可以作為不可多的的負列參加模型訓練,這樣負列要比那些展示後未點選,未下單的樣本顯著的多。
3使用者畫像是刻畫使用者屬性的基礎資料,其中,有些是直接獲取的原始資料,有些是經過挖掘的二次加工的資料,這些屬性一方面可以使用者候選集觸發過程對deal進行加權或者降權,另外一方面可以作為重排序中的使用者緯度特徵。
4對UGC的挖掘可以提取一些關鍵詞,然後使用這些關鍵詞給deal打標籤,用於deal的個性化展示。
3策略觸發
上文中提到資料的重要性,但是資料的落腳點還是演算法和模型。單純的資料只是一些字元的堆積,我們必須通過對資料的清洗和除去資料中的噪聲,然後通過演算法和模型學習其中的規律,才能將資料的價值最大化。在本節中,將介紹推薦過程中候選集觸發中用到的相關演算法。
1協同過濾
提到推薦,就不得不說協同過濾,它幾乎在每個推薦系統中都會用到。基本的演算法非常簡單,但是要獲得好的效果,往往需要根據業務做一定差異化的處理。
清除作弊,刷單,代購等噪聲資料。這些資料的存在會嚴重影響演算法的效果,因此第一步把噪聲資料清除。
合理選取訓練資料。選取的訓練資料時間床頭不宜過長,也不宜果短。具體的視窗週期需要經過多次的實驗來確定。同時可以考慮引入時間衰減,因為近期的使用者行為更能反映使用者接下來的行為動作。

null 群體/個體 計算代價 使用場景 冷啟動 可解釋性 實時性
User-based 更依賴與當前使用者相似的使用者群體的社會化行為 適用於使用者數較少的場合 時效性強,使用者個性化興趣不太顯著場景 新加入的物品能很快進入推薦列表中 使用者的新行為不一定導致推薦結果的變化
Item-based 更側重與自身的個體行為 適用於物品數較少的場合 長尾物品豐富,使用者個性化需求強烈的場合 新加入的使用者能很快得到推薦 使用者的新行為一定導致推薦結果的變化

嘗試不同的相似度計算。在實踐中,我們採用了一種稱作loglikedhood相似度計算方法。
下表表示了EventA和EventB之間的相互關係,其中
k11表示:EventA和EventB共出現的次數
K12表示:EventB發生,EventA未發生次數
k21表示:EventA發生,EventB未發生次數
k22表示:EventA和EventB都不發生的次數

null Event A Everything but A
Event B K11 A and B together K12, B but not A
Everything but B K21,A but not B k22 A and B both not

則logLikelihoodRatio=2*(matrixEntropy-rowEntropy-columnEntropy)
其中rowEntropy=entropy(k11,k12)+entropy(k21,k22)
columnEntropy=entropy(k11,k21)+entropy(k12,k22)
maxtrixEntropy=entropy(k11,k12,k21,k22)
entropy為幾個元素組成的系統的夏農熵。
2location-basd
對於移動裝置而輕言,與PC端最大的區別之一就是移動裝置的位置經常變化。不同的地理位置反映了不同的使用者場景,在具體的業務中可以充分利用使用者所在的地理位置。在推薦的候選集觸發中,我們會更具使用者的實時地理位置,工作地,居住地等地理位置觸發相應的策略。
根據使用者的歷史消費,歷史瀏覽等,挖掘出某一粒度的區域(比如商業圈)的區域消費熱單和區域購買熱單。
當新的上線使用者請求到達時,根據使用者的地理位置和相對應地理位置的區域消費熱單和區域熱單經行加權,最終得到一個推薦列表。此外還可以通過使用者出現的地理位置,採用協同過濾方式計算使用者的相似度。
3 query-based
收索是一種強的使用者行為,比較明確的反映了使用者的意願,但是在很多情況下,因為各種各樣的原因,沒有形成最終的轉換。儘管如此我們人為,這種情景還是代表了一定能的使用者意願麼可以加以利用,具體做法如下:
1對使用者過去一段時間的收索無法轉換行為進行挖掘,計算每個使用者對不同query的權重。2計算每個query下不同deal的權重。2當用戶再次提交請求時,根據使用者對不同query的權重及其query下不同deal的權重經行加權,取出權重最大的TopN推薦。
這段意思是,1計算的是每個使用者的query,而且該query中沒有轉化成訂單的,把這些query的權重確定好。2在計算所有的query中,裡面有訂單的,訂單的權重。3在2個權重求和,取topn。
4 grapn=based
對於協同過濾而言,user之間或者deal之間的圖距離是兩跳,對於更遠距離的關係則不能考慮在內。而圖演算法可以打破這一限制,講user與deal的關係視作一個二部圖,互相間的關係可以在圖上傳播。simrank是一種平衡對等實體相似度的圖演算法。它的基本思想是,如果兩個實體與另外的相似實體有相關關係,那他們也是相似的,即相似性可以傳播。計算出相似矩陣之後,就是用相似協同過濾的方式推薦。
不清楚圖計算,但是主要還是藉助圖計算,求相似
5使用者實時行為
目前我們的業務會產生包括收縮,篩選,收藏,瀏覽,下單等豐富的使用者行為,這些是我們進行效果優化的重要基礎。我們當然希望每個使用者行為流都能到達轉換環節,但是事實遠非如此。
當用戶產生了下單行為為上游的某些行為時,會有相當一部分因為各種原因使行為流沒有形成轉化。但是,使用者的這些上游行為對我們而言是非常重要的先驗知識。很多情況下,使用者當時沒有轉化不代表使用者對當前的item不敢興趣。當用戶再次到達我們的推薦展位,我們根據使用者之前產生的先驗行為理解並識別使用者的真正意圖,將符合使用者意圖的相關deal再次展現給使用者,引導使用者沿著行為流下游進行,最後達到下單這個終極目標。目前引入的實時使用者行為包括:實時瀏覽,實時收藏。
6替補策略
雖然我們有一系列基於使用者歷史行為的候選集觸發演算法,但對於某部分新使用者後者歷史行為不太豐富的使用者,上述演算法觸發的候選集太小,所以需要使用一些替補策略進行填充。
熱銷單:一定時間內銷量最多的item,可以考慮時間衰減情況。
好評單:使用者產生的評價中,評分較高的item。
城市單:滿足基本的限定條件,在使用者的請求城市內。
4子策略融合
為了結合不同觸發演算法的有點,同時提高候選集的多樣性和覆蓋率,需要將不同的觸發演算法融合在一起。常見的融合方法有一下幾種:
加權型:最簡單的融合方法就是根據經驗值對不同演算法賦予不同的權重,對各個演算法的候選集按照給定的權重經行加權,然後按照權重排序。
分級型:優先採用效果較好的演算法,當產生的候選集太小不足以滿足目標值時,再使用效果次好的候選集,然後疊加產生最終總的候選集。
調製型:不同的演算法按照不同的比例產生一定量的候選集,然後疊加產生最終總的候選集。
過濾性:當前的演算法對前一級演算法產生的候選集進行過濾,一次類推,候選集一級一級被過濾,最終產生一個小而精的候選集。
目前我們使用的方式集成了調製和分級兩種融合方法,不同的演算法根據歷史效果表現給定不同的候選集比例,同時優選採用效果好的演算法觸發,如果候選集不夠大,在採用效果次之的演算法觸發,以此類推。
5候選集重新排序
如上所述,對於不同演算法觸發出來的候選集,只是根據演算法的歷史效果決定演算法產生的item的位置顯得有點簡單粗暴了,同時在每個演算法的內部,不同item的順序也只是簡單的由一個或者幾個因素決定,這些排序結果需要藉助機器學習的方法,使用相關的排序模型,綜合多方面的因素來決定。
1模型
非線性模型能較好的捕捉特徵中的非線性關係,但訓練和預測的代價相對線性模型要求高一些,這也導致了非線性模型的更新週期相對要長。反之,線性模型對特徵的處理要求比較高,需要憑藉領域知識和經驗人工對特徵做一些先期處理,但因為線性模型簡單,在訓練和預測時效較高。因此在更新週期上可以更短,還可以結合業務做一些線上學歷的嘗試。我們的實踐中,非線性模型和線性模型都在應用。
1非線性模型
目前我們主要採用了非線性的樹模型,相對線性模型,非線性模型可以更好的處理特徵中的非線性關係,不必像性模型那樣在特徵處理和特徵組合上化比較大的精力。AG是一個加性模型,有很多個Grove組成,不同的Grivoe之間經行bagging得出最後的預測結果,由此可以減小過擬合的影響。
這裡寫圖片描述
每個Grove有多顆樹組成,在訓練時每棵樹的擬合目標為真實值與其他樹預測結果之後之間的殘差。當達到給定數目的樹時,重新訓練的樹會逐顆替代以前的樹。經過多次迭代之後收斂。
PS:這就是隨機森林嘛,不過他改進了,當達到資料給定的樹時,會重新訓練替換原來的樹,多次之後,收斂。這個想法太好了,以前我也用過,但是沒想到在隨機森林也可以用。
2線性模型
目前應用的比較多的線性模型非Logistic Regression莫屬。為了能實時捕捉資料分佈的變化,我們引入了online learning,接入實時資料流,使用google提出的FTRL方法對模型進行線上更新。
PS:線上,以前都只是聽過。
主要步驟如下:
1.線上寫特徵向量到Hbase中
2.Storm解析實時點選和下單日誌流,改寫Hbase中對應特徵向量的label
3.通過FTRL更新模型權重
4.將新的模型引數應用與線上
這裡寫圖片描述
2資料
取樣:對於點選率預估而言,正負樣本嚴重步均衡,所以需要對負樣本做一些取樣。
負列:正列一般是使用者產生點選,下單等轉化行為的樣本,但是使用者沒有轉換行為的樣本是否就一定是負列呢?(這樣考慮很好啊,學習了)其實不然, 很多展現其實使用者根本沒有看到,所以把這樣樣本視為負列是不合理的,也會影響模型的效果。比較常用的方法是skip-above,即使用者點選的item位置以上的展現才可能視為負列。除此以外,我們還有使用者主動少出的顯示的負反饋資料,這些資料是高質量的負列。
去噪:對資料混雜的刷單等作弊行為資料,要將其排除,否則會直接影響模型的效果。
PS:哪有那麼容易排除刷單,我朋友就有搞刷單的,大部分都是根據淘寶的規矩來的,還有人專門培訓。
3特徵
在我們目前的重排序模型中,大楷分為以下幾類特徵:
deal(團購單):主要是deal的本身屬性,包括價格,折扣,銷量,評分,類別,點選率等。
user緯度:使用者等級,使用者的人口統計,使用者的客戶端型別等
uesr,ideal交叉特徵:包括使用者對deal的點選,收藏,購買等。
距離特徵:包括用的的實時地理位置,常去地理位置在,工作地,對特徵值做一些分桶,歸一化處理,使特徵量綱統一。
6**總結**
以資料為基礎,用演算法去雕琢,只有將二者有機結合,才回帶來效果的提升。對我們而言,一下兩個節點是我們優化過程中的里程:
1將候選集融合:提高了推薦的覆蓋率,多樣性和精度。
2引入重排序模型:解決了候選集增加以後deal之間排列順序的問題。
PS:以上剔除的演算法,我以後會開一個專題和大家討論……今天就到這裡了,如果有關推薦有好的點子的,請留言哈……我想學習下……^_^