日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

EMBEDDING 在大廠推薦場景中的工程化實(shí)踐

 520jefferson 2020-08-16

 解讀YouTube、Airbnb、Alibaba的三篇經(jīng)典論文,總結(jié)Embedding在工業(yè)界的一些用法和技巧,這三篇論文亮點(diǎn)眾多,提供的經(jīng)驗(yàn)非常值得我們?nèi)ゼ?xì)細(xì)品味和借鑒。這篇文章篇幅較多(2w字),幾乎把三篇論文的重要內(nèi)容都進(jìn)行了解讀和總結(jié),需花點(diǎn)時間去研讀,文中難免有錯誤和理解不對的地方,歡迎指正討論!

作者:盧明冬,個人博客:https:///engineering-practice-of-embedding-in-recommendation-scenario.html

YouTube

 Deep Neural Networks for YouTube Recommendations

YouTube的這篇論文發(fā)表在2016年9月的RecSys會議上,是一篇非常經(jīng)典的推薦系統(tǒng)工程論文。在這篇論文中,不但嘗試將DNN用在推薦系統(tǒng)上,更是講述了眾多工程經(jīng)驗(yàn),論文處處有亮點(diǎn),處處可借鑒,如今該論文的中的一些工程經(jīng)驗(yàn)已被各大互聯(lián)網(wǎng)公司參考引入自己的推薦系統(tǒng)。

YouTube的推薦系統(tǒng)架構(gòu)使用經(jīng)典的**召回(Match 或 Candidate Generation)「和」排序(Ranking)**經(jīng)典的二級架構(gòu):

  • 「召回階段」通過i2i/u2i/u2u/user profile等方式完成候選視頻的快速篩選[^1],這個過程將百萬(millions)候選集降低到了幾百(hundreds)的量級。

  • 「排序階段」對召回后的視頻采用更精細(xì)的特征計(jì)算 user-item 之間的排序得分,作為最終輸出推薦結(jié)果的依據(jù),這個過程將候選集從幾百(hundreds)的量級降低至幾十(dozens)的量級。

「不管是召回階段還是排序階段,模型架構(gòu)上都是DNN的基本結(jié)構(gòu),不同的是輸入特征和優(yōu)化目標(biāo)不同?!?/strong>

「召回階段」

召回階段模型(也稱候選生成模型,Candidate Generation Model)的架構(gòu)如下圖:

這個模型雖然是一個深度神經(jīng)網(wǎng)絡(luò),但其實(shí)「可將DNN看作是普通的矩陣分解(MF)的一種泛化」,這里把推薦問題建模成一個“超大規(guī)模”多分類問題。即在時刻,為用戶(上下文信息)在視頻庫中精準(zhǔn)地預(yù)測出下一次觀看(next watch)視頻的類別(每個具體的視頻視為一個類別,即為一個類別,觀看完成的視頻則視為正例),用一個Softmax公式表示這個條件概率:

其中,向量是 <user, context> 信息的高維Embedding,而向量則表示每個候選視頻的Embedding。「所以DNN的目標(biāo)就是在用戶信息和上下文信息為輸入條件下學(xué)習(xí)用戶的Embedding向量」,用公式表達(dá)DNN就是在擬合函數(shù)。

