使用中文wiki语料库训练word2vec

1. 任务描述

本文主要完成以下任务:

  • 训练字的embedding(unigram char embedding)
  • 训练二元字的embedding(bigram char embedding)
  • 训练词的embedding(word embedding)

2. 准备工作

2.1 语料准备

下载当前最新打包的中文(简体)wiki的文本语料。

2.2 训练工具

本文使用Python进行处理,版本为3.6。训练过程中需要的第三方工具为Gensim、OpenCC、LTP。其中Gensim用于读取维基语料、训练word2vec,OpenCC用于汉字繁简转换,LTP用于分词。

所需要工具都可以通过pip3安装:




word2vec


3. 高级话题


3.1 word2vec的GPU训练


3.2 参数选择

3.2.1 维度选择

维度的选择同具体的数据集有关和处理的任务有关。有个经验法则说维度应该不低于4倍的类别标签数量,50,100,200,300是比较常用的数值。Facebook在github上公开的157种语言的Word Embedding数据(FastText)的维度是300。

改进模型

3.3 改进模型

  • 李素建老师等提出借助汉字借助偏旁部首或部件来改进汉字的Embedding,在分类任务上取得显著的效果提升。点此查看论文。

3.4 训练内存消耗

训练word2vec时最消耗内存的是权重矩阵。权重矩阵消耗的内存可以通过以下公式计算:词表大小*向量维度*2*数据类型大小。加载Pre-trained模型,需要内存大概为训练模型时内存消耗的1/2。

3.5 单行输入是句子还是文档

word2vec是句子层面的算法,所以句子边界非常重要,建议一行一个汉语句子。如果一行数据是一篇长文档,则理论上除了开头和结尾窗口大小个词语外,中间的其他词语都必须经过理论上限轮的skip-gram计算,这会增加训练时间,也会导致模型因为缺少句子边界信息而导致词语贡献关系发生变化。

对于GloVe,句子边界无关紧要,因为Glove关注的是整个语料库中的同现关系。


4. 有关资源

4.1 汉语Pre-trained资源

百科网页+多个分类新闻语料训练结果,Word Embedding,CBOW、SKIP、Glove。





参考文献:

https://www.jianshu.com/p/05800a28c5e4

https://segmentfault.com/a/1190000010129248

你可能感兴趣的:(使用中文wiki语料库训练word2vec)