开发者社区> ebxinxi> 正文

gensim训练word2vec语料库初探

简介:
+关注继续查看

NLP技术已经非常成熟,各行各业都需要有专门的NLP技术。网上介绍gensim的材料很多,有几种类型:

  • 翻译,摘录的非原创,采用英文维基wiki语料库的
  • 中文训练,但是采用的现成语料库,比如中文维基,搜狐新闻等通用语料。
    真正动起手来,还是困难重重,下面我结合实践来介绍下怎么训练专业语料库。

为什么需要专业语料库?

专业语料库能够识别通用语料库中不突出的专业词汇。
能够高效体现专业领域的专业信息相关度,用于问答系统的归一化,对话系统的专家库等方面。

技术路线选择

word2vec的实现各个语言版本都有,语料库的训练应考虑模型通用性,便于其他语言调用。Word2Vec 究竟选择Tensorflow还是 gensim这篇文章中介绍了我的观点。

流程整体介绍

1.语料准备,语料从哪来?能做什么用?这是基础,不在本文讲述。最近看到有人把电影字幕转成对话语料,实在让人大跌眼镜。
2.语料过滤:去掉非中文字符,去掉空格,一句话一行,中文分词,当然还可以自定义词典。最后的list是这样的 ['eps', 'user', 'interface', 'system']。 剩下的步骤网上到处都是,这里不多讲了。
3.开始训练
4.及时保存模型
5.模型加载使用
6.迭代模型,对于增量部分重复。

硬件平台

word2vec 的训练和GPU无关,是CPU计算密集型应用。
经过实际的对比,采用阿里云2vcpu的机器和双路16核服务器的速度相差10倍。推荐采用物理主机。

关键代码

-模型的重用
model = KeyedVectors.load(MODEL_NAME)
model.train(sentens, total_examples=model.corpus_count, epochs=model.iter)
-语料从数据库中直接读取,采用迭代器降低内存占用

class sentences:
    def __iter__(self):
        texts_set = set()
        docs=getDBCorupus()        
        i=0
        if docs is None:
            exit
        for doc in docs:
            sentence=filterCorupus(doc)
            i+=1            
            yield sentence

word2vec = Word2Vec(sentences(), size=256, window=5, min_count=5, sg=1, hs=1, iter=10, workers=25)

速度优化

-考虑重复训练与增量训练的可能,所以原始数据仍然保存在数据库中,依靠数据库来识别增量部分。
-为了避免数据读取后读写磁盘降低效率,直接通过迭代器模式把海量数据放在内存中。网上的例子大都是直接读取语料文件。

踩过的坑

现象1:保存的model 只有80k, log显示:collected 20 word types from a corpus of 371948 raw words and 10 sentences.
原因:语料输入有问题,导致word types 太少。
解决办法: print 少量语料,检查结构

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
深度学习基础入门篇10:序列模型-词表示{One-Hot编码、Word Embedding、Word2Vec、词向量的一些有趣应用}
深度学习基础入门篇10:序列模型-词表示{One-Hot编码、Word Embedding、Word2Vec、词向量的一些有趣应用}
25 0
基于 word2vec TextCNN 的新闻文本分类
基于 word2vec TextCNN 的新闻文本分类
84 0
文本深度表示模型——word2vec&doc2vec词向量模型
NLP 中最直观,也是到目前为止最常用的词表示方法是 One-hot Representation,这种方法把每个词表示为一个很长的向量。这个向量的维度是词表大小,其中绝大多数元素为 0,只有一个维度的值为 1,这个维度就代表了当前的词。
67 0
word2vec模型原理及实现词向量训练案例(二)
word2vec模型原理及实现词向量训练案例
110 0
word2vec模型原理及实现词向量训练案例(一)
word2vec模型原理及实现词向量训练案例
69 0
自然语言处理=======python利用word2vec实现计算词语相似度【gensim实现】
自然语言处理=======python利用word2vec实现计算词语相似度【gensim实现】
137 0
Gensim实现Word2Vec的Skip-Gram模型
gensim是一个开源的Python库,用于便捷高效地提取文档中的语义话题。它用于处理原始的、非结构化的电子文本(“纯文本”),gensim中的一些算法,如 Latent Semantic Analysis(潜在语义分析)、 Latent Dirichlet Allocation(潜在Dirichlet分布)、Random Projections(随机预测)通过检查训练文档中的共现实体来挖掘语义结构。
171 0
NLP教程(1) - 词向量、SVD分解与Word2Vec
本文介绍自然语言处理(NLP)的概念及其面临的问题,进而介绍词向量和其构建方法(包括基于共现矩阵降维和Word2Vec)。
1135 0
【新闻文本分类】(task4)使用gensim训练word2vec
Word2vec即“word to vector”,是一个生成对“词”的向量表达的模型。 想要训练 Word2vec 模型,我们需要准备由一组句子组成的语料库。假设其中一个长度为 T 的句子包含的词有 w1,w2……wt,并且我们假定每个词都跟其相邻词的关系最密切。
360 0
NLP之word2vec:利用 Wikipedia Text(中文维基百科)语料+Word2vec工具来训练简体中文词向量(二)
NLP之word2vec:利用 Wikipedia Text(中文维基百科)语料+Word2vec工具来训练简体中文词向量
104 0
+关注
ebxinxi
全栈码农是泡沫时代低成本而有效的一个办法。ES + SPring +Docker + 小程序前端,NLP Inside。
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
机器学习中,使用Scikit-Leam简单处理文本数据
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载