本文來自網易雲社區
作者:穆學鋒
簡介:傳統的搜索個性化做法是定義個性化的標簽,將用戶和商品通過個性化標簽關聯起來,在搜索時進行匹配。傳統做法的用戶特征基本是離線計算獲得,不夠實時;個性化標簽雖然具有一定的泛化能力,但是其准確性有所不足,不能很好的做精准個性化。本文提出兩個創新優化,一是打通實時用戶行為的獲取流程,並在實時用戶流下采用FTRL算法不斷的更新用戶特征的權重,將用戶實時感興趣的商品加權,達到online training;二是在保證相關性的前提下,采取推薦的思路,避開打個性化標簽,結合用戶的實時&歷史行為,直接預估用戶對商品的偏好,並在搜索排序中加權。這兩個優化在實際的ABTest結果中表現突出,提升搜索下窄口徑UV價值較大,它們都是在用戶實時行為的基礎上完成的,因此合稱為搜索實時個性化模型。
背景
搜索中傳統的個性化應用是基於個性化標簽來完成的。例如,我們會假設用戶在購物時對商品的某些屬性有獨特的偏好,然后建立屬性標簽,並基於用戶的歷史行為構建算法模型將商品上的標簽打到用戶身上,預估其偏好程度,這就構成了用戶在特定類目下對於某屬性標簽的偏好。模型一旦建立起來,屬性標簽就構成了一個商品簇,模型的泛化能力會很強。這種方式在用戶對某類目的商品行為量巨大時會比較有效,但是一般情況下用戶的行為都會比較分散/稀疏,因此模型的准確性一般不高。舉個例子,用戶A購買了一件有大嘴猴圖案的莫代爾T恤,因為是購買行為,是一個表示強偏好的特征,那么模型最后計算出來大概率會顯示用戶A對於動物圖案標簽和材質莫代爾標簽都有一定的偏好,但實際上呢,可能用戶A關心的只是T恤是圓領的。
怎么辦呢?一種方法是豐富個性化標簽,將領型標簽也加入進去,這將是一個很龐大很漫長的profiling構建過程。另一種方法,我們可以轉變下思路,用戶A對商品B有行為,那么就是A對B有一定的偏愛。因此,我們只要獲取用戶A所有行為過的商品集合,然后構建模型計算最感興趣的幾個商品,並推給用戶。至於,用戶是喜歡B的什么特質,什么原因,我們並不用刻畫。因為特質太多,我們目前刻畫得並不好。
系統框架
要實現我們的思路解決上述的問題,首先得在搜索中獲得實時的用戶行為流數據。為此,我們設計並實現了如下的系統結構:
從Offline到Nearline再到Online,全方位無死角地獲取了用戶近期的行為數據,存儲到ncr緩存中,行為包括點擊、加購、收藏、購買、搜索等等。離線(Offline)任務從hdfs中收集用戶在考拉 App端的近期對商品的歷史行為數據,計算歷史行為特征,每日都dump到緩存中;准實時(Nearline)任務將用戶近一小時的行為收集並格式化后也放入NCR緩存;實時(Online)任務直接在Jstorm中解析用戶行為日志,梳理需要的行為數據,插入到緩存。這樣用戶近期的所有行為及其特征都能夠在搜索被檢索到。
同時,Jstorm在解析用戶行為的同時,利用FTRL算法,進行online training,不斷的迭代學習用戶特征權重;另一方面,離線部分每日會計算一個用戶到商品的偏好模型(UserItemPrefer),這兩個模型的參數都會存儲到NCR中。
用戶在考拉APP中對商品的每次行為數據,都會影響FTRL模型和UserItemPrefer模型的參數和特征。當用戶來搜索的時候,SR會對NDIR召回的商品集合再重新精排一次,精排時就會從NCR獲取個性化標簽、UserItemPrefer&ftrl模型的參數,以及用戶歷史&實時的行為特征,計算一個排序分數。SR按這個分數再加上一些例如無貨沉底、重復商品過濾等的業務邏輯,向上層返回排好序的商品列表。用戶在當前搜索結果頁的行為,都會由這個數據流影響到FTRL模型參數,以及U2I的用戶行為特征,從而達到隨着用戶行為變化,自動學習其個性化偏好的目的。
算法實現
1. FTRL模型的實現
根據用戶實時行為,生成相應的特征,使用FTRL模型,實時更新用戶的偏好模型。FTRL算法如下:
對算法的兩點修正:
FTRL在每個特征維度上做梯度下降,隨着用戶行為的累積,頻繁更新的特征權重更新步長越來越小,趨於一個穩定的值,而實際上用戶的關注點會隨時間變化,累積的特征並不一定產生正向的效果,因此增加了時間維度,記錄每個維度特征更新的時間,根據時間進行衰減。
FTRL具有比較好的稀疏性,但是用戶的實時行為會產生大量的特征,還是會有很多低頻特征的權重不為0,保存在用戶模型里,一方面使得用戶模型太大,另一方面對效果影響也不大,因此,對FTRL輸出的特征再進行一輪篩選:1)最近1小時的特征按時間保留TOP100;2)最近12小時的特征按權重保留TOP100;3)所有特征按權重保留TOP100。
2. UserItemPrefer 模型的實現
• 描述:選擇點擊、加購、收藏、購買等行為構成特征,預估用戶對商品偏好程度
• 樣本:
– 歷史user-goods pair
– Target:當日搜索是否有點擊
• 特征:
– User-goods pair維度的特征
– Goods維度的特征
• 機器學習方法:SPARK-LR
• 訓練結果:經調試,AUC 0.73
效果展示
1. FTRL模型
demo示例:
這是線上某用戶的行為序列: 用戶首先搜了“拖鞋”,點擊了商品1464699 ,翻幾頁之后又搜索了"melissa "這個品牌,最終購買了商品1511276。
2017-06-04 20:41:48 search 拖鞋 iOS
2017-06-04 20:41:55 click 1464699 iOS
......
2017-06-04 21:05:32 cart_page iOS
2017-06-04 21:05:44 pay 1511276* -
在搜索結果中商品位置的變化,(紅框中的是商品1511276):
沒有用戶實時模型的商品排序:
增加了用戶實時模型的商品排序:
測試效果:總共進行兩輪迭代,測試時間段分別為:2017-02月初~2017-02月中和2017-05月底~2017-06月初總體增加窄口徑UV價值3%
2. UserItemPrefer 模型
測試方法:搜索內ABTest
測試時間: 2017.05月底~2017.06月初
測試結果:經過11天的線上測試,窄口徑UV價值提升2.55%。
3. 補充說明
A/B測試:簡單來說,就是為同一個目標制定兩個方案(比如兩個頁面、兩個算法),讓一部分用戶使用 A 方案,另一部分用戶使用 B 方案,記錄下用戶的使用情況,看哪個方案更符合設計。其實這是一種“先驗”的實驗體系,屬於預測型結論,與“后驗”的歸納性結論差別巨大。A/B測試的目的在於通過科學的實驗設計、采樣樣本代表性、流量分割與小流量測試等方式來獲得具有代表性的實驗結論,並確信該結論在推廣到全部流量可信。
關於A/B Test指標增長的說明:各位看官可能覺得增長2%有點微不足道,但對於算法模型來說,已經比較可觀了。首先,A/B測試比對的兩者是剔除了自然增長、大促等其他因素的,是純算法帶來的增長,比較真實可靠。另外,舉個業界的實例:一般淘寶會由幾十人組件一個大項目團隊,經過一年的算法迭代,在雙11大促時拿到5~10%的指標增長。由此可見一斑。
UV價值:名詞解釋,公式上 UV價值=引導的成交額/訪問UV,約等於uv轉化率*客單價,一般在搜索中所說的引導的成交額指嚴口徑成交額(即點此買此),訪問UV是指訪問搜索的UV數。因此,以成交額作為考核指標的考拉,采用uv價值更吻合平台kpi。涵義上,UV價值的是指訪問搜索的用戶的平均價值,是搜索內功的體現。
未來計划
目前來說實時個性化完成了第一版,后續我們會從如下方面進行深入探索。
將用戶偏好商品的相似商品也納入進來,在搜索時,也擇機展示給用戶,提升購物效率
挖掘用戶行為序列中的頻繁模式,嘗試序列模式推薦
參考文獻
H. B. McMahan, G. Holt, D. Sculley, M. Young, D. Ebner, J. Grady, L. Nie, T. Phillips, E. Davydov, and D. Golovin. Ad click prediction: a view from the trenches. In KDD, 2013.
B Mobasher, H Dai, T Luo, M Nakagawa. Effective personalization based on association rule discovery from web usage data
原文:搜索實時個性化模型——基於FTRL和個性化推薦的搜索排序優化
網易雲大禮包:https://www.163yun.com/gift
本文來自網易雲社區,經作者穆學鋒授權發布
相關文章:
【推薦】 市場上主流的BI產品的“答案之書”
【推薦】 八月暑期福利,10本Python熱門書籍免費送!