之前的博客中已經介紹了Ranking Relevance的一些基本情況(Click Behavior,和Text Match):http://www.cnblogs.com/bentuwuying/p/6714064.html,這里就不再贅述了。針對之前在計算Ranking Relevance的過程中遇到的問題:Click Behavior對長尾的或者根本沒出現過的query-doc pair無效,Term Match無法解決近義詞和語義隔離問題,Topic Match解釋性差的問題。本篇博客介紹的paper中的這種計算Ranking Relevance的方法能夠有效地解決上述的問題:結合了Click Behavior和Text Match兩方面的信息,並利用點擊日志構成二分圖,根據二分圖進行傳導,學習到query和doc各自的向量表達式,最終收斂之后進行query-doc relevance的計算。
該方法的特點有:
1. 利用二分圖的傳導,從相似的query(或者doc)中提取term來豐富當前query(或者doc)的term表達。
2. 在二分圖的傳導過程中,利用query-doc pair的點擊信息,來平滑query和doc的vector中各個維度的term weight大小。
解決之前Click Behavior中的Sparsity和Noisy的問題。
該paper的三方面貢獻在於:
1. 可以使query
和doc
在同一空間上生成詞向量考慮
2. 對於未曾有點擊行為的query
和doc
也可以進行該空間詞向量的估計
3. 最終計算的效率較高,可以用於商業的搜索引擎
1. 已有點擊行為的query-doc relevance計算
用Doc表示文檔集合,用Query表示query集合,則點擊二分圖的節點集合為Doc U Query。對於一個query-doc pair:qi和dj,如果它們之間有至少一次點擊,則二分圖中這兩個節點之間會有一條邊相連接,且權重為該query-doc pair的點擊次數。點擊二分圖的示例如下圖所示。現在假設語料的長度為V,則Query構成的矩陣為|Query|×V,矩陣的每一行代表了一個query的vector表示;以及Doc構成的矩陣為|Doc|×V,矩陣的每一行代表了一個doc的vector表示。那么現在的任務就是如何計算這兩個矩陣。
要知道,這個方法的目的是要將所有的query和doc表示成一個公共向量空間上的向量(可以是query的term space,也可以是doc的term space)。它利用二分圖的某一邊的節點上的conetnt information 初始化該邊的節點的vector,然后利用點擊信息進行傳導,這樣就可以在傳導過程中,將具有代表性的term的weight提高,將不具有代表性的term的weight降下去。
首先,我們需要初始化二分圖中某一邊的節點的向量表示,例如,我們選擇query這一邊的節點,將所有的query進行分詞,構成詞典,便得到query space上各個query的向量表示了。每一個維度代表了一個term,每個維度(term)可以看成是一個feature,這便是term級別的表示,過去的研究表明,term級別的表示方法解釋性較強,便於驗證和debug(雖然同時會遇到無法解決近義詞和語義隔離問題,不過我們這里介紹的方法可以對這種問題進行解決)。通過讓query和doc都使用公共向量空間的表示方式(這里是query space),我們可以消除query與doc的語義隔離問題。
下一步便是query & doc的向量在二分圖上的傳導了。基本思路是利用query vector結合起來表示在query下有點擊的doc的vector,反之亦然。如果某些query之間擁有較多的共同點擊的doc,則這些query是相似的query,它們的vector representation應當較為相似,反之doc之間亦然。
當然,我們這樣計算的前提是,click information可以很好地表示query-doc的relevance,並且relevance的大小與click number的多少是正相關的。
具體的向量傳導步驟如下:
1. 我們假設從query side開始。初始化的時候,每個query都用它自身的term表示成一個vector(利用one-hot方式),每個term的weight與term出現的次數成正比,最后將每個query的vector進行歸一化處理。初始化矩陣(包含所有query的vector)可以用表示。
2. 在第n次傳導中,我們先利用二分圖中有邊連接的各個query的vector加權求和,來計算doc的vector矩陣,這個權重即為query-doc的click number,如下式:
3. 下一步就是反過來,利用二分圖中有邊連接的各個doc的vector加權求和,來更新query的vector矩陣:
4. 按2,3中的步驟不斷進行迭代,直至收斂,其產出的query和doc的向量就都在一個空間內,可以計算query-doc relevance,同時還可以計算相似度/相關性。
這里以上的圖為例再說一下計算過程:
1. 初始化query的向量:
2. 根據上一次query的迭代信息以及與doc的點擊信息來更新doc的向量:
3. 然后就是不斷的迭代就行了,這樣已經很清晰了
了解過一些信息檢索或者鏈接分析的朋友可能會馬上想到,這好像Hits
這個算法。的確是的,在計算過程中極為相似,不過Hits
權重主要是計算Hubs
與Authority
兩端的權重,而這里的迭代完得到的是各個向量,有異曲同工之妙。
另外在實際的query量級一般都是百萬以上,這樣query的語料的量就很大了,而搜索引擎中需要計算的性能要求極高,所以一般進行稀疏存儲,並且只取一些重要的term(Top K的term)
來對query進行表示。
2. 沒有點擊行為的query-doc relevance計算
實際應用中,用戶搜索之后帶來了點擊行為的只是一小部分。如果僅按照上述點擊傳播的方式來計算的話,無query點擊的文檔將會將會無法得到正常的向量,同時一些新的query(從未有用戶搜索過的query)也就無法得到正常的向量數據,所以需要一種對於這種缺失行為的query和doc進行向量表示估計。
由於在線計算相關性時,對於已有行為的query−doc和缺失行為的query-doc是一視同仁的,因此為了在線計算時不應該因為訓練數據產生偏差,所以需要與已有行為的query-doc向量在同一個空間內,同時考慮已有行為的query和doc的向量均已計算得到,我們還借助這些數據來預估缺失行為的向量。
2-1. 提取unit向量
既然沒有點擊行為的query與doc之間沒有任何邊連接,那我們可以利用有點擊行為的query-doc的信息,通過有點擊行為的query進行的邊的構造,首先將query分解為各種unit(一般是N-grams,如unigrams,bigrams,trigrams等,但該query進行分解之后不能有overlap),這樣就有ui∈unit(qi),如果存在query含有ui,則將ui對應的query之間形成一條虛擬的邊,同時稱含有ui的所有query的集合為Oui。
這種邊的構建方式如上圖,q1,q2和q3均都包含了yahoo
這個詞,則在他們之間形成這條虛線的邊。
接下來我們可以理解query−doc之間的向量傳播方法,我們當然也可以完成unit−doc的傳播。
ui會與qi有邊相連,而qi與di又有邊相連,因此我們可以間接認為ui與di也是有邊相連的。
現假設qk包含了ui,同時qk與dj存在點擊行為,Pi,k,j表示為這個二折線的權重,則該權重其實為qk與dj的點擊次數,那么我們就會有
其演示就是上圖的右側部分,yahoo
與d1之間的權重為8,與d2之間的權重為5,既然到了這一步,我們就可以按照上一小節的傳播方式來計算,這樣就可以巧妙的得到Ui的向量:
上面得到的是關於query上unit
的向量,同樣的我們也可以從doc這一側出發,來計算doc相關的unit。
2-2. 計算unit向量權重
有了unit
的向量之后,接下來要解決的問題就是如何得到query或者doc的向量了,其實最簡單的方法就是將他們各自的unit
進行平均即可,不過paper中使用線性回歸的方法來計算得到每個unit的全局權重值,在進行權重訓練時使用最小均方差:
Ti是使用有點擊行為的query計算得到的向量,也就是我們所認為的gold-set。
這樣求出來的W就是各個uniti不同的權重。
2-3. 預估向量
根據上面兩個步驟得到的unit
的向量和權重之后,得到整體的query或者doc的向量就很方便了,由於unit
本身就是query或者doc分解出來的,這里基礎數據也都已經計算完成了,所以直接進行加權求和即可:
3. 總結
該方法成功地借助了點擊日志,對query-doc relevance進行估計,並且在實現上:
1. 已有點擊數據的query和doc的向量直接離線就按完成。
2. 缺失點擊的query和doc可以利用離線計算的unit
向量,在線直接進行加權求和即可。
3. 對於在線存儲均使用稀疏方式並只存top-k
,因此存儲並不是問題。
4. 在線計算相關性可以直接按相似度計算,復雜度為klogk,所以並不是很高。
4. 參考
1. Learning Query and Document Relevance from a Web-scale Click Graph
2. http://kubicode.me/2016/11/03/Search%20Engine/Learning-Query-And-Document-Relevanec-from-a-Web-scale-Click-Graph/