接下來,我們總結(jié)在召回階段使用的一些工程技巧。

  1. 「輸入融合多種信息,使用全網(wǎng)數(shù)據(jù)而不是只使用用戶瀏覽數(shù)據(jù)」

    模型輸入不僅僅只有用戶瀏覽歷史,還加入了用戶的搜索歷史,人口統(tǒng)計(jì)學(xué)信息,地理信息以及其余上下文信息,這些輸入信息大部分都是先將變長的稀疏ID特征轉(zhuǎn)換成固定寬度的Embedding向量化表示(固定維度的輸入才能輸入深度神經(jīng)網(wǎng)絡(luò),也便于參數(shù)學(xué)習(xí)以及模型的工程化),除了Embedding類的特征,還有一些簡單的二元特征以及連續(xù)型特征(比如用戶性別、登錄狀態(tài)、年齡等)歸一化到[0, 1]區(qū)間上的實(shí)數(shù)值,論文很巧妙地將「多種信息拼接(concat)成一個特別寬的輸入向量」,然后傳給后面的DNN模型的隱藏層,這種方式的帶來的好處是「任何連續(xù)型特征和類別型特征都可以很方便地加進(jìn)模型中,并且可以維持一致的寬度」

    另外,「多種信息的融合也帶來幾個額外的好處:」

    「輸入特征再展開來講,里面又涉及很多特征處理經(jīng)驗(yàn):」

    • 「觀看歷史」:這里是通過非端到端的預(yù)訓(xùn)練方式先做了Embedding之后才作為DNN的輸入,訓(xùn)練Embedding用的是用戶歷史觀看視頻的序列,得到視頻的Embedding表示。而輸入DNN模型的時候,是將用戶觀看視頻歷史所對應(yīng)的視頻Embedding序列進(jìn)行向量平均得到固定維度的watch vector作為DNN的輸入,注意這里向量平均的方式可以是簡單的算術(shù)平均,也可以是「加權(quán)平均(可根據(jù)視頻的重要程度和時間屬性等進(jìn)行加權(quán))」。

    • 「搜索歷史」:搜索歷史的處理和觀看歷史的處理方式類似,有些特別的是,這里先把歷史搜索的關(guān)鍵詞query分詞得到詞條token,訓(xùn)練得到token的Embedding向量,然后將用戶歷史搜索的token所對應(yīng)的Embedding向量進(jìn)行**(加權(quán))平均**得到固定維度的search vector作為DNN的輸入,這樣便能反應(yīng)用戶搜索歷史的整體狀態(tài)。

    • 「人口統(tǒng)計(jì)學(xué)信息」:性別、年齡、地域等,「簡單的二元特征以及連續(xù)型特征會歸一化為[0, 1]區(qū)間上的實(shí)數(shù)值」。

    • 「其他上下文信息」:設(shè)備、登錄狀態(tài)等。

    • 「樣本年齡(Example Age)」:**這是一個很特別的特征,它通過捕捉用戶興趣的短期變化,用來擬合用戶對新視頻的偏好變化帶來的偏差。**YouTube算法團(tuán)隊(duì)發(fā)現(xiàn),用戶特別偏愛那些新上的視頻,盡管這些視頻的內(nèi)容可能與他們的偏好并不相關(guān)。一些新視頻的流量攀升,一方面可能是用戶本身喜歡新鮮感帶來的一次傳播,另一方面熱門視頻也存在著病毒式的二次傳播現(xiàn)象,由此可見視頻流行度其實(shí)是一個非常不穩(wěn)定的分布,而機(jī)器學(xué)習(xí)很難捕捉到這種不穩(wěn)定的變化。

      由于機(jī)器學(xué)習(xí)模型通常是基于歷史樣本訓(xùn)練,來預(yù)測將來的行為,因此「機(jī)器學(xué)習(xí)模型常常會表現(xiàn)一種出趨向于過去行為的隱含偏差(implicit bias)」。同樣的,在推薦系統(tǒng)模型上也存在這樣的問題,推薦系統(tǒng)預(yù)測出的基于視頻庫產(chǎn)生的多項(xiàng)式分布,其實(shí)反映的是訓(xùn)練時間窗口內(nèi)也就是近幾周可能觀看視頻的平均情況,而不能真正獲取到未來的信息。

      為了修正這一偏差,YouTube算法團(tuán)隊(duì)在模型中加入了一個樣本年齡(Example Age)的特征,文中并沒有精確的定義什么是example age,不過按照文章的說法,example Age指的是訓(xùn)練樣本的age,應(yīng)該是以樣本產(chǎn)生的時間(樣本記錄或樣本日志標(biāo)記的時間點(diǎn))作為樣本的“出生”時間,表示的是用戶點(diǎn)擊某個視頻的時間,而不是視頻發(fā)布的時間,樣本產(chǎn)生時間到訓(xùn)練當(dāng)前時間的距離作為樣本年齡(example age)。除了修正趨于過去行為的這一偏差,「這個特征還可以一定程度上來捕捉用戶的興趣的短期變化」,比如模型可以學(xué)到example age越小的樣本,也就是離訓(xùn)練這一時刻越近的樣本,越符合用戶的最近的興趣,從而在模型中權(quán)重更大。也因此,「在線serving的時候這個特征會置零,表示模型在訓(xùn)練時間窗口的最末尾做預(yù)測,也就是要預(yù)測用戶在這一刻的興趣」。

      「這是一種非常通用的來消除機(jī)器學(xué)習(xí)系統(tǒng)固有偏差的方法。另外訓(xùn)練和在線區(qū)別對待也非常值得借鑒,一些單側(cè)特征,訓(xùn)練的時候把bias影響特征加進(jìn)去,在線的時候則置0」,比如美團(tuán)分享的消除廣告position bias(位置給廣告點(diǎn)擊帶來的偏差)也是類似的做法。[^2]

      論文對這個特征進(jìn)行了驗(yàn)證,對于給定視頻,「Example Age這個特征能夠很好的把視頻的新鮮程度對流行度的影響引入模型中」,對比如下:

      從上圖中我們也可以看到,在引入“Example Age”這個特征后,模型的預(yù)測效力更接近經(jīng)驗(yàn)分布;而不引入Example Age的藍(lán)線,模型在所有時間節(jié)點(diǎn)上的預(yù)測趨近于平均(baseline),這顯然是不符合客觀實(shí)際的。

    • 可以緩解冷啟動問題
    • 為模型帶來更全面的特征信息,提高用戶Embedding的表征力度
    • 為推薦場景提供一些探索功能
  2. 「為每個用戶生成固定數(shù)量的訓(xùn)練樣本」

    這也是一個非常實(shí)用的訓(xùn)練技巧,為每個用戶固定樣本數(shù)量上限,平等地對待每個用戶,避免loss被少數(shù)活躍用戶代表,能明顯提升線上效果,這個方法有點(diǎn)類似協(xié)同過濾中對活躍用戶的懲罰。

  3. 「丟棄用戶觀看視頻以及歷史搜索query的時序特征」

    如果過多考慮時序的影響,用戶的推薦結(jié)果將過多受最近觀看或搜索的視頻的影響,導(dǎo)致越推越窄,推薦結(jié)果也失去了多樣性。所以為了綜合考慮之前多次搜索和觀看的信息,YouTube丟掉了時序信息,將用戶近期的歷史紀(jì)錄對應(yīng)的Embedding向量做平均或加權(quán)平均。

  4. 「輸入數(shù)據(jù)只使用標(biāo)簽之前的歷史信息,避免產(chǎn)生數(shù)據(jù)穿越」

    「用戶觀看視頻的行為存在著明顯的不對稱共同瀏覽(asymmetric co-watch)現(xiàn)象,即用戶瀏覽視頻的時候,往往是序列式的」,有些前后觀看行為甚至存在一些因果關(guān)聯(lián),比如用戶通常會在開始看一些比較流行的,后來會逐漸找到細(xì)分的視頻,而對于那些連續(xù)劇集以及關(guān)聯(lián)程度比較大的視頻,這種現(xiàn)象表現(xiàn)得更加明顯。

    因此YouTube的推薦模型的訓(xùn)練樣本構(gòu)建并沒有使用類似Word2Vec那樣將前后上下文作為輸入信息、中心詞作為Label的留一法(held-out),而是將未來的信息完全分離,因?yàn)槲覀兪穷A(yù)測用戶的下一次觀看,而非去預(yù)測一個隨機(jī)留一的視頻觀看(a randomly held-out watch)。二者的區(qū)別見下圖:

    而實(shí)際上, **傳統(tǒng)的協(xié)同過濾類算法,都是隱含地采用上面圖(a) 的 heldout 方式,其實(shí)這種方式泄露了將來的信息(future information),忽略了用戶觀看視頻存在著的時序性 **。論文中也提到,上面圖(b)的方式在線上 A/B test中表現(xiàn)更好。

  5. 「召回模型在離線訓(xùn)練時,使用負(fù)例采樣來解決Softmax的低效問題」

    這個優(yōu)化在上一篇文章中也提到過,傳統(tǒng)的Softmax在大規(guī)模分類問題中效率非常低下,它通常有兩種優(yōu)化替代方式,一種是負(fù)例采樣(negative sampling),一種是層次Softmax(hierarchical softmax),這里使用的是負(fù)例采樣,并且按照重要性加權(quán)(importance weighting)來對采樣進(jìn)行校正(calibration)。因此對于每個樣本有正負(fù)兩種Label,最后的學(xué)習(xí)目標(biāo)是最小化交叉熵?fù)p失。論文中提到,YouTube召回模型會抽樣上千個負(fù)樣本,這種方法可以比傳統(tǒng)的Softmax快100倍,他們也嘗試了另外一種層次Softmax的優(yōu)化方式,但效果不如負(fù)例采樣好。

  6. 「召回模型在線Serving過程中采用一種最近鄰搜索的方法來提高效率」

    因?yàn)檎倩仉A段并不需要精確的打分校準(zhǔn),為了提高性能,YouTube在線召回階段并沒有直接采用訓(xùn)練好的模型進(jìn)行預(yù)測,而是線上直接利用最近鄰搜索的方法,根據(jù) User 向量來為用戶快速查找出最相關(guān)的 N 個視頻。近鄰搜索(NN)通常分為精確近鄰搜索和近似搜索,精確搜索常見的方法是基于樹結(jié)構(gòu)的最近鄰搜索,如經(jīng)典的KD樹算法,近似搜索也就是近似最近鄰搜索(Approximate Nearest Neighbor,ANN),近似搜索搜索精確度降低但搜索時間減少,非常適合一些場景的工程應(yīng)用,常見的近似近鄰搜索方法有哈希散列和矢量量化,經(jīng)典的**局部敏感哈希(Locality-Sensitive Hashing, LSH)**算法就是一種哈希散列方法,論文中可能用的就是這種方法,可以用現(xiàn)成的工具faiss來實(shí)現(xiàn)。

    其實(shí)在億級人臉識別的場景下也是用的類似LSH的方法來實(shí)現(xiàn)快速搜索,另外注意,因?yàn)長SH是在同一個空間里找近鄰,而這里其實(shí)是求向量內(nèi)積,所以這里需要?dú)w一化到單位向量,這兩個操作就是完全等價(jià)的。這也是人臉Loss討論里提到的特征歸一化和權(quán)重歸一化。

    最近鄰搜索會涉及 User Embedding 和 Video Embedding兩個Embedding,我們分析一下它們是怎么得到的。

    • User Embedding:這個很好理解,其實(shí)就是把最后一層隱層輸出作為用戶向量;

    • Video Embedding:這個比較難理解,也存在一些爭議。從論文以及我查找的資料來看,「這里應(yīng)該是用Softmax的權(quán)重來表示Video的Embedding向量的」,論文中有提到'The softmax layer outputs a multinomial distribution over the same 1M video classes with a dimension of 256 (which can be thought of as a separate output video embedding)' 。

      那么這個時候,就出現(xiàn)了兩個Video Embedding,第一個是輸入時的根據(jù)觀看歷史在session中的共現(xiàn)視頻序列訓(xùn)練出的Embedding,第二個是NN側(cè)輸出,也就是最后一層Softmax的權(quán)重,作為Video Embedding的代表,只是比較有疑問的是,在線階段的這個向量還會更新嗎?我個人覺得在線Serving的時候就不更新了,畢竟是Item Embedding,沒必要那么頻繁地更新,而如此看論文圖中的那條連向數(shù)據(jù)庫的線,就是將Video Embedding向量存入數(shù)據(jù)庫以方便線上得到實(shí)時用戶向量進(jìn)行近鄰搜索。

      從這里來看,此處和矩陣分解又非常相似,模型最后可以得到User Embedding和Video Embedding,在訓(xùn)練時,Softmax概率最大的正好對應(yīng)User Embedding和Video Embedding向量內(nèi)積值最大的那個,所以預(yù)測的時候直接計(jì)算內(nèi)積(可以轉(zhuǎn)換等價(jià)于LSH),也就沒必要再用Softmax具體計(jì)算概率了。

      $ User Embedding 和 Video Embedding是否在同一空間?

      ?

      @做最閑的咸魚

      和dssm類似,都是通過內(nèi)積限制兩個embedding在相同空間,在CF中可以通過矩陣分解得到user和video的向量表示,這里最后的softmax就是在做廣義矩陣分解,模型最后一層隱層就是user embedding,通過u*v得到video的概率,v就是video embedding,只不過這里用來作為softmax層的權(quán)重。

      這里說的softmax層是dense+ softmax激活函數(shù),假設(shè)最后一個hidden layer維度是100代表user embedding,輸出節(jié)點(diǎn)維度200w表示videos,全連接權(quán)重維度就是[100,200w],而hidden layer與每一個輸出節(jié)點(diǎn)的權(quán)重維度就是[100,1],這就是一個video對應(yīng)embedding,計(jì)算一個video的概率時是u*v,即兩個100維向量做內(nèi)積,是可以在一個空間的。

      @張相於

      整體來說咸魚的回答是正確的,但我覺得不完全準(zhǔn)確,因?yàn)橛脩粝蛄亢鸵曨l向量其實(shí)不是一個空間,但是是兩個相關(guān)聯(lián)的向量空間,所以可以通過內(nèi)積大小來度量相關(guān)性。更好理解的一個例子是word2vec中的兩類向量,一類是詞的表示向量,也就是進(jìn)入輸入層的向量,另一類向量是預(yù)測詞的向量,也就是作為權(quán)重的向量。換句話說,每個詞都有兩個向量,那么如果說這兩類向量在一個空間中,那就有矛盾了:一個空間中同一個詞怎么會有兩個不同的向量表示呢?所以我認(rèn)為這是兩個不同的向量空間,但不是無關(guān)的兩個空間,兩個空間通過softmax函數(shù)連接在一起。使用時用KNN也是從用戶空間中的向量尋找在視頻空間中與之最相近的幾個向量,并不是同一空間中的KNN。但由于兩個空間通過softmax連接起來,所以這樣做是OK的。

      還有一個角度可以佐證兩者不是同一空間:如果是同一空間,那么空間中任意兩個向量的內(nèi)積含義應(yīng)該是一樣的。但兩個視頻空間中的向量V1和V2計(jì)算內(nèi)積,體現(xiàn)的是兩個視頻的相似性,而一個視頻向量V1和用戶向量U1計(jì)算內(nèi)積,其含義是用戶對視頻發(fā)生觀看行為的概率。這顯然是矛盾的。

      因此,我傾向于認(rèn)為視頻和用戶的向量是兩個不同的空間,但通過softmax和訓(xùn)練過程聯(lián)系在了一起,導(dǎo)致不同空間的內(nèi)積計(jì)算可以表示用戶和視頻的相關(guān)性。

      @劉才良

      NN只是對的近似,NN近似讓人感覺屬于同一個space,但是應(yīng)該不是同一個空間,有點(diǎn)像rowspace和nullspace的關(guān)系。,可見和NN還差了一項(xiàng),假設(shè)是正態(tài)分布,可以按分成3組做ANN近鄰搜索,分別 $u-\sigmau^Tvu^Tv|u-v|^2$。

      ?

「排序階段」

排序階段的模型結(jié)構(gòu)和召回階段非常類似,可見下圖:

  • impression video ID:喜歡的視頻ID列表
  • watched video ID:觀看的視頻ID列表
  • user language:用戶語言
  • video language:視頻語言
  • time since last watch:上次觀看的時序特征
  • #previous impressions:長期興趣特征

與召回階段不同的是,排序階段需要處理計(jì)算的數(shù)據(jù)量僅僅是百數(shù)量級的,為了提高預(yù)測精度,排序階段使用了更多精細(xì)的特征。除此之外,排序階段本身就可以整合多源召回,上面提到的召回模型可能僅僅是一種召回策略,通常召回階段的來源往往很多。

