孿生網絡(Siamese Network)在句子語義相似度計算中的應用


1,概述

  在NLP中孿生網絡基本是用來計算句子間的語義相似度的。其結構如下

    

  在計算句子語義相似度的時候,都是以句子對的形式輸入到網絡中,孿生網絡就是定義兩個網絡結構分別來表征句子對中的句子,然后通過曼哈頓距離,歐式距離,余弦相似度等來度量兩個句子之間的空間相似度。

  孿生網絡又可以分為孿生網絡和偽孿生網絡,這兩者的定義:

  孿生網絡:兩個網絡結構相同且共享參數,當兩個句子來自統一領域且在結構上有很大的相似度時選擇該模型;

  偽孿生網絡:兩個網絡結構相同但不共享參數,或者兩個網絡結構不同,當兩個句子結構上不同,或者來自不同的領域,或者時句子和圖片之間的相似度計算時選擇該模型;

  另外孿生網絡的損失函數一般選擇Contrastive loss Function(對比損失函數)。接下來具體看看孿生網絡在句子語義相似度計算中的幾篇論文:

 

2,論文模型介紹

  1)Siamese CBOW: Optimizing Word Embeddings for Sentence Representations 

  該論文提出了一種基於孿生網絡+CBOW的方式來無監督式的訓練句子的向量表示。網絡的結構圖如下:

    

  首先給定一個很大的語料庫,語料庫中的句子要保持原來文章中的順序,那我們該怎么將這個無監督的任務構造成有監督式的任務呢?看論文中這個CBOW,其實就是采用了類似word2vec中的CBOW的形式來構造有監督式的任務的。我們給定一個中心句子$s_i$,然后將中心句子的上下句作為正樣本(即和中心句子相關的句子),然后從其他句子中隨機選擇$n$個句子作為負樣本,以論文中為例,負樣本也選擇2個。因此就構造成了這樣一個句子集合$[s_i, s_{i+1}^+, s_{i-1}^+, s_1^-, s_2^-]$,那么這樣一個句子集合就作為一個樣本輸入到模型中,以這里的例子為例,就構造成了一個具有5個相同結構相同參數的網絡來處理這5個句子。有了樣本之后,標簽該怎么定義呢?在這里的真實標簽定義如下:

    

  上面式子中的$S^+, S^-$分別表示正樣本句子集合和負樣本句子集合。因此真實標簽是服從概率分布的。接下來我們看看預測標簽該怎么定義,其定義如下:

    

  上面式子為預測標簽的概率分布(softmax后的結果),其中$s_i^{\theta}$是句子$s_i$的向量表示,那么問題來了,這個句子向量是怎么得到的呢?其實模型的輸入最小粒度是詞,在這里會用一個詞嵌入矩陣(詞向量)來將每個詞映射到低維向量,然后對句子中的詞向量取平均來表示句子的向量。之后再計算中心句子$s_i$和其他句子的余弦相似度,然后經過softmax得到預測的概率分布。既然真實標簽和預測標簽都服從概率分布,那么損失函數就可以直接用交叉熵了,因此損失函數如下:

    

  其實這里整個模型被訓練的參數只有一開始的詞嵌入矩陣,也就是說我們這個模型最終訓練的到的也就是一個詞向量,但因為目標任務是計算句子的相似度,而且損失函數的構造也是來建模句子之間的關系,因此個人人為這種方式獲得的詞向量,通過取平均的方式能更好的表示句子向量。因此在句子相似度的任務上的效果也是優於word2vec詞向量的。

 

  2)Siamese Recurrent Architectures for Learning Sentence Similarity

  上面介紹了一種無監督的方式,接下來的模型都是有監督的。 本論文提出了一種MaLSTM的網絡結構,其網絡結構如下:

    

  其實網絡結構是並沒什么新意,其具體如下:

  1)通過兩個LSTM網絡(可以是孿生網絡,也可以是偽孿生網絡)來處理句子對,取LSTM最后時刻的輸入作為兩個句子的向量表示。

  2)用曼哈頓距離來度量兩個句子的空間相似度。

  論文中沒有提到用了什么損失函數,但一般孿生網絡的損失函數都是Contrastive loss function。這個我們在下面再介紹,至於在這里作者為什么選擇曼哈頓距離,作者認為歐式距離容易出現梯度消失。而且在實驗中顯示效果也是優於余弦相似度的,對於這個度量選擇,個人認為還是以自己的實際項目來選擇,並不存在一個絕對的好壞。

 

  3)Learning Text Similarity with Siamese Recurrent Networks

  該論文同樣是用LSTM來處理句子對,其網絡結構如下:

    

  在這里將句子對的關系看作是一個二分類的問題,給定一個樣本$[x_1, x_2, y]$,在這里$y$的結果為$[0, 1]$,因此可以看作一個二分類問題,在這里的度量方式選擇的是余弦相似度,其表達式如下:

    

  損失函數用了Contrastive loss function,其表達式如下:

    

  從損失函數的形式上看類似於二元交叉熵損失函數,但是這里的$L_-$並不等於$1 - L_+$,其表達式如下:

    

  其表示圖如下:

    

  注:從這里的圖來看,上面的式子是有誤的,$ E_W < m$ 應該改成$E_W > m$。

  我們來分析下上面的式子:假設現在是一個正樣本,也就是$y^{(i)} = 1$,此時若預測的$E_W$接近於1(即預測兩個句子很相似),則整體損失很小,此時若預測的$E_W$接近於-1(即預測兩個句子不相似),則整體損失很大。假設現在是一個負樣本,給定$m = 0.5$,也就是$y^{(i)} = 0$,此時若預測的$E_W$小於$m$,則損失為0,若預測的$E_W$大於$m$,則損失很大。其實這個損失函數可以認為通過調整$m$的值,可以控制對句子相似度的苛刻度,$m$的值比較大時,會導致兩個相似的句子的余弦相似度值是比較高的。

 

 參考文獻:

 Siamese CBOW: Optimizing Word Embeddings for Sentence Representations 

 Siamese Recurrent Architectures for Learning Sentence Similarity

 Learning Text Similarity with Siamese Recurrent Networks


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM