如何計算句子的語義相似性,很容易想到的是向量空間模型(VSM)和編輯距離的方法,比如A:“我爸是李剛”,B:“我兒子是李剛”,利用VSM方法A(我,爸,是,李剛)B(我,兒子,是,李剛),計算兩個向量的夾角餘弦值,不贅述;編輯距離就更好說了將“爸”,“兒子”分別替換掉,D(A,B)= replace_cost;
這是兩種相當呆的方法,屬於baseline中的baseline,換兩個例子看一下就知道A:“樓房如何建造?”,B:“高爾夫球怎麼打?”,C:“房子怎麼蓋?”,如果用VSM算很明顯由於B,C中有共同的詞“怎麼”,所以BC相似性高於AC;編輯距離同理;
解決這種問題方法也不難,只要通過同義字詞典對所有句子進行擴充,“如何”、“怎麼”,“樓房”、“房子”都是同義字或者近義詞,擴充後再算vsm或者edit distance對這一問題即可正解。這種方法一定程度上解決了召回率低的問題,但是擴充後引入雜訊在所難免,尤其若原句中含有多義詞時。例如:“打醬油”、“打毛衣”。在漢字中有些單字詞表達了相當多的意義,在董振東先生的知網(hownet)中對這種類型漢字有很好的語義關係解釋,通過hownet中詞語到義元的樹狀結構可以對對詞語粒度的形似度進行度量。
問題到這裡似乎得到了不錯的解答,但實際中遠遠不夠。VSM的方法把句子中的詞語看做相互獨立的特徵,忽略了句子序列關係、位置關係對句子語義的影響;Edit Distance考慮了句子中詞語循序關聯性,但是這種關係是機械的置換、移動、刪除、添加,實際中每個詞語表達了不同的資訊量,同樣的詞語在不同詞語組合中包含的資訊量或者說表達的語義資訊大不相同。What about 句法分析,計算句法樹的相似性?這個比前兩種方法更靠譜些,因為句法樹很好的描述了詞語在句子中的地位。實際效果要待實驗證實。
對了,還有一種方法translation model,IBM在機器翻譯領域的一大創舉,需要有大量的語料庫進行訓練才能得到理想的翻譯結果。當然包括中間詞語對齊結果,如果能夠利用web資源建立一個高品質的語料庫對兩兩相似句對通過EM迭代詞語對齊,由詞語對齊產生句子相似性,這個。。想想還是不錯的方法!