0.数据处理
针对wiki 数据集:
- 下载opencc把繁体中文转化为简体中文
opencc(windows版本)下载地址:http://download.csdn.net/download/adam_zs/10213686 - 运行命令:
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