在python下实现word2vec词向量训练与加载实例
项⽬中要对短⽂本进⾏相似度估计,word2vec是⼀个很⽕的⼯具。本⽂就word2vec的训练以及加载进⾏了总结。
word2vec的原理就不描述了,word2vec词向量⼯具是由google开发的,输⼊为⽂本⽂档,输出为基于这个⽂本⽂档的语料库训练得到的词向量模型。
通过该模型可以对单词的相似度进⾏量化分析。
word2vec的训练⽅法有2种,⼀种是通过word2vec的官⽅⼿段,在linux环境下编译并执⾏。
在github上下载word2vec的安装包,然后make编译。查看demo-word.sh脚本,得到word2vec的执⾏命令:./word2vec -train text8 -output vectors.bin -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads
20 -binary 1 -iter 15
参数解释:
1)-train:需要训练的语料库,text8为语料库⽂件名
2)-output:输出的词向量⽂件,vectors.bin为输出词向量⽂件名,.bin后缀为⼆进制⽂件。若要以⽂档的形式查看词向量⽂件,需要将-binary参数的值由1改为0
3)-cbow:是否使⽤cbow模型进⾏训练。参数为1表⽰使⽤cbow,为0表⽰不使⽤cbow
4)-size:词向量的维数,默认为200维。
5)-window:训练过程中截取上下⽂的窗⼝⼤⼩,默认为8,即考虑⼀个词前8个和后8个词
6)-negative:若参数⾮0,表明采样随机负采样的⽅法,负样本⼦集的规模默认为25。若参数值为0,表⽰不使⽤随机负采样模型。使⽤随机负采样⽐Hierarchical Softmax模型效率更⾼。
7)-hs:是否采⽤基于Hierarchical Softmax的模型。参数为1表⽰使⽤,0表⽰不使⽤
8)-sample:语料库中的词频阈值参数,词频⼤于该阈值的词,越容易被采样。默认为e^-4.
9)-threads:开启的线程数⽬,默认为20.
10)-binary:词向量⽂件的输出形式。1表⽰输出⼆进制⽂件,0表⽰输出⽂本⽂件
11)-iter:训练的迭代次数。⼀定范围内,次数越⾼,训练得到的参数会更准确。默认值为15次.
./word2vec - - -cbow 1 -size 200 -window 5 -negative 25 -hs 0 -sample 1e-4 -
threads 20 -binary 0 -iter 30
⽰例为训练⼀个名的⽂档。设置输出词向量的格式为.txt⽂本⽂档,所以还需要将-binary参数设置为0.
训练模型采⽤基于随机负采样的cbow模型。由于短⽂本字数极为有限,所以-window参数设置为5,设置词向量的维数
为200,为了使得到的参数更准确,将迭代次数增加⾄30.其他参数使⽤默认值。
训练以后得到⼀个txt⽂本,该⽂本的内容为:每⾏⼀个单词,单词后⾯是对应的词向量。
gensim加载词向量:
保存词向量模型到pkl中(注意:这⾥是对词向量模型进⾏构建)
dels import KeyedVectors
if not ists(pkl_path): # 如果pickle模型不存在,则构建⼀个
print '词向量模型不存在,开始构建词向量模型...'
Word2Vec = KeyedVectors.load_word2vec_format(vecs_path, binary=False) # 加载词向量模型
f = file(pkl_path, 'wb')
pickle.dump(Word2Vec, f, True)
f.close()
print '词向量模型构建完毕...'
import picklef= file(pkl_path, 'rb')# 打开pkl⽂件
word2vec=pickle.load(f)# 载⼊pkl
第⼆种⽅法是使⽤gensim模块训练词向量:
dels import Word2Vec
dels.word2vec import LineSentence
try:
import cPickle as pickle
except ImportError:
import pickle
sentences = LineSentence(path)# path为要训练的txt的路径
# 对sentences表⽰的语料库进⾏训练,训练200维的词向量,窗⼝⼤⼩设置为5,最⼩词频设置为5
model = Word2Vec(sentences, size=200, window=5, min_count=5)
model.save(model_path)#model_path为模型路径。保存模型,通常采⽤pkl形式保存,以便下次直接加载即可
# 加载模型
model = Word2Vec.load(model_path)
完整的训练,加载通常采⽤如下⽅式:
if not ists(model_path):
sentences = LineSentence(path)
model = Word2Vec(sentences, size=200, window=5, min_count=5)
model.save(model_path)
model = Word2Vec.load(model_path)
这样⼀来,就可以通过pkl化的词向量模型进⾏读取了。pkl的⽬的是为了保存程序中变量的状态,以便下次直接访问,
不必重新训练模型。
详细内容间gensim官⽅库
以上这篇在python下实现word2vec词向量训练与加载实例就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论