双塔模型在Airbnb搜索排名中的应用
Improving Deep Learning For Airbnb Search(KDD20)
本文是一篇偏實踐的文章,不講太多虛的,什么有效什么無效,您請細品!
將深度學習應用于搜索排名是Airbnb最具影響力的產品改進之一。但在推出深度學習模式之后,接下來會發生什么呢?在本文中,我們描述了超越的歷程,討論了我們所說的改進搜索的ABC:
- A表示體系結構;
- B表示偏差;
- C表示冷啟動。
對于體系結構,我們描述了一個新的ranking神經網絡,重點放在我們現有的DNN超越完全連接的兩層網絡的過程。在處理ranking中的位置偏差時,我們描述了一種新的方法,這種方法導致了DNN在處理庫存方面最顯著的改進,而DNN在歷史上發現這種改進具有挑戰性。為了解決冷啟動,我們描述了我們對這個問題的看法,以及我們為改善平臺上new listing所做的改變。
我們希望向深度學習過渡的rangking團隊將發現這是一個如何迭代DNNs的實際案例研究。
在實踐過程中,我們發現:
- 增加網絡層對于卷積神經網絡是一種有效的技術,但不一定對所有的dnn都有效。對于像我們這樣完全連通的網絡,兩個隱藏層就足夠了,模型容量不是我們的問題;
- 我們嘗試了一些架構,可以更明確地處理Query和列表之間的交互,比如deep和wide,其中查詢列表特性交叉被添加到wide部分。其次是各種基于注意力的網絡。其目的是使從查詢特征派生的隱藏層將注意力集中在從列表特征派生的隱藏層的某些部分上。對這些努力的簡短總結是,他們也未能帶來太多幫助;
- 在嘗試將成功的深度學習體系結構導入到產品應用程序中時,在翻譯過程中經常會丟失的是,體系結構的成功與其應用程序上下文密切相關。報告的體系結構性能增益來自于解決與之相比的基線的某些缺點。由于深度學習普遍缺乏可解釋性,因此很難準確推斷新體系結構解決了哪些缺陷以及如何解決這些缺陷。因此,確定這些缺陷是否也困擾著國內的產品,就成了一個猜測。
- 為了能提升成功的概率,我們放棄了下載論文 實現 A/B測試的循環,我們切換為用戶lead,模型跟隨。
這里的想法是首先量化一個用戶問題。模型調整是在用戶問題之后進行的。
沿著這些思路,我們觀察到,之前描述的一系列成功的排名模型發布不僅與預訂量的增加有關,而且與搜索結果的平均價格的降低有關。這表明模型迭代更接近客人的價格偏好,這低于之前模型的估計。我們懷疑,即使在連續降價之后,這款模型的價格選擇與客人的喜好之間也可能存在差距。為了量化這一差距,我們研究了客人看到的搜索結果的中間價和客人預訂的物品價格之間的差異分布。差價是在取了價格的后計算出來的,因為價格服從對數正態分布。圖1描繪了差異是如何分布的。
我們的預期是預訂價格將對稱分布在搜索結果的中間價周圍,并且類似于以零為中心的正態分布。相反,它的負面影響很大,表明客人傾向于低價。這給了我們一個具體的用戶問題來調查:
- 是否更低的價格列表更加傾向于用戶喜好的價格。
考慮到兩個普通房源與其他房源相同,我們的直覺理解是,客人更喜歡經濟實惠的房源。我們的排名模型真的明白這個“便宜就是更好”的原則嗎?我們不完全確定。
我們對模型如何解釋上市價格缺乏清晰的解釋,是因為它是一個DNN。常見的工具,如在logistic回歸模型中檢查相應的權重或繪制GBDT模型的部分依賴圖,在DNN環境中不再有效。為了使得價格更加具有解釋性,我們使用下面的方案:
這個?tanh()項允許我們通過提高價格來單調地降低產出分數,從而實現更便宜更好。易于解釋的w和參數b使我們能夠描繪出價格的確切影響。對于參數的學習值,w=0.33和b=?0.9。
線上的A/B實驗,相較于兩層隱藏層的DNN,搜索結果的平均價格下降了5.7%,與離線分析結果一致。但由于預訂量下降了1.5%,價格的可解釋性付出了沉重的代價。我們的假設是,價格與其他特征有很大的相互作用。將價格與模型分離會導致欠擬合。這一假設得到了訓練和測試的NDCG都下降的事實的支持。
為了保留模型中更便宜更好的直覺,同時允許價格與其他特性交互,我們開始研究DNN體系結構。
我們構建了如上圖所示的體系結構,除了TensorflowTM中本機存在的那些節點之外,它不依賴于任何專門的計算節點。我們討論了該體系結構的逐步構造,確保從輸入價格節點到最終輸出的所有路徑對價格是單調的:
線上的結果非常相似,導致預訂量下降了1.6%。該體系結構要求模型輸出在任何情況下都是單調遞減的w.r.t價格。這種結構的失敗認為價格的單調性是一個過于嚴格的約束。
雖然第2.3節中描述的體系結構揭示了DNNs在支持模型約束方面的多功能性,但它也教會了我們DNNs的另一個特點:它們的行為就像團隊中的另一位明星工程師。
考慮到一個問題,他們通常會想出一個合理的解決方案。但是強迫朝某個方向走,災難很快就會接踵而至。所以在下一次迭代中,我們決定通過設置上下文而不是控制來管理DNN。我們沒有強制要求模型輸出相對于價格是單調的,而是添加了一個軟提示,即越便宜越好。通常,每個訓練示例都包含一對列表,一個已預訂,另一個未預訂。將DNN應用于這兩個列表的特征會生成相應的logit,損失的定義如下圖所示。
為了添加price提示,我們為每個訓練示例引入了第二個標簽,指示成對中哪個列表的價格較低,哪個列表的價格較高。然后按表2所示修改損失。alpha-hyperparameter提供了一種方法來控制結果是按相關性排序還是按價格排序。
為了解決價格的提示,我們引入每個訓練樣本的第二個label,表示兩個列表中哪個列表的價格較低,哪個列表的價格較高。然后按下面的方式修改損失。alpha-hyperparameter提供了一種方法來控制結果是按相關性排序還是按價格排序
為了測試該想法,我們依據最小值調整alpha參數,在線下的測試中,我們可以得到和Baseline一樣的NDCG,這允許我們再不傷害相關性的情況下push “越便宜越好”的想法,在線上的A\B測試中,我們發現價格有平均3.3%的下降,在booking上又0.67%的下降。在在線測試中,將新訓練的模型應用于整個庫存,揭示了將價格損失作為訓練目標一部分的真實成本。
降價實驗帶來的災難讓我們處于一種自相矛盾的狀態:搜索結果中的掛牌價格似乎高于客人喜歡的價格,但壓低價格卻讓客人不高興。為了理解新模型的不足之處,有必要比較基準模型是如何利用價格特征的,但這被完全連接的DNN缺乏可解釋性所掩蓋。如前所述,像部分依賴plots這樣的概念是沒有用的,因為它們依賴于給定特征對模型影響的假設與其他特征無關。在DNNs的情況下,這根本不是真的。試圖描繪價格的部分依賴產生了平緩傾斜的直線,這表明DNN對價格有一些輕微的線性依賴,這與我們所知道的一切都是矛盾的.
為了取得進展,我們縮小了DNN的可解釋性問題。我們沒有試圖對價格如何影響DNN做一般性的陳述,而是專注于一次解釋一個搜索結果。借用單個條件期望(ICE)plots的思想,我們從單個搜索結果中獲取列表,在保持所有其他特征不變的情況下橫掃價格范圍,并構建模型得分圖。示例圖如圖所示。這些圖表明,模型已經了解到的完全連接的雙層DNN更便宜。
對從日志中隨機選擇的搜索集合重復ICE分析進一步加強了這一結論。由于試圖進一步壓低價格,失敗的體系結構在質量上正在妥協。
暴政這就產生了一個假設,即圖1后面的DNN正遭受著大多數人的暴政,集中在價格和質量的權衡上,這些權衡是針對占主導地位的最受歡迎的地點調整的。將這些折衷推廣到尾部查詢效果不佳,而且模型無法適應局部條件.于是我們采用雙塔結構。
對應的代碼如下:
- 在在線的測試結果中,我們發現雙塔的效果獲得了0.6%的增益。
我們再看價格的ICE圖,我們發現一個明顯的改變,而不是地塊總是向下傾斜,價格強調一個更便宜的是更好的解釋,我們看到分數峰值在某些價格的周圍,如上圖所示。這更接近“right price for the trip”的正確解釋。
在這種情況下,一個經常被提出的問題是,低質量的上市公司是否可以僅僅通過確定一個價格就獲得新模式的排名。仔細觀察ICE曲線發現,某些價格附近的得分峰值只出現在高質量的上市公司,而這些上市公司通常一開始就排名靠前。對于大多數普通房源,該地塊的價格仍然保持著單調遞減的曲線。
正確價格和理想清單的概念是圍繞query tower生成的向量展開的,因此接下來自然要研究這些向量到底是什么樣子的。為了進行分析,我們在隨機的搜索樣本上運行了雙塔DNN,并收集了查詢塔的輸出向量。由于100-d矢量不是人類可解釋的,我們應用t-SNE將其簡化為2-d矢量,如下圖所示。
令人欣慰的是,在類似的參數值(如客流量和行程長度)周圍形成了大型集群。在大的城市群中,直覺上相似的城市被放置在相對較近的地方。
在旅游領域的機器學習應用中,任何時候都有很大一部分用戶是新用戶,或者是在很長一段時間后才使用產品的。出于所有實際目的,用戶處于持續冷啟動狀態,處理用戶級冷啟動是核心排名公式本身的一部分。因此,當提到冷啟動問題時,我們將注意力集中在項目級別的冷啟動(即,如何處理排名中的新列表)。正如在第2.1節中對DNN架構的改進一樣,我們的探索的出發點不是文獻調查,而是對用戶問題的觀察。
1. Approaching Cold Start As Explore-Exploit
排名策略可以通過利用對當前庫存的了解,在短期內專門優化預訂,并且只押注那些有可靠業績記錄的上市公司。但為了市場的長期成功,它需要付出一些成本來探索新的庫存。這種折衷可以實現為一個顯式的排名提升為新的上市公司,分配更高的排名比什么是由DNN決定。這樣一來,新房源就可以以較低的預訂成本收集客人的反饋。提升可以進一步細化,通過印象計數或引入時間衰減來封頂。我們的第一次迭代就是測試這樣一個增強。通過在線A/B測試,我們將新上市排名提升調整為預訂中性,而不是沒有提升,同時將8.5%的額外首頁曝光分配給新的listings。
在explore和exoloit的機制下存在許多的挑戰:
- 新的listing排名提升被兩股相反的力量拉向了不同的方向:1)短期內由于搜索結果的相關性降低而導致用戶體驗下降(我們可以準確衡量這一影響),而2)長期內由于庫存的增加而導致用戶體驗的改善(我們發現這一影響相當嚴重)難以量化)。缺乏一個明確而客觀的最佳激勵量定義導致了激烈的內部辯論,沒有一個解決方案能滿足每一個感興趣的團隊;
- 即使在任意確定了探索的費用的總預算之后,預算的適當使用顯然取決于某一地點的供需情況。當有高需求時,探索的容忍度很高,但當一個地區的需求不足時,容忍度就沒有那么高。而且,在良好供應受到限制的地區,探索和擴大庫存的必要性很高。當大量高質量的上市公司處于空置狀態時,幾乎沒有動力承擔探索成本。供應和需求又取決于地理位置、季節性和客流量等參數。因此,為了最佳地利用全球探索預算,需要數千個本地化參數,這是一項無法手動完成的任務。
2. Estimating Future User Engagement
為了使系統更易于管理,我們退了一步問:**什么使新的listings不同?**答案是,當然,沒有用戶生成的參與功能,如預訂數量,點擊,評論等。其他屬性,如價格,位置,便利設施是眾所周知的一樣,其余的上市。從理論上講,如果我們有一個oracle來預測一個100%準確的新上市公司的接洽特征,它可以最佳地解決冷啟動問題。
與其將cold-start作為一個探索利用的tradeoff,我們將其重新構建為一個參與度預估的問題,重新定義這個問題可以解鎖一些重要的東西:它允許我們將這個問題定義一個理想的目標,并不斷地朝著這個目標努力。為了解決冷啟動問題,我們引入了一個新的組件,該組件為DNN提供了一個新的列表,在訓練和評分時預測了用戶參與特性:
為了評估estimator的準確性,我們按下面的步驟來做:
- 從logs里面采樣O(100M)個搜索結果,對于每個搜索結果,隨機從top100的位置采樣一個listing,這代表了一個樣本的清單,已收到充分的關注,從guests,所以他們的參與特征充分收斂;
- 我們令表示從logs中采樣的listings的排名,我們將rank表示為真實,以表明listings的參與特征是真實客人互動的結果。根據rank,我們計算實際的discounted 的rank:;
- 接下來,對于每個樣本列表,我們移除所有的參與(engagement)特征,并用測估計器預測的特征替換它們。我們用預測的參與度特征對列表進行評分,在相應的日志搜索結果中找到它的新排名,然后從中計算discounted的排名。我們用對其表示;
- 對于每個采樣的listing,我們計算參與度估計的誤差,
- 為了獲取整體誤差,我們將所有的采樣listings的engagement預測的誤差求平均;
為了驗證,我們比較了兩種估計方法。基線是生產中使用的系統,它為缺少的特性(包括新列表的engament特性)指定默認值。默認值是通過手動分析相應功能而構建的常量。這一比較結果與一個評估器的結果相反,該估計器通過平均新listing附近listings的參與特征來預測參與特征。
為了提高準確性,它只考慮與新房源的客流量相匹配的相鄰房源,并計算滑動時間窗口內的平均值,以考慮季節性。例如,要估算兩人入住的新盤的預訂數量,需要計算兩人入住的新盤小半徑內所有房源的平均預訂數量。這在概念上類似于naivebayes推薦器,后者使用生成方法估計丟失的信息.
在離線分析中,與使用默認值相比,上述接合估計器將接合估計誤差降低了42%。
在在線A/B實驗中,我們觀察到新創建的列表的預訂量提高了14%,同時第一頁結果的impression也增加了14%。除了對新房源的影響外,整體預訂量增加了0.38%,表明用戶體驗整體改善。
我們調查position bias的出發點與此完全無關。與新上市公司凈利潤率較低的觀察結果類似,另一個表現低于預期的細分市場是精品酒店和傳統床和早餐,這一細分市場作為庫存的一部分正在迅速增長。從觀察中得出的一個假設是,由于位置偏差,在訓練數據中歷史上代表性不足的庫存沒有得到最佳排序。但與在new lisitings和冷啟動之間的聯系不同,沒有強有力的理由相信位置偏差是本案的唯一罪魁禍首;還有其他多種假設。雖然我們發現關注用戶問題比簡單地從文獻調查中導入想法要好得多,但這本身并不是萬能的。在用戶問題和模型中的缺陷之間建立因果關系遠非易事。在當前場景中,我們是在黑暗中探索的。但在這期間,我們決定去尋找解釋觀察結果的模型中最大的差距。而文獻調查對于確定我們的模型中潛在的主要差距是至關重要的。
給定用戶u,該用戶進行了問題的查詢q,用戶搜索的結果會被分為兩大塊:
我們將用戶booking一個listing的概率表示為兩個分解的概率的乘積:
雖然構建propensity model通常涉及干擾搜索結果以收集反事實的示例,但描述了在不進行額外干預的情況下構建propensity model的方法。
我們的解決方案有兩個關鍵亮點。首先,它是非侵入性的,不需要對搜索結果進行任何隨機化。我們依賴Airbnb搜索結果的一些獨特屬性,這些屬性使得列表出現在不同的位置,即使它們在排名時的相應分數或多或少是不變的.
- Listings表示在給定日期范圍內只能預訂一次的實體。當listings被預訂并從搜索中消失時,它會改變剩余listings的位置。
- 每個Listings都有其獨特的日歷可用性,因此不同的listings會出現在不同的位置,以便跨日期范圍進行類似的查詢。
我們的解決方案的第二個亮點是,我們沒有建立一個明確的傾向模型。相反,我們在DNN中引入位置作為一個特征,通過dropout進行正則化。在得分過程中,我們將位置特征設置為0。本節的其余部分描述了為什么這樣做的直覺。
在基于基于position的模型假設之下,將位置作為一個控制變量有效的從listing ranking中降低了position bias,但是卻引入了新的問題,相關性的預測是依賴于位置作為特征的,在預測的時候將其設置為0,我們發現加不加會有1.3%的影響,所以將position作為控制變量看起來會影響相關性的預測。
為了降低position特征的相關性依賴預測,我們使用dropout,在訓練的時候,我們將listing設置為0,由dropout率來控制。dropout率在無噪聲訪問位置特征以準確推斷位置偏差和使位置特征噪聲化以使其遠離相關預測之間進行折衷。我們試圖通過以下步驟找到一個平衡點:
我們通過AB測試來評估我們的想法,我們評估了之前的模型以及加入了position bias的網絡并在線進行測試,我們發現存在0.7%的gap;與此同時,我們得到了1.8%的收益的提升,這也表明了position bias的重大影響。
深度學習在Airbnb的搜索排名中繼續蓬勃發展。我們由衷地感謝社區提供了深入的學習生態系統、開放的思想交流,以及通過分享我們自己的經驗參與對話的機會。但我們旅程的亮點是意識到,要突破我們的DNNs的界限,靈感不會來自外部。為此,我們必須遵循用戶的引導。
總結
以上是生活随笔為你收集整理的双塔模型在Airbnb搜索排名中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020上海学区房楼市,到底发生了什么?
- 下一篇: Cert manager自动签发/更新证