NLP 利器 Gensim 库的使用之 Word2Vec 模型案例演示(基于 word2vec-google-news-300 预训练模型,附下载)

Gensim 库的使用之 Word2Vec 模型案例演示

要见识一下 Word2Vec 模型可以做什么,那么最好的方法就是直接下载一个预训练模型,然后尝试用一下看看效果。

我们在这里获取一个在 Google News 数据集上训练完成的 Word2Vec 模型,覆盖了大约 300 万的词汇和短语。

这样一个模型需要几个小时来进行训练,但是既然 Google 已经将其公开,那直接花几分钟下载下来就能用了。

!!!注意:该模型大小约 2GB,而且需要科学的方法才能下载!实在无法解决网络问题的朋友,可以用我提供的本站连接下载,然后解压到对应位置!!!


模型下载地址:

~~由于文件太大,分了10个部分~~
word2vec-google-news-300.zip.001
word2vec-google-news-300.zip.002
word2vec-google-news-300.zip.003
word2vec-google-news-300.zip.004
word2vec-google-news-300.zip.005
word2vec-google-news-300.zip.006
word2vec-google-news-300.zip.007
word2vec-google-news-300.zip.008
word2vec-google-news-300.zip.009
word2vec-google-news-300.zip.010

不想在本地运行的朋友,也可以选择在线尝试该模型的效果:

http://radimrehurek.com/2014/02/word2vec-tutorial/#app

不过,如果不是科学的连接方式,不确保可以登陆该网页~~

该模型是利用了整个 Google News 大约 1000 亿个词的语料训练而成!

一、下载预训练模型 word2vec-google-news-300

import gensim.downloader as api
wv = api.load('word2vec-google-news-300')

下载后的预训练文件会存储在:

./gensim-data/word2vec-google-news-300/word2vec-google-news-300.gz

二、查看词表情况

2.1 查看词表中的前10个词

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

运行结果:

</s>
in
for
that
is
on
##
The
with
said

2.2 查看词表总数

print(len(wv.vocab))

运行结果:

3000000

2.3 查看指定词的词向量 vectors

vec_king = wv['king']
print(vec_king.shape)

运行结果:

(300,)

这里我们获得了一个 300 维的 ‘king’ 这个单词的词向量,包含了这个词的语意表示

三、非常用词的限制

Word2Vec 模型限制了非常用词出现在词表中,这个是出于模型使用的考虑,如果这个限制你觉得非常在意,可以尝试使用 FastText model 进行替代。

比如我们选个很怪的单词 ‘cameroon’ 查询一下:

try:
    vec_cameroon = wv['cameroon']
except KeyError:
    print("The word 'cameroon' does not appear in this model")

运行结果:

The word 'cameroon' does not appear in this model

四、词语相似度

4.1 相似度计算

我们利用 Word2Vec 模型可以非常简单地计算词语之间的相似度:

pairs = [
    ('car', 'minivan'),   # a minivan is a kind of car
    ('car', 'bicycle'),   # still a wheeled vehicle
    ('car', 'airplane'),  # ok, no wheels, but still a vehicle
    ('car', 'cereal'),    # ... and so on
    ('car', 'space'),
]
for w1, w2 in pairs:
    print('%r\t%r\t%.2f' % (w1, w2, wv.similarity(w1, w2)))

运行结果:

'car'	'minivan'	0.69
'car'	'bicycle'	0.54
'car'	'airplane'	0.42
'car'	'cereal'	0.14
'car'	'space'	0.08

4.2 获取最相似的词

比如我们想要获得和 car,minivan 最相似的 5 个词:

print(wv.most_similar(positive=['car', 'minivan'], topn=5))

运行结果:

[('SUV', 0.8532191514968872), ('vehicle', 0.8175784349441528), ('pickup_truck', 0.7763689160346985), ('Jeep', 0.7567334175109863), ('Ford_Explorer', 0.7565719485282898)]

4.3 选出不属于同一类的词

比如 ‘fire’, ‘water’, ‘land’, ‘sea’, ‘air’, ‘car’ 这 6 个词,通过相似度计算,我们可以知道 car 不是同一类的词:

print(wv.doesnt_match(['fire', 'water', 'land', 'sea', 'air', 'car']))

运行结果:

car

猜你喜欢

转载自blog.csdn.net/qq_42067550/article/details/106444334
今日推荐