Python Gensim Word2vec

Getting started

  • 系统及包的版本
  • ubuntu 16.04
  • Python 3.5
  • Numpy 1.14.0
  • Scipy 1.1.0
  • gensim 3.4.0
  • jieba 0.39

Install Gensim

pip3 install gensim

Demo

  1. 英文
import gensim
from gensim.models import Word2Vec

# define training data
sentences = [['this','is','first','sentence','for','word2vec'],
            ['this','is','the','second','sentence'],
            ['yet','another','sentence'],
            ['one','more','sentence'],
            ['and','the','final','sentence']]

# train model: 2 approaches
print('----------------------------------------------')
# approach 1: using Word2Vec directly
model = Word2Vec(sentences, min_count=1, size=100)
# appraoch 2: 3 steps
model = Word2Vec(size=100, min_count=1) # build a null model
model.build_vocab(sentence) # build vocabs
model.train(sentence,total_examples=model.corpus_count, epochs=model.epochs) # train the model
print('---------------------------------------------')
# if you want to train another sentences, you can use:
# model.build_vocab(sentences, update=True)
# model.train(sentences,total_examples=model.corpus_count, epochs=model.epochs)

# summarize vocabulary
words = list(model.wv.vocabs)
print('words:'words)


# access vector for one word, here, I choose word--"final"
print('final:', model['final'])
print('size:', model['final'].shape)

# save model
model.save('model.bin')

# load model
new_model = Word2Vec.load('model.bin')
print('new_model:', new_model)

代码运行结果

model: Word2Vec(vocab=14, size=100, alpha=0.025)
word: ['final', 'for', 'the', 'is', 'another', 'yet', 'first', 'one', 'and', 'word2vec', 'more', 'this', 'second', 'sentence']
final:  [-4.24512615e-03 -1.88558025e-03  9.87336622e-04  3.32208641e-04
  1.58775027e-03  2.86170351e-03  4.89681540e-03 -2.43758885e-04
  6.04494009e-04  2.83797574e-03 -9.14212287e-05  2.83745350e-03
 -3.13840632e-04  3.16801062e-03 -2.12232885e-03 -1.10678584e-03
 -3.79643822e-03 -2.02328176e-03  1.27806270e-03  3.11361323e-03
  4.21770243e-03 -4.02200781e-03  1.87460450e-03  2.70283222e-03
 -8.23608658e-04  2.24338565e-03 -1.00434595e-03 -3.63076036e-03
  3.00405826e-03 -3.02606076e-03 -3.80830164e-03 -8.45574832e-04
 -1.09312299e-03 -2.54898681e-03  2.71335384e-03  3.01498198e-03
 -6.36825920e-04  3.74943367e-03 -4.30930452e-03 -4.43633646e-03
 -4.33050515e-03  8.93495744e-04  1.74947700e-03 -9.16263845e-04
  3.36365146e-03  1.78577728e-03  3.97518370e-03  2.80426512e-03
  1.05041516e-04  2.64526065e-03  4.29007085e-03 -4.62562265e-03
 -2.88252137e-03 -4.52675205e-03 -4.47892817e-03  4.26964648e-03
  3.34036606e-03 -1.43222394e-03 -4.14469466e-03 -1.51728117e-03
 -4.15857742e-03  4.67209844e-03 -1.80061371e-03 -3.44781042e-03
  1.22061395e-03  1.49271940e-03  3.93480004e-04 -1.87060761e-03
  2.98343715e-03 -2.19943046e-04  3.72280553e-03 -4.49448219e-03
  1.13121606e-03 -1.07301469e-03 -6.04253379e-04  1.22600608e-03
  4.55716904e-03 -2.68395292e-03  4.06559976e-03  2.26789853e-03
  4.64835530e-03 -4.13991651e-03  1.36144704e-03 -4.91902512e-03
 -1.64164475e-03  4.95246553e-04  3.29163438e-03 -4.48254216e-03
 -2.36238679e-03 -4.16804280e-04  1.55603839e-03 -4.51240921e-03
 -4.77185287e-03  3.01072164e-03  2.08814861e-04 -2.43406254e-03
  9.53975687e-05  4.69275191e-03 -3.67882603e-04 -4.77664545e-03]
size: (100,)
new_model: Word2Vec(vocab=14, size=100, alpha=0.025)

代码解读:

"""
Word2Vec(sentence,size=100,alpha=0.025,window=5,
     min_count=5,max_vocab_size=None, sample=0.001,
     negative=5, cbow_mean=1, 
    iter=5,null_word=0, trim_rule=None, 
    sorted_vocab=1, batch_words=10000)
 """

·  sentences:可以是一个list,对于大语料集,建议使用BrownCorpus,Text8Corpus或·ineSentence构建。
·  sg: 用于设置训练算法,默认为0,对应CBOW算法;
        sg=1则采用skip-gram算法。
·  size:是指特征向量的维度,默认为100。
        大的size需要更多的训练数据,但是效果会更好. 推荐值为几十到几百。
·  window:表示当前词与预测词在一个句子中的最大距离是多少
·  alpha: 是学习速率
·  seed:用于随机数发生器。与初始化词向量有关。
·  min_count: 可以对字典做截断. 
        词频少于min_count次数的单词会被丢弃掉, 默认值为5
·  max_vocab_size: 设置词向量构建期间的RAM限制。
        如果所有独立单词个数超过这个,则就消除掉其中最不频繁的一个。每一千万个单词需要大约1GB的RAM。设置成None则没有限制。
·  sample: 高频词汇的随机降采样的配置阈值,默认为1e-3,范围是(0,1e-5)
·  workers参数控制训练的并行数。
·  hs: 如果为1则会采用hierarchica·softmax技巧。如果设置为0(defau·t),则negative sampling会被使用。
·  negative: 如果>0,则会采用negativesamp·ing,用于设置多少个noise words
·  cbow_mean: 如果为0,则采用上下文词向量的和,如果为1(defau·t)则采用均值。只有使用CBOW的时候才起作用。
·  hashfxn: hash函数来初始化权重。默认使用python的hash函数
·  iter: 迭代次数,默认为5
·  trim_rule: 用于设置词汇表的整理规则,指定那些单词要留下,哪些要被删除。可以设置为None(min_count会被使用)或者一个接受()并返回RU·E_DISCARD,uti·s.RU·E_KEEP或者uti·s.RU·E_DEFAU·T的函数。
·  sorted_vocab: 如果为1(defau·t),则在分配word index 的时候会先对单词基于频率降序排序。
·  batch_words:每一批的传递给线程的单词的数量,默认为10000

运行结果解读:

model: vocab=14 表示文本中共有14个不同的词,相当于set().
words: 文本中构成vocabs的14个词
final: 文本中词'final'对应的词向量,shape为100,因为我们训练模型时指定的词向量维度为100
new_model:查看保存的model,可以看出模型与训练的模型一样。

2.中文
与英文类似,但是注意文本在Train model之前要进行分词,分词后的形式为list[list]], 见下:

sentences = [['我'], ['爱'], ['中国'], ['北京'], ['天安门'],
     [','], ['天安门'], ['上'], ['太阳升']]

参考文献:
1. https://blog.csdn.net/szlcw1/article/details/52751314
2. https://www.journaldev.com/19279/python-gensim-word2vec
3. https://blog.csdn.net/sinat_26917383/article/details/69803018

猜你喜欢

转载自blog.csdn.net/agaoq/article/details/80483426