NLP 利器 Gensim 来训练自己的 word2vec 词向量模型

首先,要训练一个自己的词向量模型,我们是需要一些数据的。

在这里,我们使用 Lee Corpus 作为训练用语料数据。

下载地址:

lee_background.cor

一、数据预处理

这个语料库不大,可以一次读取到内存中,但是我们可以用 “内存友好” 的方式,一行一行地读取,这种方式同样适合处理大规模语料。

from gensim.test.utils import datapath
from gensim import utils

class MyCorpus(object):
    """迭代器每次生成一个句子 (字符串的列表)。"""

    def __iter__(self):
        corpus_path = datapath('lee_background.cor')
        # 语料库的地址
        for line in open(corpus_path):
            # 每一行是一个文本
            # 每个单词由空格分割
            yield utils.simple_preprocess(line)
            # 每次处理一行,迭代输出

MyCorpus 这个类主要是用来做数据预处理的。

我们可以在这里做个性化的安排,比如解码非标准编码,字母小写处理,去除数字,提取命名实体等。

所有这些处理皆在这里完成,word2vec 模型是不需要管这些的。

最终,我们只要达到的目的是,一次 yield 一个句子(uft8 编码单词的列表)。

二、训练模型

来试着训练个模型吧:

import gensim.models

sentences = MyCorpus()
# 实例化语料的类
model = gensim.models.Word2Vec(sentences=sentences)
# 训练,完成后模型存入 model 中

这样就得到了训练好的模型。

然后就可以利用这个模型,来进行词语语义之间的一些操作。

模型最重要的部分就是 model.wv,这里的 ”wv“ 代表 word vectors。

然后我们可以看下形成的词表:

for i, word in enumerate(model.wv.vocab):
    if i == 10:
        break
    print(word)

运行结果:

hundreds
of
people
have
been
forced
to
their
homes
in

查看词表长度:

print(len(model.wv.vocab))

运行结果:

1750

三、存储模型

model.save('./w2v.m')

这样模型就存储到了指定的路径,后缀名随意,因为内核用的是 pickle,所以无所谓。

四、读取模型

new_model = gensim.models.Word2Vec.load('./w2v.m')

使用 Word2Vec 下的 load 方法即可。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值