最近關注了一些Deep Learning在Information Retrieval領域的應用,得益於Deep Model在對文本的表達上展示的優點(好比RNN和CNN),我相信在IR的領域引入Deep Model也會取得很好的效果。html
IR的範圍可能會很廣,好比傳統的Search Engine(query retrieves documents),Recommendation System(user retrieves items)或者Retrieval based Question Answering(Question retrieves answers)可能均可以屬於IR的範疇。仔細考慮這些應用,不難看出他們都存在一個模式,也就是幾個基本須要解決的任務:git
下面我主要參考Li Hang在sigir 2016上的tutorial(http://t.cn/Rt7OK2w)來組織個人筆記,同時會重點閱讀幾篇有表明性的論文來更好的理解細節。一句話,但願學習能夠既見森林,又可見樹木。github
我主要從如下四個部分來說解:網絡
下圖展示了Information Retrieval的一個總體構架,框架
傳統的IR使用向量空間模型(VSM)來計算query和document的類似度,具體方法以下:函數
現代的IR使用了一個更加general的框架來處理similarity的問題:學習
通常這四個步驟都是在一個end-to-end的神經網絡結構下進行訓練的。這裏注意,Matching Model只有惟一一個,就是說全部的query-document對都使用一個Matching Model,Ranking Model只使用這惟一一個Matching Model產生的Matching Score或Matching Vector。ui
Deep Learning的方法能夠滲透在IR中的不一樣步驟中,以下圖所示,通常包括了Intent和Content的表示和Matching Model的學習。設計
注意,這裏並無說明Ranking Model,其實Ranking Model能夠看作整個神經網絡結構的loss function層,不一樣的learning to rank方法有不一樣的loss形式,本文只討論pointwise和pairwise方法,由於這兩種方法效率足夠高,在實踐中應用的最多。3d
同時,本文重點考察兩種工業中應用最多的訓練數據形式。
其實,在工業環境中第二種數據形式是最廣泛的,因爲自己只有正樣本,因此須要進行隨機負採樣,來構造一種排序關係。同時loss function也可使用pointwise或pairwise的方法,pointwise方法直接把問題當作二分類問題來作;pairwise使用了正樣本和每一個負樣本的偏序關係,可使用RankSVM的形式(hinge loss)或RankNet的形式(cross entropy loss)。
Word Embedding的教程能夠參考《word2vec中的數學原理詳解》,我以爲這篇文章講的很詳細也很生動。
RNN的教程能夠參考我以前寫的tutorial https://github.com/pangolulu/rnn-from-scratch,其中也包含了不少拓展的資料。
CNN for text能夠參考這篇論文https://arxiv.org/pdf/1408.5882v2.pdf,他將CNN模型應用到了sentence classification的問題上,並取得了state-of-art的效果。
Word Embedding的出現使得咱們可使用低維的向量空間來表示Word的語義,避免了使用one-hot表示產生了一些問題,好比維度高、one-hot詞向量間沒法表達相關性等等。這種embedding的方法稱爲hierarchy representation。
那麼,如何將一段文本表示成embedding的形式呢?也就是sentence representation或document representation,目的是represent syntax, semantics, and even pragmatics of sentences。目前有不少研究工做能夠應用,對於sentence的表示可使用rnn或cnn,對於document的表示會複雜一點,能夠參考Hierarchical Attention Networks for Document Classification
和Convolutional Neural Network Architectures for Matching Natural Language Sentences
這兩篇工做。它們主要的思想其實就是使用cnn或rnn來表示document中的sentences,而後使用表示好的sentence vectors做爲另外的rnn的輸入來最終表示整個document。
通常CNN或RNN會隨着整個網絡進行end-to-end的訓練,也就是Task-dependent的,也是有監督的。
Representation Learning是整個IR或NLP task的基礎,不管是Classification的問題,Matching的問題,仍是Translation的問題,都須要先學習一個document或sentence的中間表示。能夠看下面的示意圖,表示IR或NLP不一樣任務之間的關係,和representation learning所處的位置。
Matching是IR任務中重要的一步,意義是maps query-document pairs to a feature vector representation where each component reflects a certain type of similarity, e.g., lexical, syntactic, and semantic。這裏產生的是一個matching vector,接下來能夠根據matching vector與參數w直接獲得matching score(好比作內積)。
Maching Model產生的結果(matching vector或matching score)接下來會做爲ranking model的輸入,ranking model其實至關於整個網絡的loss function,在當前end-to-end的訓練框架下,其實使用matching score更方便一點。以後能夠看到,使用matching vector + LTR
的方法和使用maching score + ranking loss
的方法必定程度上是等價的(這裏只考慮pointwise和pairwise方法),並且後面一種形式更加general,它包含了傳統的LTR的表達,也能夠作一些變化,好比作一些negative sampling等等。以後在Ranking Model的講解會重點介紹幾篇論文中常見的ranking loss的形式,而且說明一下LTR方法使用matching vector和使用matching score的等價性。
好,如今咱們重點講解使用深度學習來作Matching的方法。通常Matching的方法有三種形式:
本文暫時只討論前三種。
相似於VSM的方法
應用的比較多,能夠在這個基礎上融合不一樣的matching方法獲得的結果,好比融入了第一種matching方法(query和document的vector作內積)。
直接生成二維的matching score,而後用cnn模型進行學習。
有一些研究的結論,以下:
也就是你們熟知的Learning to Rank,不過我這裏想解釋的更加general一點,可能在構造訓練集上和LTR有一些不一樣。
先說一下問題的定義,假設我有query q
和候選的document集合D={d1, d2, ..., dn}
。對於訓練集,首先必須再次強調一下訓練數據的形式:
而後說一下LTR的輸入,LTR接受Matching Model獲得的結果,便可以使Matching Vector或者是Matching Score。
對於第一種形式的數據,能夠採用傳統的LTR方法:
d1
和d2
,若是訓練集中d1 > d2
,那麼咱們但願經過Matching Model獲得的d1
和d2
對應的Matching Score m1
要大於m2
。在上面的intuition的指導下,咱們能夠定義不一樣的loss function了,最多見就是hinge loss function,也就是咱們但願m1
比m2
要至少大於一個值,對應了SVM中的1,具體能夠寫成max(0, theta - m1 + m2)
。這個Hinge Loss的定義方法其實就是RankSVM的方法,不過傳統的RankSVM的定義使用了Matching Vector做爲輸入,好比v1
和v2
,而且從新構造了訓練集,v1 - v2
對應的label爲+1
(正類),v2 - v1
對應的label爲-1
(負類)。你們能夠看一下RankSVM的公式形式,不難會發現RankSVM和我這裏表達的定義實際上是等價的,感興趣的同窗能夠參考http://www.cnblogs.com/kemaswill/p/3241963.html。其實,對於RankNet也是相同的道理,感興趣的能夠參考http://www.cnblogs.com/kemaswill/p/kemaswill.html。對於第二種形式的數據,訓練數據中只提供了某個query對應的一個或幾個相關document,其餘document並不知道相關性。因爲只提供了正反饋的數據,目前主流的作法就是進行contrastive sampling,也就是隨機負採樣。當有了負樣本以後,至關於能夠獲得document之間的偏序關係了,就可使用LTR的方法,這裏面我傾向於稱爲ranking loss,也包括了pointwise和pairwise這兩種方法:
e(x, y_pos, y_neg) = max(0, theta - s_match(x, y_pos) + s_match(x, y_neg))
,其中x
爲query,y_pos
爲正相關document,y_neg
爲負相關document,s_match
爲Matching Model獲得的Matching Score。這裏考慮Learning to Rank for Document Retrieval,下圖是總體的構架圖,能夠看到系統直接返回Ranking Model,至關於Matching Model和Ranking Model以一塊兒學出來的。
具體有一下幾點考慮:
比較重要的就是Matching Model和Ranking Model的關係,下圖直觀的表示出來:
其實,在我看來圖中最後都會輸出一個score,這個score就是matching score,而這個是最重要的。
下面給出一篇論文的網絡結構圖,這篇論文發表在sigir 2015,叫作Learning to Rank Short Text Pairs with Convolutional Deep Neural Networks
,有興趣的同窗能夠回去精讀。
首先,這篇論文使用了pointwise的方法,因此是一個二分類問題;使用CNN來對query和document學習representation;使用一個雙線性函數來match query-vector和document-vector(q_vec M d_vec
的內積);以後與query-vector和document-vector或者加上其餘feature一同鏈接成一個feature vector,這個就是Matching Vector;網絡後幾層通過若干fully connected層,最後會獲得一個實數,就是Matching Score;因爲是一個二分類問題,Matching Score外面套一層sigmoid函數轉換成機率,使用交叉熵損失函數進行訓練。
Retrieval based QA其實和Document Retrieval沒有什麼區別,下圖給出了一個總體的框架圖:
具體的一篇論文能夠參考李航發表在nips 2015的文章,題目叫Convolutional Neural Network Architectures for Matching Natural Language Sentences
。文中也是用了CNN來學習sentence的表示,但文中提出了兩種Matching Model結構,一種是One Dimensional Matching,另外一種是Two Dimensional Matching。分別表示以下圖所示:
最後Matching Model會生成一個Matching Score,正如我在這篇博文闡述的同樣。
對於Ranking Model,也就是ranking loss,這篇文章使用了pairwise的方式,使用了hinge loss function,具體爲:e(x, y+, y−) = max(0, 1 + s(x, y−) − s(x, y+))
。其中,y+
比y-
match x
的分數要高,也就是y+
排在y-
以前;s(x, y)
是x
和y
的matching score。
這個任務的意義是用文字來搜索圖,反過來或者用圖來搜索文字。一個總體的示意圖以下:
具體的一篇論文也是來自李航老師的,發表在ICCV 2016,題目叫做Multimodal Convolutional Neural Networks for Matching Image and Sentence
。這篇論文使用了Multimodal CNN的方法,具體爲:
其中sentence-level matching和Word-level matching的示意圖以下:
最後網絡會輸出一個Matching Score,這篇文章也使用了pairwise方法,可是訓練數據沒有負相關樣本,因此使用了隨機負採樣的方法;loss function選擇了hinge loss,具體形式爲e_θ(xn, yn, ym) = max(0, theta − s_match(xn, yn) + s_match(xn, ym)
,其中ym
是隨機採樣的負樣本。
總結一下,能夠看到,不管是Document Retrieval,Retrieval based Question Answering仍是Image Retrieval,它們的模式都已同樣的,都包括了三個基本要素:Representation Learning,Matching Model和Ranking Model。
本文在於幫助梳理一下這種retrieve,match,similarity或者說recommend等一類問題的一些模式和關鍵要素,使點連成線,在大腦中構建真正的理解,能作到觸類旁通,遇到類似的任務能很天然的聯想過去。你們若是有什麼意見或想法,歡迎在下面留言。