【導(dǎo)讀】本文最早于 2018 年 5 月 13 日發(fā)表,主要介紹了機(jī)器學(xué)習(xí)的嵌入技術(shù)在 Airbnb 愛彼迎房源搜索排序和實時個性化推薦中的實踐。Airbnb 愛彼迎的兩位機(jī)器學(xué)習(xí)科學(xué)家憑借這項技術(shù)的實踐獲得了2018 年 KDD ADS track 的最佳論文,本文即是對這篇論文的精華概括。
Airbnb 平臺包含數(shù)百萬種不同的房源,用戶可以通過瀏覽搜索結(jié)果頁面來尋找想要的房源,我們通過復(fù)雜的機(jī)器學(xué)習(xí)模型使用上百種信號對搜索結(jié)果中的房源進(jìn)行排序。 當(dāng)用戶查看一個房源時,他們有兩種方式繼續(xù)搜索:返回搜索結(jié)果頁,或者查看房源詳情頁的「相似房源」(會推薦和當(dāng)前房源相似的房源)。我們 99% 的房源預(yù)訂來自于搜索排序和相似房源推薦。
在這篇博文中,我們將會介紹 Airbnb 開發(fā)和部署的房源嵌入(Listing Embedding)技術(shù),以及如何用此來改進(jìn)相似房源推薦和搜索排序中的實時個性化。 這種嵌入是從搜索會話(Session)中學(xué)到的 Airbnb 房源的一種矢量表示,并可用此來衡量房源之間的相似性。 房源嵌入能有效地編碼很多房源特征,比如位置、價格、類型、建筑風(fēng)格和房屋風(fēng)格等等,并且只需要用 32 個浮點數(shù)。我們相信通過嵌入的方法來做個性化和推薦對所有的雙邊市場平臺都非常有效。
嵌入的背景
將詞語表示為高維稀疏向量 (high-dimensional, sparse vectors) 是用于語言建模的經(jīng)典方法。不過,在許多自然語言處理 (NLP) 應(yīng)用中,這一方法已經(jīng)被基于神經(jīng)網(wǎng)絡(luò)的詞嵌入并將詞語用低維度 (low-dimentional) 來表示的新模型取代。新模型假設(shè)經(jīng)常一起出現(xiàn)的詞也具有更多的統(tǒng)計依賴性,會直接考慮詞序及其共現(xiàn) (co-occurrence) 來訓(xùn)練網(wǎng)絡(luò)。 隨著更容易擴(kuò)展的單詞表達(dá)連續(xù)詞袋模型 (bag-of-words) 和 Skip-gram 模型的發(fā)展,在經(jīng)過大文本數(shù)據(jù)訓(xùn)練之后,嵌入模型已被證明可以在多種語言處理任務(wù)中展現(xiàn)最佳性能。
最近,嵌入的概念已經(jīng)從詞的表示擴(kuò)展到 NLP 領(lǐng)域之外的其他應(yīng)用程序。來自網(wǎng)絡(luò)搜索、電子商務(wù)和雙邊市場領(lǐng)域的研究人員已經(jīng)意識到,就像可以通過將句子中的一系列單詞視為上下文來訓(xùn)練單詞嵌入一樣,我們也可以通過處理用戶的行為序列來訓(xùn)練嵌入用戶操作,比如學(xué)習(xí)用戶點擊和購買的商品或瀏覽和點擊的廣告。 這樣的嵌入已經(jīng)被用于 web 上的各種推薦系統(tǒng)中。
房源嵌入
我們的數(shù)據(jù)集由 N 個用戶的點擊會話 (Session) 組成,其中每個會話定義為一個由用戶點擊的 n 個房源 id 組成的的不間斷序列;同時,只要用戶連續(xù)兩次點擊之間的時間間隔超過30分鐘,我們就會認(rèn)為是一個新的會話。 基于該數(shù)據(jù)集,我們的目標(biāo)是學(xué)習(xí)一個 32 維的實值表示方式
來包含平臺上所有的房源,并使相似房源在嵌入空間中處于臨近的位置。
列表嵌入的維度被設(shè)置為,這樣的設(shè)置可以平衡離線性能(在下一節(jié)中討論)和在線搜索服務(wù)器內(nèi)存中存儲向量所需的空間,能夠更好地進(jìn)行實時相似度的計算。
目前有幾種不同的嵌入訓(xùn)練方法,在這里,我們將專注于一種稱為負(fù)抽樣 (Negative Sampling) 的技術(shù)。 首先,它將嵌入初始化為隨機(jī)向量,然后通過滑動窗口的方式讀取所有的搜索會話,并通過隨機(jī)梯度下降(stochastic gradient descent)來更新它們。 在每一步中,我們都會將中央房源的向量更新并將其推向正向相關(guān)房源的向量(用戶在點擊中心房源前后點擊的其他房源,滑動窗口長度為),并通過隨機(jī)抽樣房源的方式將它從負(fù)向相關(guān)房源推開(因為這些房源很大幾率與中央房源沒有關(guān)系)。
為簡潔起見,我們將跳過具體訓(xùn)練過程的細(xì)節(jié),并著重解釋為了更好地適用我們的場景而做的一些修改:
使用最終預(yù)訂的房源作為全局上下文 (Global Context):我們使用以用戶預(yù)訂了房源(上圖中紫色標(biāo)記)為告終的用戶會話來做這個優(yōu)化,在這個優(yōu)化的每個步驟中我們不僅預(yù)測相鄰的點擊房源,還會預(yù)測最終預(yù)訂的房源。 當(dāng)窗口滑動時,一些房源會進(jìn)入和離開窗口,而預(yù)訂的房源始終作為全局上下文(圖中虛線)保留在其中,并用于更新中央房源向量。
適配聚集搜索的情況:在線旅行預(yù)訂網(wǎng)站的用戶通常僅在他們的旅行目的地內(nèi)進(jìn)行搜索。 因此,對于給定的中心房源,正相關(guān)的房源主要包括來自相同目的地的房源,而負(fù)相關(guān)房源主要包括來自不同目的地的房源,因為它們是從整個房源列表中隨機(jī)抽樣的。 我們發(fā)現(xiàn),這種不平衡會導(dǎo)致在一個目的地內(nèi)相似性不是最優(yōu)的。 為了解決這個問題,我們添加了一組從中央房源的目的地中抽樣選擇的隨機(jī)負(fù)例樣本集
考慮到上述所有因素,最終的優(yōu)化目標(biāo)可以表述為
在這里
使用上面所描述的優(yōu)化程序,我們通過使用超過 8 億次的搜索點擊會話,訓(xùn)練了 Airbnb 上 450 萬個有效列表的房源嵌入,從而獲得了高質(zhì)量的房源展示。
冷啟動嵌入:每天在 Airbnb 上都有新的房源提供。這些房源在新建時還不在我們的訓(xùn)練數(shù)據(jù)集中,所以沒有嵌入信息。 要為新房源創(chuàng)建嵌入,我們會找到 3 個地理位置最接近、房源類別和價格區(qū)間相同的已存在的房源,并計算這些房源嵌入的向量平均值來作為新房源的嵌入值。
嵌入學(xué)習(xí)到的是什么?
我們用多種方式來評估嵌入捕獲到的房源的特征。首先,為了評估地理位置相似性是否被包含,我們對用于學(xué)習(xí)的嵌入進(jìn)行了 k 均值聚類 (k-means clustering)。下面的圖顯示了美國加州產(chǎn)生的 100 個聚類,確認(rèn)了來自近似位置的房源聚集在一起。 接下來,我們評估了不同類型(整套房源,獨立房間,共享房間)和價格范圍的房源之間的平均余弦相似性 (cosine similarity) ,并確認(rèn)相同類型和價格范圍的房源之間的余弦相似性遠(yuǎn)高于不同類型和不同價格的房源之間的相似性。 因此我們可以得出結(jié)論,這兩個房源特征也被很好的包括在訓(xùn)練好的嵌入中了。
雖然有一些房源特征我們可以從房源元數(shù)據(jù)中提取(例如價格),所以不需要被學(xué)習(xí),但是其他類型的房源特征(例如建筑風(fēng)格,樣式和感覺)很難提取為房源特征的形式。 為了評估這些特性并能夠在嵌入空間中進(jìn)行快速簡便的探索,我們內(nèi)部開發(fā)了一個相似性探索工具 (Similarity Exploration Tool),并提供了一個視頻進(jìn)行演示。
視頻鏈接:https://www.youtube.com/watch?v=1kJSAG91TrI&feature=youtu.be
該視頻提供了許多嵌入示例,能夠找到相同獨特建筑風(fēng)格的相似房源,包括船屋、樹屋、城堡等。
線下評估
在對使用了嵌入的推薦系統(tǒng)進(jìn)行線上搜索測試之前,我們進(jìn)行了多次離線測試。同時我們還使用這些測試比較了多種不同參數(shù)訓(xùn)練出來的不同嵌入,以快速做優(yōu)化,決定嵌入維度、算法修改的不同思路、訓(xùn)練數(shù)據(jù)的構(gòu)造、超參數(shù)的選擇等。
評估嵌入的一種方法是測試它們通過用戶最近的點擊來推薦的房源,有多大可能最終會產(chǎn)生預(yù)訂。
更具體地說,假設(shè)我們獲得了最近點擊的房源和需要排序的房源候選列表,其中包括用戶最終預(yù)訂的房源;通過計算點擊房源和候選房源在嵌入空間的余弦相似度,我們可以對候選房源進(jìn)行排序,并觀察最終被預(yù)訂的房源在排序中的位置。
我們在下圖中顯示了一個此類評估的結(jié)果,搜索中的房源根據(jù)嵌入空間的相似性進(jìn)行了重新排序,并且最終被預(yù)訂房源的排序是按照每次預(yù)定前的點擊的平均值來計算,追溯到預(yù)定前的 17 次點擊。
我們比較了幾個嵌入版本:
d32 regular,沒有對原始嵌入算法進(jìn)行任何修改
d32 booking global,被預(yù)訂房源作為全局上下文
d32 booking global + market negatives,被預(yù)訂房源作為全局上下文,且加入了中央房源的目的地中抽樣選擇的隨機(jī)負(fù)例樣本作為負(fù)值(見上述目標(biāo)優(yōu)化公式)
從圖中我們可以看出,第三個選項中的被預(yù)訂房源一直都有較為靠前的排序,所以我們可以得出結(jié)論,這個選擇要比其它兩個更優(yōu)。
基于嵌入的相似房源推薦
每個 Airbnb 房源詳情頁面都包含一個「相似房源」的輪播,推薦與當(dāng)前房源相似并且可以在相同時間段內(nèi)預(yù)訂的房源。
在我們測試嵌入前,我們主要通過調(diào)用主搜索排序模型來搜索相同位置、價格區(qū)間和類型的房源以得出相似房源。
在有了嵌入之后,我們對此進(jìn)行了 A/B 測試,將現(xiàn)有的相似房源算法與基于嵌入的解決方案進(jìn)行了比較。在基于嵌入的解決方案中,相似房源是通過在房源嵌入空間中找到 k 個最近鄰居 (k-nearest neighbors) 來生成的。 更確切地說,給定學(xué)習(xí)好了的房源嵌入,通過計算其向量與來自相同目的地的所有房源的向量
之間的余弦相似性,可以找到指定房源
的所有可預(yù)訂的相似房源(如果用戶設(shè)置了入住和退房日期,房源需要在該時間段內(nèi)可預(yù)訂)。最終得到的
個最高相似性的房源組成了相似房源列表。
A/B 測試顯示,基于嵌入的解決方案使「相似房源」點擊率增加了21%,最終通過「相似房源」產(chǎn)生的預(yù)訂增加了 4.9%。
基于嵌入的實時個性化搜索
到目前為止,我們已經(jīng)看到嵌入可以有效地用于計算房源之間的相似性。 我們的下一個想法是在搜索排序中利用此功能進(jìn)行一個會話內(nèi)的實時個性化,目的是向用戶更多展示他們喜歡的房源,更少展示他們不喜歡的房源。
為實現(xiàn)這一目標(biāo),我們?yōu)槊總€用戶實時收集和維護(hù)(基于 Kafka)兩組短期歷史事件:
:用戶在過去 2 周內(nèi)點擊的房源 ID
:用戶在過去 2 周內(nèi)跳過的房源 ID(我們將跳過的房源定義為排序較靠前的房源,但用戶跳過了此房源并點擊了排序較靠后的房源)
接下來,在用戶進(jìn)行搜索時,我們?yōu)樗阉鞣祷氐拿總€候選房源做 2 個相似性計算:
具體來說,我們計算來自的目的地級質(zhì)心之間的相似性并選擇最大相似度。 例如,如果
包含來自紐約和洛杉磯的房源,那么這兩個目的地中每個目的地的房源嵌入將被平均以形成目的地級別的質(zhì)心。
上面這兩個相似性衡量的結(jié)果,會作為之后通過搜索排序機(jī)器學(xué)習(xí)模型對候選房源進(jìn)行排序時考慮的附加信號。
我們首先會記錄這兩個嵌入相似性特征以及其他搜索排序特征,來為模型訓(xùn)練創(chuàng)建一個新的標(biāo)記數(shù)據(jù)集,然后繼續(xù)訓(xùn)練一個新的搜索排序模型,之后我們可以通過 A/B 測試來和當(dāng)前線上的排序模型進(jìn)行對比。
為了評估新模型是否如預(yù)期地學(xué)會了使用嵌入相似性特征,我們在下面繪制了它們的部分依賴圖。這些圖顯示了如果我們固定住其他所有的特征值,只考慮我們正在測試的某個特征值,候選房源的排序分?jǐn)?shù)會發(fā)生什么變化。
從左邊的圖中可以看出,較大的值(用戶最近點擊的房源的相似房源)會導(dǎo)致更高的模型得分。
在右邊的圖中可以看出,較大的
所以部分依賴圖的觀察結(jié)果證實,特征行為符合我們之前預(yù)期的模型將學(xué)習(xí)的內(nèi)容。除此之外,當(dāng)新的嵌入特征在搜索排序模型特征中重要性排序很靠前的時候,我們的離線測試結(jié)果顯示各項性能指標(biāo)都有所改進(jìn)。這些數(shù)據(jù)讓我們做出了進(jìn)行在線實驗的決定,之后該實驗取得了成功,我們在 2017 年夏季上線了將嵌入特征用于實時個性化生成推薦的功能。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4783瀏覽量
101239 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8446瀏覽量
133126 -
Airbnb
+關(guān)注
關(guān)注
0文章
14瀏覽量
5400
原文標(biāo)題:工程實踐也能拿KDD最佳論文?解讀Embeddings at Airbnb
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
《嵌入式Linux系統(tǒng)開發(fā)技術(shù)詳解--基于ARM(完整版)》電子版
《Visual C# 2005開發(fā)技術(shù)》應(yīng)用程序部署.pdf
《嵌入式Linux系統(tǒng)開發(fā)技術(shù)詳解--基于ARM(完整版)》 電子書免費(fèi)資源分享
HSDPA和HSUPA在開發(fā)/部署這些新技術(shù)時存在哪類測試要求?
嵌入式Linux版本Qt5.4快速部署的相關(guān)資料分享
如何在RK3308嵌入式開發(fā)板上使用ncnn部署mobilenetv2_ssdlite模型呢
嵌入式部署或模式的相關(guān)資料分享
Embedded SIG | 多 OS 混合部署框架
部署基于嵌入的機(jī)器學(xué)習(xí)模型
嵌入式liunx開發(fā)技術(shù)詳解
《Visual C# 2005開發(fā)技術(shù)》應(yīng)用程序部署
Airbnb機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)團(tuán)隊經(jīng)驗分享
嵌入式Linux開發(fā)環(huán)境部署
![<b class='flag-5'>嵌入</b>式Linux<b class='flag-5'>開發(fā)</b>環(huán)境<b class='flag-5'>部署</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
嵌入式linux安裝qt,嵌入式Linux版本Qt5.4快速部署
![<b class='flag-5'>嵌入</b>式linux安裝qt,<b class='flag-5'>嵌入</b>式Linux版本Qt5.4快速<b class='flag-5'>部署</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用嵌入來做個性化的搜索推薦:來自Airbnb
![使用<b class='flag-5'>嵌入</b>來做個性化的搜索推薦:來自<b class='flag-5'>Airbnb</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論