最近關注了一些Deep Learning在Information Retrieval領域的應用,得益於Deep Model在對文本的表達上展現的優勢(比如RNN和CNN),我相信在IR的領域引入Deep Model也會取得很好的效果。
IR的范圍可能會很廣,比如傳統的Search Engine(query retrieves documents),Recommendation System(user retrieves items)或者Retrieval based Question Answering(Question retrieves answers)可能都可以屬於IR的范疇。仔細考慮這些應用,不難看出他們都存在一個模式,也就是幾個基本需要解決的任務:
- Query(Intent)的表達和Document(Content)的表達?
- Matching Model: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與參數w直接得到matching score,相當於做了內積。
- Ranking Model:接受q-d的matching結果(matching vector或matching score),在當前end-to-end的訓練框架下,其實使用matching score更方便一點(為什么更方便一點本文后面會說明),然后使用learning to rank的方法(pointwise,pairwise或listwise)來進行訓練,重點是如何設計loss function。
下面我主要參考Li Hang在sigir 2016上的tutorial(http://t.cn/Rt7OK2w)來組織我的筆記,同時會重點閱讀幾篇有代表性的論文來更好的理解細節。一句話,希望學習可以既見森林,又可見樹木。
我主要從以下四個部分來講解:
- IR的基礎
- 相關的Deep Learning模型(Word Embedding,RNN和CNN)
- Deep Learning for IR的基礎性問題
- Deep Learning for IR的具體應用
IR的基礎
下圖展現了Information Retrieval的一個整體構架,
傳統的IR使用向量空間模型(VSM)來計算query和document的相似度,具體方法如下:
- Representing query and document as tf-idf (or BM25) vectors
- Calculating cosine similarity between them
現代的IR使用了一個更加general的框架來處理similarity的問題:
- Conducting query and document understanding
- Representing query and document as feature vectors
- Calculating multiple matching scores between query and document (Matching Model)
- Training ranker with matching scores as features using learning to rank (Ranking Model)
一般這四個步驟都是在一個end-to-end的神經網絡結構下進行訓練的。這里注意,Matching Model只有唯一一個,就是說所有的query-document對都使用一個Matching Model,Ranking Model只使用這唯一一個Matching Model產生的Matching Score或Matching Vector。
Deep Learning的方法可以滲透在IR中的不同步驟中,如下圖所示,一般包括了Intent和Content的表示和Matching Model的學習。
注意,這里並沒有說明Ranking Model,其實Ranking Model可以看做整個神經網絡結構的loss function層,不同的learning to rank方法有不同的loss形式,本文只討論pointwise和pairwise方法,因為這兩種方法效率足夠高,在實踐中應用的最多。
同時,本文重點考察兩種工業中應用最多的訓練數據形式。
- 第一種形式,數據提供了某個query對應的完全的document的排序(或relevance值);
- 第二種形式,數據只提供了某個query對應的一個或幾個相關document,其他document並不知道相關性,具體類似推薦系統的數據。
其實,在工業環境中第二種數據形式是最普遍的,由於本身只有正樣本,所以需要進行隨機負采樣,來構造一種排序關系。同時loss function也可以使用pointwise或pairwise的方法,pointwise方法直接把問題當做二分類問題來做;pairwise使用了正樣本和每個負樣本的偏序關系,可以使用RankSVM的形式(hinge loss)或RankNet的形式(cross entropy loss)。
相關Deep Learning模型的基礎
Word Embedding
Word Embedding的教程可以參考《word2vec中的數學原理詳解》,我覺得這篇文章講的很詳細也很生動。
RNN
RNN的教程可以參考我之前寫的tutorial https://github.com/pangolulu/rnn-from-scratch,其中也包含了很多拓展的資料。
CNN
CNN for text可以參考這篇論文https://arxiv.org/pdf/1408.5882v2.pdf,他將CNN模型應用到了sentence classification的問題上,並取得了state-of-art的效果。
Deep Learning for IR的基礎性問題
Representation Learning
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 Model
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的方法有三種形式:
- Projection to Latent Space
- One Dimensional Matching
- Two Dimensional Matching
- Tree Matching
本文暫時只討論前三種。
Matching: Projection to Latent Space
類似於VSM的方法
Matching: One Dimensional Matching
應用的比較多,可以在這個基礎上融合不同的matching方法得到的結果,比如融入了第一種matching方法(query和document的vector做內積)。
Matching: Two Dimensional Matching
直接生成二維的matching score,然后用cnn模型進行學習。
有一些研究的結論,如下:
- 對於sentence的表示學習,cnn方法要比rnn方法好,這個有待於驗證。
- 2-dimensional CNN比1-dimensional CNN方法好
- Matching scores can be used as features of learning to rank models,這個方法相當於可以融合不同方法得到的matching score,然后組成一個matching vector。
Ranking Model
也就是大家熟知的Learning to Rank,不過我這里想解釋的更加general一點,可能在構造訓練集上和LTR有一些不同。
先說一下問題的定義,假設我有query q
和候選的document集合D={d1, d2, ..., dn}
。對於訓練集,首先必須再次強調一下訓練數據的形式:
- 第一種形式,數據提供了某個query對應的完全的document的排序(或relevance值);
- 第二種形式,數據只提供了某個query對應的一個或幾個相關document,其他document並不知道相關性,具體類似推薦系統的數據。
然后說一下LTR的輸入,LTR接受Matching Model得到的結果,即可以使Matching Vector或者是Matching Score。
對於第一種形式的數據,可以采用傳統的LTR方法:
- pointwise方法直接當做回歸問題,可以看到Matching Score就可以看做是回歸的值了,如果使用Matching Vector作為輸入,相當於繼續使用一些參數W做了一次回歸問題。但其實這是可以通過神經網絡end-to-end學習出來的,相當於整個網絡(包括Representation Learning和Matching Model)的目標函數就是回歸問題(損失函數為最小二乘)。
- pairwise方法考慮了document集合中兩兩document的偏序關系,由此構造訓練集。考慮所有兩兩的document,比如
d1
和d2
,如果訓練集中d1 > d2
,那么我們希望通過Matching Model得到的d1
和d2
對應的Matching Scorem1
要大於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這兩種方法:
- pointwise方法直接把問題當做二分類來做,正相關的document為正例,采樣的負相關的數據為負例。如果接收Matching Score,可以在外面套一層sigmoid函數轉化成概率,使用交叉熵損失函數進行訓練;如果接收Matching Vector,相當可以再做一次logistics regression,但其實和前面方法是等價的。
- pairwise方法是目前主流的做法,對一個query來說正相關的document偏序關系要大於這個query下隨機采樣的負相關的document,采樣的個數可以作為一個超參數。這樣可以使用和第一種數據形式的pairwise方法設計ranking loss了,這里不再贅述。一般文獻里面都會使用hinge loss,表達示為
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。
Deep Learning for IR的具體應用
Document Retrieval
這里考慮Learning to Rank for Document Retrieval,下圖是整體的構架圖,可以看到系統直接返回Ranking Model,相當於Matching Model和Ranking Model以一起學出來的。
具體有一下幾點考慮:
- simultaneously learn matching model and ranking model
- Matching model: Projection into Latent Space, Using CNN
- Ranking model: taking matching model output as features, as well as other features, Using DNN
比較重要的就是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 Question Answering
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。
Image Retrieval
這個任務的意義是用文字來搜索圖,反過來或者用圖來搜索文字。一個整體的示意圖如下:
具體的一篇論文也是來自李航老師的,發表在ICCV 2016,題目叫作Multimodal Convolutional Neural Networks for Matching Image and Sentence
。這篇論文使用了Multimodal CNN的方法,具體為:
- Represent text and image as vectors and then match the two vectors
- 三種matching方法:Word-level matching, phrase-level matching, sentence-level matching
- CNN model works better than RNN models (state of the art) for text
其中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等一類問題的一些模式和關鍵要素,使點連成線,在大腦中構建真正的理解,能做到舉一反三,遇到相似的任務能很自然的聯想過去。大家如果有什么意見或想法,歡迎在下面留言。
Reference
- Convolutional Neural Network Architectures for Matching Natural Language Sentences, nips 2015
- Learning to Rank Short Text Pairs with Convolutional Deep Neural Networks, sigir 2015
- Multimodal Convolutional Neural Networks for Matching Image and Sentence, iccv 2016
- TOWARDS UNIVERSAL PARAPHRASTIC SENTENCE, ICLR 2016
- deep_learning_for_information_retrieval, sigir 2016 tutorial