導讀
最近在做詞向量相關工作,訓練的詞向量如何進行評測?本文將從業界使用最廣泛的兩個評測任務進行闡述,包括相似度任務(word similarity task
)和詞匯類比任務(word analogy task
),這里已經寫好了相關評測腳本(Word_Similarity_and_Word_Analogy),包括中文詞向量評測腳本和英文V詞向量評測腳本,方便大家使用。
相關知識
對於詞向量好壞的評測,業界最常用的也是最快的評測方式是計算詞之間的相似度任務(word similarity task
)和與之相關的是詞匯類比任務(word analogy task
),然而,近兩年來,詞向量僅僅在這兩個任務上進行評測已經不在得到公認,要想得到公認,詞向量的好壞需要應用到具體任務中進行評測,包括句子分類,文本分類,詞性標注(Part-of-Speech tagging
),命名實體識別(NER
)等,但是這兩個任務還是最基本的評測,詞向量的相關論文中也會進行這部分的實驗。
Word Similarity Task
什么是Word Similarity?
這個任務的目的是評估詞向量模型在兩個詞之間的語義緊密度和相關性的能力,例如男人與女人,男孩與女孩,中國與北京這些詞對之間的相似度。
評價指標
在詞相似度任務上,一般采用 斯皮爾曼等級相關系數(ρ)(Spearman's rank correlation coefficient)
作為評價指標,簡寫為 rho
,它是衡量兩個變量的依賴性的指標,它利用單調方程評價兩個統計變量的相關性。 如果數據中沒有重復值, 並且當兩個變量完全單調相關時,斯皮爾曼相關系數則為 +1 或 −1 。對於樣本容量為 n 的樣本,相關系數 ρ 的計算如下圖:
評價指標計算
1、首先,我們有一個金標文件(wordsim-240.txt),這份文件標注了兩個詞之間的相似度分數,是由人工標注的,類似於下面:
大學生 就業 7.45
圖片 照片 7.45
北京 中國 7.4
能源 石油 7.4
電台 音樂 7.4
2、我們根據詞向量計算兩個詞之間的 余弦值(cos)
作為詞的相似度分數,然后計算金標分數與余弦值分數之間的斯皮爾曼相關系數。
3、代碼:
def Word_Similarity(self, similarity_name, vec):
pred, label, found, notfound = [], [], 0, 0
with open(similarity_name, encoding='utf8') as fr:
for i, line in enumerate(fr):
w1, w2, score = line.split()
if w1 in vec and w2 in vec:
found += 1
pred.append(self.cos(vec[w1], vec[w2]))
label.append(float(score))
else:
notfound += 1
file_name = similarity_name[similarity_name.rfind("/") + 1:].replace(".txt", "")
self.result[file_name] = (found, notfound, self.rho(label, pred))
Word Analogy Task
什么是Word Analogy?
這個任務考察了用詞向量來推斷不同單詞之間的語義關系的能力。在這個任務中,三個單詞 a ,b 和 s 被給出,目標是推斷出第四個單詞 t 滿足”a 是 b,t 和 s 是相似的
“。
如何得到類似的詞
例如,我們要完成一句話,巴黎到法國像羅馬到()
?巴黎與法國,這兩個詞之間是有語義關系的(巴黎是法國的首都),那么,根據第三個詞(羅馬),我們可以推斷出是意大利嗎?
我們可以根據矢量的加減來做到這一點!這是因為這些單詞在空間上具有特定的關系,如下圖:
從上圖我們可以發現:
vec(法國) - vec(巴黎) = answer_vector - vec(羅馬)
由此我們可以根據詞向量得到類似詞匯:
answer_vector = vec(法國) - vec(巴黎) + vec(羅馬)
Demo
上文已經把簡單的理論進行了闡述,相關代碼在這里(Word_Similarity_and_Word_Analogy)。這份代碼包括中文詞向量評測腳本
以及英文詞向量評測腳本
,更多的細節,可以查看README。
對於英文詞向量,Faruqui, Manaal, 和 Chris Dyer 建立了一份詞向量評測系統 (Word2vec Demo ) ,可以在這份系統上進行評測,我已經把這個系統的后台代碼進行完善封裝放在了github上面(en_embedding_similarity),可以直接使用這份腳本評測。
References
[1] Word2vec Demo
[2] Faruqui, Manaal, and Chris Dyer. "Community evaluation and exchange of word vectors at wordvectors. org." Proceedings of 52nd Annual Meeting of the Association for Computational Linguistics: System Demonstrations. 2014.
[3] Playing with word vectors
[4] 斯皮爾曼等級相關系數