我們來看看排序階段這篇論文又提到了哪些經(jīng)典的工程經(jīng)驗(yàn)。

  1. 「以觀看時長作為優(yōu)化目標(biāo),而非簡單地用CTR或者播放率(Play Rate)」

    具體而言,論文采用了每次曝光預(yù)期播放時間(expected watch time per impression)作為優(yōu)化目標(biāo)。確實(shí),觀看時長更能反映用戶的真實(shí)興趣,而類似CTR的指標(biāo)則帶有迷惑性,尤其是一些靠標(biāo)題黨或者視頻封面來吸引人的視頻,很容易誘導(dǎo)用戶點(diǎn)擊,但其內(nèi)容不一定是用戶真正喜歡的。

    優(yōu)化目標(biāo)的設(shè)定其實(shí)非常重要,是算法模型的根本性問題,也是最初指明方向的一個過程,如果方向錯了,后面再怎么努力也會和真正的目標(biāo)南轅北轍。目標(biāo)的確定,除了要考慮業(yè)務(wù)目標(biāo),也要考慮到商業(yè)目標(biāo),比如YouTube推薦的視頻被用戶看得時間越長,消費(fèi)用戶的注意力越多,就越有商業(yè)廣告的價(jià)值。目標(biāo)的設(shè)定和調(diào)整,也可以根據(jù)線上 A/B test進(jìn)行微調(diào)。

  2. 「排序階段重要的特征工程」

    深度學(xué)習(xí)模型雖然能夠減少一部分特征工程的工作,但有些原始數(shù)據(jù)根本就不能直接輸入到前饋神經(jīng)網(wǎng)絡(luò)(Feedforward Neural Network,F(xiàn)NN),與圖像、NLP不同的是,推薦系統(tǒng)對特征工程格外依賴,好的特征能夠起到非常關(guān)鍵的作用,就比如召回階段提到的Example Age。因此,在推薦場景下我們?nèi)匀恍枰ㄙM(fèi)很大一部分精力來做特征工程,將原始數(shù)據(jù)轉(zhuǎn)換成有用的特征。其中「最主要的挑戰(zhàn)是如何建模用戶時序行為(temporal sequence of user actions),并且將這些行為和要排序的 item 相關(guān)聯(lián)。」

    • YouTube 發(fā)現(xiàn)「最重要的特征是描述用戶與商品本身或相似商品之間交互的特征」,這與 Facebook 在 2014 年提出 LR + GBDT 模型的論文 ( Practical Lessons from Predicting Clicks on Ads at Facebook )中得到的結(jié)論是一致的。

      因此YouTube考慮了用戶與視頻頻道(或主題)的關(guān)系,包括數(shù)量特征,即瀏覽該頻道視頻的數(shù)量,以及時間特征,即最近一次瀏覽該頻道距離現(xiàn)在的時間。這兩個連續(xù)特征的最大好處是具備非常強(qiáng)的泛化能力。另外除了這兩個偏正向的特征,用戶對于視頻所在頻道的一些 PV 但不點(diǎn)擊的行為,即負(fù)反饋 Signal 同樣非常重要。

    • 把召回階段的信息,比如「推薦來源和所在來源的分?jǐn)?shù),傳播到排序階段」同樣能取得很好的提升效果。

    • 為了產(chǎn)生很好的響應(yīng)式推薦,通常會在推薦的時候引入“攪動(churn)”的功能(連續(xù)的請求不會返回相同的列表),而使用描述視頻「歷史曝光頻率的特征,可以對“攪動”起到很好的輔助效果」,比如一個用戶最近被推薦了某個視頻,但沒有觀看它,接著模型將自然地在下一頁加載時降級該曝光(impression)。

    • 「對類別特征進(jìn)行Embedding向量化」

      NN 更適合處理連續(xù)特征 , 因此稀疏的特別是高基數(shù)空間的離散特征(類別型特征可能的取值非常多,這種特征也稱為高基數(shù)類別特征)需要 Embedding 到稠密的向量中。每個唯一的ID空間(比如user、item、vocabulary)都具有一個單獨(dú)學(xué)到的Embedding空間,「一般來說Embedding的空間維度基本與唯一值(去重后的值)數(shù)目的對數(shù)接近」。這些Embedding通常會在DNN模型訓(xùn)練前構(gòu)建,并形成簡單的look-up table。

      YouTube在對Video進(jìn)行Embedding的時候,直接將大量長尾Video進(jìn)行了斷掉。**在基于點(diǎn)擊曝光的頻率排序后,只選擇了TopN的視頻進(jìn)行Embedding,其余全部置為0向量。**其實(shí)這也是工程和算法的一個權(quán)衡(trade-off),截?cái)嗟舸罅块L尾可以節(jié)省online serving中寶貴的內(nèi)存資源,當(dāng)然低頻video的Embedding的準(zhǔn)確性不佳是另一個“截?cái)嗟粢膊荒敲纯上А钡睦碛伞_@個經(jīng)驗(yàn)也是值得借鑒的,除了置為0向量,也可以替換為所屬類別的Embedding,或者用一個固定的Embedding統(tǒng)一表示,類似NLP中用UNK(unknown)表示長尾詞。

      另外,和召回階段一樣,在輸入時,「多值類別特征的Embedding先進(jìn)行平均處理」。

      「重要的是,相同ID空間的類別型特征,也共享著底層的Embedding」。例如,存著單個關(guān)于視頻ID的全局Embedding,供許多不同的特征使用(曝光的視頻ID,該用戶觀看的最近視頻ID,作為推薦系統(tǒng)”種子”的視頻ID等等)。盡管共享Embedding,但依然需要每個特征獨(dú)自輸入到網(wǎng)絡(luò)中,以使得上面的層可以學(xué)到每個特征的特定表征(representation)。共享嵌入(sharing emdeddings)對于提升泛化、加速訓(xùn)練、及減小內(nèi)存等相當(dāng)重要。

    • 「對連續(xù)特征進(jìn)行歸一化」

      眾所周知, NN 對輸入特征的尺度和分布都是非常敏感的,實(shí)際上 ,基本上除了 TreeBased 的模型( 比如 GBDT/RF),機(jī)器學(xué)習(xí)的大多算法都如此。歸一化方法對收斂很關(guān)鍵,論文推薦了一種排序分位歸一到[0, 1)區(qū)間的方法,即,累計(jì)分位點(diǎn),該積分與特征值的分位數(shù)的線性插值相近似。

      除此之外,我們還把歸一化后的 的平方根 和平方 作為網(wǎng)絡(luò)輸入,以期使網(wǎng)絡(luò)能夠更容易得到特征的次線性(sub-linear)和( super-linear )超線性函數(shù)。「通過引入特征的不同階來引入了特征的非線性」。

  3. 排序模型沒有采用經(jīng)典的Logistic Regression當(dāng)做輸出層,而是采用了Weighted Logistic Regression。

    這樣做的原因主要是為了融合優(yōu)化目標(biāo),因?yàn)槟P褪褂闷谕^看時長(expected watch time per impression)作為優(yōu)化目標(biāo),如果簡單使用LR就無法引入正樣本的觀看時長信息。因此采用weighted LR。

    YouTube使用幾率(odds)的方式來引入權(quán)重信息,相當(dāng)于對模型sigmoid層作了一個小小的改動。

    關(guān)于幾率,我們在《Logistic回歸》一文中其實(shí)已經(jīng)有過詳細(xì)介紹,而且Logistic回歸本身就是從幾率推導(dǎo)出來的,所以Logistic回歸又稱對數(shù)幾率回歸。我們簡單回顧一下。

    一個事件的幾率,是指該事件發(fā)生的概率與該事件不發(fā)生的概率的比值,用公式表示:

    取對數(shù)得到logit函數(shù):

    logit函數(shù)是廣義線性的連接函數(shù),因此令:

    稍作轉(zhuǎn)換,就得到了我們熟悉的sigmoid的函數(shù):

    這里將觀看時長作為正樣本的權(quán)重,負(fù)樣本權(quán)重指定為單位權(quán)重1,這樣將權(quán)重引入幾率后,由于正樣本對預(yù)估的影響提升了倍(權(quán)重是),而負(fù)樣本沒有變化(權(quán)重是1),因此對于指定樣本,其引入權(quán)重后的幾率是原來幾率的倍:

    ?

    @張軒

    @Shaohua Yang

    嚴(yán)格的說,Weighted LR中的單個樣本的weight,并不是讓這個樣本發(fā)生的概率變成了weight倍,而是讓這個樣本,對預(yù)估的影響(也就是loss)提升了weight倍。這種影響的反饋,通過推導(dǎo)可以看到,無論是在更新梯度時作用(乘以weight),還是直接將此樣本在訓(xùn)練集里面擴(kuò)充到weight個,大體上都是一樣的效果(更新策略決定)。非weight的odds可以直接看成N+/N-,因?yàn)閣eighted的lr中,N+變成了weight倍,N-沒變,還是1倍,所以直接可得后來的odds是之前odds的weight倍(嚴(yán)格的說應(yīng)該是倍)。

    ?

    由于在視頻推薦場景中,對于整個視頻資源庫來說,用戶打開一個視頻的概率p往往是一個很小的值,因此上式可以簡化為:

    由于就是用戶打開視頻的概率,是觀看時長,因此就是用戶觀看某視頻的期望時長,由此便能理解訓(xùn)練階段的輸出層為什么使用Weight LR了。

    而對于線上Serving的輸出層,則是使用,它又是怎么來的呢?

    其實(shí)還是幾率(odds),我們把logit函數(shù)稍微做個轉(zhuǎn)換變可得到:

    因此在線上Serving中使用做預(yù)測可以直接得到期望觀看時長(expected watch time)的近似。

    $既然預(yù)估的是期望觀看時長,那為什么不用多分類或者是回歸的模型來替代Weight LR?

    ?

    @張相於

    回歸有一個問題在于值域是負(fù)無窮到正無窮,在視頻推薦這樣一個大量觀看時間為0的數(shù)據(jù)場景,為了優(yōu)化MSE,很可能會把觀看時間預(yù)測為負(fù)值,而在其他數(shù)據(jù)場景下又可能預(yù)測為超大正值。邏輯回歸在這方面的優(yōu)勢在于值域在0到1,對于數(shù)據(jù)兼容性比較好,尤其對于推薦這種小概率事件(rare event)的場景,相比回歸會更加適合。而且odds和LR的公式是同源的,且值域也是非負(fù)的,更符合watch time的物理意義。

    另一種方案是把觀看時間離散化成k個bucket然后做多分類,但是多分類輸出粒度不夠細(xì),不適合用來做排序。此外多分類的參數(shù)數(shù)量也比二分類多很多,同樣的樣本量下訓(xùn)練效果可能不如二分類效果好。

    ?

    訓(xùn)練Weighted LR一般來說有兩種辦法:[^3]

    $這兩種訓(xùn)練方法得到的結(jié)果有沒有不同?

    ?

    @張相於

    這兩種訓(xùn)練方法得到的結(jié)果是不一樣的,比如要抽樣10倍,對于第一種方法,就是把一條樣本重復(fù)10倍,這樣優(yōu)化的過程中,每遇到一條這個樣本,就會用梯度更新一下參數(shù),然后用更新后的參數(shù)再去計(jì)算下一條樣本上的梯度,如果逐步計(jì)算并更新梯度10次;但對于第二種方法,則是一次性更新了單條梯度乘以10這么多的梯度,是一種一次到位的做法。

    直觀一些來講,第一種方法更像是給予一條樣本10倍的關(guān)注,愿意花更多時間和精力來對待這條樣本,是一種更細(xì)致的方法,第二種則比較粗暴了,不愿意花太多功夫,直接給你10倍權(quán)重。

    @王喆

    非常準(zhǔn)確的理解,但我覺得這兩種方法雖然形式上差別很大,但其實(shí)結(jié)果上差別不太大,因?yàn)橹貜?fù)抽樣十次相當(dāng)于算十次梯度再加起來,跟算一次梯度乘以10的結(jié)果一樣。當(dāng)然,重復(fù)采樣逐次算梯度時還要考慮當(dāng)前最優(yōu)點(diǎn)移動的影響,但我覺得對于SGD來說影響不會特別大。

    @張相於

    當(dāng)前參數(shù)點(diǎn)的移動確實(shí)會對結(jié)果造成影響,尤其是當(dāng)把這10條樣本打散分布在所有樣本中時,也就是說不是連續(xù)使用這10條樣本做優(yōu)化時,影響應(yīng)該會更大。但具體對最終效果的影響還是得試驗(yàn)后才知道。

    @王喆

    確實(shí)打散后的影響不好評估,結(jié)果確實(shí)會不同,還是跑一組AB test來的實(shí)在了。

    ?
    1. 將正樣本按照weight做重復(fù)sampling,然后輸入模型進(jìn)行訓(xùn)練;
    2. 在訓(xùn)練的梯度下降過程中,通過改變梯度的weight來得到Weighted LR。

