搜索推荐炼丹笔记:评论是怎么影响推荐的?
原來有這個算法,讓點評體驗如此好!
作者:十方,公眾號:煉丹筆記十方周末出去找吃的,一定會打開點評,去選擇評分高的餐廳。雖然十方很少寫評價,但是十方在選擇餐廳的時候,一定會選擇評分高且評論基本都是正向的餐館。評論這么多,如何在評論中挖掘關鍵信息和餐館一起推薦呢?《Query-aware Tip Generation for Vertical Search》這篇論文就給出了一個很好的算法。
從上圖中,我們可以看到,用戶在點評里搜牛排,推薦的餐廳下面,有評論的精華。我們還發現,濃縮的評論,不僅簡明扼要的突出了餐廳的優勢,也和query強相關。要能做成這種效果,當然要想起無處不在的它:Attention!論文提到,每個餐廳評論的提煉,會幫助到用戶做決策,而且和用戶搜索內容也較為相關,而目前已有算法提煉評論的時候忽視了用戶的query。
這篇論文本質上是從評論中提煉出和query相關的小貼士,屬于文本生成。該文使用了transformer和RNN作為encoder和decoder,從評論中提取和query相關的內容。
問題定義:有個用戶評論序列 R = (r1, r2, ..., rN),N個詞,還有個小貼士序列,長度為M,T=(t1, t2, ..., tM),最后還有用戶的query序列 Q = (q1, q2, ..., qK),用Q和R生成T。
又到了回顧Transformer的時候(是不是有點看膩了):
雖然transformer的公式一直長這樣,可是用起來可是百花齊放。該文用這個transformer做了3個組件。
- 考慮評論的Query編碼器:用戶的query就是他需要的信息的精煉表達,而評論包含了很多細節信息表達了用戶的興趣。因此可以用transformer的self-atteion結構,挖掘query和評論之間的關系。我們知道正常transformer的Q,K,V都是同一份序列向量,只不過在進attention前做了線性變換,這篇論文做了個很小的改動。假若query的embeding是Emb(Q),評論的embedding是Emb(R),H = MultiHead(Emb(R), Emb(Q), Emb(Q)),用評論和query的attention對query進行聚合,最終輸出Hq (N * d)。
- 考慮Query的評論編碼器:這里用另一個transformer,Q,K,V都是Emb(R),會輸出Hr(N*d)。這里我們知道Hq參考了評論編碼了用戶的query,Hr則直接編碼了用戶的評論,我們通過concat這兩個embeding,過一個mlp,就可以把Hr和Hq編碼成Henc。Hemc = [Hq;Hr]W。Henc同樣會輸入到第三個transformer去編碼,挖掘更多信息,最后生成Hr'。
- 考慮Query的小貼士解碼器:用Hq和Hr' concat后做線性變換成最終的embeding,Hdec = [Hq,Hr']W,作為decoder的輸入。
整個基于transformer的模型框架圖如下:
說完了transformer,再來說基于RNN的另一種方法先看框架圖:
Query編碼器:用雙向LSTM,最終取最后一個向量,作為query的表達,hq( 2d),不贅述。
考慮Query的評論編碼器:同樣是Bi-LSTM,最終生成hr(N * 2d),然后用一個selective gate,通過hq去提取hr中有效的信息。
考慮Query的小貼士decoder:同樣是用LSTM,生成了st序列。為了使得生成的小貼士和query相關,所以引入query的編碼hq,在t步的時候,用下式通過attention方式生成最終emb:
最后訓練的時候,學習的是log loss:
先看下文本生成的效果:
tip確實和餐廳,評論,query都很相關。
比較各個模型,transformer的的效果都要好。
更多干貨,請關注微信公眾:煉丹筆記總結
以上是生活随笔為你收集整理的搜索推荐炼丹笔记:评论是怎么影响推荐的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Transformer Family
- 下一篇: Model Search:炼丹师最强危机