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