Airbnb

Real-time Personalization using Embeddings for Search Ranking at Airbnb

Airbnb這篇論文獲得了KDD 2018的Best Paper,和上一小節(jié)介紹的YouTube論文類似,也是一篇充滿工程實(shí)踐經(jīng)驗(yàn)的論文,其中Embedding在Airbnb業(yè)務(wù)中的整合和靈活應(yīng)用,非常值得我們解讀借鑒。

先來了解一下Airbnb的業(yè)務(wù)背景。

Airbnb是全球最大的短租平臺,平臺包含數(shù)百萬種不同的房源,為了能夠幫助用戶找到自己心儀的短租屋,Airbnb主要通過兩種方式來為用戶推薦合適的住房。

一個是「搜索推薦」,即用戶輸入地點(diǎn)、日期、人數(shù)進(jìn)行搜索,系統(tǒng)通過復(fù)雜的機(jī)器學(xué)習(xí)模型使用上百種信號對搜索結(jié)果中的房源進(jìn)行排序,然后根據(jù)你的需求推薦你可能會感興趣的房源:

另外一個是「相似房源推薦」,接入在房源詳情頁底部,會推薦和當(dāng)前房源相似的房源,以圖文滑動窗格的形式展示:

Airbnb表示,平臺 99% 的房源預(yù)訂來自于搜索推薦和相似房源推薦[^4],由此可見算法在業(yè)務(wù)中起到的關(guān)鍵作用。

Airbnb論文中將短租房源的item稱為listing,其Embedding稱為「房源嵌入(Listing Embedding)」,為了與論文保持一致,本文會延用該稱謂,大家當(dāng)作item理解即可。

