您現在的位置是:首頁 > 旅遊

不一樣的論文解讀:2018 KDD best paper「Embeddings at Airbnb」

由 雷峰網leiphone 發表于 旅遊2022-10-17
簡介值得一提的是,論文還提出一種評估方法,用 embedding 向量做排序,去和真實的使用者反饋資料比較,直接引用 airbnb 知乎官方賬號描述:更具體地說,假設我們獲得了最近點選的房源和需要排序的房源候選列表,其中包括使用者最終預訂的房源

rightfully是什麼意思

雷鋒網 AI 科技評論按,本文作者吳海波,該文首發於知乎,雷鋒網 AI 科技評論獲其授權轉載。

Airbnb 的 Real-time Personalization using Embeddings for Search Ranking at Airbnb 一文拿了今年 KDD ADS Track 的最佳論文,和 16 年 Google 的 W&D 類似,並不 fancy,但非常 practicable,值得一讀。可喜的是,據我所知,國內一線團隊的實踐水平並不比論文中描述的差,而且就是 W&D,國內也有團隊在論文沒有出來之前就做出了類似的結果,可見在推薦這樣的場景,大家在一個水平線上。希望未來國內的公司,也發一些真正實用的 paper,不一定非要去發聽起來 fancy 的。

自從 Word2vec 出來後,迅速應用到各個領域中,誇張一點描述,萬物皆可 embedding。在 NLP 中,一個困難是如何描述詞,傳統有 one-hot、n-gram 等各種方式,但它們很難表達詞與詞之間的語義關係,簡單來講,即詞之間的距離遠近關係。我們把每個詞的 Embedding 向量理解成它在這個詞表空間的位置,即位置遠近能描述哪些詞相關,哪些詞不相關。

對於網際網路場景,比如電商、新聞,同樣的,我們很難找到一個合適表達讓計算機理解這些實體的含義。傳統的方式一般是給實體打標籤,比如新聞中的娛樂、體育、八卦等等。且不說構建一個高質量標籤體系的成本,就其實際效果來講,只能算是乏善可陳。類似 NLP,完全可以將商品本身或新聞本身當做一個需要 embedding 的實體。當我們應用 embedding 方案時,一般要面對下面幾個問題:

希望 Embedding 表達什麼,即選擇哪一種方式構建語料

如何讓 Embedding 向量學到東西

如何評估向量的效果

線上如何使用

下面我們結合論文的觀點來回答上面問題,水平有限,如有錯誤,歡迎指出。

希望 Embedding 表達什麼

前面我們提了 Embedding 向量最終能表達實體在某個空間裡面的距離關係,但並沒有講這個空間是什麼。在 NLP 領域,這個問題不需要回答,就是語義空間,由現存的各式各樣的文字語料組成。在其他場景中,以電商舉例,我們會直接對商品 ID 做 Embedding,其訓練的語料來自於使用者的行為日誌,故這個空間是使用者的興趣點組成。行為日誌的型別不同,表達的興趣也不同,比如點選行為、購買行為,表達的使用者興趣不同。故商品 Embedding 向量最終的作用,是不同商品在使用者興趣空間中的位置表達。

很多同學花很多時間在嘗試各種 word2vec 的變種,其實不如花時間在語料構建的細節上。首先,語料要多,論文中提到他們用了 800 million search clicks sessions,在我們嘗試 Embedding 的實踐中,語料至少要過了億級別才會發揮作用。其次,session 的定義很重要。word2vec 在計算詞向量時和它 context 關係非常大,使用者行為日誌不像文字語料,存在標點符合、段落等標識去區分詞的上下文。

舉個例子,假設我們用使用者的點選行為當做語料,當我們拿到一個使用者的歷史點選行為時,比如是 list(商品 A,商品 B,商品 C,商品 D),很有可能商品 B 是使用者搜尋了連衣裙後點的最後一個商品,而商品 C 是使用者搜尋了手機後點擊的商品,如果我們不做區分,模型會認為 B 和 C 處以一個上下文。

具體的 session 定義要根據自身的業務訴求來,不存在標準答案,比如上面的例子,如果你要做使用者跨興趣點的變換表達,也是可以的,論文中給出了 airbnb 的規則:

A new session is started whenever there is a time gap of more than 30 minutes between two consecutive user clicks。

值得一提的是,論文中用點選行為代表短期興趣和 booking 行為代表長期興趣,分別構建 Embedding 向量。關於長短期興趣,業界討論很多,我的理解是長期興趣更穩定,但直接用單個使用者行為太稀疏了,無法直接訓練,一般會先對使用者做聚類再訓練。

如何讓 Embedding 向量學到東西

模型細節

一般情況下,我們直接用 Word2vec,效果就挺好。論文作者根據 Airbnb 的業務特點,做了點改造,主要集中在目標函式的細節上,比較出彩。先來看一張圖:

不一樣的論文解讀:2018 KDD best paper「Embeddings at Airbnb」

主要 idea 是增加一個 global context,普通的 word2vec 在訓練過程中,詞的 context 是隨著視窗滑動而變化,這個 global context 是不變的,原文描述如下:

Both are useful from the standpoint of capturing contextual similarity, however booked sessions can be used to adapt the optimization such that at each step we predict not only the neighboring clicked listings but the eventually booked listing as well。 This adaptation can be achieved by adding booked listing as global context, such that it will always be predicted no matter if it is within the context window or not

