比較句子相似度方法
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
編者按:本文作者為Yves Peirsman,是NLP領域的專家。在這篇博文中,作者比較了各種計算句子相似度的方法,并了解它們是如何操作的。詞嵌入(word embeddings)已經(jīng)在自然語言處理領域廣泛使用,它可以讓我們輕易地計算兩個詞語之間的語義相似性,或者找出與目標詞語最相似的詞語。然而,人們關注更多的是兩個句子或者短文之間的相似度。如果你對代碼感興趣,文中附有講解細節(jié)的Jupyter Notebook地址。以下是論智的編譯。 許多NLP應用需要計算兩段短文之間的相似性。例如,搜索引擎需要建模,估計一份文本與提問問題之間的關聯(lián)度,其中涉及到的并不只是看文字是否有重疊。與之相似的,類似 數(shù)據(jù)我們將在兩個被廣泛使用的數(shù)據(jù)集上測試所有相似度計算方法,同時還與人類的判斷作對比。兩個數(shù)據(jù)集分別是:
下面的表格是STS數(shù)據(jù)集中的幾個例子??梢钥吹?,兩句話之間的語義關系通常非常微小。例如第四個例子
通過判斷,兩句話之間“非常不相似”,盡管它們的句法結(jié)構(gòu)相同,并且其中的詞嵌入也類似。 相似度方法有很多方法可以計算兩個句子之間的意思相似度。在這里,我們看一下最常見的那些。 基準方法估計兩句子間語義相似度最簡單的方法就是求句子中所有單詞詞嵌入的平均值,然后計算兩句子詞嵌入之間的余弦相似性。很顯然,這種簡單的基準方法會帶來很多變數(shù)。我們將研究,如果忽略終止詞并用TF-IDF計算平均權(quán)重會帶來怎樣的影響。 詞移距離替代上述基準方法的其中一種有趣方法就是詞移距離(Word Mover’s Distance)。詞移距離使用兩文本間的詞嵌入,測量其中一文本中的單詞在語義空間中移動到另一文本單詞所需要的最短距離。 Smooth Inverse Frequency從語義上來講,求一句話中詞嵌入的平均值似乎給與不相關的單詞太多權(quán)重了。而Smooth Inverse Frequency試著用兩種方法解決這一問題:
最后,SIF使一些不重要的詞語的權(quán)重下降,例如but、just等,同時保留對語義貢獻較大的信息。 預訓練編碼器上述兩種方法都有兩個重要的特征。首先,作為簡單的詞袋方法,它們并不考慮單詞的順序。其次,它們使用的詞嵌入是在一種無監(jiān)督方法中學習到的。這兩種特點都有潛在的威脅。由于不同的詞語順序會有不同的意思(例如 于是就出現(xiàn)了預訓練編碼器。預訓練的句子編碼器的目的是充當
為了與Facebook競爭,谷歌也推出了自己的語句編碼器,它有兩種形式:
基于變換的模型的結(jié)果更好,但是在書寫的時候,只有基于DAN的編碼器可用。與InferSent不同,谷歌的橘子編碼器是在監(jiān)督數(shù)據(jù)和非監(jiān)督數(shù)據(jù)上共同訓練的。 結(jié)果我們在 基準方法盡管他們很簡潔,在平均詞嵌入之間求余弦相似性的基準方法表現(xiàn)得非常好。但是,前提仍要滿足一些條件:
詞移距離基于我們的結(jié)果,好像沒有什么使用詞移距離的必要了,因為上述方法表現(xiàn)得已經(jīng)很好了。只有在STS-TEST上,而且只有在有停止詞列表的情況下,詞移距離才能和簡單基準方法一較高下。 Smooth Inverse FrequencySIF是在測試中表現(xiàn)最穩(wěn)定的方法。在SICK數(shù)據(jù)集上,它的表現(xiàn)和簡單基準方法差不多,但是在STS數(shù)據(jù)集上明顯超過了它們。注意,在帶有word2vec詞嵌入的SIF和帶有GloVe詞嵌入的SIF之間有一些差別,這種差別很顯著,它顯示了SIF的加權(quán)和去除常用元素后減少的非信息噪音。 預訓練編碼器預訓練編碼器的情況比較復雜。但是我們的結(jié)果顯示編碼器還不能完全利用訓練的成果。谷歌的句子編碼器看起來要比InferSent好一些,但是皮爾森相關系數(shù)的結(jié)果與SIF的差別不大。 而斯皮爾曼相關系數(shù)的效果更直接。這也許表明,谷歌的句子編碼器更能了解到句子的正確順序,但是無法分辨其中的差別。 結(jié)論語句相似度是一個復雜現(xiàn)象,一句話的含義并不僅僅取決于當中的詞語,而且還依賴于它們的組合方式。正如開頭我們舉的那個例子(harp和keyboard),語義相似度有好幾種維度,句子可能在其中一種維度上相似,而在其他維度上有差異。目前的句子嵌入方法也只做到了表面。通常我們在皮爾森相關系數(shù)(Pearson correlation)上進行測試,除了有些情況下斯皮爾曼相關系數(shù)(Spearman correlation)會有不一樣的結(jié)果。 所以,如果你想計算句子相似度,你會選擇哪種方法呢?我們的建議如下:
Google 編碼器GitHub地址
模型
Google Research(Universal Sentence Encoder): https://www.dazhuanlan.com/2019/11/21/5dd5876d6a9da/ 該文章在 2023/3/22 18:34:53 編輯過 |
關鍵字查詢
相關文章
正在查詢... |