接下來我們詳細(xì)看看論文中提到的一些優(yōu)秀的工程經(jīng)驗(yàn)。

  1. 「將用戶行為進(jìn)行合理的Session切分,然后進(jìn)行Embedding訓(xùn)練?!?/strong>

    這個方法在上一節(jié)Graph Embedding也提到過,即基于session 的用戶行為(session-based)的Embedding。基于session用戶行為學(xué)習(xí)到的Embedding,更容易捕獲到用戶的短期興趣。session需要從用戶行為歷史中獲取,因?yàn)橛脩魵v史行為并不是一次性產(chǎn)生的,用戶每次的訪問,其偏好都可能不同,因此,需要「對用戶行為歷史進(jìn)行session切分,這樣可以避免非相關(guān)序列的產(chǎn)生,也能夠清洗噪聲點(diǎn)和負(fù)反饋信號」。

    Airbnb采用了click session數(shù)據(jù)對listing進(jìn)行Embedding,其中click session指的是一個用戶在一次搜索過程中,點(diǎn)擊的listing的序列,這個序列需要滿足兩個條件,「一個是只有停留時間超過30s的listing page才被算作序列中的一個數(shù)據(jù)點(diǎn)(過濾噪聲),二是如果用戶超過30分鐘沒有動作,那么這個序列會斷掉,不再是一個序列(避免非相關(guān)序列)。」

  2. 「使用負(fù)例采樣的Skip-gram模型,并根據(jù)自己的業(yè)務(wù)特點(diǎn)進(jìn)行了兩項(xiàng)優(yōu)化」。

    這一部分是論文的一個核心,我們先從目標(biāo)函數(shù)開始,逐步詳細(xì)推導(dǎo)。

    假設(shè),給定從個用戶中獲取的個點(diǎn)擊sessions的一個集合,其中每個session 被定義成:一個關(guān)于該用戶點(diǎn)擊的個listing ids連續(xù)序列,這里的session就是上面我們提到的已經(jīng)切分后的session。對于給定該數(shù)據(jù)集,目標(biāo)是為每個唯一的listing 學(xué)習(xí)一個d維Embedding表示:,以使相似的listing在該Embedding空間中更接近。論文中的Embedding維度d設(shè)為「32」,并且在論文末尾進(jìn)行了試驗(yàn),驗(yàn)證這樣的設(shè)置可以平衡離線性能和在線搜索服務(wù)器內(nèi)存中存儲向量所需的空間,能夠更好地進(jìn)行實(shí)時相似度的計(jì)算。

    學(xué)習(xí)Embedding使用的是Skip-gram模型,通過最大化搜索sessions的集合的目標(biāo)函數(shù)L來學(xué)習(xí)listing表示,L定義如下:

    從被點(diǎn)擊的listing 的上下文鄰居上觀察一個listing 的概率,使用Softmax定義:

    其中是關(guān)于listing 的輸入和輸出的向量表示,超參數(shù)m被定義成對于一個點(diǎn)擊listing的forward looking和backward looking上下文長度,V被定義成在數(shù)據(jù)集中唯一listings的詞匯表。

    可以發(fā)現(xiàn),上面的方法基本和Word2Vec或Item2Vec的思想一致,當(dāng)然梯度更新也會受到Softmax性能的影響,因此采用負(fù)例采樣進(jìn)行優(yōu)化。

    我們會生成一個positive pairs 的集合,其中表示點(diǎn)擊的listings,表示它的上下文,然后從整個詞典V中隨機(jī)抽取n個listings來組成negative pairs 的集合。優(yōu)化的目標(biāo)函數(shù)變?yōu)椋?/p>

    其中要學(xué)的參數(shù)是:,。優(yōu)化通過隨機(jī)梯度上升法(SGA)完成。

    公式1、2、3都是最基本的用法,接下來我們來看看Airbnb如何根據(jù)自己的業(yè)務(wù)特點(diǎn)來優(yōu)化Embedding學(xué)習(xí)的目標(biāo)函數(shù)

    「優(yōu)化一:使用最終預(yù)訂的房源作為全局上下文 (Global Context)」

    這一優(yōu)化主要使用以用戶預(yù)訂房源(booked listing)作為結(jié)束的會話,加入預(yù)定不僅可以預(yù)測相鄰的點(diǎn)擊房源(clicked listings),還會預(yù)測最終預(yù)訂的房源。當(dāng)窗口滑動時,一些房源會進(jìn)入和離開窗口,而預(yù)訂的房源始終作為全局上下文(圖中虛線)保留在其中,并用于更新中心房源(central listing)向量。

    「優(yōu)化二:適配聚集搜索的情況(優(yōu)化負(fù)樣本的選擇)」

    在線旅行預(yù)訂網(wǎng)站的用戶通常僅在他們的旅行目的地內(nèi)進(jìn)行搜索。因此,對于給定的中心房源,正相關(guān)的房源主要包括來自相同目的地的房源,而負(fù)相關(guān)房源主要包括來自不同目的地的房源,因?yàn)樗鼈兪菑恼麄€房源列表中隨機(jī)抽樣的,這種不平衡會導(dǎo)致在一個目的地內(nèi)相似性不是最優(yōu)的。為了解決這個問題,我們添加了一組從中央房源的目的地中抽樣選擇的隨機(jī)負(fù)例樣本集 。「論文中將像目的地這種限定因素稱之為市場market,其實(shí)應(yīng)用時并不限定于目的地的地理位置信息,還可以拓展到其他限定因素,只要能夠從這些限定因素中找到更合適的負(fù)例樣本添加到目標(biāo)函數(shù)即可。」

    因此,經(jīng)過上面的兩個優(yōu)化,「最終優(yōu)化后的目標(biāo)函數(shù)」變?yōu)椋?/p>

    其中:

    另外需要注意的一點(diǎn),上面目標(biāo)函數(shù)中,關(guān)于“優(yōu)化一”的部分并沒有加和符號,這是為什么呢?

    其實(shí)公式3和公式4都是公式1的紅框部分,即對給定session的優(yōu)化目標(biāo)函數(shù),并不是整體目標(biāo)函數(shù)L。而對于每個預(yù)定session,只會有一個預(yù)定,它不像公式其他幾個部分是樣本對集合,自然就沒有加和符號了。

    利用上面所描述的優(yōu)化目標(biāo)函數(shù),Airbnb使用超過 8 億次的搜索點(diǎn)擊會話,訓(xùn)練了 450 萬個有效房源Embedding嵌入表示,從而獲得了高質(zhì)量的房源推薦和展示。

    • 要學(xué)習(xí)的參數(shù)有:,。

    • 是一對正例樣本對,表示(中心房源,相關(guān)房源)元組,其向量在優(yōu)化中會被互相推近

    • 是一對負(fù)例樣本對,表示(中心房源,隨機(jī)房源)元組,其向量在優(yōu)化中會被互相推離

    • 是最終被預(yù)訂的房源,被視為全局上下文并被推向中心房源向量

    • 是一對目的地維度的負(fù)例樣本對,代表(中央房源,來自同一目的地的隨機(jī)列表)元組,其向量被推離彼此

  3. 「使用相近房源Embedding平均值來解決冷啟動問題」。

    每天在 Airbnb 上都有新的房源提供。這些房源在新建時還不在訓(xùn)練數(shù)據(jù)集中,所以沒有嵌入信息。為給新房源創(chuàng)建Embedding,Airbnb的方法是找到 3 個地理位置最接近、房源類別和價(jià)格區(qū)間相同的已存在的房源,并計(jì)算這些房源嵌入的向量平均值來作為新房源的嵌入值

  4. 「Embedding的評估經(jīng)驗(yàn)」

    對于Embedding質(zhì)量的評估,Airbnb使用了很多方法,主要的思想還是通過Embedding相似度的方法來進(jìn)行的,論文中提到了以下幾種方式:

    • 評估地理位置相似性是否被包含,對Embedding進(jìn)行了 k 均值聚類 (k-means clustering)。下面的圖顯示了美國加州產(chǎn)生的 100 個聚類,確定了來自近似位置的房源基本能夠聚集在一起。

    • 評估房源特征相似性是否被包含。論文評估了不同類型(整套房源,獨(dú)立房間,共享房間)和價(jià)格范圍的房源之間的平均余弦相似性 (cosine similarity) ,并確認(rèn)相同類型和價(jià)格范圍的房源之間的余弦相似性遠(yuǎn)高于不同類型和不同價(jià)格的房源之間的相似性。因此我們可以得出結(jié)論,房源特征也被很好的包括在訓(xùn)練好的Embedding中了。

    • 評估一些隱式房源特征。部分類型的房源特征(例如建筑風(fēng)格,樣式和感覺)很難提取為房源特征的形式。為了評估這些特性并能夠在Embedding空間中進(jìn)行快速簡便的探索,Airbnb內(nèi)部開發(fā)了一個相似性探索工具 (Similarity Exploration Tool),下圖的示例表明,通過Embedding能夠找到相同獨(dú)特建筑風(fēng)格的相似房源,包括船屋、樹屋、城堡等,說明即使我們不利用圖片信息,也能從用戶的click session中挖掘出相似風(fēng)格的房源。

    • 論文還提出一種離線評估方法,測試通過用戶最近的點(diǎn)擊來推薦的房源,有多大可能最終會產(chǎn)生預(yù)訂。

      更具體地,假設(shè)已經(jīng)獲得了最近點(diǎn)擊的房源和需要排序的房源候選列表,其中包括用戶最終預(yù)訂的房源;通過計(jì)算點(diǎn)擊房源和候選房源在Embedding空間的余弦相似度,對候選房源進(jìn)行排序,并觀察最終被預(yù)訂的房源在排序中的位置。

      下圖顯示了一個此類評估的結(jié)果,搜索中的房源根據(jù)Embedding空間的相似性進(jìn)行了重新排序,并且最終被預(yù)訂房源的排序是按照每次預(yù)定前的點(diǎn)擊的平均值來計(jì)算,追溯到預(yù)定前的 17 次點(diǎn)擊。同時,下圖也對比了幾種Embedding學(xué)習(xí)的優(yōu)化方式,可以看到優(yōu)化起到的效果。

  5. 「利用User-Type和Listing-Type Embedding來解決數(shù)據(jù)稀疏問題」

    上面學(xué)習(xí)到的Listing Embedding是使用clicked sessions進(jìn)行訓(xùn)練的,它們更適合短期(short-term)、session內(nèi)(in-session)的個性化的需求,雖然這個Embedding能夠很好地給用戶展示與在搜索session期間點(diǎn)擊的listing相似的listings,但并不包含用戶的長期興趣信息?;谟脩糸L期興趣的信息對于個性化搜索來說非常有用,比如用戶當(dāng)前session搜索的是洛杉磯的短租屋,但是用戶之前在紐約、倫敦住過的短租屋也代表著用戶的興趣偏好。那如何學(xué)習(xí)含有長期興趣信息的Embedding呢?

    Airbnb首先想到的是使用了booking session序列,每個用戶按預(yù)定(booking)的時間順序排列的一個listings序列構(gòu)成booking session ,然而想要從booking session學(xué)習(xí)到相應(yīng)的Embedding,會遇到諸多挑戰(zhàn):

    1)booking sessions數(shù)據(jù)集比click sessions數(shù)據(jù)集要小很多,因?yàn)轭A(yù)定本身是低頻事件;

    2)許多用戶在過去只預(yù)定單個listing,我們不能從長度只有1的session中學(xué)習(xí)Embedding;

    3)為了上下文信息中的任意實(shí)體學(xué)習(xí)一個有意義的Embedding,至少需要該實(shí)體出現(xiàn)5-10次,然而在平臺中的許多l(xiāng)isting_ids會低于5-10次。

    4)最后,由同用戶的兩個連續(xù)預(yù)定可能會有很長時間的間隔,這時候,用戶偏好( 比如:價(jià)格點(diǎn))可能會隨很多因素發(fā)生了變化,比如職業(yè)發(fā)展影響等。

    5)必須滿足供需雙方,給租戶的最優(yōu)化推薦還需要考慮房東的對租客的偏好

    Airbnb其實(shí)是一個雙邊市場平臺,它的房源大都來自于個人的民宿,所以平臺也會考慮房東對租客的偏好,和預(yù)定酒店等類似業(yè)務(wù)不同,Airbnb房源的房東是可以拒絕租客的,大致的業(yè)務(wù)流程如下圖所示:

    從上圖可以看出,booking過程其實(shí)存在房東的顯式反饋信息(接受或拒絕租客的預(yù)定),這個信息也體現(xiàn)出房東的偏好,對房東來說,拒絕預(yù)定的部分原因可能是:租客較差的星級評分習(xí)慣、用戶資料不完整或空白、沒有資料頭像等等。所以,為了提高租客的預(yù)定成功率,平臺不僅要考慮租客的租住偏好,還要考慮房東對租客的一些基本要求和偏好,盡量避免給用戶推薦的房源被房東拒絕。

    面對這些挑戰(zhàn),如何才能學(xué)習(xí)到有意義的Embedding呢?

    首先,針對第四個挑戰(zhàn),也就是為了為了捕獲用戶隨時間變化的偏好信息,Airbnb除了Listing Embedding,又加了一個User Embedding的學(xué)習(xí)。而對于數(shù)據(jù)稀疏的問題,Airbnb使用了一種非常巧妙的方法,即「基于某些屬性規(guī)則做相似user和相似listing的聚合,這種方法是通過Type級別來學(xué)習(xí)Embedding而非ID級別?!?/strong>

    我們接下來看具體的實(shí)現(xiàn)過程。

    「第一步,通過基于規(guī)則(rule-based)的方式定義的屬性類型分桶(buckets),將ID類映射到type類?!?/strong>

    「第二步,用type類數(shù)據(jù)生成booking session序列?!?/strong>

    如何生成同type類的booking session序列呢?

    一種直觀方法是直接把user_type當(dāng)作原來的user_id,生成一個由listing_type組成的booking session。這種方法能雖然夠解決數(shù)據(jù)稀疏性的問題,卻無法直接得到User-Type Embedding。**為了學(xué)習(xí)在相同向量空間中的user_type和listing_type的Embeddings,Airbnb的做法是將user_type插入到booking sessions中,形成一個(user_type, listing_type)組成的元組序列,這樣就可以讓user_type和listing_type的在session中的相對位置保持一致了。**如下圖所示,user_type 和 listing_type相對位置保持一致(不同顏色區(qū)分),根據(jù)中心Item的類型來選擇對應(yīng)上下文的類型:

    具體來講,對于給定user_id按時間排序的booking session ,用(user_type, listing_type)組成的元組替換掉原來的session中的listing_id,因此這個booking session序列就變成了:

    這里 指的就是預(yù)定的listing 對應(yīng)的listing_type,指的是該user在預(yù)定listing 時的user_type,「由于某一user的user_type會隨著時間變化,所以每個session雖然由相同user_id的bookings組成,但對于單個user_id來說,他們的user_type在序列中的不同位置則不一定相同?!?/strong>

    「第三步,設(shè)計(jì)優(yōu)化目標(biāo)函數(shù),進(jìn)行Embedding學(xué)習(xí)。」

    有了type類的booking session序列,訓(xùn)練Embedding的方式基本和上面的一致,也是采用負(fù)例采樣的方式。當(dāng)然,此處Airbnb也考慮了根據(jù)自身業(yè)務(wù)對負(fù)例采樣進(jìn)行進(jìn)一步的優(yōu)化工作。由于定義中的booking sessions幾乎包含了來自不同markets的listings,因此這里沒有必要從相同market中抽樣額外的負(fù)樣本作為booked listing。但為了解決上面提到的第五個挑戰(zhàn),也就是盡量避免推薦被拒,在此處的目標(biāo)函數(shù)中引入了房東拒絕訂單(rejection)的顯式負(fù)例樣本。如下圖所示,對于同一用戶,通過一個正號標(biāo)記預(yù)定成功的listing,通過負(fù)號標(biāo)記被房東拒單的listing。

    當(dāng)在對于另一個listing的成功預(yù)定(通過一個正號標(biāo)記)之后主人拒絕(通過一個負(fù)號-標(biāo)記)。

    其實(shí)在User Type映射表中,就包含了租客的一些個人信息以及行為信息,通過引入房東的拒單信息,就可以捕捉到房東(所對應(yīng)的房源)對租客的偏好,這樣學(xué)習(xí)到的Embedding在進(jìn)行相似推薦時便可以減小拒絕率,最大化預(yù)訂成功的概率。

    我們對rejections看成是顯式負(fù)樣本,以如下方式公式化。除了集合,我們會生成一個集合,它由涉及到rejection事件的user_type和listing_type的組成。如圖5b所示,我們特別關(guān)注,對于同一用戶,當(dāng)在對于另一個listing的成功預(yù)定(通過一個正號標(biāo)記)之后主人拒絕(通過一個負(fù)號-標(biāo)記)。

    于是,最后改進(jìn)的新目標(biāo)函數(shù)為:

    User Type:

    Listing Type:

    其中,為user_type,為listing_type,為預(yù)定集合,為隨機(jī)負(fù)例集合,為拒單集合,由涉及拒單行為的user_type和listing_type的pairs 組成。

    「第四步,基于cosine相似度進(jìn)行推薦(Embedding評估)?!?/strong>

    對于所有user_types和listing_types所學(xué)到的Embeddings,我們可以根據(jù)用戶當(dāng)前的User-Type Embedding和Listing-type Embedding,基于cosine相似度給用戶推薦最相關(guān)的listings。

    上表展示的type信息以及對應(yīng)的cosine相似度能夠看出:

    根據(jù)某用戶對應(yīng)的typeID user_type = SF_lg1_dt1_fp1_pp1_nb3_ppn5_ppg5_c4_nr3_l5s3_g5s3來看,該用戶通常會預(yù)定高質(zhì)量、寬敞、好評率高、并且在美國有多個不同listing_type的listing。可以觀察到,最匹配這些用戶偏好listing_type(例如,整租,好評多,大于平均價(jià)等),具有較高cosine相似度;而其它不太匹配用戶偏好的listing_type(例如:空間少,低價(jià),好評少),則具有較低cosine相似度。

    「最后,我們來總結(jié)一下Airbnb是如何解決上面提到的各種問題的?!?/strong>

    首先,通過clicked session學(xué)習(xí)到的Embedding只包含短期偏好信息,不包含用戶的長期偏好。所以為了學(xué)習(xí)有著用戶長期偏好信息Embedding,Airbnb的方案是利用booking session數(shù)據(jù)。

    長期信息有什么用呢?僅僅是為了通過相似度推薦嗎?其實(shí)不是,我們下面會講到,其實(shí)Airbnb并沒有直接根據(jù)Embedding相似度排序作為搜索推薦結(jié)果,而是在后面還有一個排序模型,Embedding相似度其實(shí)是作為這個排序模型的一個特征來用的。

    另外要想訓(xùn)練booking session數(shù)據(jù)其實(shí)并不容易,因?yàn)閎ooking session有著嚴(yán)重?cái)?shù)據(jù)稀疏問題(上述挑戰(zhàn)1、2、3),對于長度為1的booking session(挑戰(zhàn)2),Airbnb的做法很可能是直接丟棄這一類的數(shù)據(jù)。而對于數(shù)據(jù)集小以及訓(xùn)練實(shí)體出現(xiàn)次數(shù)不多的情況(挑戰(zhàn)2、3),Airbnb的做法則是將ID類Item映射聚合到Type類,這樣訓(xùn)練實(shí)體出現(xiàn)次數(shù)會變多,之前很可能完全沒有關(guān)系的ID類Item則被看做同一類型的Type類Item,重復(fù)出現(xiàn)的機(jī)會變多了,對所有用戶而言,booking session中的交集和關(guān)聯(lián)也變多了。因此原本稀疏不可學(xué)習(xí)Embedding的數(shù)據(jù)變成了可用的數(shù)據(jù)。

    除此之外,用戶興趣也會隨著時間變化(挑戰(zhàn)4),為了獲取這部分信息,Airbnb特意學(xué)習(xí)了一個與Listing-Type Embedding在同一空間的User-Type Embedding。而為了在Embedding中體現(xiàn)房東對租客的偏好,優(yōu)化預(yù)定成功的概率(挑戰(zhàn)5),Airbnb在User-Type Embedding和Listing-Type Embedding的優(yōu)化目標(biāo)函數(shù)中加入了房東拒單的顯示負(fù)樣本。

    到此,以上提到的問題基本都得到了解決。

    • Listing Type 映射

      所有l(wèi)isting_id都可以根據(jù)自己的屬性通過上面的分桶映射成一個listing_type,分桶設(shè)計(jì)是以數(shù)據(jù)驅(qū)動的,要盡可能地覆蓋所有的類型。

      例如,一個來自US的Entire Home listing(lt1),它是一個二人間(c2),1床(b1),一個臥室(bd2),1個浴室(bt2),每晚平均價(jià)格為60.8美元(pn3),每晚每個客人的平均價(jià)格為29.3美元(pg3),5個評價(jià)(r3),所有均5星好評(5s4),100%的新客接受率(nu3)。因此該listing根據(jù)上表規(guī)則可以映射為:listing_type = US_lt1_pn3_pg3_r3_5s4_c2_b1_bd2_bt2_nu3。

      「從listing_id到listing_type的映射是一個多對一的映射,這意味著許多l(xiāng)istings可能會被映射到相同的listing_type,因此這把這個過程稱之為聚合?!?/strong>

    • User Type 映射

      **User-Type Embedding是與Listing-Type Embedding在相同的向量空間學(xué)習(xí)的,學(xué)習(xí)User-Type Embedding主要為了解釋用戶隨時間變化的偏好。**User屬性的映射方式同Listing類似, 不過數(shù)據(jù)除了利用User之前預(yù)定記錄留下的一些行為信息,同時引入了User本身的一些屬性信息,利用前5行的映射一定程度上可以緩解新用戶的冷啟動問題。

      例如,對于一個用戶,他來自San Francisco(SF),帶有MacBook筆記本(dt1),說英文(lg1),具有用戶照片資料(pp1),83.4%平均5星率(l5s3),他在過去有3個預(yù)訂(nb1),其中關(guān)于訂單(booked listings)的平均消費(fèi)統(tǒng)計(jì)為:每晚平均價(jià)格(Price Per Night)為52.52美元 (ppn2),每晚單客戶平均價(jià)格(Price Per Night Per Guest)為31.85美元(ppg3),預(yù)定房源的平均房間數(shù)(Capacity)是2.33(c2),平均瀏覽數(shù)(Reviews,此處存疑,看數(shù)量感覺這里的Reviews和Listing中的Reviews可能不一樣)是 8.24(nr3)、5星好評率(Listing 5 star rating)是76.1%(l5s3)。因此該用戶根據(jù)上表規(guī)則可以映射為:user_type=SF_lg1_dt1_fp1_pp1_nb1_ppn2_ppg3_c2_nr3_l5s3_g5s3。

  6. 「Embedding的最終用法」

    我們上面提到過Airbnb的推薦場景有兩個,一個是房源詳情頁的相似房源推薦,另外一個是在個性化的搜索推薦結(jié)果。我們分別來看這兩個推薦應(yīng)用場景下是如何應(yīng)用學(xué)習(xí)到的Embedding的。

    「相似房源推薦」

    相似房源推薦用的應(yīng)該是Clicked Session學(xué)習(xí)到的Listing Embedding,用法也非常簡單,就是通過K近鄰找到與給定房源(點(diǎn)擊的是該房源的詳情頁)最相似的K個房源,Airbnb中的K設(shè)定是12,并且對候選房源做了一定的篩選,比如只計(jì)算與給定房源在同一城市的房源,還有就是如果用戶設(shè)置了入住和退房日期,則篩選在這個時段內(nèi)的可預(yù)訂的房源。

    Airbnb通過A/B測試顯示,基于Embedding的解決方案使「相似房源的點(diǎn)擊率增加了21%」,最終「通過相似房源推薦場景產(chǎn)生的預(yù)訂增加了 4.9%」

    「基于Embedding的實(shí)時個性化搜索」

    Airbnb在搜索排序中用了一個排序模型,從論文描述來看應(yīng)該就是我們之前文章講到過的「LambdaMART」,還給出一個開源實(shí)現(xiàn)(GitHub地址),此處對于Embedding應(yīng)用,更多是在特征工程上。

    根據(jù)前面得到的Listing Embeddings和User-Type Embedding、Listing-Type Embeddings生成的Feature如下表所示:

    上表中第一區(qū)域內(nèi)(前6個特征)的都是短期特征(short-term feature),首先利用kafka來實(shí)時收集和維護(hù)過去兩周內(nèi)的用戶行為數(shù)據(jù),然后通過對應(yīng)的Listing Embedding計(jì)算相關(guān)的相似度,下面是這些特征描述中對應(yīng)符號的具體含義:

    其他應(yīng)該都很好理解,這里重點(diǎn)說一下,它表示用戶在過去2周內(nèi)跳過的房源 ID,這里將跳過的房源定義為排序較靠前的房源,但用戶跳過了此房源并點(diǎn)擊了排序較靠后的房源。

    來看看這六個短期特征具體是如何計(jì)算的,用戶在搜索時會返回候選房源(無序),對于每個候選房源,計(jì)算其對應(yīng)Embedding與用戶兩周內(nèi)的各個行為(上面的六個)所產(chǎn)生的房源的平均Embedding相似度,以EmbClickSim為例,計(jì)算公式為:

    這里關(guān)鍵是對于兩周內(nèi)點(diǎn)擊的房源(listing)所對應(yīng)Embedding的處理(得先處理成一個,然后才可以和候選listing做相似度計(jì)算),一般是直接取平均就行了,但Airbnb的做法考慮了房源所在地的因素,即是先對用戶兩周內(nèi)點(diǎn)擊的房源按照其所在地(market)分為個market集合,然后分別對每個market集合內(nèi)的所有Listing Embedding向量求平均并與候選房源計(jì)算cosine相似度,最后從M個cosine相似度中取最大的那個值作為最終的特征值。

    剩余的五個計(jì)算方法與上面一樣。

    第二個區(qū)域的特征也是一個短期特征,不過它是單獨(dú)增加的一個重要特征,即計(jì)算候選房源與最后一次long-clicked對應(yīng)房源的Embedding相似度,通過這個特征可以得到用戶“實(shí)時”在意的反饋信息,公式如下:

    第三個區(qū)域就是Type類Embedding特征了,他們屬于長期特征(long-term  feature),首先根據(jù)候選房源查找到對應(yīng)的listing type 以及user type ,然后計(jì)算二者對應(yīng)的Embedding向量的cosine相似度,公式如下:

    論文給出了以上特征在模型中的特征重要度,見下表:

    上面的特征由多種Embedding計(jì)算得來,所以包含了短期session內(nèi)的(In-session)信息(例如,喜歡(liked)、點(diǎn)擊(clicks)、與主人的聯(lián)系(host contacts)等),也包含用戶的長期興趣信息,Airbnb就是借助于這些特征來實(shí)現(xiàn)「實(shí)時個性化搜索推薦」的, 目標(biāo)是給用戶展示與In-session信號相似的多個listings。Airbnb稱這種方法為「Real-Time Personalization」「In-session Personalization」,這也是論文標(biāo)題中Real-Time Personalization所表達(dá)的意思。

    論文最后給出了模型效果的評估:

  7. 搜索Query Embedding的應(yīng)用

    另外,Airbnb對搜索的Query也進(jìn)行了Embedding,和普通搜索引擎的Embedding不太相同的是,這里的Embedding不是用自然語言中的語料庫去訓(xùn)練的,而是用Search Session作為關(guān)系訓(xùn)練數(shù)據(jù),訓(xùn)練方式更類似于Item2Vec,Airbnb中Queue Embedding的一個很重要的作用是捕獲用戶模糊查詢與相關(guān)目的地的關(guān)聯(lián),這樣做的好處是可以使搜索結(jié)果不再僅僅是簡單地進(jìn)行關(guān)鍵字匹配,而是通過更深層次的語義和關(guān)系來找到關(guān)聯(lián)信息。比如下圖所示的使用Query Embedding之前和之后的兩個示例(Airbnb非常人性化地在搜索欄的添加了自動補(bǔ)全,通過算法去“猜想”用戶的真實(shí)目的,大大提高了用戶的檢索體驗(yàn)):

    為了讓Embedding包含這種模糊查詢和相關(guān)目的地的關(guān)聯(lián)信息,利用Search Session構(gòu)建訓(xùn)練序列的時候,就會非常注重這種關(guān)系的序列構(gòu)成,所以這個Search Session序列構(gòu)建的過程其實(shí)是通過用戶查詢關(guān)鍵詞Query以及點(diǎn)擊目的地來構(gòu)建的,Airbnb將目的地用geo_ID形式來表示,所以Search Session就成為如下圖所示的樣子:

    有了Search Session序列,訓(xùn)練方式基本和之前談到的方法差不多,這里不再贅述。

