Embedding在网易严选搜索推荐中的应用
導(dǎo)讀:向量化在業(yè)界的運用越來越廣,近期也有許多文章分享過相關(guān)的主題。嚴(yán)選于18年下半年開始探索向量化在搜索推薦場景中的運用,從最開始基于商品召回用戶的任務(wù)到后續(xù)的搜索召回、搜索個性化排序、搜索底紋、搜索發(fā)現(xiàn)詞、搜索建議詞、跨類目推薦、推薦召回、多興趣召回、通用排序、端智能重排等等,我們不斷拓寬向量體系在嚴(yán)選的運用,在這過程中一點點迭代與沉淀。本文將從模型算法和落地運用等角度做簡要介紹,希望能給讀者一些啟發(fā)。
01
向量體系
上圖是對嚴(yán)選向量體系的一個概覽。引言中說了那么多運用場景,第一眼看會覺得有些場景之間跨度蠻大,但是仔細(xì)考慮一下我們會發(fā)現(xiàn),其實電商場景的大部分任務(wù)(包含以上所述的)都是在做對象之間的匹配,可能是商品和人的匹配,可能是檢索詞和商品的匹配,可能是用戶和檢索詞的匹配等等。
于是,擺在我們面前的問題就是如何把我們目前遇到的以及將來會遇到的對象進(jìn)行一個比較好的表征并刻畫對象之間的相似度,其本質(zhì)是學(xué)習(xí)出各個對象在同一個空間中距離的刻畫。
如果我們把各個對象都學(xué)習(xí)到同一個空間,那么這些對象之間的組合幾乎能覆蓋各種運用場景,例如我們擁有用戶(U)、商品(I)、檢索詞(Q) 的表征,僅僅是這三者的組合就可以有例如U2I、Q2I、I2Q、Q2Q、U2Q、I2I等等,我們進(jìn)一步擴(kuò)展類目、專題等等的表征之后能覆蓋的場景就更多了。
那么我們?nèi)绾稳ケ碚鞲鱾€對象呢?向量憑借著簡單的結(jié)構(gòu)、快速的相似性計算、強(qiáng)大的表征能力有著得天獨厚的優(yōu)勢。因此我們選擇向量作為對象的表征方式。
當(dāng)然有了向量表征僅僅是第一步,為了能讓其服務(wù)于各個場景,線上線下需要其他模塊的輔助配合,需要將具體的場景進(jìn)行抽象,同時過程中也離不開不斷的迭代優(yōu)化,需要考慮模型的效果、穩(wěn)定性、可擴(kuò)展性、以及線上性能等等。
由點及面,在有了向量基礎(chǔ)后,我們需要進(jìn)一步擴(kuò)展向量存儲、向量計算等能力,進(jìn)一步,由面到體,我們需要不斷去分析和抽象具體的業(yè)務(wù)場景,以此不斷鋪開向量體系在實際業(yè)務(wù)中的落地運用。
02
算法模型
最開始我們使用的是圖嵌入技術(shù)同時學(xué)習(xí)商品和用戶,例如LINE、Node2Vec等模型(節(jié)點做標(biāo)示進(jìn)行區(qū)分),后續(xù)也嘗試過使用YoutubeDNN的方式學(xué)習(xí)商品和用戶向量,最后為了兼顧模型的可擴(kuò)展性以及稀疏數(shù)據(jù)上表征的可靠性,我們選擇了兩步走的策略。
確認(rèn)商品是整個電商場景中的核心,單獨學(xué)習(xí)優(yōu)化商品向量表征?
其他對象都和商品有直接或者間接的關(guān)系(交互),通過專門的聚合模塊得到對象表征
實踐表明,這個兩步走的策略在我們的場景中要優(yōu)于之前嘗試的方案,接下來我會對這兩步做簡要的介紹。
1. 商品向量學(xué)習(xí)
商品向量的學(xué)習(xí)關(guān)鍵在于用戶行為數(shù)據(jù)的梳理以及模型的構(gòu)建(參考了Airbnb的模型,在其基礎(chǔ)上做了較多改進(jìn))。
商品是電商場景下用戶交互最核心的東西,大部分的用戶行為都圍繞著商品。大量的用戶行為中,天然的包含了用戶對商品的認(rèn)知,通過對這些認(rèn)知的提取,我們便能夠刻畫出用戶眼中商品的樣子,利用用戶眼中商品的樣子能更好得去引導(dǎo)用戶的行為。
我們有用戶和商品交互的各種數(shù)據(jù)以及商品自身的一些屬性。用戶的連續(xù)點擊行為能在商品之間構(gòu)建關(guān)聯(lián);用戶的購買行為能告訴我們用戶的探索路徑更容易收斂到哪些商品;用戶的相繼的購買行為能反應(yīng)商品之間的搭配購買信息;商品自身的屬性能在冷啟動時給我們提供很多額外信息等等。我們要做的就是融合行為和屬性學(xué)習(xí)出商品向量。
從上圖可以看到,我們訓(xùn)練數(shù)據(jù)的構(gòu)建其實可以等效看成構(gòu)建了商品之間有權(quán)有向的關(guān)系圖,同時增加了一些轉(zhuǎn)化導(dǎo)向的長連接。我們的模型訓(xùn)練有別于傳統(tǒng)的方式,對一個單一訓(xùn)練樣本 center(中心商品):contexts(臨近點擊):global(序列內(nèi)購買) ,我們希望 center 和 contexts(包含多個id) 以及 center 和 ?global 的距離越接近越好,所以在構(gòu)建損失函數(shù)的時候我們一次性算出 center 和 contexts(包含多個id) 的相似性以及 center 和 global 的相似性,然后再加上負(fù)采樣的約束。對于負(fù)采樣,我們采取的是在一個 batch 內(nèi)構(gòu)建負(fù)樣本的方式,這種方式簡單有效且能滿足按照樣本出現(xiàn)的頻率采樣,同時結(jié)合矩陣運算能加快訓(xùn)練數(shù)據(jù)。在獲取負(fù)樣本后我們進(jìn)一步構(gòu)建 pair-wise 的loss,這對模型效果能有一些提升。模型的細(xì)節(jié)可以參考下圖。
還有需要提及的一點是,為了學(xué)習(xí)到更好的商品向量表征,通常的方式是每日全量重新訓(xùn)練商品向量,但是這就引入了一些問題,例如每日的商品向量不在同一個空間中,相互之間的計算是沒有意義的,如果不小心拿隔日向量進(jìn)行了計算,會引入意外的結(jié)果。于是有人會采用增量訓(xùn)練的方式,每日只對新增的商品做推斷獲取它們的向量,但是這樣也會引入一些問題,比如商品之間的關(guān)系并不是穩(wěn)定不變的,只針對新商品做推斷的話會使得原有商品之間的關(guān)系無法依據(jù)新數(shù)據(jù)進(jìn)行調(diào)整。
針對這些問題我們提出了兩種解決方案,一種是在隔日的向量空間之間學(xué)習(xí)一個仿射變換,對當(dāng)日學(xué)得的向量做仿射變換,然后最小化相鄰兩天共現(xiàn)對象向量間的差異,這樣仿射變換后的向量就能變換到歷史空間中,同時包含一些新的結(jié)構(gòu)信息。還有一種方案類似預(yù)訓(xùn)練的方式,在第二日訓(xùn)練的時候拿前一日的向量做初始化,對于沒有出現(xiàn)過的對象做隨機(jī)初始化,然后降低學(xué)習(xí)率做微調(diào)學(xué)習(xí)。在我們的場景中第二種方案效果相對好一些,第一種也能取得不錯的效果。
此外從19年下半年開始我們也針對GNN相關(guān)的模型做了嘗試,例如graphSAGE、LightGCN、SR-GNN等,目前看來SR-GNN模型在我們的場景中效果還可以。
2. 擴(kuò)展向量學(xué)習(xí)
假設(shè)我們只有商品向量(I),我們能做的事相對比較局限,例如我們可以做基于I2I的各種任務(wù)、我們可以將商品向量作為預(yù)訓(xùn)練的向量提供給具體場景用于遷移學(xué)習(xí)。進(jìn)一步我們獲取了用戶向量(U)之后,我們便可以做U2I、I2U等召回場景,很多分享案例都止步于此,但是只要我們再加一個對象例如檢索詞向量(U),我們的運用場景就瞬間開闊了許多,進(jìn)一步我們還會有類目向量(C)、專題向量(T)等等。
隨著業(yè)務(wù)場景的鋪開,我們會遇到越來越多的對象匹配任務(wù)。我們可以針對每個場景分別學(xué)習(xí),例如針對商品和檢索詞構(gòu)建深度模型,學(xué)習(xí)他們的相似度量,例如針對檢索詞歷史進(jìn)行挖掘做檢索詞的相關(guān)推薦,例如針對用戶和商品的歷史交互建模做商品的召回,例如針對用戶和專題的交互歷史做專題召回等等,在這樣的模式下每新增一個場景我們就需要花費人力去開發(fā)和后期維護(hù),并且有的新增場景一開始并沒有訓(xùn)練數(shù)據(jù)給你使用。考慮到可擴(kuò)展性,我們可以將這些對象統(tǒng)一到一個增量向量產(chǎn)出框架中,抽象出一套聚合邏輯,產(chǎn)出同一向量空間中的向量。
結(jié)合落地實踐,我們的聚合模塊主要包含上圖所示的子模塊, 我們將新增對象叫做target,將基礎(chǔ)的商品叫做source。到實際場景中,對象和商品的交互可能存在時間上的先后,因此需要時間衰減模塊來處理時間因子;考慮到對象和商品的交互次數(shù)會有頻次上的差異,我們需要權(quán)重累計模塊來處理這個因素;考慮到對象和商品的交互會有一些噪音數(shù)據(jù)比如用戶的誤點擊行為、或者運營的錯誤配置等等,我們需要噪音過濾模塊來對噪音數(shù)據(jù)降權(quán);考慮到有的場景使用單向量表征更合適,我們需要對交互數(shù)據(jù)做自注意力機(jī)制的處理,來凸顯主要興趣,因此引入了注意力機(jī)制模塊;但是在有些場景,對象交互的商品往往是分布在空間中的多個區(qū)域(對用戶而言是多興趣表征,對檢索詞而言是多義詞表征),為此我們加入了聚類模塊(可以使用傳統(tǒng)的聚類算法,也可以考慮用復(fù)雜網(wǎng)絡(luò)中的社區(qū)檢測算法來進(jìn)行聚類,一般是在全局商品上進(jìn)行操作),來輸出對象的多向量表征。
憑借通用聚合框架,每次我們要新增對象的向量表征的時候,只需要處理一份target和source的關(guān)系表,同時每一個source都帶上target和它交互的相關(guān)附加信息,將這份關(guān)系數(shù)據(jù)輸入聚合框架便能產(chǎn)出和商品向量屬于同一向量空間的對象向量了,任意對象之間都可以相互計算,判斷相似情況。此外聚合模塊的邏輯經(jīng)過較小的改動也可以直接運用到線上對象的實時向量表征中。
03
相關(guān)技術(shù)
要建造大樓僅僅有基礎(chǔ)的磚塊肯定是不夠的,我們還需要鋼筋和水泥,需要腳手架等等。
有了基礎(chǔ)向量,隨之而來的就是大規(guī)模向量計算問題。初期各種任務(wù)主要集中在離線計算,所以我們自研了基于數(shù)據(jù)分塊、矩陣運算和并行計算的離線大規(guī)模相似度計算模塊,百億規(guī)模的精確計算在單機(jī)上基本能在幾分鐘內(nèi)完成,后期進(jìn)一步調(diào)研了一些最近鄰搜索算法后,使用了LSH、FAISS等方式來做大規(guī)模向量召回,并運用到線上實時召回中,感興趣的讀者可自行查閱相關(guān)資料。
我們的向量體系不僅僅運用在常見的召回任務(wù)中,在很多線上的基礎(chǔ)排序任務(wù)中也發(fā)揮了重要作用。我們開發(fā)了一套線上向量存取和實時向量異步聚合的服務(wù)。基于這個服務(wù),我們進(jìn)一步開發(fā)了通用排序服務(wù),例如基于用戶的實時向量對搜索結(jié)果做Top個性化重排、基于檢索詞對專題進(jìn)行排序、對眾多的活動頁商品做實時個性化排序等等。也正是基于這個服務(wù),我們在一定程度上將搜索和推薦的部分任務(wù)統(tǒng)一到了同一個框架中。
此外在電商場景中效果的提升離不開實時數(shù)據(jù)的輔助,因此在我們的體系中實時行為數(shù)據(jù)模塊也發(fā)揮了重要的作用。
04
落地分享
最后針對一些具體的場景展開介紹下,給讀者一個更為完整的閱讀體驗。
1. 搜索場景
先談一談搜索場景,搜索場景不僅僅限于商品的召回和排序,搜索的底紋、發(fā)現(xiàn)詞、建議詞等都能為搜索導(dǎo)流,而這些也都能利用統(tǒng)一向量體系得到較好的解決。
例如發(fā)現(xiàn)詞場景,我們需要基于用戶的行為對用戶推薦相關(guān)可能想搜的詞匯,傳統(tǒng)的方式通常基于query挖掘,基于用戶先前搜索的詞匯給用戶推薦更多相關(guān)的詞匯,但其實從用戶瀏覽過的商品也能推測出用戶想搜的商品,而這兩個角度很自然得可以通過向量體系中的Q2Q(基于用戶的搜索詞)和I2Q(基于用戶的瀏覽商品)來得到解決,進(jìn)一步也可以直接通過U2Q(基于用戶的各種行為)來獲取 。(Q2Q ?、I2Q 、U2Q的運用)
在此多說一句,為了更好的效果,通常需要結(jié)合離線數(shù)據(jù)和實時的數(shù)據(jù),例如用戶(U)就會有離線長期向量、離線短期向量、實時聚合向量(時間維度)、實時多興趣向量(空間維度)等區(qū)分,同時為了性能提升部分相似性計算也可以挪到離線完成,此外在類似推薦的場景使用非多興趣向量的時候多樣性往往擴(kuò)散得不夠,這時候就會需要I2I(可拆分出相似和相關(guān)結(jié)果)的幫忙。(時空表征的運用)
建議詞場景同理,基于Q2Q便可以,當(dāng)然實際運用時Q2Q中的第二個Q和第一個Q是不同的,第二個Q需要是質(zhì)量較好的Q,候選是需要考慮Q的句法結(jié)構(gòu),例如形容詞+名詞、名詞+名詞等,需要考慮Q被大眾搜索過的次數(shù)、需要考慮Q在搜索后能召回的數(shù)量、需要考慮Q在搜索后用戶點擊的數(shù)量等等,這些都可以離線處理好,在檢索詞向量庫的基礎(chǔ)上過濾出一份優(yōu)質(zhì)檢索詞向量庫。(Q2Q的運用)
此外基于檢索詞向量做商品的召回擴(kuò)充其實在一定程度上融合并強(qiáng)化了傳統(tǒng)的基于同義詞擴(kuò)充召回、基于SEO擴(kuò)充召回等等方案,因為檢索詞向量之間的相似性天然的刻畫了基于用戶行為的詞匯同義性,同時單商品上的SEO詞會通過商品關(guān)系網(wǎng)擴(kuò)充到其他商品上,那么基于檢索詞向量自然能召回那些即使沒有相應(yīng)SEO但是應(yīng)該有那些SEO的商品。(Q2I的運用)
基于向量體系對搜索排序的優(yōu)化也是水到渠成的,所有的優(yōu)化可以看作是基于預(yù)訓(xùn)練向量的排序運用,而且擴(kuò)展了數(shù)據(jù)的邊界,不僅僅局限于搜索場景,將全局的行為都融入到了搜索中。
搜索場景的重點是幫用戶快速找到他需要的商品,傳統(tǒng)的認(rèn)知是檢索詞包含了用戶所有的意圖,但是事實顯然不是如此,比如T恤一詞就相當(dāng)寬泛。這其實可以看作是貝葉斯推斷,假設(shè)我們不知道用戶任何其他信息,基于T恤一詞我們會有一個先驗估計,得出一個基礎(chǔ)排序。(檢索詞向量、商品向量的運用)
但是當(dāng)我們獲取更多是事實之后,我們的信息多了,那么必然可以去修正我們之前估計。例如我知道這個用戶前幾天看了一些女性鞋子,那么顯然將女性T恤排在更前面會是合理的選擇(離線長短期用戶向量、商品向量的運用),同時我們又知道這個用戶剛剛在其他頁面瀏覽了一些運動健身的器械,那么顯然將部分運動T恤提前會有不錯的收益,實際模型上線后提升了搜索排序的魯棒性、提高了搜索個性化的實時反饋能力、提升了搜素轉(zhuǎn)化率,取得了不錯的效果。(實時用戶向量、商品向量的運用)
下圖是對以上提到的部分場景的一個匯總。
當(dāng)我們進(jìn)一步引入類目向量和專題向量后,我們會發(fā)現(xiàn)運用的場景又進(jìn)一步擴(kuò)充了。在搜索場景中,通常會面臨類目預(yù)測的問題,當(dāng)我們擁有了檢索詞向量和類目向量之后我們能輕松地推斷出每個檢索詞的主類目,對于沒有出現(xiàn)過的長檢索詞,我們在計算前加入分詞模塊,通常便可推斷出他們的類目了。此外當(dāng)我們設(shè)定相似度的閾值之后,我們也可以為檢索詞作出多類目的預(yù)測,以滿足不同場景的需求。(Q2C的運用)
此外在搜索場景,為了充分利用搜索流量,我們還會做專題的召回以及和商品的混排,商品和專題屬于異構(gòu)數(shù)據(jù),通常我們需要構(gòu)建額外的模型來對專題作出排序。但是當(dāng)我們有了專題向量之后(此處提一下,專題向量其實可以有兩個,一個是基于關(guān)聯(lián)商品聚合的,還有一個是基于專題的文本進(jìn)行推斷得到,因為檢索詞本質(zhì)上是文字,專題的文本可以拆分后用檢索詞向量進(jìn)行描述),我們便可以方便的對專題進(jìn)行排序然后呈現(xiàn)。(Q2T的運用)
2. 推薦召回
接著我們再說一說向量體系在推薦召回中發(fā)揮的作用。這里面涉及到了用戶的多種向量表征,對于用戶的刻畫當(dāng)然是越精細(xì)越好,在我們的場景中我們學(xué)習(xí)了用戶長期向量、短期向量、實時向量、用戶多興趣向量、用戶群體向量等等,不同的向量有著不同的使用場景,對于展示位置比較少的推薦位,我們關(guān)注用戶的主要興趣,所以一般使用單興趣向量即可(我們模型訓(xùn)練得到的單興趣向量也可召回不同興趣面的商品,但是相似頭部的商品相對還是比較集中);在一些展示位較多的推薦位置例如猜你喜歡模塊,我們需要兼顧推薦的多樣性,所以一般會使用用戶多興趣向量召回商品(實時多興趣和離線多興趣);對于行為較少的新人,我們則會采用用戶群體向量去召回商品,實際中也取得了不錯的效果。(各種U2I的運用)
3. 購買預(yù)測
此外再提一個購買預(yù)測的場景,用戶日常的行為可能是目的明確地瀏覽、也可能是目的不明地閑逛,那么如何區(qū)分是哪種行為呢。其實很簡單,分析下用戶看過的商品之間是相似的還是沒什么關(guān)聯(lián)的就行,很顯然(I2I)能滿足我們的需求,我們可以為每個商品計算它與其它所有商品相似度得分的均值(記為S),如果每個商品最終得分都較大,那么用戶是在目的明確地瀏覽,如果每個商品的得分都較小那么用戶是在目的不明地閑逛,如果幾個商品得分較高,幾個商品得分較低,那么用戶是相對集中的看了幾個類似商品,同時無意地點了幾個其他商品。基于以上我們可以挑選出那些目的明確地瀏覽的用戶。至此讀者可能會想,然后把得分最大的商品挑出來就可以了,但是其實還沒有結(jié)束。截止到目前我們只使用了用戶當(dāng)日的行為,但是我們上手還有用戶以往的行為,這些信息不能浪費,它們會修正我們當(dāng)下作出的判斷。假設(shè)今日挑選出的商品中,有的商品用戶前幾日就很有興趣,那么今日他購買的概率必然比S得分相似的其他商品要更大,因此更好的判斷應(yīng)當(dāng)基于今日的S以及用戶前幾日興趣對商品們的得分(U2I) , 這個項目的上線明顯提升了用戶的轉(zhuǎn)化。(I2I和U2I的運用)
05
總結(jié)展望
向量體系有著很明顯的優(yōu)勢,它能讓我們迅速完成產(chǎn)品新功能的上線并取得不錯的效果,同時在有的場景中也能完勝一些老的復(fù)雜的方法,這恰恰也印證了奧卡姆剃刀原則。
隨著表征對象的增加以及對業(yè)務(wù)的進(jìn)一步理解,我們?nèi)詫⒁徊讲讲粩嗤貙捪蛄矿w系在業(yè)務(wù)中的落地,但是在實踐中我們也會發(fā)現(xiàn)它的局限性,這個局限性一方面來自于向量表征結(jié)構(gòu)自身,另一方面源于部分實際問題的復(fù)雜性需要新的表征方式來解決,所以我們將會進(jìn)一步探索其他的表征方式,以及新的技術(shù)方向。
總結(jié)
以上是生活随笔為你收集整理的Embedding在网易严选搜索推荐中的应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里强化学习重排实践
- 下一篇: 多样性算法在58部落的实践和思考