使用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的效果还是很明显的
下一篇:
NLP中的数据增强方法!