其它機器學習、深度學習演算法的全面系統講解可以閱讀《機器學習與應用》,清華大學出版社,雷明著,由SIGAI公眾號作者傾力打造,自2019年1月出版以來已重印3次。

  • 書的購買鏈接
  • 書的勘誤,優化,源代碼資源

PDF全文鏈接:解讀Airbnb的個性化搜索排序演算法

搜索排序和推薦是大多數互聯網公司高度關注的主要問題,包括網頁搜索引擎,內容發布網站等。雖然技術大同小異,比如搜索排序可能大家使用的都是LTR,或者現在基本用的都是DNN以及DNN的各種變種,但確實不存在一套通用的搜索排序解決方案,可以解決所有公司的問題。每個公司都有自己獨特的業務,面對不同的業務,都會面臨一些特有的挑戰。如何基於公司獨特的業務,在已有技術的基礎上,提出一些改進方案,也是一種能力的體現。

簡介

本文提出了一種新的、實時的個性化搜索排序演算法,通過學習房源和用戶的低維表示,同時在訓練過程中融入對Airbnb業務的深入理解,比如全局信息和顯式的負向反饋信號的引入,在真實業務場景上的實驗證明瞭該方法的有效性,並且已經部署到Airbnb的生產環境產生價值。

正文

本文是Airbnb公司的作品,本文的主要目的是(1)如何在已有embedding技術的基礎上,結合公司自身業務的特性,通過調整優化函數,學習符合業務需求的embedding表示。比如Airbnb公司,不同於網頁搜索和電子商務公司,通過官網和應用提供出遊房源短租服務。在這種服務市場下,用戶選擇房源一般會限定在某個區域,比如中國北京,並且租戶可以根據以往租戶對用戶的評價或用戶的資料選擇是否接受用戶的預定。(2)把技術創新成果應用到公司重要業務中。下面從業務出發,介紹embedding表示學習。

詳細細節

(1)embedding表示學習

本文提到Airbnb 99%的成交來源於相似房源推薦和搜索排序兩大業務,所以,房源和用戶的embedding表示學習也是從業務出發來考慮的。

比如,房源的embedding表示學習,因為相似房源推薦業務的價值主要體現於在用戶作出最終成交之前,根據用戶的瀏覽和點擊行為,為用戶推薦他/她可能感興趣的房源。因此,房源的embedding表示學習是基於用戶的點擊序列生成的。具體的學習優化函數如下(參考skip-gram [17]):

underset{	heta}{operatorname{argmax}} sum_{(l, c) in mathcal{D}_{p}} log frac{1}{1+e^{-v_{c}^{prime} mathbf{v}_{l}}}+sum_{(l, c) in mathcal{D}_{n}} log frac{1}{1+e^{mathbf{v}_{c}^{prime} mathbf{v}_{l}}}(3)

其中,l被稱為中心節點,c被稱為上下文,即中心節點前後連續的m個房源。第一個表達式表示正樣本的log-likelihood,第二個表達式表示負樣本的log-likelihood,負樣本採樣方法同樣參考[17]。

考慮到每個公司業務的獨特性,本文根據公司自身的業務特點調整了優化函數:

a)區別對待是否以成交行為作為序列結束的點擊序列。如果點擊序列不是以成交行為作為序列結束的點擊序列,則優化函數沿用式(3),否則,優化函數調整為如下:

underset{	heta}{operatorname{argmax}} sum_{(l, c) in mathcal{D}_{p}} log frac{1}{1+e^{-v_{c}^{prime} v_{l}}}+sum_{(l, c) in mathcal{D}_{n}} log frac{1}{1+e^{v_{c}^{prime} v_{l}}}+log frac{1}{1+e^{-v_{l}^{prime} v_{I}}}(4)

其中,前兩個表達式類似式(3),第三個表達式表示成交房源的log-likelihood。

b)用戶選擇房源一般會限定在某個區域,比如中國北京,則優化函數調整為如下:

