gensim Word2Vec 训练和使用

1、词向量的训练 

from gensim.models import Word2Vec
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]
model = Word2Vec(sentences,sg=1, size=100,  window=5,  min_count=5,  negative=3, sample=0.001, hs=1, workers=4)

参数解释:
1.sg=1是skip-gram算法,对低频词敏感;默认sg=0为CBOW算法。

2.size是输出词向量的维数,值太小会导致词映射因为冲突而影响结果,值太大则会耗内存并使算法计算变慢,一般值取为100到200之间。

3.window是句子中当前词与目标词之间的最大距离,3表示在目标词前看3-b个词,后面看b个词(b在0-3之间随机)。

4.min_count是对词进行过滤,频率小于min-count的单词则会被忽视,默认值为5。

5.negative和sample可根据训练结果进行微调,sample表示更高频率的词被随机下采样到所设置的阈值,默认值为1e-3。

6.hs=1表示层级softmax将会被使用,默认hs=0且negative不为0,则负采样将会被选择使用。

7.workers控制训练的并行,此参数只有在安装了Cpython后才有效,否则只能使用单核。

8.sentence:训练的语料,一个可迭代对象。对于从磁盘加载的大型语料最好用gensim.models.word2vec.BrownCorpus,       gensim.models.word2vec.Text8Corpus ,gensim.models.word2vec.LineSentence 去生成sentences

9.alpha:初始化学习速率


2、训练后的模型保存与加载

模型保存:

model.save('/tmp/MyModel')
#model.save_word2vec_format('/tmp/mymodel.txt',binary = False)
#model.save_word2vec_format('/tmp/mymodel.bin.gz',binary = True)
  • 前一组方法保存的文件不能利用文本编辑器查看但是保存了训练的全部信息,可以在读取后追加训练
  • 后一组方法保存为word2vec文本格式但是保存时丢失了词汇树等部分信息,不能追加训练,隐藏权重,词频和binary tree都丢失了

追加加训练:

model = gensim.models.Word2Vec.load('/tmp/mymodel')
model.train(more_sentences)

加载:

model = gensim.models.Word2Vec.load('/tmp/mymodel')

#model = gensim.models.KeyedVectors.load_word2vec_format('/tmp/vectors.txt',binary = False)
#model = gensim.models.KeyedVectors。load_word2vec_format('/tmp/vectors.bin',binary = True)
##使用gzipped / bz2输入也可以,不需要解压:
#model = gensim.models.KeyedVectors.load_word2vec_format('/tmp/vectors.bin.gz',binary=True)

模型使用:

  • 词向量的获取
>>> model.wv['computer']  # numpy vector of a word 处理一个词的向量
array([-0.00449447, -0.00310097,  0.02421786, ...], dtype=float32)
  •  词向量的应用(相似度)
>>> model.wv.most_similar(positive=['woman', 'king'], negative=['man'])
[('queen', 0.50882536), ...]

>>> model.wv.most_similar_cosmul(positive=['woman', 'king'], negative=['man'])
[('queen', 0.71382287), ...]


>>> model.wv.doesnt_match("breakfast cereal dinner lunch".split())
'cereal'

>>> model.wv.similarity('woman', 'man')
0.73723527

3.sentences相关

训练首先是语料集的加载。首先要生成Word2Vec需要的语料格式:
1.对于简单的句子可以:

from gensim.models import Word2Vec
# sentences只需要是一个可迭代对象就可以
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]
model = Word2Vec(sentences, min_count=1)  # 执行这一句的时候就是在训练模型了

2.对于大型语料库:
Gemsim 的输入只要求序列化的句子,而不需要将所有输入都存储在内存中。简单来说,可以输入一个句子,处理它,删除它,再载入另外一个句子。

gensim.models.word2vec.BrownCorpus: BrownCorpus是一个英国语料库,可以用这个直接处理
gensim.models.word2vec.Text8Corpus ,
gensim.models.word2vec.LineSentence

 # 使用LineSentence() 
sentences = LineSentence('a.txt')   #  文本格式是 单词空格分开,一行为一个文档
 # 使用Text8Corpus() 
sentences = Text8Corpus('a.txt')   #  文本格式是 单词空格分开,一行为一个文
model = Word2Vec(sentences, min_count=1)  # 执行这一句的时候就是在训练模型了

猜你喜欢

转载自blog.csdn.net/word_mhg/article/details/90054381