DL應用:query生成和query推薦
摘要: 在機器翻譯、圖片描述、語義蘊涵、語音識別和文本摘要中,序列到序列的問題已經有太多大牛研究了,也取得了很多突破。谷歌的Attention is all you need[1],捨棄並超越了主流的rnn與cnn序列建模框架,刷出了新的state of the art,這種大膽創新的精神值得我們學習。
原文:http://click.aliyun.com/m/42450/
1 引言
在機器翻譯、圖片描述、語義蘊涵、語音識別和文本摘要中,序列到序列的問題已經有太多大牛研究了,也取得了很多突破。谷歌的Attention is all you need[1],捨棄並超越了主流的rnn與cnn序列建模框架,刷出了新的state of the art,這種大膽創新的精神值得我們學習。後面相信會有更多的attention變體甚至和rnn/cnn結合的電路圖湧現,當然我們更期待的不是這些,我們更嚮往大道至簡。我們在follow的同時,也期望自己的每一個新的想法,新的嘗試能夠匯入深度學習的大浪,為人類的未來貢獻自己的一份力量。
在電子商務搜索中,query作為表達用戶意圖的載體起到了非常重要的作用。如何根據用戶的歷史行為序列給用戶推薦一個query,吸引用戶發生搜索以及後續的成交是非常有意義的,比如淘寶的底紋推薦。如下圖是一個在iphone上的引導圖,歡迎大家多多使用底紋。
2 技術方案
在技術方案這部分,我們首先介紹一下整體思路,然後重點討論一下序列embedding.
2.1 整體思路
總的來說,思路主要有兩種:
1)編碼解碼直接生成query;
2)把user向量和query向量映射到同樣的向量空間里,然後通過向量相似召回來獲取query,候選query是日誌中已經存在的。
下面分別介紹下:
2.1.1 Sequence to sequence[2]
大體來說,這種思路一般是首先把source sequence通過一個encoder map成一個vector,然後用這個vector作為context向量去通過另一個decoder進行翻譯得出output.後面有很多同行在這個基本思路上做了很多改進,我們嘗試最基本的一種,沒有把網路搞的很複雜。如下圖所示,首先獲取用戶的行為序列,然後 encode成user-embedding向量,然後這個向量作為context向量來解碼query,每一步解碼一個詞/字。在預測的階段一般採取beam search搜索策略來獲取最可能的topK個候選query的詞序列。
2.1.2 向量召回
我們訓練一個網路,讓user-embedding和query-embedding映射到同一個向量空間里。user-embedding同上,query-embedding一般採取lstm或者cnn或者dnn都行。如下圖所示:query word 表示為w1,w2,...wm.
在預測階段,採取向量相似召回的策略,首先我們對候選query聚類成K個簇,然後採用二級查找的方式(首先查找topM相似的簇,然後再遍歷topM相似簇中的query),獲取每一個用戶向量的topk相似query作為推薦結果。
2.2 序列embedding
2.2.1 Rnn-embedding
第一種是RNN,解決序列問題的標配。
我們假設一個用戶的一個時間序列向量是u1,u2...ut,其中下標i代表第i個時間步。每一個時間步的特徵輸入主要三類:
1) 文本特徵:用戶點擊的標題/搜索的query;
2)行為特徵:停留時間,是否點擊/加購/收藏/購買等;
3)用戶tag:性別,年齡,購買力等。
如下圖所示,我們首先把每一個時間步對應的特徵分別向量化然後concat然後再過一層全連輸入到lstm中,一般採用lstm最後一步的輸出作為decoder的context向量,當然還有更有效的方式,比如再加上attention機制。
2.2.2 WRT-embedding[3]
先簡單說一下背景,神經網路在word embedding上的成功激起了大夥研究長文本embedding的熱情,比如句子和段落都可以embedding,lstm似乎等到了最美的春天。但是,令人驚訝的是,Wieting等人[4]表示,這些複雜的方法被一些超級簡單的方法超越了,這些簡單的方法包括對word embedding進行輕度重新訓練和基本的邏輯回歸。
我們是從A SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SENTENCE EMBEDDINGS[3]中得到啟發,可以用一種簡單有效的方法來獲取文本向量,作者在論文中證明:在維基百科上的非標籤語料庫中使用流行的方法訓練word embedding,將句子用詞向量加權平均,然後使用PCA/SVD修改一下 。 這種權重在文本相似性任務中將效果提高了約10%至30%,並且擊敗了複雜的監督方法,包括RNN和LSTM, 它甚至可以改善Wieting等人[4]的embeddings.
作者稱他的演算法是WR,由於我們在權重裡面加入了時間因素,所以暫且稱之為WRT吧。演算法非常簡潔,作者也對他的演算法做出了有力的理論解釋。主要分2步:
W:就是詞向量加權平均的時候的權重。
R: 使用PCA/SVD remove掉向量中的common部分。
下面是演算法流程圖:
上面的vw前面的係數a/a+p(w)代表詞w的權重,我們在使用的時候會加上時間衰減因數,即f(tw)*a/a+p(w),其中f(tw)是時間衰減因子。然後對應的|s|我們也根據f(tw)進行了scale.
在上面的第一種方法中我們定義時間衰減為簡單的單調函數,但是行為的時間不一定越遠越不重要,比如每個類目的復購周期都是不一樣的,所以我們想用下面的方法學習一下時間函數,這裡把時間函數定義成多項式函數,因為多項式可以擬合任何函數。和上面直接在詞維度上不一樣的是,這裡我們假設每一個時間步的ut已經按照WR方法embedding好了。
我們把時間函數定義為下式,裡面的ti表示第i時間步距離當前的時間,時間的參數是m維:
為了求解a,我們配置一個網路求解,首先我們把u進行一個t變換
然後再配置一個fake-conv來求取a(圖中的fake-conv雖然用卷積實現,但是其實和卷積關係不大,就是為了方便求取a參數。)
3. 實驗
3.1 Sequence to sequence
我們在底紋數據集上進行了嘗試,訓練樣本的格式是<使用底紋query之前的行為序列,使用底紋的query>.
在encode部分我們分別嘗試了DNN和lstm,結果顯示效果差別不大,用bleu指標對比:dnn_encoder:0.003,lstm_encoder:0.0025,dnn還稍微好一些。
在bleu的基礎上,我們另外定義了召回率指標:用生成的topN和真實的topM比較,假設完全匹配topM中的K個(可帶權重),定義召回率為(topN,topM,K/topM);如果召回率高,代表學到了真實數據的分布,同時新生成query質量也比較好,在底紋測試集上的召回率是(10,5,0.69).
由於底紋的log在一些中長尾類目上比較少,後面我們還嘗試了先用全量點擊訓練,再用底紋數據fine tune,結果顯示收斂更快,在中長尾類目上泛化表現更好:
3.2 向量召回
3.2.1 Rnn-embedding
我們在搜索數據集上進行了嘗試,訓練樣本的格式是<用戶搜索query前的行為序列,搜索query>,根據搜索query之後的表現區分正例和負例。網路裡面的標題是用doc2vec預測好的,沒有更新標題對應的詞向量,query向量用其點擊的商品集合用doc2vec向量化。
最開始我們用女裝類目數據訓練,在預測集合上的cosin平均相似度是0.951,感覺還是非常高的。
後面擴展到全類目數據訓練,抽查case發現預測的有些有些天馬星空了。分析原因可能是用的當前搜索的query可能和前面的序列之間的意圖跳躍比較大。後面做了2個改動:1)目標由"query"更改為"query點擊的第一個寶貝"; 2)切分點由"30分鐘"更改為"query預測的二檔類目沒有重合",然後再看,效果就好了不少。
3.2.2 WRT-embedding
這次我們依照比較直接的方式在底紋上進行嘗試,值得一提的是,這個方法性能問題可以忽略不計。
我們按照類目維度給每個user根據其行為序列(只考慮點過的標題和搜索query的文本)向量化,然後通過向量相似召回top10個最相似的query作為推薦,bts結果顯示相關業務指標有比較大的提升。
目前僅僅是考慮了內容相似度,後續如果上面加上一層gbdt融合其他特徵排序後再推薦,預計還有很大潛力。
4 總結和展望
query生成/推薦基本是Sequence to sequence和向量相似召回兩個思路,主流的RNN/CNN方法當時還是因為性能問題在應用上有點阻礙,所以我們嘗試了一些在效果上不輸於lstm但是非常簡潔的方法,這些方法在性能上也非常給力,便於快速嘗試獲取結果。比較遺憾的是,user向量我們目前主要關注了文本內容特徵,而用戶的行為特徵和用戶tag特徵並沒有進行應用,也是後續需要改進的方向。
query生成我們後續可能會更關注於生成一些風格輕盈的自然語言,比如「微微一胖很傾城」,「露出一點小性感」,希望能讓大家在購物的時候感受到一種美好的心情,順便也能買到心儀的寶貝。
除了query生成這個主題,其實更重要的是怎麼樣利用好已有的其他候選,所以後續我們計劃把學習到user序列向量和query向量的相似度作為特徵參與query推薦的排序,這個預計會有更大的收益。
參考文獻
[1] A Vaswani, N Shazeer, N Parmar, J Uszkoreit, L Jones ,... Attention Is All You Need
[2] I Sutskever, O Vinyals, QV Le. Sequence to sequence learning with neural networks
[3] Sanjeev Arora, Yingyu Liang, Tengyu Ma. A Simple but Tough-to-Beat Baseline for Sentence Embeddings
[4] John Wieting, Mohit Bansal, Kevin Gimpel, and Karen Livescu. Towards universal paraphrastic sentence embeddings.
更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎
推薦閱讀:
※主方法求解遞歸式
※旋轉數組的最小數字
※重建二叉樹
※演算法:1.two sum
※精選 TOP45 值得學習的Python項目