我试图在非常短的短语(5克)上训练word2vec模型.由于每个句子或例子都很短,我相信我可以使用的窗口大小最多可以是2.我试图理解这么小的窗口大小对学习模型的质量有什么影响,这样我才能理解我的模型是否学到了有意义的东西.我尝试在5克上训练word2vec模型,但似乎学习模型不能很好地捕获语义等.
我使用以下测试来评估模型的准确性:https: //code.google.com/p/word2vec/source/browse/trunk/questions-words.txt
我使用gensim.Word2Vec来训练模型,这里是我的准确度分数的片段(使用2的窗口大小)
[{'correct': 2, 'incorrect': 304, 'section': 'capital-common-countries'},
{'correct': 2, 'incorrect': 453, 'section': 'capital-world'},
{'correct': 0, 'incorrect': 86, 'section': 'currency'},
{'correct': 2, 'incorrect': 703, 'section': 'city-in-state'},
{'correct': 123, 'incorrect': 183, 'section': 'family'},
{'correct': 21, 'incorrect': 791, 'section': 'gram1-adjective-to-adverb'},
{'correct': 8, 'incorrect': 544, 'section': 'gram2-opposite'},
{'correct': 284, 'incorrect': 976, 'section': 'gram3-comparative'},
{'correct': 67, 'incorrect': 863, 'section': 'gram4-superlative'},
{'correct': 41, 'incorrect': 951, 'section': 'gram5-present-participle'},
{'correct': 6, 'incorrect': 1089, 'section': 'gram6-nationality-adjective'},
{'correct': 171, 'incorrect': 1389, 'section': 'gram7-past-tense'},
{'correct': 56, 'incorrect': 936, 'section': 'gram8-plural'},
{'correct': 52, 'incorrect': 705, 'section': 'gram9-plural-verbs'},
{'correct': 835, 'incorrect': 9973, 'section': 'total'}]
Run Code Online (Sandbox Code Playgroud)
我还尝试运行这里概述的demo-word-accuracy.sh脚本,窗口大小为2,并且精度也很差:
Sample output:
capital-common-countries:
ACCURACY TOP1: 19.37 % (98 / 506)
Total accuracy: 19.37 % Semantic accuracy: 19.37 % Syntactic accuracy: -nan %
capital-world:
ACCURACY TOP1: 10.26 % (149 / 1452)
Total accuracy: 12.61 % Semantic accuracy: 12.61 % Syntactic accuracy: -nan %
currency:
ACCURACY TOP1: 6.34 % (17 / 268)
Total accuracy: 11.86 % Semantic accuracy: 11.86 % Syntactic accuracy: -nan %
city-in-state:
ACCURACY TOP1: 11.78 % (185 / 1571)
Total accuracy: 11.83 % Semantic accuracy: 11.83 % Syntactic accuracy: -nan %
family:
ACCURACY TOP1: 57.19 % (175 / 306)
Total accuracy: 15.21 % Semantic accuracy: 15.21 % Syntactic accuracy: -nan %
gram1-adjective-to-adverb:
ACCURACY TOP1: 6.48 % (49 / 756)
Total accuracy: 13.85 % Semantic accuracy: 15.21 % Syntactic accuracy: 6.48 %
gram2-opposite:
ACCURACY TOP1: 17.97 % (55 / 306)
Total accuracy: 14.09 % Semantic accuracy: 15.21 % Syntactic accuracy: 9.79 %
gram3-comparative:
ACCURACY TOP1: 34.68 % (437 / 1260)
Total accuracy: 18.13 % Semantic accuracy: 15.21 % Syntactic accuracy: 23.30 %
gram4-superlative:
ACCURACY TOP1: 14.82 % (75 / 506)
Total accuracy: 17.89 % Semantic accuracy: 15.21 % Syntactic accuracy: 21.78 %
gram5-present-participle:
ACCURACY TOP1: 19.96 % (198 / 992)
Total accuracy: 18.15 % Semantic accuracy: 15.21 % Syntactic accuracy: 21.31 %
gram6-nationality-adjective:
ACCURACY TOP1: 35.81 % (491 / 1371)
Total accuracy: 20.76 % Semantic accuracy: 15.21 % Syntactic accuracy: 25.14 %
gram7-past-tense:
ACCURACY TOP1: 19.67 % (262 / 1332)
Total accuracy: 20.62 % Semantic accuracy: 15.21 % Syntactic accuracy: 24.02 %
gram8-plural:
ACCURACY TOP1: 35.38 % (351 / 992)
Total accuracy: 21.88 % Semantic accuracy: 15.21 % Syntactic accuracy: 25.52 %
gram9-plural-verbs:
ACCURACY TOP1: 20.00 % (130 / 650)
Total accuracy: 21.78 % Semantic accuracy: 15.21 % Syntactic accuracy: 25.08 %
Questions seen / total: 12268 19544 62.77 %
Run Code Online (Sandbox Code Playgroud)
然而,word2vec网站声称可以在这些任务上获得约60%的准确度.因此,我想深入了解这些超参数的效果,如窗口大小以及它们如何影响学习模型的质量.
goj*_*omo 25
类比问题的分数非常低,更可能是由于训练数据的数量或质量的限制,而不是错误的参数.(如果你的训练短语实际上只有5个单词,它们可能无法捕捉到与完整句子的数据集中发现的相同的丰富关系.)
您可以在短语上使用5的窗口 - 训练代码将窗口修剪为两侧可用的窗口 - 但每个短语的每个单词都会影响所有其他单词.这可能没问题:Google word2vec论文之一("单词和短语的分布式表达及其组合性")提到,为了在其中一个短语任务中获得最佳准确性,他们使用"整个句子用于上下文".(另一方面,在一个短消息的英语语料库中,我发现只有2的窗口大小创建了在类比评估中得分最高的向量,因此更大的不一定更好.)
Levy&Goldberg撰写的一篇论文"基于依赖关系的词嵌入",讲述了窗口大小的定性影响:
https://levyomer.files.wordpress.com/2014/04/dependency-based-word-embeddings-acl-2014.pdf
他们发现:
较大的窗口倾向于捕获更多主题/域信息:在相关讨论中使用了哪些(任何类型的)其他单词?较小的窗口倾向于捕获更多关于单词本身的内容:其他单词在功能上是否相似?(他们自己的扩展,基于依赖的嵌入,似乎最能找到最相似的单词,同义词或明显的替代品,可以作为原始单词的替代品.)
mic*_*ang 10
关于你的问题"我试图理解这么小的窗口大小对学习模型质量的影响"
例如"stackoverflow伟大的程序员网站",有5个单词(假设我们保存了很好的停止词,如果窗口大小为2)那么单词"stackoverflow"的向量直接受到"great"和"website"这个词的影响,如果窗口大小为5"stackoverflow"可以直接受到两个"for"和"programmers"的影响.受影响的地方意味着它将拉近两个单词的向量
因此,它取决于您用于训练的材料,如果窗口大小为2可以捕获单词的上下文,但是选择5,则会降低学习模型的质量,反之亦然