天天看點

Real-time Personalization using Embeddings for Search Ranking at Airbnb簡介

Real-time Personalization using Embeddings for Search Ranking at Airbnb

Abstract

作者主要開發了listing and user embedding技術,能捕捉客人短期與長期的興趣,并給出有效房屋推薦清單。

Introduction

Novel contribution:

  • real-time personalization:

    使用使用者最近互動的item的embedding來線上計算與需要排序的items的相似性。

  • Adapting Training for Congregated Search:

    embedding的時候用負采樣

  • Leveraging Conversions as Global Context:

    将booked listing作為全局上下文

  • User type embeddings

    使用使用者類型的embedding而不是對每個使用者都建立embedding,因為沒有足夠的資料以及對記憶體的要求過大

  • Rejections as Explicit Negatives

    将主人的拒絕視為負例

Methodology

Listing embeddings

因為采用負采樣的skip-gram模型,是以最初的目标函數與word2vec的目标函數一樣:

Real-time Personalization using Embeddings for Search Ranking at Airbnb簡介
Booked Listing as Global Context.

将click session分為booked session和exploratory session,booked session是最終産生了book行為的,exploratory session是沒有産生的。

對于booked session來說,将booked listing作為global context,也就是無論它是否在上下文的視窗裡,總是目标函數的一部分。

Real-time Personalization using Embeddings for Search Ranking at Airbnb簡介
Adapting Training for Congregated Search

為了解決負例樣本來自的market place總是與正例的market place不一緻的問題,aribnb又加入了一組negative samples。該批樣本就是在central listing同一市場的listing集合中進行随機抽樣得到的。

Real-time Personalization using Embeddings for Search Ranking at Airbnb簡介
Cold start listing embeddings

如果有new listing缺失embedding vector,就找附近的3個同樣類型、相似價格的listing embedding進行平均得到。

Examining Listing Embeddings

通過使用聚類以及分析相同類型與價格範圍的餘弦相似度,可以得出使用embedding方法很好的編碼了listing的特征

為了更友善的探索embedding的效果,airbnb還開發了Similarity Exploration Tool。

User-type& Listing-type Embeddings

為了捕捉長期的偏好,airbnb這裡采用了booked session來來進行學習。但是會有如下的問題:

  1. booking session的資料遠小于click session的資料
  2. 很多使用者過去隻訂過一個listing,是以我們無法從長度為1的session中學習
  3. 要訓練出有意義的embedding,那麼實體一般需要出現5-10次,但是對于airbnb來說,很多listing出現次數少于5-10次
  4. 使用者booking間隔的時間過長可能會因為事業的變化而對相關的因素如價格而改變,這也可能造成使用者的偏好不是那麼準确。

為了解決上述的問題,airbnb采用了listing_type和user_type來取代listing_id和user_id。

Real-time Personalization using Embeddings for Search Ranking at Airbnb簡介
For example, an Entire Home listing from US that has a 2 person capacity, 1 bed, 1 bedroom & 1 bathroom, with Average Price Per Night of $60.8, Average Price Per Night Per Guest of $​29.3, 5 reviews, all 5 stars, and 100% New Guest Accept Rate would map into listing_type = US_lt1_pn3 _pg3 _r3_5s4_c2 _b1_bd 2_bt 2_nu 3 .

如上述原文所說,就可以将很多不同的listing id映射到相同listing type了。

user type同理,也能通過上述的映射得到。

針對同一user_id的session,将session定義為

Real-time Personalization using Embeddings for Search Ranking at Airbnb簡介

一個session中的 u t y p e u_{type} utype​是同一個user_id的,隻不過 u t y p e u_{type} utype​可能會随着時間的變化而改變。

針對中心item是user type還是listing type,目标函數略有不同:

Real-time Personalization using Embeddings for Search Ranking at Airbnb簡介
Real-time Personalization using Embeddings for Search Ranking at Airbnb簡介

Explicit Negatives for Rejections

将房主的拒絕當作一個明确的負類,在目标函數後再加上這樣一個信号。

Real-time Personalization using Embeddings for Search Ranking at Airbnb簡介

Experiments

用到的embedding特征在搜尋排序模型中

Real-time Personalization using Embeddings for Search Ranking at Airbnb簡介

特征重要性:

Real-time Personalization using Embeddings for Search Ranking at Airbnb簡介

效果提升:

Real-time Personalization using Embeddings for Search Ranking at Airbnb簡介

繼續閱讀