使用Gensim在专业领域、高相关性、小语料库上训练词向量
解决使用Gensim默认词向量训练参数得到的词向量过分集中的问题。
1 语料背景
采用热电厂《辅机运行规程》,其特点如下:
-
语料规模:不到7000句
-
语料特点:句法单一,相关性强,专业词语多
比如:辅机冷却水系统投运
闭式冷却水系统的投运
主机手动盘车投运
2 语料预处理
采用用户自定义词典,使得分词结果符合要求。本例采用spaCy-pkuseg。由于训练窗口的限制,去掉分词数小于2的文本。
再用gensim的preprocess,清理掉符号、数字等。
3 训练词向量
3.1 gensim版本问题
经过测试,如高于3.7.1,会出现“c extension not loaded, training will be slow”警告,训练速度慢。故本例采用gensim3.7.1。
3.2 训练参数问题
gensim默认的参数:window=5, min_count=5, size=100, iter=5
由于本语料会有这么多短文本,而且语料规模小,首先改为:window=2, min_count=2, size=100, iter=5
其中window–滑动窗口大小;min_count–最小出现频次;size–词向量维度;iter–训练迭代次数
训练出来的词向量过于集中:
m.most_similar(‘高厂变’)
结果为:
[(‘生产’, 0.9991931915283203),
(‘误动’, 0.9991821646690369),
(‘相序’, 0.9991811513900757),
(‘至少’, 0.9991638660430908),
(‘切断’, 0.9991508722305298),
(‘熔断’, 0.9991501569747925),
(‘第二’, 0.9991487264633179),
(‘机构’, 0.9991455078125),
(‘执行’, 0.9991400241851807),
(‘然后’, 0.9991398453712463)]
由此可见,接近于1的相似度表明,模型应该是没有学到东西。
改动训练参数:包括window, min_count, size以及sg(0:CBOW 1:skip-gram),结果仍然没有什么变化。
提高iter=100,结果如下:
m.most_similar(‘高厂变’)
[(‘同一’, 0.7710763216018677),
(‘启备变’, 0.7308345437049866),
(‘低厂变’, 0.7288611531257629),
(‘主变’, 0.7078028321266174),
(‘油浸风冷变压器’, 0.687451183795929),
(‘油浸’, 0.6771216988563538),
(‘分裂’, 0.6610449552536011),
(‘b分’, 0.6084666848182678),
(‘风冷’, 0.5939120054244995),
(‘mva’, 0.5772408246994019)]
由此可见,模型确实学到了东西。
4 结论
对于在专业领域高相关性小语料库上训练词向量,训练迭代次数非常重要。提高训练迭代次数能够很好地解决词向量过于相似的问题。