<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          GraphSAGE在商品推薦中的應(yīng)用

          共 3070字,需瀏覽 7分鐘

           ·

          2020-10-17 07:55

          如上圖所示,推薦系統(tǒng)一般由召回、粗排,精排,重排這幾部分組成,本文介紹的GraphSAGE,主要在召回環(huán)節(jié)應(yīng)用,GraphSAGE則是一種能夠利用頂點(diǎn)的屬性信息高效產(chǎn)生未知頂點(diǎn)embedding的一種歸納式(inductive)學(xué)習(xí)的框架,其核心思想是通過學(xué)習(xí)一個(gè)對鄰居頂點(diǎn)進(jìn)行聚合表示的函數(shù)來產(chǎn)生目標(biāo)頂點(diǎn)的embedding向量。


          1. 召回回顧

          標(biāo)準(zhǔn)召回結(jié)構(gòu)一般是多路召回,根據(jù)召回路是否有用戶個(gè)性化因素存在來劃分,可以分成兩大類:一類是無個(gè)性化因素的召回路,比如熱門商品或者熱門文章或者歷史點(diǎn)擊率高的物料的召回;另外一類是包含個(gè)性化因素的召回路,比如用戶興趣標(biāo)簽召回。



          圖神經(jīng)網(wǎng)絡(luò)的中圖節(jié)點(diǎn)可以帶有屬性信息,比如物品的Content信息,所以明顯這對于解決物品側(cè)的冷啟動(dòng)問題有幫助;而因?yàn)樗苍试S知識(shí)在圖中遠(yuǎn)距離進(jìn)行傳遞,所以比如對于用戶行為比較少的場景,可以形成知識(shí)傳遞和補(bǔ)充,這說明它也比較適合用于數(shù)據(jù)稀疏的推薦場景及冷啟動(dòng);同時(shí)圖還具備的一個(gè)很好的優(yōu)勢是:它比較便于把協(xié)同信息、用戶行為信息、內(nèi)容屬性信息等各種異質(zhì)信息在一個(gè)統(tǒng)一的框架里進(jìn)行融合,并統(tǒng)一表征為embedding的形式。最終獲得圖中節(jié)點(diǎn)的embedding,融合了各種異質(zhì)信息。所以它是特別適合用來做召回的,比如拿到圖網(wǎng)絡(luò)中用戶的embedding和物品embedding,可以直接用來做向量召回。


          早期的圖神經(jīng)網(wǎng)絡(luò)做推薦,因?yàn)樾枰中畔ⅲ杂?jì)算速度是個(gè)問題,往往圖規(guī)模都非常小,不具備實(shí)戰(zhàn)價(jià)值。而GraphSAGE則通過一些手段比如從臨近節(jié)點(diǎn)進(jìn)行采樣等減少計(jì)算規(guī)模,加快計(jì)算速度,拓展了圖計(jì)算的實(shí)用性。


          2. GraphSAGE原理介紹


          GraphSAGE 是Graph SAmple and aggreGatE的縮寫,其運(yùn)行流程如上圖所示,可以分為三個(gè)步驟

          1. 對圖中每個(gè)頂點(diǎn)鄰居頂點(diǎn)進(jìn)行采樣

          2. 根據(jù)聚合函數(shù)聚合鄰居頂點(diǎn)蘊(yùn)含的信息

          3. 得到圖中各頂點(diǎn)的向量表示供下游任務(wù)使用

          a. 采樣鄰居頂點(diǎn)

          出于對計(jì)算效率的考慮,對每個(gè)頂點(diǎn)采樣一定數(shù)量的鄰居頂點(diǎn)作為待聚合信息的頂點(diǎn)。設(shè)采樣數(shù)量為k,若頂點(diǎn)鄰居數(shù)少于k,則采用有放回的抽樣方法,直到采樣出k個(gè)頂點(diǎn)。若頂點(diǎn)鄰居數(shù)大于k,則采用無放回的抽樣。

          當(dāng)然,若不考慮計(jì)算效率,我們完全可以對每個(gè)頂點(diǎn)利用其所有的鄰居頂點(diǎn)進(jìn)行信息聚合,這樣是信息無損的。

          b. 生成向量的偽代碼

          這里K是網(wǎng)絡(luò)的層數(shù),也代表著每個(gè)頂點(diǎn)能夠聚合的鄰接點(diǎn)的跳數(shù),如K=2的時(shí)候每個(gè)頂點(diǎn)可以最多根據(jù)其2跳鄰接點(diǎn)的信息學(xué)習(xí)其自身的embedding表示。

          在每一層的循環(huán)k中,對每個(gè)頂點(diǎn)v,首先使用v的鄰接點(diǎn)的k-1層的embedding表示 來產(chǎn)生其鄰居頂點(diǎn)的第k層聚合表示 ,之后將 和頂點(diǎn)v的第k-1層表示 進(jìn)行拼接,經(jīng)過一個(gè)非線性變換產(chǎn)生頂點(diǎn)v的第k層embedding表示 。

          c. 聚合函數(shù)的選取

          由于在圖中頂點(diǎn)的鄰居是天然無序的,所以我們希望構(gòu)造出的聚合函數(shù)是對稱的(即改變輸入的順序,函數(shù)的輸出結(jié)果不變),同時(shí)具有較高的表達(dá)能力。

          • MEAN aggregator

          上式對應(yīng)于偽代碼中的第4-5行,直接產(chǎn)生頂點(diǎn)的向量表示,而不是鄰居頂點(diǎn)的向量表示。mean aggregator將目標(biāo)頂點(diǎn)和鄰居頂點(diǎn)的第k-1層向量拼接起來,然后對向量的每個(gè)維度進(jìn)行求均值的操作,將得到的結(jié)果做一次非線性變換產(chǎn)生目標(biāo)頂點(diǎn)的第k層表示向量。

          • Pooling aggregator

          Pooling aggregator 先對目標(biāo)頂點(diǎn)的鄰接點(diǎn)表示向量進(jìn)行一次非線性變換,之后進(jìn)行一次pooling操作(maxpooling or meanpooling),將得到結(jié)果與目標(biāo)頂點(diǎn)的表示向量拼接,最后再經(jīng)過一次非線性變換得到目標(biāo)頂點(diǎn)的第k層表示向量。

          • LSTM aggregator

          LSTM相比簡單的求平均操作具有更強(qiáng)的表達(dá)能力,然而由于LSTM函數(shù)不是關(guān)于輸入對稱的,所以在使用時(shí)需要對頂點(diǎn)的鄰居進(jìn)行一次亂序操作。

          d. 參數(shù)的學(xué)習(xí)

          在定義好聚合函數(shù)之后,接下來就是對函數(shù)中的參數(shù)進(jìn)行學(xué)習(xí)。文章分別介紹了無監(jiān)督學(xué)習(xí)和監(jiān)督學(xué)習(xí)兩種方式。

          • 無監(jiān)督學(xué)習(xí)形式

          基于圖的損失函數(shù)希望臨近的頂點(diǎn)具有相似的向量表示,同時(shí)讓分離的頂點(diǎn)的表示盡可能區(qū)分。目標(biāo)函數(shù)如下

          其中v是通過固定長度的隨機(jī)游走出現(xiàn)在u附近的頂點(diǎn), 是負(fù)采樣的概率分布, 是負(fù)樣本的數(shù)量。

          與DeepWalk不同的是,這里的頂點(diǎn)表示向量是通過聚合頂點(diǎn)的鄰接點(diǎn)特征產(chǎn)生的,而不是簡單的進(jìn)行一個(gè)embedding lookup操作得到。

          • 監(jiān)督學(xué)習(xí)形式

          監(jiān)督學(xué)習(xí)形式根據(jù)任務(wù)的不同直接設(shè)置目標(biāo)函數(shù)即可,如最常用的節(jié)點(diǎn)分類任務(wù)使用交叉熵?fù)p失函數(shù)。


          3. GraphSAGE實(shí)踐

          a. 圖構(gòu)建

          圖主要是利用用戶的歷史行為日志來構(gòu)建。商品item作為圖節(jié)點(diǎn),同一個(gè)session內(nèi)的連續(xù)行為建立邊,同時(shí)會(huì)考慮邊的類型,并將點(diǎn)擊次數(shù)作為邊權(quán)重。節(jié)點(diǎn)信息包括以下三類特征,id類特征、統(tǒng)計(jì)類特征和稠密(Dense)特征。id類特征包括商品id、類目id、商家id等,id類特征都會(huì)進(jìn)行hash。統(tǒng)計(jì)類特征包括30天和90天內(nèi)商品的ctr、cvr等,稠密特征包括商品的圖片向量和文本向量等。

          注意:

          1. 在構(gòu)建過程中考慮對超級節(jié)點(diǎn)進(jìn)行過濾,只保留top N最近的鄰居節(jié)點(diǎn)。如果噪聲比較多,可以限制在同一級類目下才建立邊。

          2. 稠密特征需進(jìn)行歸一化(x/||x||)


          b. 模型

          這里我們使用兩階聚合的方式,兩階比一階有比較大的增益,三階運(yùn)算開銷較大并且收益不大。聚合模式試過mean, mean-pool, max-pool,以及attention的方式(其實(shí)也就相當(dāng)于鄰居采樣版本的GAT),其中除了mean以外,后面幾種聚合方式在最后的離線效果上沒有看到特別大的差異。在鄰居采樣上,我們根據(jù)邊權(quán)重來做采樣,這樣行為次數(shù)多和行為類型權(quán)重大的鄰居將會(huì)被大概率采樣到。


          C. 無監(jiān)督學(xué)習(xí)樣本

          無監(jiān)督的樣本是選取一些目標(biāo)節(jié)點(diǎn),正樣本一般為1個(gè)且選取目標(biāo)節(jié)點(diǎn)的一階鄰居,負(fù)樣本一般為隨機(jī)選取N個(gè)。

          在無監(jiān)督學(xué)習(xí)中,負(fù)樣本的選取對最終模型的效果有非常重要的影響。如果負(fù)樣本的個(gè)數(shù)過少,對于模型有億級別的商品集來說,隨機(jī)選取的這幾十個(gè)負(fù)樣本與正樣本有可能差別非常大,模型不用充分學(xué)習(xí)就可分辨正負(fù)樣本。但是如果單純增大負(fù)樣本數(shù)量的話,又會(huì)增加運(yùn)算開銷,可以通過增加難學(xué)習(xí)樣本緩解該問題。比較好的方法是融合“容易”和“困難”樣本一起訓(xùn)練。


          4. 思考

          1. 用戶的興趣隨著時(shí)間變化會(huì)發(fā)生遷移,如何在最后的embedding不僅僅是把item的side information融合進(jìn)來,同時(shí)把時(shí)序的特征融入是一個(gè)。

          2. 整個(gè)模型構(gòu)造和訓(xùn)練迭代的時(shí)間較場,如何在鏈路上縮短時(shí)間

          3. mrr無法直接作為最后效果好壞的評價(jià)指標(biāo),因?yàn)榕c負(fù)樣本的選取直接相關(guān)。

          4. 選擇負(fù)樣本時(shí)進(jìn)行全局隨機(jī)樣本進(jìn)行取代,無需對每個(gè)目標(biāo)節(jié)點(diǎn)進(jìn)行選擇,從而降低計(jì)算量實(shí)現(xiàn)加速訓(xùn)練。


          推薦閱讀

          從面試官視角看算法面試如何考察
          Focal Loss | 解決樣本不平衡利器
          推薦系統(tǒng) | RecSys2019 新浪微博 FiBiNET
          推薦系統(tǒng) | KDD2019 阿里Res-embedding

          你點(diǎn)的每個(gè)好看,我都認(rèn)真當(dāng)成了喜歡
          瀏覽 169
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美性爱69网 | 日皮免费看 | 日本韩国一区二区三区在线观看 | 操大屄网| 免费无码性生活 |