underset{	heta}{operatorname{argmax}} sum_{(l, c) in mathcal{D}_{p}} log frac{1}{1+e^{-v_{c}^{prime} v_{l}}}+sum_{(l, c) in mathcal{D}_{n}} log frac{1}{1+e^{v_{c}^{prime} v_{I}}}\+log frac{1}{1+e^{-mathrm{v}_{b}^{prime} mathrm{v}_{l}}}+sum_{left(l, m_{n}
ight) in mathcal{D}_{m_{n}}} log frac{1}{1+e^{mathrm{v}_{m_{n}}^{prime} mathrm{v}_{l}}}(5)

其中,前三個表達式類似式(4),第四個表達式表示在用戶搜索的區域內,採樣一些負樣本,把這些負樣本的log-likelihood加入到優化函數中。

以上房源的embedding表示學習是基於用戶的點擊序列,文中把用戶的點擊序列稱作為短期的,session內的行為。而長期的,跨區域的成交行為,本文也同樣認為是比較重要的。比如,曾經在紐約和倫敦出遊,並有過成交行為的用戶,在洛杉磯搜索房源時,如果演算法能推薦一些跟之前預定過的房源相似的房源,也是有用的。

基於這種想法,本文同樣基於用戶的成交序列,生成了房源的embedding表示。只不過,因為用戶的成交序列過於稀疏,文章事先對房源進行了聚類。房源的聚類方法是基於規則的,詳見表(3)。

因此,每一條成交序列裏的元素,由原來的房源變成了房源聚類結果。為了方便起見,後面統稱為listing_type序列。

文章還有一個細節,因為用戶的成交序列時間跨度太長,這期間用戶的興趣可能會發生變化,比如,未婚變成了已婚。所以,為了捕獲到用戶的興趣變化,文中提出了在學習房源(確切的說,是listing_type)的embedding表示的同時,把用戶(確切的說,是user_type)的embedding也產出。當然,類似於對房源的處理,文章同樣對用戶做了聚類,聚類方法也是基於規則的,詳見表(4)

為了同時學習listing_type和user_type的embedding表示,文章在listing_type序列的基礎上,加入了用戶聚類結果。由listing_type序列,變成了user_type和listing_type混合的序列。但該序列是按照listing_type的成交時間排好序的。

類似的,採用式(3)的優化函數學習embedding表示。不同的是,此時的序列中出現了兩種實體,一種是user_type,一種是listing_type。本文提出分別對這兩種實體構造優化函數。優化函數詳見論文,不再這裡重複累贅。

另外,上面講到的a)和b)兩種業務特點,首先,因為此次的序列採用的是成交序列,所以不存在式(4)的改進。同樣,因為此次的序列本身就是跨區域的,所以也不存在式(5)的改進。但是,正如正文所說,租戶是可以拒絕用戶的預定的,所以,如何把顯式的拒絕行為考慮到優化函數中,文章給出了解決方案,調整後的優化函數如下:

underset{	heta}{operatorname{argmax}} sum_{left(u_{t}, c
ight) in mathcal{D}_{b o o k}} log frac{1}{1+exp ^{-v_{c}^{prime} v_{u t}}}+sum_{left(u_{t}, c
ight) in mathcal{D}_{n e g}} log frac{1}{1+exp ^{mathrm{v}_{c}^{prime} mathrm{v}_{u_{t}}}}+sum_{left(u_{t}, l_{t}
ight) in mathcal{D}_{r e j e c t}} log frac{1}{1+exp ^{mathrm{v}_{l}^{prime} mathrm{v} u_{t}}}(8)

其中,前兩項表達式的含義類似式(3)中的前兩項。最後一項表達式表示被租戶拒絕掉的listing_type的log-likelihood。

式(8)列出的是基於user_type為中心節點的優化函數。基於listing_type為中心節點的優化函數類似,詳見論文,這裡不再累贅。

(2)技術創新成果在業務中的應用

a)針對相似房源推薦業務,根據用戶最新的點擊行為,利用夾角餘弦方法,計算候選房源與點擊過的房源的相似度,然後相似度從高到低排序,取Top N推薦即可。

