實現2種詞匯相關度計算方法,基於詞典與基於語料各壹種
基於Mturk-771進行實驗和分析(開放式) : _similarity(c1,c2, brown_ic) # 1/2 * log P(LCS(c1,c2)) - (logP(c1) + logP(c2))
lin_similarity(c1,c2, semcor_ic) # 2 * log P(LCS(c1,c2)) / (logP(c1) + logP(c2))
特殊處理:
1、 其中lin_similarity、wup_similarity和path_similarity結果範圍在[0,1]之間,而由我們的數據可知,數據結果應該在[0,5]之間,因此這裏我們把結果×5進行處理。
2、 壹個詞會有多種詞義,判斷兩個詞需要讓兩個詞之間的各個詞義進行比較。如何判斷兩個詞之間的相似度呢?我同時使用了最大值和平均值,發現平均值得到的結果會非常小,猜想兩個詞之間可能有較多的詞義無關,影響了結果,因此最後選擇用最大值。
3、 lch_similarity得到的值都不大,因此最後進行了歸壹化處理×5
4、 res_similarity(c1,c2, brown_ic) jcn_similarity(c1,c2, brown_ic)得到的結果存在le+300,而第二大的數分別為12.26837533572617和19.273454235478546,因此取13和20代替原來的最大le+300。
剩余分數則是歸壹化後再×5
五分分值:
因為預訓練詞向量都比較大,這裏就使用了gensim中的word2vec模型進行自行訓練,訓練語料為text8,大概有100M左右。
最後得到的結果如下圖:score為真實評分分布,w2v為word2vec實際評分分布。
結果分析使用了均方誤差
由圖可以看出,word2vec方法和 res算法結果較好,觀察預測結果分布,可以看出這兩種方法和真實結果分布比較相似。
在觀察時,我們也發現,path等方法相似度偏向與1(或者是5)左右,原因是我們這裏取的是最大值,對於account,explanation這兩個單詞,因為它們有相同的詞義,這裏就認為相似度最大。但實際在現實生活中,考慮兩個詞詞義是否相似,除卻詞義的重合程度外,可能還要考慮兩個詞是否是常用詞義相似等等。比如兩個詞常用含義相似和兩個詞罕見含義相似,雖然都是某種詞義相似,但顯然前者更能體現詞的相似度。
因此可能取平均和取最大都不能很好的描述兩個詞之間的相似度。而語料的方法則可以得到詞的常用和罕見意義這壹信息。這裏用word2vec訓練語料有限,可能結果也不是非常準確,相信如果網上很多預訓練的詞向量可能會有更好的結果。