hi各位大佬好,我是菜鳥小明哥(其實我也是大佬,哈哈,都是大佬)。git
SRGNN已經初步完成實際應用,效果還好,有用的參考來這裏。聽說原paper大佬已經更新換代了GNN,也就是TAGNN,望文生義就是「他的GNN」,我啥時候發個「WOGNN」,也就是「個人GNN」,hehe。本文依舊粉絲可見,年末回饋粉絲福利。(不喜歡我翻譯的就別看,看過了又瞎BB,你是閒的蛋疼嗎?),代碼在此,paper在此。github
真正意義上的序列推薦,SRGNN算上一個,從序列到序列,無需考慮用戶的id,固然要記住是哪一個用戶的點擊序列,否則怎麼給他推(infer階段)。面試
For Video Recommendation in Deep learning QQ Group 277356808網絡
For Visual in deep learning QQ Group 629530787ide
別加那麼多,不必,另外,不接受這個網頁的私聊/私信!!!測試
1-拋出問題,提出解決方案優化
基於會話的推薦應用很廣,但他們的那些方法將會話壓縮爲一個固定的向量表達,而沒有考慮預測的目標item。這種固定的向量將會限制推薦模型的能力,也就是目標item的多樣性和用戶的興趣。所以提出目標註意力圖模型用於會話推薦。在TAGNN中,目標意識的注意力自適應激活不一樣用戶的興趣,關於多樣的目標item。學習到的興趣向量表達隨不一樣的目標item變化,極大第提高了模型的表現能力。此外,TAGNN利用gnn的能力在會話中捕獲豐富的item轉換(transition),試驗證明方法有效。
2-問題定義和推導會話圖
在會話推薦中,匿名的會話能夠表示爲一個時間順序的列表,定義做爲全部用戶點擊的item集合。對於給定會話s,會話推薦的目的就是預測下個行爲.模型產生一個全部item的機率有序列表,最後top-k用作推薦。
在模型中將每一個會話直接表示爲會話圖,其中的三個參數分別定義爲節點集合,邊集合,鄰接矩陣。在圖中每一個節點表明一個item,,每一個邊表明用戶訪問item的連續性,好比表示用戶先訪問前者,後訪問後者,【i可視爲時間上的概念,注意,做者用v表示item】。定義As爲兩個鄰接矩陣,的拼接,表示會話中item之間的兩個方向的關係,兩個鄰接矩陣分別表示出邊和入邊鏈接的權重。
概圖以下:
【再次註釋:會話就是用戶在一段時間內的點擊序列,如圖中就是兩個用戶的額點擊序列,會話中item之間的鏈接關係構成會話圖,通過gnn網絡及注意力(何謂注意力?此處明顯能夠望文生義獲得,邊鏈接越多的item重點關注,大衆看的東西可能和你看的東西是相同的,這種狀況會不會推出來的全是熱點部分(馬太/長尾啥的)?關因而否是熱點及小的debias方法,能夠查看我以前的博文:1如何評價這種偏;2debias即gnn中的作法)處理後再通過線性轉換到預測層softmax,其中Target item虛線表示正反向傳播,即預測結果與實際結果對比,是一個學習過程】
3-學習item Embedding
將每一個節點轉換到統一的embedding空間,最終獲得每一個item的d維度向量表示。這樣就能夠用item的embedding表示每一個會話s,gnn產生節點表示可以將圖拓撲作得很好,這樣模型可以擬合複雜item鏈接。paper採用ggnn(門圖網絡)學習節點表示。網絡更新規則:
其中t是訓練步,是矩陣As第i行,H和b分別是權重和偏置,是會話中節點向量的list,z和r分別是重置和更新門,是sigmoid函數,表示每一個元素的點乘。
對於每一個會話圖,ggnn模型在鄰節點之間傳遞信息,更新門和重置門決定什麼信息保留,什麼去掉。【說到這裏,一個常見的面試題來了,LSTM是啥玩意,GRU是啥子,和經典的RNN有啥子區別,和CNN啥區別,哪裏好了,哪裏很差?既是送分題,又是送命題】
4-構建目標意識embedding【直譯的,target目標,aware意識】
以前的工做捕獲用戶的興趣僅僅使用會話間item表達,在咱們模型中,一旦獲得每一個item的節點向量,經進行構建目標embedding,自適應的考慮歷史行爲中關注的目標item的相關性。定義目標item爲全部的候選item去預測。一般,用戶的行爲,推薦的item只能匹配用戶一部分的興趣【也就是EE的問題了,參考我以前的知乎回答】爲了擬合這個過程,設計一個新的目標註意力機制計算軟注意力分數(在會話中全部的item上關於每一個目標item)。
首先引入局部目標註意力模塊計算會話s中全部item的注意力分數。一個非線性轉換經過一個權重W參數話,W用於每一個節點-目標對。採用softmax對self-attention分數norm
最終對每一個會話s,用戶的興趣到目標item 能夠表示爲
得到的目標embedding表示用戶的興趣隨不一樣的目標item變化。
5- 生成會話embedding
在當前會話s中探索用戶的短長期喜愛,使用s中的節點表示。兩個與用戶目標embedding一塊兒的表達將會用於拼接產生更好的會話embedding。
局部embedding:用戶最終的行爲能夠視爲短時間喜愛——做爲一個局部embedding
全局embedding:表示用戶的長期喜愛——全局的embedding,經過聚合全部涉及到的節點向量獲得。採用另外一個軟注意力機制描述最終點擊的item和s中每一個涉及到的item之間的依賴關係:
會話embedding:經過線性轉換將目標embedding,局部embedding,全局embedding獲得會話的embedding,對於每一個目標item都會有不一樣的會話embedding
6-作推薦
獲得全部item的embedding和會話的embedding後,經過item embedding和會話embedding內積計算獲得每一個目標item的推薦分數。接下來,使用softmax獲得最終的輸出機率:
【WOC,y定義爲s中的下一個行爲,應該是多少個點擊序列就有多少個吧,否則咋給每一個用戶推薦啊,別告訴我,這個會話內的用戶推的都同樣。。。。。。。。。。】
交叉熵損失函數:
7-試驗設置
【今天看了優酷的新版本,WOC,居然有了推薦功能,看起來也不錯,我就點了幾個,彷佛很厲害啊,我就看了一個泰劇短片,而後我就搜了下這個名字,也有正片,這種推薦不錯,有沒有個性化我不知道,是在《精選》頁面的】
爲了公平對比,去掉了頻次小於5的item,去掉了item少於2的session。爲生成訓練集和測試集,最後一天/一週的會話做爲測試。對於一個會話,能夠生成一系列輸入和標籤,例如:一個會話,能夠分爲列表後面的是label
對比方法有不少,包括item-knn,BPR,MF,NARM等等,固然確定還有SRGNN
評價指標爲P和MRR topk20
超參數設置,embedding維度爲100,LR爲0.001,衰減因子爲0.1(每三次訓練),batch_size爲100(是否是有點小啊),L2懲罰項爲1e-5,優化器爲Adam
8-消融研究(Ablation Studies)
【這個破玩意單詞不要覺得多麼複雜,它就是個初中物理中學的控制變量法,我至今還記得物理老師說,小車從斜坡上下滑。。。。。。。,一切高大上都不復雜,除非提出這個研究的人本身都解釋不清楚,能將本身研究的東西言簡意賅的講出來,這纔是真正的懂了,作到這點,面試不會太差】
設計4個模型變體觀察模型效果,分別是隻有局部embedding——TAGNN-L,採用avg的全局embedding——TAGNN-Avg,注意力全局embedding——TAGNN-att,局部embedding+注意力全局embedding——TAGNN-L+att,下圖是效果:
很顯然,混合embedding策略是最佳的,也就是論文提出的方法。TAGNN-L僅僅用了最後一個item做爲會話的表達,說明最後的item對用戶最終的行爲有很大影響。Avg是最差的,這就說明用戶的行爲是多樣性的,不能平均。
敬請期待個人代碼解讀,拜拜。
回頭望,從未懂開口講愛你,
放下你,已經是再會無期。
但常伴心扉,柔情全屬你。