計算文本相似度方法總結(一)


方法1:無監督,不使用額外的標注數據

  • average word vectors:簡單的對句子中的所有詞向量取平均,是一種簡單有效的方法,

    缺點:沒有考慮到單詞的順序,只對15個字以內的短句子比較有效,丟掉了詞與詞間的相關意思,無法更精細的表達句子與句子之間的關系。

  • tfidf-weighting word vectors:指對句子中的所有詞向量根據tfidf權重加權求和,是常用的一種計算sentence embedding的方法,在某些問題上表現很好,相比於簡單的對所有詞向量求平均,考慮到了tfidf權重,因此句子中更重要的詞占得比重就更大。

    缺點:沒有考慮到單詞的順序

  • bag of words:這種方法對於短文本效果很差,對於長文本效果一般,通常在科研中用來做baseline。缺點:1.沒有考慮到單詞的順序,2.忽略了單詞的語義信息

  • LDA:計算出一片文檔或者句子的主題分布。也常常用於文本分類任務

  • smooth inverse frequency[1](簡稱SIF)為權重,對所有詞的word vector加權平均,最后從中減掉principal component,得到sentence embedding

    [1] Sanjeev Arora, et al. 2017. A Simple but Tough-to-Beat Baseline for Sentence Embeddings

  • 通過Word Mover’s Distance[2](簡稱WMD),直接度量句子之間的相似度

    [2] Matt J. Kusner, et al. 2015. From Word Embeddings To Document Distances

  • LSI或LSA:LSI是處理相似度的,基於SVD分解,用於特征降維,LSI求解出來的相似度跟topic相關性很強,而句子結構等信息較少。順便說下,句子中詞的順序是不會影響LSI相似度結果的。

方法2:有監督,需要額外的標注數據

  • 分類任務,例如訓練一個CNN的文本分類器[3],取最后一個hidden layer的輸出作為sentence embedding,其實就是取分類器的前幾層作為預訓練的encoder

    [3] Yoon Kim. 2014. Convolutional Neural Networks for Sentence Classification

  • sentence pair的等價性/等義性判定[4],這種方法的好處是不僅可以得到sentence embedding,還可以直接學習到距離度量函數里的參數

    [4] Jonas Mueller, et al. 2016. Siamese Recurrent Architectures for Learning Sentence Similarity

方法3:DSSM-LSTM,2016年提出

用DSSM-LSTM計算任意一對短文本的語義相似性,能夠捕捉上下文信息。

方法4:doc2vec(paragraph2vec, sentence embeddings),2014年提出

一種非監督式算法,可以獲得 sentences/paragraphs/documents 的向量表達,是 word2vec 的拓展。學出來的向量可以通過計算距離來找 sentences/paragraphs/documents 之間的相似性,可以用於文本聚類,對於有標簽的數據,還可以用監督學習的方法進行文本分類,例如經典的情感分析問題。

訓練過程中新增了paragraph id,即訓練語料中每個句子都有一個唯一的id。paragraph id 和普通的word一樣,先是映射成一個向量,即paragraph vector。paragraph vector與word vector的維數雖一樣,但是來自於兩個不同的向量空間。在之后的計算里,paragraph vector與word vector累加或者連接起來,作為輸出層softmax的輸入。在一個句子或者文檔的訓練過程中,paragraph id保持不變,共享同一個paragraph vector,相當於每次在預測單詞的概率時,都利用了整個句子的語義。

DM(Distributed Memory,分布式內存):DM試圖在給定前面部分的詞和paragraph向量來預測后面單獨的單詞,即使文本中的語境在變化,但paragraph向量不會變換,並且能保存詞序信息。

分布式詞袋(DBOW):利用paragraph來預測段落中一組隨機的詞.

sentence2vec相對於word2vec的skip-gram模型,區別點為:在sentence2vec里,輸入都是paragraph vector,輸出是該paragraph中隨機抽樣的詞。

參考文獻:

【1】doc2vec原理及實踐

【2】句子和文檔的分布式表示

【3】基於gensim的Doc2Vec簡析

【4】models.doc2vec – Doc2vec paragraph embeddings

【5】如何用 word2vec 計算兩個句子之間的相似度?


免責聲明!

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



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