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 方法即可。

猜你喜欢

转载自blog.csdn.net/qq_42067550/article/details/106495590