我们看一下官网怎么说吧:
Python interface to Google word2vec.
Training is done using the original C code, other functionality is pure Python with numpy
Word2Vec诞生于2013年,由Google开源问世。
是一款计算词向量的工具。在这里我们需要辨析的是:Word2Vec不是一个算法,而是计算词向量的工具。
因此,就有了一种简单理解:Word2Vec工具其实是基于CBoW模型和Skip-gram模型的计算词向量的工具。
那么没有接触过自然语言处理的童鞋一定会好奇:“词向量又是什么呢?”
在这里用一个例子尝试说明:
问题:西安 - 陕西 + 江苏 = ?
简单从人的角度出发来看,西安是陕西的省会,“西安”减去“陕西”等于“省会”,“省会”加上“江苏”大概率指的就是“南京”了。
但是机器很难分析出“南京”这个结果,为了帮助机器理解文字,需要想办法将文字以数学的形式表达出来。
因此我们引入的向量的概念,因为向量是可以进行加减的,所以会将文字转化为词语,再转化为向量,由此而来了一种可以分析文字的方法。
说了这么多,再来看对Word2Vec的简单定义:**Word2Vec工具其实是基于CBoW模型和Skip-gram模型的计算词向量的工具。**是不是就更清楚了嘞?
方法1. 可以安装gensim,应为gensim是一个工具箱,里面包含了Word2Vex:
pip install gensim
方法2. 也可以直接安装Word2Vex。需要注意的是安装word2vec需要gcc依赖,如果没有gcc的话,会安装失败。
pip install Word2Vex
注意,安装Word2Vex前需要安装:
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
import numpy as np
# sentence = LineSentence("content.txt") #如果语料是文件,可以使用LineSentence准备训练语料
sentence = [["小明", "今天", "要", "去", '少年宫', "游泳"]] # 准备训练预料
model = Word2Vec(sentences = sentence, vector_size=5, window=5, min_count=1, workers=4) # 生成模型
word_vectors = model.wv['小明'] # 输出词语的向量映射
print(word_vectors) # [-0.06810732 -0.01892805 0.11537147 -0.15043278 -0.0787221 ]
moresentence = [["小明", "和", "小明", "哥哥", "不要", "去", '少年宫', "游泳"]] # 准备训练预料
model.train(corpus_iterable = moresentence, epochs = 1, total_words = 1) # 训练模型
model.save('train_demo.model') # 保存模型
model = Word2Vec.load('train_demo.model') # 加载模型
# 使用模型
result = model.wv.most_similar(positive=['今天', '游泳'], negative=['少年宫'], topn=2) # 使用模型找出相近的10个词,'今天', '游泳'对相似性有正面贡献,'少年宫'有负面贡献
print(result) # [('去', 0.714894711971283), ('要', -0.5734316110610962)]
distance = model.wv.distance("少年宫", "小明") # 两个单词的距离
print(distance) # 0.22581267356872559
from gensim.models import Word2Vec
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]
model = Word2Vec(sentences, size=100, window=5, min_count=1, workers=4)
#model.build_vocab(sentences, update=True) # prepare the model vocabulary
model.train(sentences, total_examples=model.corpus_count, epochs=model.iter) # train word vectors
model.save('test2.model')
model = Word2Vec.load('test2.model') #加载语料
最终的使用方法以源码为主,源码中有备注案例,大家可以查看。
# 该步骤也可分解为以下三步(但没必要):
model=gensim.model.Word2Vec() 建立一个空的模型对象
model.build_vocab(sentences) 遍历一次语料库建立词典
model.train(sentences) 第二次遍历语料库建立神经网络模型
class Word2Vec(utils.SaveLoad):
def __init__(
self, sentences=None, corpus_file=None, vector_size=100, alpha=0.025, window=5, min_count=5,
max_vocab_size=None, sample=1e-3, seed=1, workers=3, min_alpha=0.0001,
sg=0, hs=0, negative=5, ns_exponent=0.75, cbow_mean=1, hashfxn=hash, epochs=5, null_word=0,
trim_rule=None, sorted_vocab=1, batch_words=MAX_WORDS_IN_BATCH, compute_loss=False, callbacks=(),
comment=None, max_final_vocab=None, shrink_windows=True,
):