編者按:本文作者為Yves Peirsman,是NLP領域的專家。在這篇博文中,作者比較了各種計算句子相似度的方法,并了解它們是如何操作的。詞嵌入(word embeddings)已經(jīng)在自然語言處理領域廣泛使用,它可以讓我們輕易地計算兩個詞語之間的語義相似性,或者找出與目標詞語最相似的詞語。然而,人們關注更多的是兩個句子或者短文之間的相似度。如果你對代碼感興趣,文中附有講解細節(jié)的Jupyter Notebook地址。以下是論智的編譯。
許多NLP應用需要計算兩段短文之間的相似性。例如,搜索引擎需要建模,估計一份文本與提問問題之間的關聯(lián)度,其中涉及到的并不只是看文字是否有重疊。與之相似的,類似Quora之類的問答網(wǎng)站也有這項需求,他們需要判斷某一問題是否之前已出現(xiàn)過。要判斷這類的文本相似性,首先要對兩個短文本進行embedding,然后計算二者之間的余弦相似度(cosine similarity)。盡管word2vec和GloVe等詞嵌入已經(jīng)成為尋找單詞間語義相似度的標準方法,但是對于句子嵌入應如何被計算仍存在不同的聲音。接下來,我們將回顧一下幾種最常用的方法,并比較它們之間的性能。
數(shù)據(jù)
我們將在兩個被廣泛使用的數(shù)據(jù)集上測試所有相似度計算方法,同時還與人類的判斷作對比。兩個數(shù)據(jù)集分別是:
STS基準收集了2012年至2017年國際語義評測SemEval中所有的英語數(shù)據(jù)
SICK數(shù)據(jù)庫包含了10000對英語句子,其中的標簽說明了它們之間的語義關聯(lián)和邏輯關系
下面的表格是STS數(shù)據(jù)集中的幾個例子??梢钥吹剑瑑删湓捴g的語義關系通常非常微小。例如第四個例子:
A man is playing a harp.
A man is playing a keyboard.
通過判斷,兩句話之間“非常不相似”,盡管它們的句法結構相同,并且其中的詞嵌入也類似。
STS數(shù)據(jù)集中的例子
相似度檢測方法
用于計算兩句子間語義相似度的方法非常廣泛,下面是常見的幾種方法。
基準方法
估計兩句子間語義相似度最簡單的方法就是求句子中所有單詞詞嵌入的平均值,然后計算兩句子詞嵌入之間的余弦相似性。很顯然,這種簡單的基準方法會帶來很多變數(shù)。我們將研究,如果忽略終止詞并用TF-IDF計算平均權重會帶來怎樣的影響。
詞移距離
兩文本之間的詞移距離指的是文本一種中所有單詞與文本二中的單詞之間最小累計距離
替代上述基準方法的其中一種有趣方法就是詞移距離(Word Mover’s Distance)。詞移距離使用兩文本間的詞嵌入,測量其中一文本中的單詞在語義空間中移動到另一文本單詞所需要的最短距離。
Smooth Inverse Frequency
從語義上來講,求一句話中詞嵌入的平均值似乎給與不相關的單詞太多權重了。而Smooth Inverse Frequency試著用兩種方法解決這一問題:
加權:就像上文用的TF-IDF,SIF取句中詞嵌入的平均權重。每個詞嵌入都由a/(a + p(w))進行加權,其中a的值經(jīng)常被設置為0.01,而p(w)是詞語在語料中預計出現(xiàn)的頻率。
常見元素刪除:接下來,SIF計算了句子的嵌入中最重要的元素。然后它減去這些句子嵌入中的主要成分。這就可以刪除與頻率和句法有關的變量,他們和語義的聯(lián)系不大。
最后,SIF使一些不重要的詞語的權重下降,例如but、just等,同時保留對語義貢獻較大的信息。
預訓練編碼器
上述兩種方法都有兩個重要的特征。首先,作為簡單的詞袋方法,它們并不考慮單詞的順序。其次,它們使用的詞嵌入是在一種無監(jiān)督方法中學習到的。這兩種特點都有潛在的威脅。由于不同的詞語順序會有不同的意思(例如“the dog bites the man”和“the man bites the dog”),我們想讓句子的嵌入對這一變化有所反饋。另外,監(jiān)督訓練可以更直接地幫助句子嵌入學習到句意。
于是就出現(xiàn)了預訓練編碼器。預訓練的句子編碼器的目的是充當word2vec和GloVe的作用,但是對于句子嵌入來說:它們生成的嵌入可以用在多種應用中,例如文本分類、近似文本檢測等等。一般來說,編碼器在許多監(jiān)督和非監(jiān)督的任務中訓練,目的就是能盡量多地獲取通用語義信息。目前已經(jīng)有好幾款這樣的編碼器了,我們以InferSent和谷歌語句編碼器為例。
預訓練句子編碼器以來自然語言推理等任務,來學習句子嵌入,以便用于今后的遷移任務中
InferSent是由Facebook研發(fā)的預訓練編碼器,它是一個擁有最大池化的BiLSTM,在SNLI數(shù)據(jù)集上訓練,該數(shù)據(jù)集含有57萬英語句子對,所有句子都屬于三個類別的其中一種:推導關系、矛盾關系、中立關系。
為了與Facebook競爭,谷歌也推出了自己的語句編碼器,它有兩種形式:
其中一種高級模型,采用的是變換過的模型編碼子圖生成的語境感知詞所表示的元素總和。
另一種是簡單一些的深度平均網(wǎng)絡(DAN),其中輸入的單詞和雙字符的嵌入相加求平均數(shù),并經(jīng)過一個前饋深層神經(jīng)網(wǎng)絡。
基于變換的模型的結果更好,但是在書寫的時候,只有基于DAN的編碼器可用。與InferSent不同,谷歌的橘子編碼器是在監(jiān)督數(shù)據(jù)和非監(jiān)督數(shù)據(jù)上共同訓練的。
結果
我們在SICK和STS數(shù)據(jù)集上測試了上述所有方法,得出句子對之間的相似度,并與人類判斷相比較。
基準方法
盡管他們很簡潔,在平均詞嵌入之間求余弦相似性的基準方法表現(xiàn)得非常好。但是,前提仍要滿足一些條件:
簡單word2vec嵌入比GloVe嵌入表現(xiàn)的好
在用word2vec時,尚不清楚使用停用詞表或TF-IDF加權是否更有幫助。在STS上,有時有用;在SICK上沒用。僅計算未加權的所有word2vec嵌入平均值表現(xiàn)得很好。
在使用GloVe時,停用詞列表對于達到好的效果非常重要。利用TF-IDF加權沒有幫助。
我們簡單的基準方法表現(xiàn)得都不錯
詞移距離
基于我們的結果,好像沒有什么使用詞移距離的必要了,因為上述方法表現(xiàn)得已經(jīng)很好了。只有在STS-TEST上,而且只有在有停止詞列表的情況下,詞移距離才能和簡單基準方法一較高下。
詞移距離的表現(xiàn)令人失望
Smooth Inverse Frequency
SIF是在測試中表現(xiàn)最穩(wěn)定的方法。在SICK數(shù)據(jù)集上,它的表現(xiàn)和簡單基準方法差不多,但是在STS數(shù)據(jù)集上明顯超過了它們。注意,在帶有word2vec詞嵌入的SIF和帶有GloVe詞嵌入的SIF之間有一些差別,這種差別很顯著,它顯示了SIF的加權和去除常用元素后減少的非信息噪音。
SIF的表現(xiàn)最穩(wěn)定
預訓練編碼器
預訓練編碼器的情況比較復雜。但是我們的結果顯示編碼器還不能完全利用訓練的成果。谷歌的句子編碼器看起來要比InferSent好一些,但是皮爾森相關系數(shù)的結果與SIF的差別不大。
預訓練編碼器表現(xiàn)得不錯,但是SIF也沒比它們差多少
而斯皮爾曼相關系數(shù)的效果更直接。這也許表明,谷歌的句子編碼器更能了解到句子的正確順序,但是無法分辨其中的差別。
斯皮爾曼相關系數(shù)表現(xiàn)出與皮爾森不同的效果
結論
語句相似度是一個復雜現(xiàn)象,一句話的含義并不僅僅取決于當中的詞語,而且還依賴于它們的組合方式。正如開頭我們舉的那個例子(harp和keyboard),語義相似度有好幾種維度,句子可能在其中一種維度上相似,而在其他維度上有差異。目前的句子嵌入方法也只做到了表面。通常我們在皮爾森相關系數(shù)(Pearson correlation)上進行測試,除了有些情況下斯皮爾曼相關系數(shù)(Spearman correlation)會有不一樣的結果。
所有判斷句子相似度的方法比較
所以,如果你想計算句子相似度,你會選擇哪種方法呢?我們的建議如下:
word2vec比GloVe的選擇更保險
雖然句子中無加權的平均詞嵌入是簡單的基準做法,但是Smooth Inverse Frequency是更強有力的選擇
如果你可以用預訓練編碼器,選擇谷歌的那款吧。但是要記住它的表現(xiàn)可能不會總是那么驚艷。
-
編碼器
+關注
關注
45文章
3673瀏覽量
135294 -
數(shù)據(jù)集
+關注
關注
4文章
1209瀏覽量
24847 -
自然語言
+關注
關注
1文章
291瀏覽量
13406
原文標題:計算文本相似度常用的四種方法
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
優(yōu)化相似度計算在推薦系統(tǒng)中的應用
基于雙語LDA的跨語言文本相似度計算方法
![基于雙語LDA的跨語言<b class='flag-5'>文本相似</b><b class='flag-5'>度</b><b class='flag-5'>計算方法</b>](https://file.elecfans.com/web2/M00/49/61/poYBAGKhwKqAZA4mAAATS_U1V0U146.jpg)
一種基于WordNet的混合式語義相似度計算方法
提高相似度計算的準確率的過濾推薦算法
基于R-Grams文本相似度計算方法的文本聚類方法
思必馳在中文文本相似度計算方向上取得階段性成果
針對協(xié)同過濾推薦算法的相似度計算方法
![針對協(xié)同過濾推薦算法的<b class='flag-5'>相似</b><b class='flag-5'>度</b><b class='flag-5'>計算方法</b>](https://file.elecfans.com/web1/M00/E7/30/pIYBAGBcLXWAHAhRAAIMl9d9i94667.png)
評論