w2v词向量模型的训练和使用

0.数据处理

针对wiki 数据集:

    opencc -i wiki.zh.fanti.text -o wiki.zh.jianti.text -c t2s.json
  • jieba分词

a. 中文

def cut_words(sentence):
  # print sentence
 return " ".join(jieba.cut(sentence)).encode('utf-8')

b. 英文

  • 引入日志配置
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
  • 引入数据集
#some error here
   `# raw_sentences = ["the quick brown fox jumps over the lazy dogs","yoyoyo you go home now to sleep"]
  • 切分词汇
sentences= [s.encode('utf-8').split() for s in sentences]

1.训练

step1: train

a.
#LineSentence
model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5, workers=multiprocessing.cpu_count())

#min_count 最好设置为1,5的话容易匹配不到词典

b.

#Text8Corpus
sentences=word2vec.Text8Corpus(u'wiki_seg.txt')
model=gensim.models.Word2Vec(sentences, , size=200min_count=3,)

step2:save

#保存.model a
model.save(outp1) # outp1 可以为.model,.vect,.txt,.bin

#保存.model b
model.model.wv.save_word2vec_format(outp2, binary=False) #保存


#保存 c
model.save('wiki.model')                      #.model
model.save_word2vec_format('wiki.model.bin', binary=True) #.bin
model.model.wv.save_word2vec_format(outp2, binary=False)  #.bz

step 3 基于模型继续训练

model=gensim.models.load('wiki.model')
model.build_vocab(new_sentences, update=True)
model.train(x, total_examples=model.corpus_count, epochs=model.iter)
model.save('wiki.model')
ps:#中间步骤
调用Word2Vec创建模型实际上会对数据执行两次迭代操作,第一轮操作会统计词频来构建内部的词典数结构,第二轮操作会进行神经网络训练,而这两个步骤是可以分步进行的,这样对于某些不可重复的流(譬如 Kafka 等流式数据中)可以手动控制:

model = gensim.models.Word2Vec(iter=1)  # an empty model, no training yet
model.build_vocab(some_sentences)  # can be a non-repeatable, 1-pass generator
model.train(other_sentences)  # can be a non-repeatable, 1-pass generator

2.载入 load

model = gensim.models.Word2Vec.load('wiki.model')             #载入 .model模型
model1 = word2vec.Word2Vec.load_word2vec_format('wiki.model.bin', binary=True) #载入bin
model=gensim.models.KeyedVectors.load_word2vec_format(model_path, binary=True)    #载入 .bin模型

3.测试

a.前几个最相关的词和相关性
res= model.most_similar(‘女孩’)

b.两个词之间的相关性
model.similarity('dogs','you')

c. 直接获取向量
model['电脑']

4.Word2Vec 参数

- min_count
model = Word2Vec(sentences, min_count=10) # default value is 5
在不同大小的语料集中,我们对于基准词频的需求也是不一样的。譬如在较大的语料集中,我们希望忽略那些只出现过一两次的单词,这里我们就可以通过设置min_count参数进行控制。一般而言,合理的参数值会设置在0~100之间。
- size
size参数主要是用来设置神经网络的层数,Word2Vec 中的默认值是设置为100层。更大的层次设置意味着更多的输入数据,不过也能提升整体的准确度,合理的设置范围为 10~数百。
model = Word2Vec(sentences, size=200) # default value is 100
- workers
workers参数用于设置并发训练时候的线程数,不过仅当Cython安装的情况下才会起作用:
model = Word2Vec(sentences, workers=4) # default = 1 worker = no parallelization

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×