gensim 之 word2vec

发布于:2023-04-27 ⋅ 阅读:(144) ⋅ 点赞:(0)

gensim库三大功能:

  • 可扩展的统计语义
  • 分析语义结构的纯文本
  • 检索语义上类似的文档

word2vec是gensim的一个子模块,可以用来实现上面三大功能

word2vec的理解

下面的两篇博客对word2vec介绍的很详细
https://www.zhihu.com/question/25269336
http://www.cnblogs.com/iloveai/p/word2vec.html

我个人理解:
机器学习中,一切都是基于向量的.自然语言处理中的句子都是依赖词向量来表示.
而word2vec和lda相对应,是词向量的两种不同的模型:

  • word2vec属于神经网络语言模型,根据词与其周边词汇的关系训练词向量,然后将词向量用来做nlp的任务
  • lda则是一种文档主题生成模型,比如lsi模型

在gensim中使用word2vec

详细教程参见:
http://radimrehurek.com/gensim/models/word2vec.html
https://rare-technologies.com/word2vec-tutorial/
http://textprocessing.org/getting-started-with-word2vec

练习:
test8下载地址:
http://mattmahoney.net/dc/text8.zip

from gensim.models import word2vec
import gensim
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

#第一次使用,需要加载文档集(http://mattmahoney.net/dc/text8.zip)
sentences = word2vec.Text8Corpus('/tmp/text8')
model = word2vec.Word2Vec(sentences, size=200)
#保存模型,以便下次直接使用
model.save('/tmp/text8.model')
#下次使用的时候,无需加载sentences文档集,直接读取model啦
#model = word2vec.Word2Vec('/tmp/text8.model')

#word2vec好玩的地方,计算相似词,woman+man+kiss+love-girl=bride
>>> model.most_similar(positive=['woman','man','kiss','love'],negative=['girl'],topn=5)
#结果如下[('bride', 0.6755753755569458), ('me', 0.6339389681816101), 
#('baby', 0.6337762475013733), ('lady', 0.6284192204475403), ('devil', 0.6243280172348022)]

也可以这样玩:
这里写图片描述

#找出不同类的词
model.doesnt_match(['fuck','head','foot','hand'])#fuck
model.doesnt_match("breakfast cereal dinner lunch".split())#cereal 

还可以找两个词的相似度
这里写图片描述

word2vec也支持短语:

>>> bigram_transformer = gensim.models.Phrases(sentences)
>>> model = Word2Vec(bigram_transformer[sentences], size=100, ...)
本文含有隐藏内容,请 开通VIP 后查看