另外,針對新房源embedding的冷啟動問題,文章也給出了解決方案。首先,利用租戶提供的meta-data,找出地理位置上最近的,並且具有相同房源類型和相同價位的3個有embedding信息的其他房源。然後,對這三個embedding的每一維做平均值,得到新房源的embedding表示。文章稱,使用這樣方法,可以覆蓋到98%的新房源。

b)針對搜索排序業務,本文使用的模型是Lambda Rank的修改版本[4],該演算法使用的特徵包含用戶粒度的特徵,比如已成交房源的平均價格,好評率等;query粒度的特徵,比如搜索地域,住房人數,入住日期,租賃天數;房源粒度的特徵,比如每晚的房源價格,房源類型,房屋的數量,回絕率等;交叉特徵,就是上面提到的單粒度特徵的交叉,比如搜索地域與房源地域的距離,住房人數和房屋容量的差異,房源價格和用戶已成交房源的平均價格的差異等。 文中提到該演算法使用了104個特徵。其中有8個交叉特徵是基於embedding的,如表(6)。

表(6)中大寫H代表的具體含義以及每個feature的計算這裡只選擇第一個進行介紹,其他詳見論文。Hc表示用戶最近兩周點擊過的房源。EmbClickSim的計算如下:

EmbClicksimleft(l_{i}, H_{c}
ight)=max _{m in M} cos left(mathbf{v}_{l_{i}}, sum_{l_{h} in m, l_{h} in H_{c}} mathbf{v}_{l_{h}}
ight)(10)

其中v表示房源的embedding表示。

實驗

數據集

(1)用戶點擊序列

800 million的點擊序列,序列的分割是根據時間來做的,文章提到如果兩個行為之間的時間差超過30分鐘,就被看作是兩個序列。

另外,去除掉噪音數據,文章對噪音數據的定義為,用戶停留時長小於30秒和只有一次點擊行為的序列。

(2)用戶成交序列

50 million的用戶成交序列,其中user_type為500K,listing_type為500K。

實驗細節

(1)離線評估

通過Figure 2,3,4,可以明顯看出,相似的房源都被聚集在了一起。

(2)在線評估

Online A/B test,相似房源推薦業務,CTR獲得了21%的相對提升,在相似房源推薦模塊有成交的用戶量增加4.9%。

另外,針對搜索排序業務,本文也同樣在線上進行了驗證,結論是用戶預訂量有顯著增加。幾個月後,又進行了反向驗證,就是把基於embedding設計的特徵從模型中移除掉之後,線上數據顯示用戶預訂量有下降。

總結

這篇文章並沒有提出一種新的embedding學習演算法,而是從業務本身出發,在已有演算法的基礎上,結合業務的特性,提出了一些改進,並把這些改進成果成功應用到業務上。 另外,本文分別從離線和在線兩種評估方法上,對結果進行了驗證。個人認為是一篇很紮實的工作,這種做工作的態度值得我們學習。

一些個人想法

本文embedding的學習都是基於用戶的行為序列,而沒有考慮實體本身的side information。其實,side information也是一種很有用的信息,比如用戶的年齡,性別,興趣愛好等,這些信息也會影響他去選擇房源。如何把side information加入到embedding的學習中,是一個值得嘗試的事情。

另外,本文中的embedding表示學習和embedding在搜索排序中的應用是兩個任務,是分別訓練學習的。這樣做就會導致兩個任務互相不能共享一些信息,是否可以採用End2End的學習框架,同時學習這兩個任務,是一個值得思考的問題。

【參考文獻】

[4] Christopher J Burges, Robert Ragno, and Quoc V Le. 2011. Learning to rank with nonsmooth cost functions. In Advances in NIPS 2007

[17] Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg S Corrado, and Jeff Dean. 2013. Distributed representations of words and phrases and their compositionality. In Advances in neural information processing systems. 3111-3119


推薦閱讀:
相關文章