1.引入模块
import gensim
2.准备语料
每个文本一个一个list,再组合成一个大的list,也可以是生成器,相关的词汇要先分词
sentences = [['第一','个', '文本'], ['第二','个', '文本'], ['第三','个', '文本']]
class MySentences(object):
def __init__(self, filename):
self.filename = filename
def __iter__(self):
with open(self.filename,'r',encoding='utf-8') as f:
for line in f:
yield line.split()
sentences = MySentences('fzhxx_corpus.txt')
3.训练和存储模型
model = gensim.models.Word2Vec(sentences, min_count=5, workers=2)
model.save('fzhxx_model')
在线训练方式:
model.train(other_sentences)model.build_vocab(some_sentences)
后面可以跟一堆参数:
sg 定义训练算法,默认是sg=0,采用CBOW,否则sg=1采用skip-gram
size 是特征向量的维数
window 设置当前词汇与上下文词汇的最大间距
alpha 是最初学习速率
seed 用于随机数生成器
min_count 设置最低有效词频
max_vocab_size 设置词向量训练期间的最大RAM,如果词汇量超过这个就减掉词频最小的那个,设置None则不限制,每1000万字大概需要1Gb内存
sample 设置高频词随机下采样的阈值,默认值为1e-3,有效范围为(0,1e-5)
workers 设置几个工作线程来训练模型(有效利用多核机器)
hs 如果设置为1,将用于模型训练。如果设置为0(默认),同时negative设置为非零,将使用负采样
negative 如果> 0,将使用负采样,该数值指定应取出多少“噪声字”(通常在5-20之间)。默认值为5,如果设置为0,则不使用负采样
cbow_mean = 如果设置为0,使用上下文词向量的和。如果设为1(默认),则使用平均值,仅适用于使用cbow时。
hashfxn 散列函数,用于随机初始化权重以增加训练的可重复性。默认是Python的基本内置哈希函数
iter 语料库中的迭代次数(epochs),默认值为5
trim_rule 词汇修剪规则,指定某些词是否应保留在词汇表中,被修剪掉或使用默认值处理(如果字计数<min_count则舍弃)。可以为None(将使用min_count)或接受参数(word,count,min_count)的可调用并返回utils.RULE_DISCARD,utils.RULE_KEEP或utils.RULE_DEFAULT。注意:规则(如果给出)仅在build_vocab()期间用于修剪词汇表,不会作为模型的一部分存储。
sorted_vocab 如果设为1(默认),在分配词索引之前,通过降序对词汇表进行排序。
batch_words 传递给工作线程(以及此cython例程)的示例批次的目标大小(以字为单位)。默认值为10000.(如果单个文本长度大于10000个字,则会传递更大的批次,但标准的cython代码会截断到最大值。)
size 是特征向量的维数
window 设置当前词汇与上下文词汇的最大间距
alpha 是最初学习速率
seed 用于随机数生成器
min_count 设置最低有效词频
max_vocab_size 设置词向量训练期间的最大RAM,如果词汇量超过这个就减掉词频最小的那个,设置None则不限制,每1000万字大概需要1Gb内存
sample 设置高频词随机下采样的阈值,默认值为1e-3,有效范围为(0,1e-5)
workers 设置几个工作线程来训练模型(有效利用多核机器)
hs 如果设置为1,将用于模型训练。如果设置为0(默认),同时negative设置为非零,将使用负采样
negative 如果> 0,将使用负采样,该数值指定应取出多少“噪声字”(通常在5-20之间)。默认值为5,如果设置为0,则不使用负采样
cbow_mean = 如果设置为0,使用上下文词向量的和。如果设为1(默认),则使用平均值,仅适用于使用cbow时。
hashfxn 散列函数,用于随机初始化权重以增加训练的可重复性。默认是Python的基本内置哈希函数
iter 语料库中的迭代次数(epochs),默认值为5
trim_rule 词汇修剪规则,指定某些词是否应保留在词汇表中,被修剪掉或使用默认值处理(如果字计数<min_count则舍弃)。可以为None(将使用min_count)或接受参数(word,count,min_count)的可调用并返回utils.RULE_DISCARD,utils.RULE_KEEP或utils.RULE_DEFAULT。注意:规则(如果给出)仅在build_vocab()期间用于修剪词汇表,不会作为模型的一部分存储。
sorted_vocab 如果设为1(默认),在分配词索引之前,通过降序对词汇表进行排序。
batch_words 传递给工作线程(以及此cython例程)的示例批次的目标大小(以字为单位)。默认值为10000.(如果单个文本长度大于10000个字,则会传递更大的批次,但标准的cython代码会截断到最大值。)
4.使用模型
model = gensim.models.Word2Vec.load('fzhxx_model') #加载模型
a = model.most_similar(positive=['积极词1','积极词2'],negative=['消极词1','消极词2'],topn=40) #取最符合的40个词
b = model.similarity('词1', '词2') #两个词的相似度
c = model.doesnt_match(['词1','词2','词3']) #最不一样的词
d = model['词汇名'] #词向量
官方文档:https://radimrehurek.com/gensim/models/word2vec.html