1

使用 gensim word2vec,构建了一个带有一堆诉讼文件的 CBOW 模型,用于在命名实体识别问题中将单词表示为向量,但我想知道如何评估我的单词表示。如果我使用任何其他数据集,如 wordsim353(NLTK) 或谷歌的其他在线数据集,它就不起作用,因为我构建了特定于我的域文件数据集的模型。如何评估 word2vec 对词向量的表示。我希望属于相似上下文的词在向量空间中更接近。如何确保构建模型正在执行它?

我开始使用一种叫做奇数一出的技术。例如:

model.wv.doesnt_match("breakfast cereal dinner lunch".split()) --> 'cereal'

我使用 word2vec 训练中的单词创建了自己的数据集(用于验证)。开始评估三个词的相似上下文和一个奇怪的词脱离上下文。但是我的模型的准确率只有 30%。

上述方法真的有助于评估我的 w2v 模型吗?或者,还有更好的方法 ?

我想使用 word_similarity 度量,但我需要一个参考分数(人工评估)来评估我的模型,或者有什么技术可以做到吗?请提出任何想法或技术。

4

1 回答 1

1

最终,这取决于您打算使用词向量的目的——您的评估应尽可能模仿最终用途。

“奇数一出”的方法可能是合理的。它通常只用两个单词来完成,这些单词通过外部知识/分类已知是相关的(在对您的最终用途很重要的方面),然后是随机挑选的第三个单词。

如果你认为你的手工评估集对你的目的来说是高质量的,但你的词向量做得不好,那可能只是你的训练存在其他问题:数据太少,预处理错误,选择不当的元参数等

您必须更详细地查看个别失败案例,才能选择下一步要改进的地方。例如,即使它在您的一个奇数测试中失败了,对于包含的每个单词,最相似单词的列表在眼球测试中是否仍然具有表面意义?使用更多数据或更多训练迭代是否会显着提高评估得分?

训练和评估/部署过程中的一个常见错误是保留太多稀有词,基于(错误的)直觉“更多信息必须更好”。事实上,只出现几次的单词并不能得到非常高质量的向量。(与更频繁的词相比,它们的末端向量更受随机原始初始化的影响,以及它们很少出现的特性而不是它们最普遍的含义。)此外,它们的存在往往会干扰改进其他附近更频繁的词。然后,如果您在评估中包含较弱向量的“长尾”,它们往往会在某种程度上任意侵入具有强向量的常用词的排名,从而隐藏您评估问题的“正确”答案。

另外,请注意,评估分数的绝对值可能并不那么重要,因为您只是在寻找能够将其他优化指向正确方向以实现真正最终目标的东西。在精确评估问题上稍微好一点的词向量在其他更模糊的信息检索上下文中可能仍然足够好。

于 2017-10-30T16:01:24.460 回答