再看下它的公式,更容易理解:

注意到公式的最後一項和前面兩項的區別,在累加符號的下面,沒有變 D 限制。我的理解是,word2vec 的演算法畢竟是非監督的,而 Airbnb 的業務最終是希望使用者 Booking,加入一個約束,能夠將學到的 Embedding 向量更好的和業務目標靠近。後面還有一個公式,思路是類似的,不再贅述。

這個思路也可以理解成另一種簡單的多目標融合策略,另一篇阿里的論文也值得一讀,提出了完整空間多工模型(Entire Space Multi-Task Model,ESMM)來解決。

資料稀疏是核心困難

Word2vec 的演算法並不神奇,還是依賴實體出現的頻次,巧婦難為無米之炊,如果實體本身在語料中出現很少,也很好學到好的表達。曾經和阿里的同學聊過一次 Embedding 上線效果分析,認為其效果來源於中部商品的表達,並不是大家理解的長尾商品。頭部商品由於資料量豐富,類似 i2i 的演算法也能學的不錯,而尾部由於資料太稀疏,一般也學不好,所以 embedding 技術要想拿到不錯的收益,必須存在一批中部的商品。

論文中也提到,他們會對 entity 做個頻次過濾,過濾條件在 5-10 occurrences。有意思的是,以前和頭條的同學聊過這件事情,他們那邊也是類似這樣的頻次,我們這邊會大一點。目前沒有做的很細緻,還未深究這個值的變化對效果的影響,如果有這方面經驗的同學,歡迎指出。

另一個方法,也是非常常見,即對稀疏的 id 做個聚類處理,論文提了一個規則,但和 Airbnb 的業務耦合太深了,其他業務很難直接應用,但可以借鑑思想。阿里以前提過一種 sixhot 編碼,來緩解這個問題,不知道效果如何。也可以直接 hash,個人覺得這個會有損,但 tensorflow 的官網教程上,feature columns 部分關於 Hashed Column 有一段話說是無損的:

At this point, you might rightfully think: “This is crazy!” After all, we are forcing the different input values to a smaller set of categories。 This means that two probably unrelated inputs will be mapped to the same category, and consequently mean the same thing to the neural network。 The following figure illustrates this dilemma, showing that kitchenware and sports both get assigned to category (hash bucket) 12:

不一樣的論文解讀:2018 KDD best paper「Embeddings at Airbnb」

As with many counterintuitive phenomena in machine learning, it turns out that hashing often works well in practice。 That‘s because hash categories provide the model with some separation。 The model can use additional features to further separate kitchenware from sports。

離線如何評估效果

向量評估的方式,主要用一些聚類、高維視覺化 tnse 之類的方法,論文中描述的思路和我的另一篇文章 Embedding向量召回在蘑菇街的實踐 比較像。當 Airbnb 的工具做的比較好,直接實現了個系統來幫助評估。

值得一提的是,論文還提出一種評估方法,用 embedding 向量做排序,去和真實的使用者反饋資料比較,直接引用 airbnb 知乎官方賬號描述:

更具體地說,假設我們獲得了最近點選的房源和需要排序的房源候選列表,其中包括使用者最終預訂的房源;透過計算點選房源和候選房源在嵌入空間的餘弦相似度,我們可以對候選房源進行排序,並觀察最終被預訂的房源在排序中的位置。

不一樣的論文解讀:2018 KDD best paper「Embeddings at Airbnb」

上圖可以看出,d32 book+neg 的效果最好。

線上如何用

論文中反覆提到的實時個性化並不難,只要支援一個使用者實時行為採集的系統,就有很多種方案去實現實時個性化,最簡單就是將使用者最近的點選序列中的實體 Embedding 向量做加權平均,再和候選集中的實體做 cosine 距離計算,用於排序。線上使用的細節比較多,論文中比較出彩的點有兩個:

多實體 embedding 向量空間一致性問題

這是一個很容易被忽視的問題,當需要多個實體 embedding 時,要在意是否在一個空間,否則計算距離會變得很奇怪。airbnb 在構建 long-term 興趣時,對使用者和 list 做了聚類,原文如此描述:

To learn user_type and listinд_type embeddings in the same vector space we incorporate the user_type into the booking sessions。

不一樣的論文解讀:2018 KDD best paper「Embeddings at Airbnb」

即直接將二者放在一個語料裡面訓練,保證在一個空間。如此,計算的 cosine 距離具有實際的意義。

Negative 反饋

無論是點選行為還是成交行為,都是使用者的 positive 反饋,需要使用者付出較大的成本,而另一種隱式的負反饋,我們很少用到(主要是噪音太強)。當前主流的個性化被人詬病最多的就是相似內容扎堆。給使用者推相似內容,已經是被廣泛驗證有效的策略,但我們無法及時有效的感知到使用者的興趣是否已經發生變化,導致損壞了使用者體驗。因此,負反饋是一個很好的思路,airbnb 給出了 skipped listing_ids 的策略。

論文地址:

https://www。kdd。org/kdd2018/accepted-papers/view/real-time-personalization-using-embeddings-for-search-ranking-at-airbnb

(完)

推薦文章