在比較兩個文本語義是否相同的時候虑绵,通常的做法是
- 使用傳統(tǒng)方法:one-hot word vector -> tf-idf/BM25 加權(quán) -> 使用歐式距離或者cosine相似系數(shù)
- 使用深度學習方法:
a. 得到詞的embedding怔锌,對詞的embedding做(加權(quán))平均得到句子向量,再用度量方法;
b. 借助深度模型得到句子的embedding,在句子語義層面上使用度量方法璧眠。
下面主要討論深度學習中除歐式距離和cosine相似系數(shù)的一些度量方法
主要參考自: Wang S, Jiang J. A compare-aggregate model for matching text sequences[J]. arXiv preprint arXiv:1611.01747, 2016.
這篇論文解決的問題是句子匹配任務(wù)渠鸽, 作者搭建了一個模型,并且重點比較了幾種相似度度量方法
先大致說一下這個模型踩衩,感興趣的可以看原文和相關(guān)分析嚼鹉,分為四個步驟:
- Preprocess, 對原始的問題和答案進行預(yù)處理,使每個詞獲得句子的上下文信息驱富,使用的是只保留了輸入門的lstm锚赤;
- Attention, 傳統(tǒng)的attention機制,用問題對答案加attention
- Comparison褐鸥,整合线脚,用于比較相似度
- Aggregation,結(jié)合CNN叫榕,構(gòu)建輸出網(wǎng)絡(luò)
下面主要說一下兩個vector的整合方式:
-
NN: 就是將兩個向量拼接起來浑侥,然后過一層神經(jīng)網(wǎng)絡(luò);
-
Euc+Cos: 計算兩個向量的歐式距離以及它們的余弦相似度晰绎,再把兩者的結(jié)果拼接起來寓落。
-
Sub/Mult : 兩個向量按位減后乘或者直接相乘
-
Sub/Mult + NN:在3的基礎(chǔ)上將二者拼起來,接一個NN
NTN: neural tensor network荞下,張量網(wǎng)絡(luò)伶选,能比較好的獲得詞向量間交叉乘積的能力,不過還是element-wise锄弱,具體原理可以參考Quora上的回答和論文原文
得到的是一個L維的向量考蕾,類似于CNN的filter可以定義多個,這里可以理解成定義了多個相乘關(guān)系会宪。
實驗結(jié)果:
可以看到這篇文章的模型在三個數(shù)據(jù)集上取得了非常好的結(jié)果肖卧,其中element-wise multiplication相關(guān)的方式是比較好的comparison function,比我們之前常用的余弦相似度掸鹅,歐氏距離等要高出不少塞帐。