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 少量语料,检查结构

目录
相关文章
|
3月前
|
机器学习/深度学习 自然语言处理 算法
Coggle 30 Days of ML(23年7月)任务六:训练FastText、Word2Vec词向量
Coggle 30 Days of ML(23年7月)任务六:训练FastText、Word2Vec词向量
|
11月前
|
机器学习/深度学习 自然语言处理 算法
深度学习基础入门篇10:序列模型-词表示{One-Hot编码、Word Embedding、Word2Vec、词向量的一些有趣应用}
深度学习基础入门篇10:序列模型-词表示{One-Hot编码、Word Embedding、Word2Vec、词向量的一些有趣应用}
深度学习基础入门篇10:序列模型-词表示{One-Hot编码、Word Embedding、Word2Vec、词向量的一些有趣应用}
|
机器学习/深度学习 存储 自然语言处理
【新闻文本分类】(task4)使用gensim训练word2vec
Word2vec即“word to vector”,是一个生成对“词”的向量表达的模型。 想要训练 Word2vec 模型,我们需要准备由一组句子组成的语料库。假设其中一个长度为 T 的句子包含的词有 w1,w2……wt,并且我们假定每个词都跟其相邻词的关系最密切。
537 0
【新闻文本分类】(task4)使用gensim训练word2vec
|
机器学习/深度学习 存储 自然语言处理
基于 word2vec TextCNN 的新闻文本分类
基于 word2vec TextCNN 的新闻文本分类
279 0
基于 word2vec TextCNN 的新闻文本分类
|
机器学习/深度学习 存储 人工智能
文本深度表示模型——word2vec&doc2vec词向量模型
NLP 中最直观,也是到目前为止最常用的词表示方法是 One-hot Representation,这种方法把每个词表示为一个很长的向量。这个向量的维度是词表大小,其中绝大多数元素为 0,只有一个维度的值为 1,这个维度就代表了当前的词。
文本深度表示模型——word2vec&doc2vec词向量模型
|
机器学习/深度学习 Serverless Windows
word2vec模型原理及实现词向量训练案例(一)
word2vec模型原理及实现词向量训练案例
156 0
word2vec模型原理及实现词向量训练案例(一)
|
自然语言处理 搜索推荐 算法
word2vec模型原理及实现词向量训练案例(二)
word2vec模型原理及实现词向量训练案例
390 0
word2vec模型原理及实现词向量训练案例(二)
|
自然语言处理 数据可视化 数据处理
基于gensim实现word2vec模型(附案例实战)
基于gensim实现word2vec模型(附案例实战)
595 0
基于gensim实现word2vec模型(附案例实战)
|
自然语言处理 Python
自然语言处理=======python利用word2vec实现计算词语相似度【gensim实现】
自然语言处理=======python利用word2vec实现计算词语相似度【gensim实现】
303 0
自然语言处理=======python利用word2vec实现计算词语相似度【gensim实现】
|
自然语言处理 算法 Python
Gensim实现Word2Vec的Skip-Gram模型
gensim是一个开源的Python库,用于便捷高效地提取文档中的语义话题。它用于处理原始的、非结构化的电子文本(“纯文本”),gensim中的一些算法,如 Latent Semantic Analysis(潜在语义分析)、 Latent Dirichlet Allocation(潜在Dirichlet分布)、Random Projections(随机预测)通过检查训练文档中的共现实体来挖掘语义结构。
242 0