推荐系统CTR预估学习路线:深度模型
推薦系統CTR預估學習路線:從LR到FM/FFM探索二階特征的高效實現
推薦系統CTR預估學習路線:利用樹模型自動化特征工程
推薦系統CTR預估學習路線:深度模型
推薦系統CTR預估學習路線:引入注意力機制
作者:Eric陳健鋒 來源:煉丹筆記導語
在廣告、推薦系統CTR預估問題上,早期的完全規則方法被過渡到以LR為代表的機器學習方法,為了充分發揮組合特征的價值,在相當長一段時間里,業界熱衷于使用LR+人工特征工程。但人工組合特征成本高昂 ,在不同任務上也難以復用。2010年FM因子分解方法的出現解決了人工組合特征的困境,2014年Facebook提出的GBDT+LR也給出了一種利用樹模型特點構建組合特征的思路。不過隨著深度學習的崛起,2015年以后,借助非線性自動組合特征能力的深度模型,開始成為業內的主流。從經典DNN到結合淺層的Wide&Deep,用于CTR預估的深度模型在近些年間百花盛開,各種交叉特征建模方法層出不窮,Attention機制也從其他研究領域引入,幫助更好的適應業務,提升模型的解釋性。在這進化路線之下,核心問題離不開解決數據高維稀疏難題,自動化組合特征,模型可解釋。我們梳理了近些年CTR預估問題中有代表性的模型研究/應用成果,并對部分經典模型的實現原理進行詳細剖析,落成文字作為學習過程的記錄。
目錄
0. CTR預估模型進化路線 1. 從LR到FM/FFM:探索二階特征的高效實現1.1 LR與多項式模型1.2 FM模型1.3 FFM模型1.4 雙線性FFM模型 2. GBDT+LR:利用樹模型自動化特征工程 3. 深度模型:提升非線性擬合能力,自動高階交叉特征,end-to-end學習3.1 特征的嵌入向量表示3.2 經典DNN網絡框架3.3 DNN框架下的FNN、PNN與DeepCrossing模型3.4 Wide&Deep框架及其衍生模型3.4.1 Wide部分的改進3.4.2 Deep部分的改進3.4.3 引入新的子網絡 4. 引入注意力機制:提高模型自適應能力與可解釋性4.1 AFM模型4.2 AutoInt模型4.3 FiBiNET模型4.4 DIN模型4.5 DIEN模型 5. 總結(3)深度模型:提升非線性擬合能力,自動高階交叉特征與end-to-end學習
FM/FFM等變體模型,本質上是在解決高維稀疏數據的特征組合學習問題。解決問題的核心思路是,將高維空間轉變成低維,在低維空間內尋找特征的稠密表示(這一過程也被稱為“低維稠密化”),最后利用低維稠密向量的交互運算達到特征組合的目的。不過FM系列依然屬于線性模型,對于非線性數據的擬合還略顯不足,而GBDT+LR雖然是非線性建模,但它不適用于海量離線特征場景,也無法進行端到端學習。在實際業務中,我們通常面對的是非線性數據,同時離散id類特征也很重要,例如廣告id,商品id等。因此,深度模型是另一種更好的解決方案。對非線性數據的擬合能力,一般體現在對高階特征的建模能力上。深度模型通過全連接的多層感知器,能自動學習出特征之間有價值的高階交叉信息,對高階組合特征信號有很強的捕獲力,同時非常適合進行端到端建模。這一節將從深度模型中的特征表示開始講起,然后介紹業界經典的DNN網絡結構,最后談論寬深度模型的演變和顯式高階組合特征的設計原理。
3.1 特征的嵌入向量表示
自2013年Google Mikolov的開山之作word2vec算法[7]提出以來,嵌入向量被廣泛應用于自然語言處理領域用于詞的表示。word2vec將自然語言中的單詞從原來常規的one-hot表示變為低維稠密的詞向量分布式表示(distributed representation,或通俗理解為低維實數向量),不僅有效降低了輸入詞維度,并且有趣的是經過訓練后的詞向量,在低維空間中有令人驚奇的幾何關系,例如V國王≈V男人-V女人+V皇后。這種分布式表示也被稱作embedding(或嵌入向量),除了在自然語言處理上被大量使用,embedding也快速地在其他適用深度學習的領域或任務上(例如推薦系統、廣告點擊率預估等)流行,用于物品、用戶或相關特征的表示。
在神經網絡模型中,將特征映射成embedding的操作(這種操作也叫做embedding lookup)可以看作是對輸入層的原始one-hot(或多值特征對應的multi-hot)特征向量加上全連接線性變換,用數學符號可以表示成特征向量x和參數矩陣W的乘法運算。在點擊率預估等任務上,一般以特征field的embedding作為神經網絡的embedding層輸出,對于單值特征,field embedding等于特征的embedding;對于多值特征,field embedding等于多個特征embedding的求和結果。當然,求和是對多值特征embedding的sum pooling操作,在具體應用上,也可以使用mean/max/k-max pooling代替。
在實際應用中,特征embedding已經基本成為解決高維稀疏特征問題的通用操作。它和FM系列模型中的特征隱向量是相似的,本質都是特征的低維稠密表示,只是在不同的模型中,低維稠密特征向量有不同的應用形式。在FM模型中,取兩兩特征隱向量的點積作為交叉特征的權重;在深度模型中,將各特征field embedding拼接后輸入到全連接層。
3.2 經典DNN網絡框架
當前業界通用的深度神經網絡模型結構,大抵可以劃分為輸入層、embedding層、拼接層、若干全連接層和輸出層。輸入層和embedding層,上文已經有過介紹,輸入層是按特征field劃分的one-hot(或multi-hot)離散特征向量表示,而圖中的embedding層實際包含lookup和pooling兩個操作。拼接層是對embedding層輸出的m個長度分別為di(i=1,2,...,m)的稠密向量拼成一個長度為Σdi的稠密向量。拼接后的向量經過若干全連接層(或稱多層感知器MLP)后,最終在輸出層得到回歸值或分類概率值。經典DNN網絡結構具有天然的自動學習交叉特征信息的能力,然而從特征embedding向量拼接和前向全連接的計算特點來看,這種能力更多是限于對隱式元素級(bit-wise)的交叉表示建模上。而經驗上,特征間顯式的向量級交叉信息(vector-wise)具有更直接的描述特征關系的能力,有助于使模型獲得更強的交叉特征信號,降低模型學習難度。
3.3 DNN框架下的FNN、PNN與DeepCrossing模型
在經典DNN框架下,FNN、PNN以及DeepCrossing這三個是在推薦系統特征交叉建模方面比較引人關注的模型。FNN(Factorisation-machine supported Neural Networks)[8]和PNN(Product-based Neural Network)[9]是較早提出的引入了向量級交叉特征信息的模型,它們分別由Weinan Zhang和Yanru Qu于2016年提出。DeepCrossing模型[10]則是一種引入殘差網絡的改進DNN模型,由微軟在2016年提出。
FNN模型
FNN使用了預訓練的FM隱向量作為DNN第一層全連接層的輸入,即左圖中的z層,表示如下,
starti和endi分別是第i個field的首末特征索引,W0i是(K+1)×(endi?starti+1)維的參數矩陣,由FM模型預訓練得到。由于FM模型本身包含交叉特征隱向量點乘,因此這里認為FNN模型實際上引入了向量級交叉特征信息。對于上面的表達式,需要說明的是,FNN中的zi下標i表示第i個特征field,而FM公式中的下標i表示第i個特征。FNN原文符號表示時假設每個特征field是單值的,但對于多值特征field,FNN模型仍然適用。
不過,由于FNN的初始embedding是由FM模型預訓練得到的,這樣的embedding初始化質量要取決于FM模型,引入了一些外部依賴。另外,FNN的z層向量輸入到MLP全連接層,接受的是“加法”操作,而PNN論文作者認為這樣的“加法”操作可能不如向量“乘法”操作能進一步的建模不同特征filed之間的局部關系。
PNN模型
PNN在embedding層和MLP全連接隱層之間增加了一個乘積層(product layer),用于更直接的建模兩兩特征的交互作用關系。乘積層包含z向量和p向量兩部分,z向量由常數“1”向量和特征embedding相乘得到,因此z向量部分實際相當于特征embedding的直接拼接。p向量部分是PNN的核心,它是兩兩特征embedding進行“乘法”操作后的產物。論文作者給出了兩種“乘法”操作,分別是內積型乘法和外積型乘法,使用不同“乘法”得到的變體模型被分別命名為IPNN(Inner Product-based Neural Network)和OPNN(Outer Product-based Neural Network)。論文在兩個公開數據集上對不同的模型進行了對比,從實驗結果看,PNN模型,包括IPNN、OPNN、PNN*(將inner product和outer product進行拼接),效果都要優于FNN。另外也能看到,基于深度神經網絡的模型,效果普遍優于LR、FM線性模型,這說明非線性高階特征建模有很重要的提升作用。
注:CCPM(Convolutional Click Prediction Model)是基于卷積神經網絡的點擊率預測模型,CIKM 2015。
最后,PNN作者在論文中也提出了一些思考,他們認為乘積層實質上是一系列的加法和乘法操作,文中具體的內積型和外積型只是其中兩種實施方案,實際上還可以定義其他更通用或更復雜的乘積層,以更充分的挖掘特征間的交互關系。以邏輯電路為例做類比,“加法”操作類似于邏輯“OR”,乘法操作類似于邏輯“AND”,而對于web應用領域,這些經過人為定義的用戶、item類目型特征,相比像CV領域的圖片像素等原始特征,有更高抽象的概念和含義,因此他們認為在特征交互中引入乘法操作,與加法相輔相成,能更有效的建模這些高抽象特征。
DeepCrossing模型
DeepCrossing模型結構如上圖,Stacking層負責將各特征embedding拼接成一個向量,隨后使用級聯的多個殘差單元來代替傳統MLP。引入殘差單元是DeepCrossing的主要改進點,好處是可以使用更深的網絡層數,建模更高階的特征,增強模型的表達能力。
FNN、PNN和DeepCrossing模型都是在經典DND框架下演化而來的,它們都有效的提高了交叉特征的建模能力。不過,這些模型都偏重于挖掘高階交叉特征,對低階交叉特征信息利用不足,下文介紹的Wide&Deep框架及其系列的衍生模型,將彌補這種缺陷,同時兼顧高階和低階交叉特征。
3.4 Wide&Deep框架及其衍生模型
對推薦系統的排序模型而言,定性地說,我們通常追求模型的記憶能力和泛化能力。一方面我們希望模型能準確記憶不同特征組合對預測目標的影響,以便依照已有的用戶畫像以及用戶過去發生的行為使系統獲得精準推薦能力,準確觸達用戶興趣。另一方面,希望模型擁有一定的泛化能力,對未見過的或極少出現的特征組合,同樣給出良好的預測結果,提高推薦內容的多樣性。我們知道,線性模型以淺層形式直接學習稀疏組合特征權重,對訓練數據中出現過的組合特征具有很好的記憶能力。而深度模型,稀疏特征被映射成低維稠密embedding向量,隨后在深層全連接網絡中獲得充分交互,對具體的特征組合的“記憶”能力會減弱,但換來了更好的泛化效果。
基于這些想法,Google工程師在2016年提出了一種線性模型和深度模型的聯合學習框架——Wide&Deep模型[11],期望通過聯合訓練的方式,同時獲得線性模型(Wide)的記憶能力和深度模型(Deep)的泛化能力,提高模型的預測準確性和多樣性。Wide&Deep模型框架如上圖(中間)所示,模型的左側是輸入單元和輸出單元直接連接的線性模型,即方程形式是y=wx+b,輸入單元接收的是未經嵌入的高維稀疏交叉特征向量。模型的右側是一個DNN網絡,輸入層的稀疏特征先映射成低維稠密embedding,經過拼接后再饋入到隱層全連接網絡進行前向計算。最終模型以左側Wide部分輸出和右側Deep部分輸出的加權和,作為預測事件發生的概率函數的變量,概率表達式如下
式中,Φ(x)表示原始特征x的交叉組合,a(lf)是Deep部分最后一層的激活值。從表達式來看,如果去掉右側的Deep部分,模型將退化成一個LR模型。整體上,Wide&Deep模型并不復雜,不過其提出的創新點更多在于Wide模型和Deep模型的聯合訓練上。相比傳統的ensemble模型集成形式,即各模型獨立訓練并且每個模型通常需要足夠大的參數規模以確保模型的表達能力,Wide&Deep模型中,Wide部分只需考慮加入少量的強交叉特征,用很少的參數來彌補Deep模型記憶力的不足,實現更好的效果。
Wide&Deep模型在Google應用商店的App推薦業務上進行了實際測試,相比僅使用Wide模型,使用Wide&Deep模型App安裝率相對提升了3.9%,提升幅度比僅使用Deep模型也高1%。除了在Google內部業務獲得應用,Wide&Deep作為一種新的模型框架,也逐漸在業內流行。并且在原來基礎上,Wide部分和Deep部分被不斷優化改進,或者加入第三部分更精巧設計的子網絡,衍生出各種不同變體模型。
3.4.1 Wide部分的改進
衍生1:DeepFM模型
Wide&Deep模型中Wide部分和Deep部分的特征輸入是不同的,Wide部分的輸入還需要依賴人工特征工程來挑選有效特征,為了減少特征工程依賴,華為工程師在2017年提出了DeepFM模型[12]。DeepFM仍然由Wide部分和Deep部分構成,不過Wide部分使用了FM來構建,利用FM自動學習二階交叉特征的能力,代替需要人工交叉特征的LR。另外,Wide部分和Deep部分的底層輸入特征以及特征embedding向量完全共享,能實現端到端學習。
衍生2:Deep&Cross(DCN)模型
除了用FM代替LR以外,2017年發表的Deep&Cross Network(DCN)模型[13],提出了一種新的Cross網絡來建模Wide部分,可以用更高效的方式實現更高階的交叉。
根據DCN的模型結構圖,我們可以把DCN的輸出端點,即sigmoid節點的輸入拆解成三個部分:由cross網絡貢獻的gl(x0)(l為交叉網絡的層數),由deep網絡貢獻的deep(x0)和偏置項blogit。這里的deep(x0)和偏置項blogit不再說明,我們主要關心cross網絡gl(x0)是如何高效實現高階交叉的。下面我們先來看cross網絡的特征交叉是怎么實現的,然后再看為什么高效。
- 怎么實現?
在cross網絡中,一個cross layer的運算操作如下,
為了簡化計算,參考論文分析省略常數項,我們討論下面的交叉迭代公式
約定符號xij,wij的下標i表示第i層,上標j表示向量的元素索引,假設經過embedding拼接后的特征向量維度為3,在這種約定下,第一層的輸入向量和參數向量分別為x0=[x01, x02, x03],w0=[w01, w02, w03]。根據上式,不難發現,對于層數為l的cross網絡,可以實現的最高交叉階數為l+1。這里給出2階cross(l=1)和3階cross(l=2)的計算示例
從gl(x0)的展開式,可以更直觀的看到每一個交叉項x0ix0jx0k(通常的寫法是xixjxk,下文回歸這種寫法)最終都被分配到一個關于參數集{wmi}m=0~l、{wmj}m=0~l、{wmk}m=0~l乘積和的系數。以l=2時的交叉項x1x2x3為例,它的系數是
對于任意階數的情況,gl(x0)可以表示成如下形式
式中,x1,x2,...,xd表示d維的輸入特征向量,即x0=[x1, x2, ..., xd];α1,α2,...,αd分別是對應特征項的冪數,|α|=Σαi;cα(w0, ..., wl)是交叉項x1α1x2α2...xdαd的系數。DCN論文給出了系數表達式cα(w0, ..., wl)的詳細數學推導,本文不再深入討論。這里簡單以交叉項x1x2x3為例,系數式(4)可以形式化為
,其中Pα是特征索引(1, 2, 3)的全排列集合。
至此可見,cross網絡是以元素級bit-wise方式來建模高階交叉特征,并且不同于dnn網絡,cross網絡的高階交叉是顯式的。論文還指出,cross網絡實際上是n階多元多項式的一種高效實現。
- 為什么高效?
用Pn(x)表示n階多元多項式(multivariate polynomial),
式中,wα是交叉項的權重系數,對于d維特征,要實現最高n階的交叉,需要的參數空間為O(dn),是n次方階復雜度。
觀察可知,cross網絡gl(x0),式(5),和Pn(x),式(6),表達的是同樣的多項式,只是交叉項的系數不一樣。我們現在來看,cross網絡gl(x0)實現的n階多元多項式需要多大的參數規模呢?前文說了,實現n階需要的網絡層數為n-1,對于d維特征,cross網絡需要的參數數量為d×(n-1)×2,因此空間復雜度為O(d),只需要線性復雜度。
cross網絡參數復雜度的大幅降低,其實是得益于參數共享的思想,下面參考原著和FM作類比。在FM模型中,特征xi用隱向量vi來表示,交叉項xixj的權重由內積<vi, vj>計算。而cross網絡中,特征xi和參數集{wki}k=0~l關聯,交叉項xixj的權重由參數集
{wki}k=0~l和{wkj}k=0~l計算。這二者背后都是參數共享思想,減小參數規模,同時解決數據稀疏帶來的權重學習困難問題,使模型學習更有效。
最后,實際上cross網絡的時間和空間復雜度都是關于輸入維度d的線性量,相對deep部分并沒有增加額外的復雜度,因此DCN模型在整體效率上是可以比擬傳統DNN模型的。
3.4.2 Deep部分的改進
衍生3:NFM/AFM模型
對Deep部分的改進,Neural Factorization Machines(NFM)模型[14]是一個比較有效的方案,由Xiangnan He等人于2017年提出。NFM作者認為,經典DNN框架中的concat層只是把各特征embedding拼接成一個向量,并沒有在底層利用好特征交互信息,只能依賴后面的MLP全連接層來建模特征之間的相互關系。但由于深度網絡有梯度消失、梯度爆炸和過擬合等問題,DNN并不是很好優化,所以最終會導致模型效果有損失。所以NFM的主要改進點是,引入Bi-Interaction Pooling層,替代經典DNN的concat層,在底層增加足夠的特征交互信息后,再饋入到MLP網絡做進一步的高階非線性建模。
NFM改進后的Deep部分如上圖所示,Bi-Interaction Pooling算子定義如下
其中Vx = {x1v1, ..., xnvn}表示特征的embedding集合,符號“⊙”表示向量的哈達瑪積,即[a1, a2, a3]⊙[b1, b2, b3] = [a1b1, a2b2, a3b3]。Bi-Interaction Pooling將兩兩特征embedding做哈達瑪積交互后,再通過求和的方式壓縮成一個向量。經過化簡后,上式的計算復雜度可以從O(kn2)優化到O(kn):
加入Wide線性部分后,NFM模型的完整表達式為
介紹完NFM,我們想在此處先簡單地把另一個也是對Deep部分進行改進的模型——AFM模型(Attentional Factorization Machines)[15]也引出場。這兩個模型出自同一個團隊,AFM模型名字帶有“Attentional”,給人的直覺AFM應該是在NFM的基礎上改進的,但實際上這兩個模型是各有所長的。不同于NFM將Bi-Interaction Pooling兩兩向量交互后直接(等權)求和壓縮成一個向量,AFM引入了attention權重因子來對交互后的向量進行加權求和壓縮,增強了二階交叉的表達能力。不過,壓縮后的向量不再經過MLP,而是直接一層full connection輸出到prediction score,這就將模型限制在只表達二階交叉特征,缺少更高階信息的建模。盡管如此,AFM對特征交互的“attention-based”pooling思路仍然非常有借鑒意義和應用價值,作為基于注意力機制模型的一種,我們將在下一部分“2.3 引入注意力機制:提高模型自適應能力與可解釋性”,再展開對AFM的介紹。
3.4.3 引入新的子網絡
衍生4:xDeepFM模型
xDeepFM模型[16],全稱eXtreme Deep Factorization Machine,是微軟研究人員在Deep&Cross(DCN)模型基礎上進行研究和改進后提出的。xDeepFM的主要創新點是,在傳統Wide部分和Deep部分之外,提出了一種新的特征交叉子網絡,Compressed Interaction Network(CIN),用于顯式地以向量級vector-wise方式建模高階交叉特征。上圖是xDeepFM的模型網絡結構,模型輸出節點的數學表達式為
式中,a為原始離散特征向量(raw feature),xdnnk、p+分別是DNN和CIN模塊的輸出。不難得知,由于包含了線性模塊(Wide)、DNN模塊(Deep)和CIN模塊,xDeepFM模型是同時具備顯式和隱式特征交叉的建模能力的。不過這里同樣不再介紹線性和DNN模塊,下文主要討論子網絡CIN的由來、實現方式和特點,以及論文的實驗效果。
xDeepFM論文認為,Deep&Cross中的cross網絡存在兩點不足,1)cross網絡是限定在一種特殊形式下實現高階交叉特征的,即cross網絡中每一層的輸出都是x0的標量乘積,αix0;2)cross網絡是以bit-wise形式交叉的,即便同一個field embedding向量下的元素也會相互影響。
關于第1點,論文給出了證明過程
注:雖然cross網絡的輸出是x0的標量乘積,但并不意味輸出是x0的線性量,因為標量系數αi是與x0相關的,它并非僅由模型自身的參數來定義。針對以上兩個缺點,xDeepFM提出了新的解決方案,CIN。
論文給出的CIN實現原理圖如上,a和b是CIN第k層的計算過程,數學形式是
式中,1≤h≤Hk,Wk,h是一個Hk-1×m的參數矩陣,符號“?”表示向量的哈達瑪積,即[a1, a2, a3] ? [b1, b2, b3] = [a1b1, a2b2, a3b3]。每一層Xk都由前一層Xk-1和X0進行vector-wise的交互得到,如果用T表示網絡深度,那么CIN最高可以實現T+1階特征交叉。圖c是CIN網絡的整體架構,網絡的最終輸出p+,是每層的Xk沿embedding維度sum pooling后再拼接的向量,維度是所有隱層的feature map個數之和,即Σi=1~THi。
其中
初次讀xDeepFM論文,我就有一個困惑,為什么說CIN特征交叉建模是vector-wise的呢?不知道大家是否會有同樣的疑惑,個人認為論文里的圖片和公式,并沒有很直觀的體現出vector-wise。所以,如果我們把圖a和b所示的張量在三維空間里旋轉一下,用另一種角度來看,或許能幫助更直觀的理解。
上面這張圖我們也把CIN第k層的計算拆解成兩步,第一步是對X0和Xk-1中的兩兩embedding向量做哈達瑪積,得到一個中間張量Zk,這一步實際就是對兩兩特征做交互,所以稱為interaction。第二步是使用Hk個截面(類似CNN中的“kernel”),每個截面對中間張量Zk從上往下掃,每掃一層計算該層所有元素的加權和,一個截面掃完D層得到Xk的一個embedding向量(類似CNN中的“feature map”),Hk個截面掃完得到Hk個embedding向量。這一步實際是用kernel將中間張量壓縮成一個embedding向量,所以我們稱此過程為compression。這也是整個子網絡被命名為Compressed Interaction Network(CIN)的原因。從這兩步計算過程可以看到,特征交互是在vector-wise級別上進行的(哈達瑪積),盡管中間經過壓縮,每一個隱層仍然保留著embedding vector的形式,所以說CIN實現的是vector-wise的特征交叉。
注:假設CIN每個隱層的feature map數量都為H,特征field數量為m,那么深度為T層的CIN,空間復雜度為O(mTH2),由于m和H通常不會很大,所以認為這種復雜度是可接受的(對應的DNN模塊空間復雜度為O(mDH+TH2))。而CIN的時間復雜度為O(mH2DT),對應的DNN模塊時間復雜度為O(mHD+H2T),相比之下,時間復雜度上CIN稍有不利。最后,給出論文中的實驗效果:
注:CIN每個隱層的feature map數量設置為Criteo 200,Dianping/Bing News 100。在Criteo,Dianping,Bing News三個數據集上,單獨交叉模塊CIN的效果要一致優于FM、DNN、CrossNet(DCN中的Cross模塊),結合線性和DNN模塊后的xDeepFM效果要顯著優于前文介紹的其他模型。
干貨過多,一次看完很難全部吸收,“引入注意力機制:提高模型自適應能力與可解釋性”這一節將于下篇分享,請持續關注煉丹筆記,這里有最前沿最優質最全最專業的學習資料,我們成立該公眾號的初衷,就是讓大家平等快速的獲取想要的知識,希望大家都能通過該公眾號提升自己。
更多干貨,請關注微信公眾號:煉丹筆記算法大佬看了流淚,為什么這么好的CTR預估總結之前沒分享(上篇)
算法大佬看了流淚,為什么這么好的CTR預估總結之前沒分享(下篇)
總結
以上是生活随笔為你收集整理的推荐系统CTR预估学习路线:深度模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搜索推荐炼丹笔记:评论是怎么影响推荐的?
- 下一篇: 推荐系统CTR预估学习路线:引入注意力机