使用gensim处理文本(4)word2vector

1、概述

在之前的章节当中我们从概率分布的角度来考虑文本的实际含义,并在此基础上进行了主题分析。但在实际的应用当中,我们对自然语言处理的需求远远不止这些。

其中一个非常重要的需求就是,我们能用vector的形式来表示单词的含义。以便于将这些vector进行其他的处理,如进入神经网络进行进一步处理,所以如何从语义角度将单词转化为向量就变得尤为重要。那如何使用vector来表示单词的含义呢,我们认为一个单词的含义是由其上下文的单词的含义所决定的。所以我们可以使用一种监督的机器学习的形式来实现这个过程。

在目前的行业应用中我们可以使用skip-gram 和 CBOW 模型来进行此过程。在gensim中已经集成了这个算法。我们可以使用搜狗实验室的新闻语料集合来测试一下word2vector的神奇效果。

2、生成vector

使用一份搜狗实验室的文本语料,该语料已经进行了分词处理,并使用一行存储一篇文章,文章中的关键词使用空格分割。如下图所示:

我们可以使用gensim直接读取这样的文件生成vector,如果数据预先存储到内存当中,则需要按照下面格式进行组织。

这里采用直接读取文件的形式,将语料输入给gensim并生成vector,请参照如下代码:

import multiprocessing
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
vocab = vocab.txt
model = Word2Vec(LineSentence(vocab), size=32, window=5, min_count=5,workers=multiprocessing.cpu_count())
可以使用下面代码,对生成的模型进行存储
model.save(text/model)

3、word2vector的基本功能

这样生成的vector模型有什么作用呢,我们可以做一些基本测试来说明这个问题。

1、查看字典

print(model.wv.vocab)

输出效果如下图所示:

2、查询某一单词对应的向量

print(model.wv[男人])

输出效果如下图所示:

3、查询最为相似单词

model.most_similar(军事)
model.most_similar_cosmul(军事)#余弦相似度

输出效果如下图所示:

4、关联相似度查询

model.wv.most_similar(positive=[军事, 政治], negative=[经济])

输出效果如下图所示:

5、直接查询相似程度

model.wv.similarity(男人,军事)

6、查找异类词

model.wv.doesnt_match([中国,美国,叙利亚,水果])

输出效果如下图所示:

其实可以看出word2vector的效果还是很明显的

经验分享 程序员 微信小程序 职场和发展