1、基于gensim实现word2vec
from gensim.models import Word2Vec
model = Word2Vec(LineSentence(inp), size=100, window=10, min_count=3,
workers=multiprocessing.cpu_count(), sg=1, iter=10, negative=20)
sentences
:可以是一个list,对于大语料集,建议使用BrownCorpus,Text8Corpus或lineSentence构建。size
:特征向量的维度,默认为100alpha
:初始的学习速率,在训练过程中会线性地递减到min_alphawindow
:窗口大小min_count
:词频少于min_count次数的单词会被丢弃掉, 默认值为5max_vocab_size
: 设置词向量构建期间的RAM限制。sample
: 高频词汇的随机降采样的配置阈值,默认为1e-3,范围是(0,1e-5)。seed
:用于随机数发生器。与初始化词向量有关。workers
:用于控制训练的并行数。min_alpha
:学习率的最小值。sg
: 默认为0,对应CBOW算法;sg=1则采用skip-gram算法。hs
:如果为1则会采用层次softmax。如果设置为0(默认),则使用negative sampling。negative
:如果>0,则会采用negative sampling,用于设置多少个noise words(一般是5-20)。cbow_mean
:0采用上下文词向量的和,1(default)采用均值。hashfxn
:hash函数来初始化权重,默认使用python的hash函数。iter
: 迭代次数,默认为5。trim_rule
: 用于设置词汇表的整理规则,指定那些单词要留下,哪些要被删除。可以设置为None(min_count会被使用)。sorted_vocab
: 如果为1(默认),则在分配word index 的时候会先对单词基于频率降序排序。batch_words
:每一批的传递给线程的单词的数量,默认为10000。
2、模型实现
from gensim.models import word2vec
# 获取数据
word = []
# 读入数据生成list
with open('./test_seg.txt', 'r', encoding='utf8') as f:
voc = f.readline()
word.append(voc)
str_word = word[0]
word_dict = list(str_word.split(' '))
with open('./word_voc.txt', 'w', encoding='utf8') as f:
for i in word_dict:
if i != '':
f.write(i+' ')
# 加载数据,这里必须自己制作词表,每个词之间必须有一个空格
sentences = word2vec.Text8Corpus(u'./word_voc.txt')
# 导入数据,开启模型
model = word2vec.Word2Vec(sentences, size=100)
# print(model.wv.get_vector('欧'))
# 保存模型
model.save('./MyModel')
# 保存词向量
model.wv.save_word2vec_format('./mymodel.txt', binary=False)