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