Alibaba

 Learning and Transferring IDs Representation in E-commerce

這篇論文也是發(fā)表在KDD 2018上的,論文的重點(diǎn)是介紹了一種ID類特征的表示方法。該方法基于item2vec方式,同時考慮了不同ID類特征之間的連接結(jié)構(gòu),在盒馬鮮生app上進(jìn)行了遷移應(yīng)用且取得了不錯的效果。

「ID類特征是一種比較特殊的數(shù)據(jù),通常可能只是一個長整型數(shù)。表面上來看并不帶任何信息,但實(shí)際上通過行為的匯總其承載了豐富的信息,所以ID類特征的處理其實(shí)是特征工程中非常重要的一部分」。ID類最初的處理方法是使用One-Hot編碼,這種方式有兩個缺點(diǎn):一個是高維帶來的稀疏問題,模型具有足夠置信度的話需要的樣本量指數(shù)級增加;另一個是無法表示ID之間的關(guān)系,比如通過One-Hot編碼無法度量兩個ID對應(yīng)item的相似性。[^5]

因此,Embedding理所當(dāng)然的成了替代One-Hot的最佳方案。

接下來,我們來看看這篇文論中比較tricks的亮點(diǎn)經(jīng)驗(yàn)。

  1. 使用 log-uniform 負(fù)例采樣

    這篇論文同樣采用負(fù)例采樣的Skip-gram模型進(jìn)行Embedding的學(xué)習(xí),不過采樣方法與Word2Vec中的不太一樣,用的是對數(shù)均勻負(fù)采樣(Log-uniform Negative-sampling)。log-uniform 負(fù)例采樣基于Zipfian分布,物理學(xué)和社會科學(xué)中許多類型的數(shù)據(jù)都可近似看作是Zipfian分布。

    我們來看一下log-uniform負(fù)例采樣的具體過程。

    首先,為了進(jìn)一步加速負(fù)采樣過程,先將D個物品按照其出現(xiàn)的頻率進(jìn)行降序排序,那么排名越靠前的物品,其出現(xiàn)的頻率越高。

    每個物品采樣到的概率如下:

    由上式可以看出,由于分母都是一樣的,分子依次為,是順次減小的,同時求和為1。那么排名越靠前即出現(xiàn)頻率越高的商品,被采樣到的概率是越大的。

    那么,該分布的累積分布函數(shù)為:

    ,是隨機(jī)產(chǎn)生的一個之間的隨機(jī)數(shù),就可以通過下面的轉(zhuǎn)換快速得到對應(yīng)的index,也就可以快速采樣到index對應(yīng)的負(fù)例了:

    可以看到,采樣公式非常簡單,利用這個近似,對數(shù)均勻負(fù)例采樣具有很高的計(jì)算效率。

  2. 多種ID分層聯(lián)合嵌入模型(Jointly Embedding model)

    像電商類的場景數(shù)據(jù)會有很多ID類特征,大的分類有物品ID和用戶ID,特別的,物品ID除了本身的ID特征,還有一些屬性ID,如下:

    這么多的ID類型,又通過Item ID有結(jié)構(gòu)關(guān)聯(lián)(如下圖),如何在訓(xùn)練Item Embedding的時候,將這些信息利用起來呢?

    論文作者提出一種層級Embedding模型來聯(lián)合訓(xùn)練得到item ID和attribute ID的低維表示。這個聯(lián)合Embedding的模型結(jié)構(gòu)如下圖所示:

    其中,item ID是核心的交互單元,若item ID之間存在共現(xiàn)關(guān)系,則表明其對應(yīng)attribute ID也存在共現(xiàn)關(guān)系。

    假設(shè)有K種類型的ID特征,這里定義的ID組如下:

    其中,表示item ID,表示product ID,表示store ID,其他類似(論文中用了6個attribute ID,剩下的按順序應(yīng)該是Brand ID, cate-level1 ID,cate-level2 ID,cate-level3 ID)。

    因此,Skip-gram模型的概率計(jì)算則可寫成如下方式:

    其中,以及分別為第k個類型ID的上下文矩陣和目標(biāo)矩陣。是第類ID的Embedding向量維度,是第類ID構(gòu)成的的字典大小,需要注意的是,不同類型的IDs,Embedding的維度也可以不同,也就是說不同的ID類其實(shí)是映射到了不同的語義空間中。的權(quán)重,定義如下:

    舉例來理解,比如,因?yàn)?span>是唯一的,而如果對應(yīng)的產(chǎn)品有10種item的話,那么。

    另外,item ID和attribute ID間存在著結(jié)構(gòu)聯(lián)系,這意味著可對模型增加限制。「兩個item ID的Embedding接近,除了本身的共現(xiàn)性,還可能跟它們擁有共同的product ID、 store ID、brand ID或 category ID等有關(guān),因此,attribute ID也應(yīng)該吸收item ID包含的信息,以商店id為例,對于某一store ID的Embedding應(yīng)該是該商店出售的所有Item ID的一個恰當(dāng)?shù)母爬??!?/strong>

    所以可通過attribute ID來預(yù)測item ID。形式化表達(dá)如下:

    其中, 是為了使變換到相同維度的矩陣,因?yàn)椴煌愋蚢ttribute ID的Embedding長度可能不一樣,無法直接相乘。

    然后最大化:

    其中,之間的約束強(qiáng)度系數(shù),是變換矩陣L2正則化系數(shù)。

    「通過這種方法共同訓(xùn)練可以加將Item ID 和attribute ID 嵌入到同一個語義空間」,這樣便于在實(shí)踐應(yīng)用中使用或遷移這些向量化表示。由于Item id及其attribute ID比較穩(wěn)定,所以聯(lián)合嵌入模型所學(xué)的item ID和attribute ID的Embedding通常是每周更新一次。

    用戶Embedding則使用簡單平均法來計(jì)算,不使用RNN結(jié)構(gòu)是因?yàn)楹旭R鮮生的場景用戶興趣變化非???,采用RNN結(jié)構(gòu)訓(xùn)練會明顯耗時,所以采用了「直接對近期交互的T個item ID平均的方式」來快速更新用戶的Embedding:

    其中, 的Embedding,因?yàn)橛脩襞d趣變化要更快,用戶的Embedding是要盡量實(shí)時更新的。

    最后羅列一下模型訓(xùn)練時的一些超參設(shè)置:

    • 所有參數(shù)先用 Xavier 方式進(jìn)行初始化,用Adam進(jìn)行參數(shù)更新;
    • 滑動窗口C = 4;
    • 負(fù)例樣本數(shù)S = 2;
    • 1個item ID和其余6個attribute ID的Embedding維度分別為[100, 100, 10,  20, 10, 10, 20];
    • α = 1.0,β = 0.1;
    • batch_size = 128 以及 epochs = 5 。
    • 「物品ID及其屬性ID」:物品item ID是電商領(lǐng)域的核心,每一個物品有對應(yīng)的屬性ID,比如產(chǎn)品product ID,店鋪store ID,品牌brand ID,品類category ID等,品類ID又可能分級產(chǎn)生多種品類ID,如分三級的話有一級品類、二級品類和三級品類。舉例,比如“iPhone X”手機(jī),在不同的店鋪賣,共用相同的product ID,但不同店鋪賣的iPhone X手機(jī),它們的item ID是不同的,當(dāng)然,其對應(yīng)的store ID也不同。又因?yàn)槭峭豢町a(chǎn)品,所以其對應(yīng)的brand ID,category ID也會基本一致。
    • 「用戶ID」:用戶身份可以通過ID進(jìn)行識別,這里的ID可以有多種形式,如cookie、設(shè)備IMEI、uuid、用戶昵稱等等。
  3. Embedding的遷移應(yīng)用

    • 「計(jì)算item相似度,做相似物品推薦」

      這是一個很常見的做法,就不多說了,我們提一下用Embedding做相似推薦,相比于用傳統(tǒng)item-based CF的優(yōu)勢。item-based CF方法需要明確的user-item關(guān)系,但很大比例的交互數(shù)據(jù)并沒有用戶識別信息。而skip-gram模型基于會話的,可以利用全量的數(shù)據(jù)。因此基于Embedding的方法比基于item-based的CF方法要更好一些,實(shí)驗(yàn)結(jié)果也說明其有更高的召回。

    • 「遷移到新的item」(Seen Items to Unseen Items)

      推薦系統(tǒng)中冷啟動是個很大的問題,新物品由于沒有交互信息,此時item-based CF方法也失效。一般可通過基于image或者text的輔助信息來進(jìn)行推薦。這里解決冷啟動的方法出發(fā)點(diǎn)是和新物品連接的attribute ID通常有歷史記錄(比如產(chǎn)品已經(jīng)在其他店鋪賣過或者該店鋪賣過其他產(chǎn)品,也就是說很多attribute ID已經(jīng)確定了),因此可以通過這些attribute ID的Embedding來預(yù)測得到新物品item ID的Embedding,這個時候我們就可以利用上面提到的公式了,最大化條件概率,即對數(shù)似然:

      因?yàn)閟igmoid函數(shù)是一個單調(diào)遞增函數(shù),因此有如下近似關(guān)系:

      最大化 就是使概率盡可能趨近于1,也就要求中的盡可能地大,即:

      最后這一步需要理解一下(不一定正確),如果我們把括號里面的向量表示成另一個向量e的話,當(dāng)兩個向量長度固定的時候,什么時候內(nèi)積取得最大值?是二者同向且共線的時候,那么應(yīng)該是線性關(guān)系,即使是真實(shí)的的n倍的話,在計(jì)算該物品與其他物品的相似度的時候,是不會產(chǎn)生影響的,因此可近似用來代替。

    • 「遷移到新的領(lǐng)域」

      盒馬鮮生作為一個新平臺,很大比例的用戶是新的,因此做個性化的推薦較為困難。文章提出了一種將淘寶(source domain)用戶的興趣遷移到盒馬(target domain)上的方法,其實(shí)這得益于盒馬鮮生有很大一部分用戶直接使用淘寶賬戶登錄,可以共享用戶信息。

      遷移過程如下所示:

      1)設(shè)分別表示淘寶和盒馬的用戶,找到可以遷移的用戶(即取交集)

      2)從淘寶獲得中用戶計(jì)算好的Embedding;

      3)基于嵌入向量的相似度,中的用戶使用k-means聚類為1000個組;

      4)對于每個組,選擇出 topN 個最熱門的盒馬item作為該組的候選集;

      5)對于盒馬上的一個新用戶,如果它在淘寶上有交互記錄,那么就取得他在淘寶上對應(yīng)的用戶向量,并計(jì)算該向量所屬的用戶組,然后將這個組所對應(yīng)的候選集推薦給新用戶;

      5)基于得到的類別,將經(jīng)過篩選和排序后的該類別的候選集中物品中推薦給用戶。

    • 「遷移到不同任務(wù)」

      另外一個遷移試驗(yàn)是將學(xué)習(xí)好的store ID對應(yīng)的Embedding用于預(yù)測店鋪銷量的任務(wù)。銷售預(yù)測在電商決策中非常重要,可以幫助管理人力分配,現(xiàn)金流,資源等,例如優(yōu)化商品配送。在論文中的任務(wù)是預(yù)測每個商店第二天每30分鐘的配送需求,這個預(yù)測結(jié)果可以指導(dǎo)配送人員數(shù)量的預(yù)先分配。

      論文中使用輸入來分析對比Embedding帶來的效果,即僅使用歷史數(shù)據(jù)、歷史數(shù)據(jù)加店鋪ID的One-Hot編碼以及歷史數(shù)據(jù)加Embedding,其中歷史數(shù)據(jù)用的是過去7天每三十分鐘的店鋪配送量。

