文本匹配:語義相關性

語義相關性,比如搜索,查詢詞和文檔如果關鍵字不一樣,但兩者是多詞一義,則模型不理解語義,做語義上的匹配解決不了問題。在推薦中,商品可以由一個向量來刻畫,用戶也可以由一系列交互過的商品來表達,兩者之間做一些語義上的匹配,能推薦出一些有新意的商品,增加推薦多樣性。而傳統的方法比如CF,CB等,無法學習得到這種用戶和商品的相對間接的聯繫。

適用場景:閱讀理解,QA,搜索,語義蘊含,推薦,廣告等。

DSSM:

《Learning Deep Structured Semantic Models

for Web Search using Clickthrough Data》

文章提出,PSLA LDA等模型都是非監督模型,和目標不直接掛鉤,效果自然比不上監督模型

Word hashing層:每個詞加上一個開始和結束的符號 (e.g. #good#).然後切分成n-grams 特徵(e.g. letter trigrams: #go, goo, ood, od#).當然,更常見的做法是做一個預訓練的word embedding。Word hashing的好處是模型是真正的end-to-end結構,不用額外維護一個word embedding lookup table,對於輸入可以進行簡單地映射。

FC層:若干全連接層

Softmax層:這裡算出每個文檔D和查詢詞Q的語義向量y後,求Q和每個文檔D的餘弦相似度,然後接softmax層求損失函數值。

採樣:正樣本D+和隨機採樣的四個不相關文檔。文章指出,未發現不同採樣方式對模型性能的影響。

CDSSM:

《A Latent Semantic Model with

Convolutional-Pooling Structure for Information Retrieval》

傳統的信息檢索方法如TF-IDF, BM25等詞袋模型,以及LDA等主題模型,無法學習詞的上下文信息。基於短語(phrase-based)的模型捕捉了一定的上下文信息,但是它只把短語當成編碼單元(indexing units),而無法學習短語與短語之間的語義關係,同時也只能處理出現過的短語。這些問題在CLSM中都能解決

模型結構和之前的區別在於利用ConvNets layer代替了non-linear Multi-layer,因而也被稱為CDSSM。convolutional latent semantic model (CLSM),

模型結構:

1 word

hashing。比如boy:letter-tri-grams: #-b-o, b-o-y, o-y-#

2卷積層,學習Word-n-gram-Level Contextual Features

3 max-pooling。學習Sentence-Level Semantic Features,同時把不同長度的查詢詞或文檔變成等長向量,便於後面接FC

4全連接層。

5 softmax層

原文提到的一些設計原因:

1 全英文單詞的總數很多,但是letter-trigrams不會太多,維度可控

2 卷積視野2d+1,學習詞的上下文信息。結果發現相似的詞義其向量相似。這樣的好處是不簡單地加和每個字的向量,而是用模型去發現重要的語義概念。

3卷積+max pooling,可以只留下最有用的局部特徵,同時把不同長度的句子映射到同一長度的表示

4 學習分類器

查詢詞和每一個文檔進行餘弦相似度計算:

在多個文檔中進行softmax歸一化:

最後,優化目標是:

文章最後說,這種結構對於相關的詞能學到較大權重,因而後面相關的詞在max-pooling的貢獻更大(和attention類似)

《Learning to Rank Short Text Pairs with

Convolutional Deep Neural Networks》

這篇文章提出的是很經典的結構,後面的大多數text matching論文大多是在這種結構上的改進

模型結構:Conv-ReLU-max pooling

當然,其實Conv可以多種尺寸,不光是5,這樣可以學習不同視野範圍下的特徵

文章沒有像DSSM那樣計算餘弦相似度,而是計算了如下形式的某種『距離』:

同時在該層可以任意增加一些人工構造的特徵。

Word embedding是無監督初始化並靜態的。原文說因為樣本量不夠,不然word embedding參數可以動態學習

這裡的兩篇論文對於query和document建模是分開的,也就是兩個不同結構,與現在的一些模型不同。現在大部分是共享結構和參數的,這樣對於模型的學習,樣本更充分,也能更好地學出文本之間的一些匹配關係。本質而言,如果是求文本和文本這種同構的兩種事物之間的語義匹配問題,共享模型參數是沒問題的,如果是在推薦里,用戶的表達是由其交互過的一連串的商品來刻畫的,那用戶和所需推薦的商品之間的匹配關係可能就不能共享模型和參數了。

《Improved Representation Learning for Question

Answer Matching》

這類問題,要麼是利用問題和答案的表示計算相似度,要麼是把兩者表示合起來做一個分類器(是正確答案或者不是)。這篇文章是前者

基本模型:

word embeddings 加 Bi-lstm,然後用三種方式生成問題和答案的表達:

1 兩個方向上最後時刻的隱藏單元拼接

2 所有bi-lstm的average-pooling

3 所有bi-lstm的max-pooling

同時question和answer是共用一個模型的,即只有一個模型,這點與上面提到的文章的工作都不同。

hinge loss

對於每一個正例,隨機選擇k個負例,但只選取loss最高的那個來更新模型

模型2 Convolutional-pooling LSTM:

結合了LSTM對長序信息,CNN對局部n-gram信息的優點

就是後面增加了conv和max-pooling

原文這裡還做了一個變換,將BiLSTM輸出的矩陣以每個詞為中間向兩邊擴展k個(這也是卷積層的filter gram size,就是矩陣每個詞的維度是原來k倍),這樣能增加對局部信息的利用。

這個模型和上面的類型,就是lstm和conv換了次序。原文的數據是這個沒有上面那個模型好,就是先lstm再卷積效果好。個人理解是對於nlp問題,一上來用卷積會損失較多信息,而信息高損操作應該盡量往後放。

模型3 attention

如果不看問題,再怎麼對答案抽取表達向量,也一定包含很多無效信息,因為很多信息單獨看答案句子是重要的,聯繫到問題就不重要,所以這裡用上了attention,就是問題向量對答案里每個lstm隱向量求attention

ha(t)是答案在t時刻的bi-lstm單元,oq是問題的表達向量

attention發生在答案側bi-lstm後

《A Compare-Aggregate Model for Matching Text

Sequences》

原文說,兩個序列比較的結果,不是由比較各自獨立得到的總的表示得到,而是由比較各自的更小單元(比如詞)的表示,然後結合這些表示來得到。個人理解就是問題-答案匹配,與其考慮模型學出來的問題表達向量和答案表達向量之間的匹配程度,不如考慮問題里每個詞的表示和答案里每個詞的表示之間的匹配程度,然後再做某種方式的匯總。

然後提出了一種通用的做文本匹配的模型框架

序列匹配的 「compare-aggregate」 framework 的模型的一般形式。

Preprocessing: 為了得到有上下文信息的word embedding vector。如w2v, lstm

Attention: 對於A的每一列,得到Q的每一列的attention weight,和其注意力權重和向量hj,表示對於該答案詞,問題的注意力表示向量

Comparison: 對比函數f去對比每一對aj和hj得到tj

Aggregation: CNN去聚合(aggregate)tj得到結果

對比函數f,可以選擇簡單的神經網路層,a neural tensor network,歐氏距離,餘弦距離,和兩個奇怪的東西。。。這裡不羅列公式了。

推薦閱讀:

截至2017年3月,音樂和人聲分離的研究有哪些最新進展?
大家如何看待最近Kaggle的賓士比賽最後排名嚴重波動?
圖森科技的演算法實習生和地平線的人工智慧演算法實習生如何選擇?
ICML 2016上哪些論文值得關注?
做出「狼人殺」的 AI 有哪些難點?

TAG:深度学习DeepLearning | 机器学习 | 自然语言处理 |