起因:
想直接使用别人预训练好的中文词向量(比如:https://github.com/Embedding/Chinese-Word-Vectors),但下载下来之后,分析发现包含了大量数字、人名等“噪音词”(见下图),所以弃用。萌生自己训练中文词向量的想法。
闭环流程
算法
算法是现成的经典算法
word2vec
参考: https://zhuanlan.zhihu.com/p/40016964
gensim 把word2vec都封装好了, 直接调用接口就行。
glove
elmo
数据
高质量的语料数据+良好的数据预处理 是保证后期学得高质量embedding表示的关键。
wikipedia中文
参考:1、https://github.com/mattzheng/ChineseWiki
2、苏剑林 https://spaces.ac.cn/archives/4176
清华大学提供sina_news分类数据集 74万篇新浪新闻 http://thuctc.thunlp.org/message
存在如下问题:
1、数据中的数字 1120万 数字是无穷多的,不可能为每个数字学一个表示,初步的想法是将所有数字替换成特殊符号<NUM>
2、人名、地名、组织机构名:和数字同理,分别替换成<NAME> <PLACE> <ORG>
但是也会有问题,比如 中国、USA等词需要学到一个表示
总结:这是一个NER的问题,但需要做一个折衷,数字、人名
补充预训练好的中文词向量资源
腾讯AI: https://ai.tencent.com/ailab/nlp/embedding.html
对应中文介绍: https://zhuanlan.zhihu.com/p/47133426
Tips
参考:https://www.cnblogs.com/DjangoBlog/p/9113090.html 总结的很详细
自定义词典:由于百科数据有很多专属名词,很多比较长,如果直接分词,很大情况下会被切开,这不是我们想要的结果,比如:中国人民解放军,可能会被分成:中国 人民 解放军,jieba虽然有新词发现功能,为保证分词准确度,jieba的作者建议我们还是使用自定义词典。