当前位置: 首页 > 工具软件 > Word2Vec.Net > 使用案例 >

应用工具训练Word2Vec

锺离德运
2023-12-01

目录

前言

首先导入相关的包

接下来准备语料

模型训练

应用词向量库

前言

了解了文本表示的基本含义之后,前面学习了词袋模型这种最简单的文本表示方法,接下来学习了Word2Vec。

本文便是使用工具训练Word2Vec的实操代码,代码都是来自参考文献里的这本书,但是我在学习的过程中发现,书上的代码使用的应该gensim3版本,现在gensim已经更新到了v4,所以书中的很多代码报错。

针对这种问题,解决办法有二,第一是下载掉v4版本的gensim,下载v3版本的;第二种方法自然是重新去查询v4版本的相应调用代码。

个人感觉,还是要紧跟时代,哈哈哈哈,所以我决定去查一下v4版本的调用方法。

参考文献:胡盼盼编著. 自然语言处理从入门到实战[M]. 中国铁道出版社, 2020.

1 首先导入相关的包

注释里标明了这是v3或者v4导入包的方式。

from gensim.models import word2vec #v3
from gensim.models import Word2Vec #v4
import jieba

2 接下来准备语料

并且要将语料转化为合适的输入格式,这里的输入格式如下所示:

sentences = [['this', 'is', 'the', 'first', 'sentence', 'for', 'word2vec'],
            ['this', 'is', 'the', 'second', 'sentence'],
            ['yet', 'another', 'sentence'],
            ['one', 'more', 'sentence'],
            ['and', 'the', 'final', 'sentence']]

#该数据样式来自「小王做笔记」https://blog.csdn.net/qsx123432/article/details/120583529

因此我们要将自己的数据处理成这种格式。

raw_texts = [
    '你站在桥上看风景',
    '看风景的人在楼上看你',
    '明月装饰了你的窗子',
    '你装饰了别人的梦',
]
texts = [[word for word in jieba.cut(text, cut_all=True)] for text in raw_texts]
print(texts)

我们看一下打印出来的结果,是否和上面要求的输入格式一致。

[['你', '站', '在', '桥上', '看', '风景'], 
['看', '风景', '的', '人', '在', '楼上', '看', '你'], 
['明月', '装饰', '了', '你', '的', '窗子'],
 ['你', '装饰', '了', '别人', '的', '梦']]

3 模型训练

接下来只需要输入相关参数,比如语料,窗口,向量维度等,就可以获得训练好的模型了。

model = word2vec.word2vec(texts, min_count = 1, window = 3, size = 5) #v3
model = Word2Vec(texts, min_count = 1, window = 3, vector_size = 5) #v4

4 应用词向量库

上面通过一行简单的代码,便训练好了一个迷你版本的词向量库,接下来对其进行应用。

4.1 首先可以打印出某个词的词向量:

print(new_model["你"]) #v3
print(model.wv["你"] #v4

不过这里还有一个问题就是,这个new_model是怎么回事?原本我以为在v3版本里,会直接把训练的model命名为new_model,但是后来我去看网上的帖子发现,v3里面也直接是print(model["你"])这样的。那我在想,是不是这本书写错了,或者跳过了某行代码???

但是目前我也没下载v3版本的gensim,所以无从判断,但从直觉来讲,总觉得是这本书不小心写错了,嘿嘿!不过因为我零基础入门python,所以也无法确定到底是错误,还是因为这上面的代码可能版本比较旧,所以才会在我的电脑上报错。

4.2 其次可以去比较两个词之间的相似度

(这个其实也是计算两个词的相关性)

print(model.wv.similarity("窗子","楼上"))

4.3 查询和某词最相关的几个词

print(model.wv.similar_by_word("你", topn = 3))
#或者以下代码也可以
print(model.wv.most_similar("你", topn = 3))

5 保存模型并再次训练

如果暂时训练的语料太少,那我们可以将该模型保存,等搜集到更多的语料,重新加载模型,并可根据新语料对模型再次训练。

model.save("word2vec_model") #保存模型
new_model = word2vec.word2vec.load("word2vec_model") #v3,重新加载模型
new_model = Word2Vec.load("word2vec_model") #v4,重新加载模型
new_model.train(new_texts) #根据新语料再次训练模型,new_texts即为新语料。

 类似资料: