P2P租車推薦系統架構試談

主要參考Airbnb的房屋租賃推薦系統
(Real-time Personalization using Embeddings for Search Ranking at Airbnb)

P2P租車與Airbnb的房屋租賃在業務邏輯上是高度相似的,都屬於短期租賃的雙邊市場,一個顧客很少會預定同一臺車多次,一臺車在某時間段內只能被一個顧客租用,車主有可能拒絕出租,數據存在嚴重的稀疏性,所以這裏參考Airbnb在房屋租賃上的架構。主要分爲兩大模塊,search ranking和similar listing recommendation,similar listing recommendation推薦相似車型,search ranking負責搜索排序。下面將分別闡述兩大模塊的設計方法,在此之前,要先介紹下embedding,其是兩大模塊都將用到的策略。

Embedding,最早是源於NLP領域,後來得到推廣,現已被廣泛應用於各個領域。這裏用到的embedding策略有兩種不同的方式,一種是listing embeddings,一種是user-type&listing-type embeddings, 分別用於short-term real-time personalization和long term personalization,捕捉的是用戶的短期行爲信息和長期行爲信息。下面分別介紹兩種不同的embedding策略。
(1)listing embeddings
每次用戶的連續點擊不同listing的連貫行爲被稱爲一個session,如果這次的session最終有成功book一臺車,則稱爲booked session,那個被預定的listing被稱爲booked listing;這次的session沒有成功book一臺車,則稱爲exploratory session。在剔除掉一些質量不好的session後,由這些session我們便可以構建出數據集S,將session中的listing視作word,整個session視作sentence,便可以使用the skip-gram model,並配合negative sampling approach技術進行訓練,便可以得到listing embedding。同時,在這裏,結合業務場景,可以對the skip-gram model進行一些修改,1在booked session中,將Booked listing作爲global context,其將總是出現在每次的滑動窗口內參加訓練,畢竟我們模型的目的就是爲了更多地促進book行爲。2租車行爲通常在一個窗口期內都集中在一個固定的地區,所以在用negative sampling approach時應注意多從與正樣本相同的一個地區內進行隨機採樣,以保證樣本的均衡。使用listing embedding有很多的好處,其中一個體現在冷啓動中,當一個新的listing上線時,我們便可以用與其相似的其它n個listing的embedding的均值作爲其embedding。
(2)user-type&listing-type embeddings
listing只能捕獲短期的用戶行爲信息,要利用用戶的長期行爲信息,我們應使用user-type&listing-type embeddings,將同樣類型的user映射到同一個embedding上,同樣類型的listing映射到跟user-type embedding在同一個空間的embedding上,以此來解決數據的稀疏性問題。這裏,把一個用戶連續book過的listing,配合每次book時用戶所屬的類型, 形如,構建出一個session,把這些session組合成Sb數據集,同樣使用the skip-gram model,配合negative sampling approach便可以訓練出user-type & listing-type embeddings,同樣,在這裏,可以結合業務場景對the skip-gram model進行一些修改,將那些被rejection的listing作爲負樣本加入the skip-gram model訓練會得到更好的結果,在對用戶推薦時可以把可能拒絕他們的listing往後排。

在介紹完embedding技術後,我們來介紹similar listing recommendation和search ranking。

一,similar listing recommendation用於推薦相似車型,當用戶點擊某個具體的listing時,在旁邊的similar listings carousel即使用similar listing recommendation給用戶推薦與那個listing相似的其它車。可以注意到,用戶在某時點擊一個具體的listing,這屬於一個短期的用戶行爲,所以這裏可以直接使用前面訓練得到的listing embedding。使用兩輛車的listing embeddings間的cosine similarity作爲衡量其相似的程度,把那些相似度最高的並且可以被用戶租用(即跟用戶的需求屬於同一個地區並且沒被其它人租走)的車推薦給用戶。

二,search ranking,當用戶使用自己的個人信息和意願進行搜索時,其將返回給用戶最匹配的listing,其中根據匹配程度對listing進行排序,越匹配的放在越前面。對search ranking,其可以轉化爲一個pairwise regression with search label的問題,我們需要構建數據集並使用Lambda Rank算法進行訓練。把一次search構建爲形如Ds =(x i ,y i ),i = 1 …K ,其中xi代表某個listing的特徵,y i ∈ { 0 , 0 . 01 , 0 . 25 , 1 ,− 0 . 4 } ,每個標籤的含義如下,0是用戶看到了某個listing卻將其忽略,0.01是用戶點擊了某個listing,0.25是用戶聯繫了某listing的主人但最後並未book,1是用戶book了某listing,-0.4是用戶被某listing的主人拒絕了,注意在構建Ds的時候,裏面必須含有book成功的數據,即對應的yi=1。最後把合格的Ds組合在一起形成數據集D。上面說了,xi代表某個listing的特徵,這裏說的特徵包括listing features,user features,query feature和cross-features,以及在Airbnb架構中被證明極爲有用的listing embedding feature和User-type & Listing-type Embedding Features。其中,listing embedding feature是使用listing embedding進行構建的,我們蒐集用戶在過去兩週內的行爲,比如點擊過某個listing,忽略過某些本來在排序中排名很高的listing等,將這些行爲對應的listing的list embedding與某個樣本的listing embedding進行cosine similarity的計算,並將計算值作爲這個樣本的特徵,這些特徵名形如EmbClickSim,EmbWishlistSim等。User-type & Listing-type Embedding Features則只要使用對應用戶的User-type embedding和對應某樣本listing的 Listing-type Embedding進行cosine similarity的計算,並將計算值作爲特徵即可。這樣把特徵都一一構建完畢(據Airbnb的架構說其使用了一百個左右的特徵),便可以投入模型用Lambda Rank算法進行訓練,訓練完畢後便可投入使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章