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
- 英文
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