總結(jié)

本文解讀了三篇干貨滿滿的Embedding應(yīng)用實(shí)踐的論文,總結(jié)他們在不同業(yè)務(wù)場景下一些優(yōu)秀的Embedding應(yīng)用實(shí)踐經(jīng)驗(yàn),論文很多地方都充滿了工程化實(shí)踐的亮點(diǎn)。

文章最后,我們簡單總結(jié)一下Embedding的應(yīng)用經(jīng)驗(yàn)

  1. 學(xué)習(xí)Embedding大部分使用基于負(fù)例采樣的Skip-gram模型。
  2. Embedding的訓(xùn)練方式通常有兩種,一種是預(yù)訓(xùn)練,是非端到端的方式,其中比較重要的過程是構(gòu)造序列,基于Session切分的序列構(gòu)造方法是一個非常好的方案。另外一種是初始化到DNN里,通過端到端的方式訓(xùn)練Embedding,可以看做是矩陣分解的泛化。
  3. 構(gòu)造序列訓(xùn)練Embedding的時候,要分析業(yè)務(wù)特點(diǎn),有些序列是發(fā)現(xiàn)item的共現(xiàn)關(guān)系,而有些則有一定的順序關(guān)系,設(shè)計(jì)窗口采樣樣本對的時候,一定要確定是否可以進(jìn)行數(shù)據(jù)穿越。
  4. Embedding可以通過拼接的方式來融合其他信息,共同作為DNN的輸入。
  5. Embedding可以通過算術(shù)平均、加權(quán)平均等方式來得到上一級或者是相關(guān)的實(shí)體的Embedding向量概括表示,用戶Embedding經(jīng)常通過這樣的方式來求得。
  6. Embedding非常便于計(jì)算相似度來衡量item間的相似性,也可以通過最近鄰搜索在Serving階段快速獲得召回候選集,另外,在搜索場景中也有類似應(yīng)用,可以有目的地訓(xùn)練Embedding,通過Query來找到更加隱性地關(guān)聯(lián)內(nèi)容。
  7. 除了正常的負(fù)例采樣,還可以根據(jù)場景業(yè)務(wù)對Embedding的目標(biāo)函數(shù)進(jìn)行優(yōu)化,比如添加在某些情景下的正例或負(fù)例,使學(xué)習(xí)好的Embedding在該情景下與目標(biāo)相互靠近或遠(yuǎn)離。
  8. Embedding的冷啟動是一個非常值得研究的問題,通常的做法有:對于端到端訓(xùn)練Embedding,可引入其他內(nèi)容信息,這樣在沒有行為的時候,也可以訓(xùn)練Embedding。另外一個常用方法是將一定數(shù)量相似物品的Embedding向量的平均值來作為新物品的Embedding。
  9. Embedding評估更多的是通過物品相似性來判斷,包括顯式的特性以及隱式特性,可以通過不同的角度來對比測試。
  10. 行為較少的稀疏數(shù)據(jù),可以通過規(guī)則映射聚合到上一級的類別ID,從而構(gòu)造出更多的共現(xiàn)關(guān)系來學(xué)習(xí)Embedding。
  11. Embedding也可以作為其他模型的特征,方式大概有以下幾種:直接輸入,拼接聚合,相似度值等。
  12. ID類特征的行為匯總可以挖掘出豐富的信息,若業(yè)務(wù)場景下的物品ID還有眾多屬性ID關(guān)聯(lián),則可以將二者融合訓(xùn)練,互相補(bǔ)充彼此的信息,這樣可以得到更好的效果。另外屬性ID的Embedding可以一定程度上解決物品Embedding的冷啟動問題。
  13. 預(yù)訓(xùn)練的Embedding,也可以遷移到其他場景實(shí)現(xiàn)其價(jià)值。

參考資料

[^1]: 黃昕等. 推薦系統(tǒng)與深度學(xué)習(xí). 清華大學(xué)出版社
[^2]: 王喆. YouTube深度學(xué)習(xí)推薦系統(tǒng)的十大工程問題. 知乎(https://zhuanlan.zhihu.com/p/52504407)
[^3]: 王喆. 揭開YouTube深度推薦系統(tǒng)模型Serving之謎. 知乎(https://zhuanlan.zhihu.com/p/61827629)
[^4]: Airbnb技術(shù)團(tuán)隊(duì). Airbnb愛彼迎房源排序中的嵌入(Embedding)技術(shù). 知乎(https://zhuanlan.zhihu.com/p/43295545)
[^5]: 楊鎰銘. 詳解Embeddings at Alibaba(KDD 2018). 知乎(https://zhuanlan.zhihu.com/p/56119617)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多