Airbnb 的這篇論文《Real-time Personalization using Embeddings for Search Ranking at Airbnb》拿了KDD 2018 的best paper绰姻,初次看到這篇文章還是覺得很吃驚的酿傍,這么簡單地一篇文章也能拿best paper。但細(xì)看之后覺得還是有不少工程上可以借鑒學(xué)習(xí)的地方玫氢。在介紹這篇文章之后先討論一下如何用Word2vec在推薦中做Item Embeddings。
Word2vec 用于Item Embeddings
Word2vec 用于做詞向量相信大家都比較熟悉了遮精,研究生階段我利用Word2vec的變形在雙語詞嵌入上做了一些嘗試熬北。工作之后才開始接觸推薦系統(tǒng),知道了有人利用Word2vec來做 Item Embeddings馆揉,放到item向量學(xué)習(xí)當(dāng)然也可以說Node2vec或者 Graph Embeddings。開始我是有點(diǎn)質(zhì)疑這樣做的有效性抖拦,Word2vec 能用無監(jiān)督的方式得到詞向量升酣,主要在于語言是有"結(jié)構(gòu)性"的,是有“規(guī)律可循”的态罪。例如“吃飯“總是在一起出現(xiàn)拗踢,或者說”吃面“,”吃肉“向臀。就是因?yàn)橛羞@樣的規(guī)律巢墅,所以才能用word2vec訓(xùn)練語言模型下(也可以參考詞向量的分布式假設(shè))。但是在推薦中有這樣的規(guī)律嗎券膀?從統(tǒng)計(jì)的角度上說君纫,看了某個(gè)item1會經(jīng)常去看另外某個(gè)item2。答案當(dāng)然是存在芹彬,這是item-based CF的基本思路蓄髓。所以Word2vec做ICF類召回還是很有效的。
推薦系統(tǒng)中舒帮,Word2vec以及它變種方法用于召回越來越常見了会喝,很多人也夸張的說:萬物皆可 Embedding陡叠,基本思路都是利用用戶的點(diǎn)擊歷史看作一個(gè)"句子",但是慢慢地在我心中有個(gè)疑問肢执,為什么在做推薦的時(shí)候沒有人想到使用負(fù)樣本呢枉阵?因?yàn)橛脀ord2vec 學(xué)習(xí)item 向量時(shí),利用上下文預(yù)測中心的item预茄,并且選取一些負(fù)樣本訓(xùn)練兴溜,模型其實(shí)認(rèn)為點(diǎn)了item1就不會點(diǎn)它的負(fù)樣本item1_neg了。(當(dāng)然這里也必須選取一些負(fù)樣本耻陕,如果沒有負(fù)樣本這里最終優(yōu)化到每個(gè)item embedding都相等且norm=1拙徽,就能使得word2vec的交叉熵loss為0了。)既然在推薦系統(tǒng)的中有負(fù)樣本诗宣,為啥不能利用到word2vec 中訓(xùn)練呢膘怕?在nlp中由于是無監(jiān)督學(xué)習(xí),所以只能隨機(jī)的選取一些其它詞來作為負(fù)樣本召庞。推薦系統(tǒng)與自然語言存在的差異是淳蔼,我們能搜集到負(fù)樣本,也應(yīng)該加以利用裁眯。一方面隨機(jī)選取負(fù)樣本有概率落在正樣本上,另一方面讳癌,這樣的負(fù)樣本不是更加置信嗎穿稳,也更加具有”區(qū)分度“。我解釋一下這里的“區(qū)分度”晌坤,如果用戶喜歡看了一個(gè)”Dota游戲“的視頻逢艘,這個(gè)時(shí)候負(fù)采樣一個(gè)”娛樂“視頻是完全沒有問題的吧,但是這個(gè)視頻上下文中還有一個(gè)”CS游戲“的視頻我也沒看骤菠,(這在推薦系統(tǒng)中常見它改,因?yàn)橥扑]系統(tǒng)會通過用的興趣”游戲“召回這些視頻)這樣如果我選”CS游戲“的視頻作為負(fù)樣本是不是比”娛樂“的更好呢,因?yàn)槲揖褪遣幌矚gCS而喜歡Dota商乎,這樣訓(xùn)練的Embeddings更加具有區(qū)分度央拖。
上述這個(gè)問題一直是我的疑問,當(dāng)然還沒有時(shí)間去驗(yàn)證鹉戚,結(jié)果看到這篇文章鲜戒,完全解決了我之前的疑惑。這篇文章從這些方面說明了很多問題抹凳,并且結(jié)合了很多在Airbnb場景下的工程問題遏餐,仍然值得仔細(xì)研究。
Airbnb 中的 Embedding
Listing Embeddings
首先指明一下這里的Listing 就是推薦系統(tǒng)中的item赢底。
Airbnb與其他得到embedding 的方式類似失都,利用用的點(diǎn)擊歷史柏蘑,然后上下文預(yù)測的方式訓(xùn)練listing embedding。
公式如下:
利用Skip-Gram + 負(fù)采樣的方式訓(xùn)練上述公式粹庞, 是listing 的表示向量咳焚,
是網(wǎng)絡(luò)參數(shù),
是負(fù)采樣的樣本集合信粮。
當(dāng)然Airbnb不僅僅是這樣做黔攒,因?yàn)橛行┓孔硬粌H是用戶點(diǎn)擊過,而且是用戶booked的强缘,這里只有一個(gè)listing督惰。也就是說在airbnb的場景中,用戶看了很多房源之后最后booked了一個(gè)房源旅掂。既然是這樣赏胚,airbnb希望充分利用起這樣的監(jiān)督信息。如Figure1商虐,中心的listing不僅去預(yù)測它的上下文還去預(yù)測一個(gè)booked listing觉阅。這是一個(gè)global context,并且在這個(gè)序列中一直是不變的秘车。所以它的優(yōu)化目標(biāo)添加了一項(xiàng):
值得注意的是這里使用的參數(shù)與上述的
不一樣典勇,這其實(shí)可以看作是兩個(gè)不同的task,一個(gè)只是在學(xué)習(xí)中心listing與周圍listing的關(guān)系叮趴,而另一個(gè)task想學(xué)習(xí)的是這一串序列所有的listing與最后的booked linsting有另外一種關(guān)系割笙,很顯然這是不一樣的。另外
這里的參數(shù)量還是挺大的眯亦,是看了l然后最后選了b的所有集合大小伤溉。
這樣當(dāng)然還不夠,為了學(xué)習(xí)更強(qiáng)的差異性妻率,也就是用戶會看某個(gè)房源乱顾,但不會看相同市場的其它房源,注意之前負(fù)采樣是所有里面隨機(jī)宫静,而這里是選用相同的市場的其它的房源走净。當(dāng)然這兩種關(guān)系仍然是不同的,所以添加一項(xiàng)負(fù)采樣孤里,并且參數(shù)都不一樣温技,如下:
最后總結(jié)這個(gè)優(yōu)化目標(biāo):
-
是中心房源的向量,
都表示網(wǎng)絡(luò)參數(shù)
-
是房源對(l,c)集合,l扭粱,c在都在一個(gè)窗口內(nèi)舵鳞。
-
是房源對(l,c)的負(fù)采樣集合。
-
是用戶看過這一系列房源最終預(yù)定的房源琢蛤。一個(gè)序列只有一個(gè)蜓堕。
-
是與
同一個(gè)市場的負(fù)采樣集合抛虏。
是參數(shù)量大小就是每個(gè)市場下房源的集合,如果每個(gè)房源只屬于一個(gè)市場套才,那么它就和房源字典
大小相同迂猴。
基于embedding 的相似房源推薦
有了每個(gè)房源的embedding 表示之后,之后可以將它利用在i2i的召回上背伴,簡單上來說就是通過用戶的點(diǎn)擊歷史來推薦與這些房源相似的房源沸毁,這個(gè)相似度是通過向量的距離來計(jì)算的。
值得一提的是傻寂,Airbnb有兩點(diǎn)比較特別
- 1.分市場找到最相似的房源
- 2.不僅利用了點(diǎn)擊歷史
息尺,而且利用未點(diǎn)擊的記錄
,
所以它定義了兩個(gè)相似:
由于Airbnb的場景是推薦房源疾掰,所以限制推薦候選房源所屬地非常重要搂誉。第二點(diǎn)計(jì)算跳過的房源相似分,這樣相當(dāng)于一種負(fù)反饋的機(jī)制静檬,也就說對于那些用戶跳過的房源炭懊,只要候選房源與他們相似,就不容易被推薦拂檩。
房源冷啟動問題
冷啟動一直是推薦系統(tǒng)很重要問題侮腹,這里給了一種冷啟動的方法,對于新的listing embedding稻励,因?yàn)闆]有用戶行為數(shù)據(jù)父阻,它利用3個(gè)相同類別,相似價(jià)格的listing embedding求平均得到钉迷。
user-type 和listing-type embedding
僅僅有兩個(gè)房源之間的相似性還不夠,Airbnb希望能直接學(xué)習(xí)user embedding和listing embedding钠署,然后計(jì)算它們的相似性來直接影響排序模型糠聪。
首先他們將用戶和listing都分別聚類,具有相似特征的user會聚到同一個(gè)user-type谐鼎,而具有相似特征listing聚到相同的listing-type舰蟆。這里的相似特征指的是基礎(chǔ)屬性,例如用戶最近booked3個(gè)房子狸棍,用戶年齡等等身害。最終表示成這樣的一個(gè)id:SF_lg1_dt1_f p1_pp1_nb1_ppn2_ppn3_c2_nr3_l5s3_g5s3
,每兩個(gè)下劃線中間表示一個(gè)基礎(chǔ)特征草戈,所有基礎(chǔ)特征相同的user都映射到相同的id塌鸯。listing的映射也是同理。這樣做的目的主要是因?yàn)槟承﹗ser listing的稀疏性唐片,很多用戶和listing的行為數(shù)較少丙猬,比如一個(gè)user只有3次點(diǎn)擊歷史涨颜,這樣的user直接放進(jìn)模型中肯定學(xué)的不好,但是又不能忽視這樣的user茧球,因?yàn)檫@直接決定了embedding 的覆蓋量庭瑰。所以Airbnb想出這種方式來提高覆蓋量,listing 的做法也是類似的道理抢埋。
由于Airbnb的場景是為了用戶預(yù)訂房源弹灭,所以在學(xué)習(xí)user embedding的時(shí)候只利用用戶的booked listing歷史。它的優(yōu)化目標(biāo)如下:
其中表示user-type的embedding揪垄,
是網(wǎng)絡(luò)參數(shù)穷吮,
是用戶的booked listing歷史集合,
是負(fù)采樣的集合福侈。
而對于list-type的embedding通過下面的目標(biāo)訓(xùn)練:
值得注意的時(shí)候這里使用的是相同的網(wǎng)絡(luò)參數(shù)酒来,所以通過這種方式能將user-type和listing-type的向量學(xué)到同一個(gè)空間內(nèi)。這部分內(nèi)容可以參考paragraph2vec中的PV-DBOW模型肪凛,與之目標(biāo)相似堰汉。
這里還有一個(gè)負(fù)反饋的方式就是利用了用戶rejection的 listing,那這寫listing作為負(fù)樣本伟墙。改造之后的目標(biāo)是:
至此翘鸭,Airbnb這篇論文的幾種embedding技術(shù)介紹完了,總的來說就是通過skipGram+負(fù)采樣的訓(xùn)練方式戳葵,然后在考慮兩點(diǎn)在實(shí)際的工程中變形:1.如何構(gòu)造點(diǎn)擊序列就乓,2.如何負(fù)采樣。Airbnb的經(jīng)驗(yàn)告訴我們負(fù)采樣的時(shí)候充分利用一些監(jiān)督信息是很有幫助的拱烁。
參考文章