提綱
- 解決的問題
- 方法
- 實(shí)驗(yàn)
- 疑問與啟發(fā)
1.解決的問題
本文要解決兩個(gè)問題:
- 針對短租市場,大部分的用戶很少會多次預(yù)定同一類型的房間曹宴;房間分時(shí)段的,只能在某段時(shí)間內(nèi)被某一個(gè)用戶預(yù)訂梁钾;大部分用戶預(yù)訂酒店是低頻事件武契,更不用說是在同一個(gè)地方預(yù)訂酒店。
- 實(shí)時(shí)個(gè)性化
2.方法
作者考慮到用戶在預(yù)訂酒店之前有大量的搜索挡爵、點(diǎn)擊竖般、聯(lián)系商家等行為,可以利用這些信息來構(gòu)建用戶預(yù)訂的房間與候選商品之間的相似關(guān)系茶鹃;還可以根據(jù)這些信息捕捉用戶的興趣涣雕。本文中艰亮,作者對商品做了兩個(gè)層面的embedding:一是每個(gè)商品;二是商品類型以及用戶類型挣郭。
本文提出的方法基于skip-gram的word2vec迄埃,原理并不復(fù)雜。下面將詳細(xì)介紹作者的改進(jìn)之處兑障。
首先對下面可能會出現(xiàn)的變量做一下說明:和表示商品的輸入輸出向量侄非;表示上下文窗口大小,表示上下文;是所有商品的字典;表示正樣本集合旺垒,表示負(fù)樣本集合彩库。
2.1 listing embedding
作者主要改進(jìn)的地方在于數(shù)據(jù)集的處理上,有兩點(diǎn)global text 和negative samples:
global text
如上圖所示先蒋,作者根據(jù)用戶在30s內(nèi)點(diǎn)擊商品的序列當(dāng)做一個(gè)句子骇钦,但是相對原模型,作者做了一點(diǎn)改動:如果在這個(gè)點(diǎn)擊序列中包含用戶最后預(yù)訂的商品竞漾,那么這個(gè)商品的向量會當(dāng)做global context眯搭。其實(shí)就是,在每次窗口滑動的時(shí)候业岁,都會被當(dāng)做上下文中之一鳞仙;在我看來這里有點(diǎn)像doc2vec中doc向量的作用。具體可見公式:
當(dāng)然笔时,如果序列中沒有預(yù)訂的商品棍好,那上式中沒有最后一項(xiàng)。
negative samples
在原word2vec模型中允耿,負(fù)樣本通過對采樣得到的借笙;但是在租房平臺中,這樣很可能負(fù)樣本集合都是與預(yù)訂商品處于不同的地區(qū)较锡,這樣會導(dǎo)致在同一地區(qū)中商品的相似性會有偏差业稼。
We found that this imbalance leads
to learning sub-optimal within-market similarities.
因此,作者額外從同一地區(qū)的商品中采樣一些負(fù)樣本蚂蕴,因此上式變?yōu)椋?br>
冷啟動
新商品的初始化用同一地區(qū)低散,同一價(jià)格區(qū)間中3個(gè)商品的平均向量。
2.2 user_type & listing_type embeddings
2.1部分用點(diǎn)擊行為代表短期興趣骡楼,更側(cè)重于同一地區(qū)商品之間的相似關(guān)系熔号。但是不同地區(qū)之間也能反映用戶的一些喜。比如鸟整,用戶A在深圳和上海預(yù)訂過酒店跨嘉,現(xiàn)在需要在北京預(yù)訂酒店(假設(shè)用戶沒在北京預(yù)訂過),但是在深圳和上海預(yù)訂過的酒店也可以反映用戶的某些偏好了。因此論文中通過用戶的booking行為代表長期興趣祠乃,構(gòu)建Embedding向量梦重。但是booking序列單個(gè)用戶的行為比較稀疏,無法直接訓(xùn)練亮瓷,一般會先對用戶做聚類再訓(xùn)練琴拧。因此,作者通過對商品類別和用戶類別embedding嘱支,希望能描述跨區(qū)域的相似關(guān)系蚓胸。
在該部分,作者只用了用戶預(yù)訂的序列除师,根據(jù)時(shí)間順序把用戶預(yù)訂過的所有商品當(dāng)做一個(gè)序列沛膳。既然對商品和用戶的類別進(jìn)行embedding,那么首先需要標(biāo)記類別汛聚。作者根據(jù)商品的屬性以不同的值或者范圍來劃分多個(gè)類別锹安,具體可見論文的Table 3和Table 4;可以看到user_type其實(shí)也是基于商品屬性劃分的倚舀。
個(gè)人的一點(diǎn)想法:
這里分類別其實(shí)可以看作是一種聚類或者分桶叹哭,因?yàn)閎ooking的用戶數(shù)據(jù)太少,因此需要先聚類然后再embedding痕貌。其實(shí)論文的Table 3和Table 4就是Airbnb根據(jù)他們的業(yè)務(wù)場景設(shè)計(jì)的一種分桶方式风罩。這種方式對房源embedding來說也值得借鑒。
另外舵稠,為了讓商品類別和用戶類別在同一個(gè)空間維度超升,作者放在同一個(gè)訓(xùn)練集中一起訓(xùn)練。如下圖(暫時(shí)可忽略rejection哺徊,booking)
然后公式變成:
當(dāng)central item為用戶時(shí)室琢,
當(dāng)central item為商品時(shí),
這里有點(diǎn)不理解唉工,我本來覺得將listing_type和user_type放在一起研乒,那么應(yīng)該是混著使用汹忠,相互作為對方的上下文淋硝,但是看目標(biāo)函數(shù)不是這樣的。如果按目標(biāo)函數(shù)宽菜,listing_type和user_type還能訓(xùn)練成同一個(gè)空間嗎谣膳?
3.實(shí)驗(yàn)
3.1 數(shù)據(jù)集
訓(xùn)練listing embedding的數(shù)據(jù)集
- 大小為80億的點(diǎn)擊序列,來自于所有登錄用戶幾個(gè)月的日志
- 去掉了用戶停留時(shí)間小于30s的點(diǎn)擊以及長度小于2的點(diǎn)擊序列
- 在訓(xùn)練集中將booked sessions上采樣5倍
- d=32, m=5, iter=10
3.2 離線評估
地理信息
通過對房屋向量進(jìn)行聚類铅乡,確認(rèn)來自同一地區(qū)的房源被聚在同一個(gè)簇中继谚。
listing_type和房價(jià)范圍
相同類型的listing以及相同房價(jià)范圍的listing的cosine相似度更高
房屋風(fēng)格和建筑
越相似的listing有著更相似的房屋或者建筑風(fēng)格
rank position of booked listing
通過計(jì)算clicked listing和candidate listings之間的cosine相似度對candidate listings進(jìn)行排序,然后看booked listing的位置阵幸。booked listing的位置越往前花履,說明效果越好芽世。
這里有點(diǎn)不明白,candidate listings包含用戶最終預(yù)訂的listing, 原文中"the most recent clicked listing"指的是最近的那一個(gè)listing嗎诡壁?這個(gè)有時(shí)間范圍嗎济瓢?比如在預(yù)訂前幾天的點(diǎn)擊列表?
4.疑問與啟發(fā)
4.1 疑問
- 不同地區(qū)可能某些屬性的范圍不同妹卿,比如價(jià)格旺矾,因此感覺文中用硬區(qū)間來表示不同的類別有些不合理。
- 如果wide&deep之類的模型也能學(xué)習(xí)房源向量夺克,那用word2vec模型的好處是什么呢箕宙?只是因?yàn)榭梢蕴崆八愠鱿蛄繂幔?/li>
- listing_type和user_type訓(xùn)練時(shí),是分別用不同的計(jì)算方式铺纽,但loss值一起計(jì)算嗎柬帕?
4.2 啟發(fā)
其實(shí)在此之前我也想過用word2vec來生成房源向量,但是沒有想過global text室囊,以及l(fā)isting_type embedding雕崩。
另外,相比Airbnb的短租市場融撞,貝殼找房的場景不同之處有:
- 購房周期比預(yù)定房間周期要長
- 在短時(shí)間內(nèi)盼铁,房源不會被出售多次
- 用戶幾乎沒有booked session,不過或許可能用其他代替尝偎,比如帶看饶火、聯(lián)系經(jīng)紀(jì)人等行為。
一點(diǎn)點(diǎn)題外話:感覺word2vec真的很好用致扯,之前用word2vec根據(jù)用戶的點(diǎn)擊網(wǎng)頁序列做過網(wǎng)頁的相似度肤寝,效果也很不錯(cuò)。而且抖僵,在graph方面鲤看,也有node2vec、link2vec耍群,這些都是應(yīng)用word2vec模型义桂。
相關(guān)資料
1.Real-time Personalization using Embeddings for Search Ranking at Airbnb
2.不一樣的論文解讀