文章作者:劉雷@貝殼找房
內容來源:貝殼產品技術
1. 背景
1.1 什麼是使用者偏好挖掘
使用者偏好,即對使用者內在需求的具體刻畫。通過使用者的歷史行為和資料,對使用者進行多角度全方位的刻畫與描述,利用統計分析或演算法,來挖掘出使用者潛在的需求傾向。
使用者在平臺有多種多樣的行為,使用者的行為都是有內在的驅動因素的,而挖掘使用者偏好可以幫助我們從雜亂的資訊中抽象出對使用者需求的具體描述,從而指導搜尋、推薦、push等策略的制定,圈定使用者群,進行精準營銷與精細化運營。
1.2 偏好挖掘工作面臨的挑戰
- 準確表達:使用者偏好挖掘工作對準確的要求是天然存在的,有兩點需要考慮:首先,使用者偏好的準確應當如何度量,決定了我們以何為目標;其次,使用者的偏好可能存在多峰的情況,因此在挖掘任務中需要對多峰的特性做出準確反映。
- 可理解:本質上我們希望對使用者的偏好資訊進行編碼和傳遞,基於貝殼的業態,下游不止有規則與演算法,還有運營與經紀人等‘人’,這對偏好挖掘輸出的可理解提出了要求。
- 高維的偏好:在偏好挖掘工作中,另一個重點是,存在部分高維非序數偏好,比如房產場景下的地理位置屬性。如何有效的對高維偏好進行挖掘,是我們要面臨的第三個問題。
2 常見的偏好挖掘思路
偏好的挖掘是通過使用者的歷史行為來判斷一個使用者在各種屬性的不同維度上的偏好程度,進而挖掘出使用者的潛在需求。比如,在貝殼的場景下,衡量一個使用者偏好200萬還是偏好300萬、喜歡二居室還是三居室。常見的偏好挖掘的方法可以分為統計和模型兩類。
2.1 基於統計的偏好挖掘
通過統計的方法挖掘使用者偏好的思想是基於一定的業務假設的,即使用者行為越多則偏好越重、距當前時間越近越偏好。
技術方案:
使用者偏好通過使用者在不同屬性的維度上行為次數的帶衰減的線性加權求和,再進行歸一化得到。
這裡有兩個關鍵點:
第一個關鍵點是:不同行為的權重如何衡量
使用者有著多種不同的行為,例如,在購物網站,使用者可能發生瀏覽、收藏、加購物車、下單等行為,顯然,下單的成本要比普通的瀏覽成本要高,即在不同行為上花費的成本是存在差異的,在資料上的反映是不同行為的權重差異很大,如何定義、衡量並驗證不同行為的權重是一件並不容易的事情。
我們採用的權重計算方法有:
- 後驗轉化率的方法,轉化率的倒數作為權重;
- 有監督的方法,bagging+LR模型,可以將成交或者下單作為label,模型得到的特徵重要性作為權重;
- 通過貝葉斯模型計算權重。
第二個關鍵點是:衰減係數的定義
使用者的需求並不是持續穩定的,會隨時間會發生變化和轉移,這種需求的變化需要被偏好捕捉到,因此,距離當前越近的行為越能反映現在的需求。對於衰減形式,我們採取了指數衰減以及階躍形式衰減。
- 指數形式使用者行為對未來偏好的影響程度,隨著時間的拉長呈指數型下降,對於t天前的行為,衰減因子為λ的t次方;
- 階躍形式將時間人為劃分成若干不同的時間區間,同一個時間區間內的行為的衰減因子是相同的。
因此,增加了衰減係數和行為權重的偏好計算公式為:
挑戰:
- 很難證明什麼樣的行為權重是最優的,且很難找到優化方向;
- 人為選定的衰減方式以及衰減因子的選取具有主觀因素,並不適用於所有的偏好;
- 基於統計的偏好挖掘難以優化。
2.2 基於模型的偏好計算
基於統計的偏好計算方法的優點是直觀,可解釋性強,但缺點是難以優化,因此我們考慮通過有監督模型的方式解決偏好預估的優化問題。
技術方案:
對於低維且等長的偏好,可以通過有監督的多分類模型。利用使用者過去發生不同行為所對應的屬性,預測未來在不同屬性上發生重行為的概率。需要解決的問題主要是歷史行為的時間視窗的劃分,這類低維、行為相對稠密、長度統一的偏好,可以採用有監督模型XGBoost、DNN,以及時序模型LSTM和GRU等。
然而,對於列舉值較多的屬性的使用者偏好,例如地理位置相關的屬性,使用者在不同列舉值上的行為稀疏,且使用者過去行為覆蓋的位置Item數目不同,導致召回的候選集長度不統一,因此使用傳統意義上的多分類模型很難去完成。
對於這類偏好,常見的方法是embedding,通過使用者近期互動過的物品,將偏好預估視為top-n推薦,使用pair-wise訓練策略訓練模型,得到個性化的使用者偏好向量。
雖然用embedding表徵使用者偏好在推薦系統中取的了很好的效果,然而這種向量化的偏好表徵方法不可解釋,在需要人去理解不同偏好意義的場景中具有侷限性。
挑戰:
- 高維、稀疏的偏好,很難預估;
- 輸出需要是可解釋的。
3 偏好挖掘在貝殼找房的實踐
貝殼找房作為一個居住服務類的平臺,將使用者、經紀人和房源連結在一起,幫助使用者找到更滿意的居住環境,幫助經紀人更好地服務使用者,對使用者的偏好進行挖掘可以幫助平臺更好的瞭解使用者。
偏好挖掘在貝殼找房主要有兩類的應用場景,一方面是對業務賦能,有助於平臺演算法和策略的制定,如個性化推薦、定向push等場景;另一方面是給人傳達可理解的使用者需求,比如幫助運營人員圈人群包,進行精細化運營和定向推送,或者在使用者從線上轉線下的過程中,將使用者的需求無損地傳遞給經紀人,更快地瞭解使用者。
3.1 基於多分類的偏好挖掘
3.1.1 問題抽象
問題定義:
在使用者資訊互動中,如果使用者對某一屬性的Item付出了較大成本,則說明使用者對Item背後的屬性有較強的偏好,基於此假設,在已知使用者過去發生不同行為及行為對應的屬性維度,將偏好預估問題定義為預測未來時間段內發生重行為所對應的屬性維度。
樣本構造:
我們需要思考偏好的主要應用場景,以及環境對動作的解釋能力。如果我們對線上行為的採集能力明顯高於線下環節,那麼我們在思考“重行為”時,就要考慮如果使用大量生命週期末端的線下行為,基於線上的特徵是否可以很好的解釋。
優化目標:
模型的目標為預估使用者在不同屬性的Item上發生重行為的概率。這裡我們要考慮使用者的偏好是multi-hot還是one-hot,基於這兩種形式,我們需要考慮對輸出層的構造方法。但需要強調的是,使用one-hot並不意味著否定使用者多峰偏好的事實。
離線後驗:
這是一個被高頻提問的點,即偏好的質量如何評估,自然我們可以從下游應用的角度進行評估,但該評估方式存在實驗難、效果回收慢、影響因素多等諸多不便。
從中臺角度我們更希望建立中間指標實現對偏好質量的獨立可衡量,建立小閉環。我們通過預估向量與真實行為向量的內積或交叉熵來衡量預估的效果,內積越大、交叉熵越小,則預估越準確。
如何選擇適合自己的指標建議從下游應用出發,例如下游使用內積的方式進行排序操作,那麼內積可能更為合適。但使用內積的方式進行評價可能存在與模型的優化方向不一致的問題,需要在模型評價時考慮進來。
3.1.2 樹模型、DNN模型
思想:
通過使用者的行為,構建一個有監督的分類模型,預估使用者的各維度的偏好。
特徵工程:
特徵工程的原問題是什麼可以反應使用者的偏好,需要考慮兩個層面,一是,基於使用者歷史與屬性Item互動反應使用者願為什麼屬性付出成本;二是考慮使用者當前的業務程式,反應了使用者的偏好是否在未來發生髮幅度的遷移和改變,即使用者的偏好預估多大程度上依託歷史互動行為。基於這兩點思考,我們將兩類資訊編碼進特徵中:
- 使用者歷史與不同Item互動,例如,使用者在某個屬性上訪問次數、頻率、轉化率等;
- 使用者的生命週期,例如,使用者當前各類行為的帶衰減線性加權,或使用者最重行為的one-hot都可以表達使用者的生命週期。
優化點:
特徵工程實際上是對使用者個體與使用者歷史互動序列進行了編碼,編碼的過程中引入了較多的人工先驗知識,例如人為劃分行為聚合時間的長度。
3.1.3 在模型中引入使用者行為序列
思想:
使用者偏好是個複雜且不穩定的問題,當前偏好與過去的不同階段的行為量及偏好有關係,而傳統的神經網路很難去捕捉不同時間對當前階段的偏好的影響,因此我們把將偏好預估問題抽象為一個多變數時間序列預測的問題,將使用者行為按照時間劃分成不同週期,根據每個週期內的行為,預估下一週期使用者發生重行為所在的屬性維度。這樣,模型可以感知到過去偏好的變化情況,通過時序模型學習到過去對未來偏好的影響。
LSTM時序模型:
圖 3.1 LSTM結構及計算公式
LSTM是一種特殊的迴圈神經網路,可以將過去的資訊與當前的目標之間建立連線,例如,在空氣質量預測中,用過去每個時間點的天氣狀況、氣溫、風速等特徵,來幫助推測下一個時間點的空氣質量。
LSTM有兩個傳輸狀態,一個cell state(C_t),一個hidden state(h_t),其中 C_t 改變較為緩慢,作為貫穿整個cell的傳送帶,儲存長期記憶,而 h_t 在每個cell內的區別相對較大。
LSTM通過“門”來決定將哪些資訊保留、哪些資訊刪除,forget gate決定了上一時刻的單元狀態C_t-1 有多少保留到當前時刻 C_t;input gate決定了當前時刻網路的輸入 x_t有多少儲存到單元狀態C_t,output gate控制單元狀態 C_t有多少輸出到 LSTM 的當前輸出值 h_t。其網路結構和前向計算公式如圖3.1所示。
特徵工程:
劃定週期,將一個週期內的行為次數與屬性Item、行為類別進行交叉聚合。週期的選擇根據下游場景的需求和業務型別,選擇不同長度的週期,對於使用者需求相對穩定、下游場景不需要緊隨使用者當前實時偏好的場景中,可以選擇周為週期粒度,反之,如果需要實時關注使用者當前的偏好變化,可以以天為週期粒度。
優化點:
在貝殼平臺,由於城市對使用者偏好的影響很大,所以我們加入城市作為特徵,先將城市進行embedding,再將embedding後的結果與sequence特徵經過LSTM的結果進行拼接,進入全連線層。
技術路線:
- 獲取使用者每個週期內的行為次數與屬性Item、行為類別作交叉得到的序列特徵,以及城市的編碼結果或one-hot結果;
- 序列特徵經過LSTM,得到使用者的歷史行為表達;
- 城市特徵經過Embedding層,得到的向量作為城市屬性表達;
- 歷史行為表達與城市屬性表達進行拼接,經過全連線層輸出概率向量。
整體的架構如下圖:
圖 3.2 基於行為序列的偏好預估架構圖
3.2 基於二分類的偏好挖掘
對於Item數目較多的屬性,多分類的方法存在侷限性,一是構造特徵時,屬性Item與行為進行交叉會導致特徵維度爆炸;二是使用者的行為稀疏,絕大部分Item上沒有行為;三是當類別較多時多分類模型表現不夠好。因此,為了在高維稀疏的偏好預估問題中取得更好的效果,我們對模型進行了進一步的優化,將多分類問題轉化為二分類問題。
3.2.1 Seq4Rec模型
思考:
實際上,對於Item數量較多的屬性,我們只需要關注使用者對其訪問過的Item的偏好情況,我們可將問題簡化為預估使用者對其訪問過的屬性的Item的偏好情況,這樣大大縮減了問題的難度。但是每個使用者訪問過的Item不同、Item數量不一,依然無法使用多分類模型。
那麼,既然不能多分類,能否將多分類的問題轉化為二分類呢?沿著這個思路,我們將多分類中的不同屬性資訊作為召回項加入到特徵中,將後續是否在召回項上發生重行為作為目標。這樣,序列特徵作為使用者表達,召回項特徵作為Item表達,這種方法我們稱其為Seq4Rec。
特徵工程:
Seq4Rec方法的使用者序列特徵不是基於時間的行為交叉聚合,而是使用者的每次互動,序列特徵包含序列型別的編碼,以及行為所在的屬性Item的編碼,最後加上召回項Item的編碼。特徵構造的主要步驟如下:
- 首先,獲取使用者互動過的屬性Item編碼以及行為型別編碼,構造基於行為的sequence,作為使用者的表達;
- 第二步,獲取召回集,使用者歷史訪問過的Item作為其召回集;
- 第三步,將召回集中的每個Item作為屬性表達;
- 最後,屬性表達與使用者表達的sequence拼接到一起。
Item的Embedding:
在模型訓練過程中,為了降低維度,並且更好地表達屬性資訊,需要對sequence中的Item以及召回的Item進行embedding,將高維稀疏的離散特徵轉化為低維稠密的向量特徵。為此將我們採取預訓練的方式,先進行embedding,再用得到的向量對Item進行替換。對Item進行embedding的技術路線為:
- 根據使用者在每個session中瀏覽的房源的時間順序,構建去重的屬性Item的序列;
- 根據曝光次數,對Item編碼成字典;
- 根據時間序列,生成樣本;
- skip-gram模型得到屬性的Item的embedding值。
模型架構:
整體的架構流程圖如下。首先將使用者互動行為的Item編碼替換成與訓練的embedding向量,與行為型別編碼共同形成使用者行為sequence,經過LSTM,與召回項Item的embedding向量進行concat,進入全連線層,最終輸出0到1範圍內的概率值。
圖3.3 Seq4Rec模型架構
3.2.2 優化使用者側表達
思考:
在LSTM的方案中,我們將使用者歷史屬性互動序列用於使用者的編碼,取得了一定的效果提升。接下來,我們進一步探索序列的更優表達形式。在前述版本中,使用者的行為序列被壓縮編碼到了一個定長向量中參與後續計算,是否會成為瓶頸。其次對於一個屬性列舉而言,使用者行為序列是否等權重,等作用的影響特定屬性。最後,在匹配邏輯上,歷史訪問序列與目標屬性的關係,應當被如何表達與強調。我們嘗試結合深度興趣網路思路,對偏好挖掘任務進行優化。
對深度興趣網路的借鑑:
從思想上,深度興趣網路框架提出在基於使用者序列進行使用者編碼過程中考慮目標Item,而不是對使用者的多峰偏好進行等重表達。公式表達如下:
圖3.5 使用者不同的購房方案
使用者偏好序列構造:
在偏好挖掘場景中,我們將其抽象為偏好推薦問題,因此使用者的訪問序列由使用者訪問房源的偏好組合構成,其中組合的概念我們可以理解為多通道。
圖3.6 使用者偏好序列
偏好挖掘網路結構:
使用者對房源的訪問實際是與偏好的組合做了互動,這裡我們假設,使用者對小區屬性的偏好會受到其包括價格、面積等多維度偏好的影響。從另一個層面看,目標屬性對使用者互動序列的多屬性的資訊提取都會產生影響,而非單獨影響對應屬性。因此注意力對使用者Seq的房源屬性組合生效,拼接後送入FCs中進行關係學習並輸出。
圖3.7 偏好挖掘網路結構圖
Activation Unit的設計:
如何求取使用者Seq中一個房源對應偏好組合的注意力權重,是AU模組要解決的問題,即目標偏好與使用者Seq偏好組合的相關性,其核心的關係計算由FCs完成,FCs的輸入包含Seq對應房源的偏好組合的Embedding向量,目標屬性的embedding向量,以及使用者Seq房源各屬性Embedding與目標屬性Embedding向量的Element Wise Minus。
圖 3.8 Active Unit的結構
4 寫在最後
本文介紹了偏好模型在貝殼的應用,包括XGBoost/神經網路、時序模型。為了解決高維稀疏問題,將多分類轉化為基於召回集的二分類問題,為了解決多峰偏好問題,採用深度興趣網路,並引入基於偏好的attention機制。
通過幾個版本的迭代,在後驗內積和交叉熵上進行驗證,提高了模型的效能。我們的模型還在不斷嘗試與優化中,有後續進展會持續更新。
5 引用資料
[1] Beyond User Embedding Matrix: Learning to Hash for Modeling Large-Scale Users in Recommendation
[2] Deep Interest Network for Click-Through Rate Prediction
[3] Real-time Personalization using Embeddings for Search Ranking at Airbnb