参考
word2vec源码详解(非Python)
参数解释
from gensim.models import Word2Vec
#下面的参数均是默认值
Word2Vec(sentences=None, #sentences可以是分词列表,也可以是大语料
size=100,#特征向量的维度
alpha=0.025,#学习率
window=5,#一个句子内,当前词和预测词之间的最大距离
min_count=5,#最低词频
max_vocab_size=None,#
sample=0.001, #随机下采样的阈值
seed=1,#随机数种子
workers=3,#进程数
min_alpha=0.0001,#学习率下降的最小值
sg=0, #训练算法的选择,sg=1,采用skip-gram,sg=0,采用CBOW
hs=0,# hs=1,采用hierarchica·softmax,hs=10,采用negative sampling
negative=5,#这个值大于0,使用negative sampling去掉'noise words'的个数(通常设置5-20);为0,不使用negative sampling
cbow_mean=1,#为0,使用词向量的和,为1,使用均值;只适用于cbow的情况
iter = 5,#迭代次数
null_word = 0,
trim_rule = None, #裁剪词汇规则,使用None(会使用最小min_count)
sorted_vocab = 1,#对词汇降序排序
batch_words = 10000,#训练时,每一批次的单词数量
compute_loss = False,
callbacks = ())
size: 对应代码中layer1_size, 表示词向量的维度,默认值是100。
train: 对应代码中train_file, 表示语料库文件路径。
save-vocab: 对应代码中save_vocab_file, 词汇表保存路径。
read-vocab: 对应代码中read_vocab_file, 表示已有的词汇表文件路径,直接读取,不用从语料库学习得来。
debug: 对应代码中debug_mode, 表示是否选择debug模型,值大于1表示开启,默认是2。开启debug会打印一些信息。
binary: 对应代码中全局变量binary,表示文件保存方式,1表示按二进制保存,0表示按文本保存,默认是0.
cbow: 对应代码中cbow, 1表示按cbow模型训练, 0表示按skip模式训练,默认是1。
alpha: 对应代码中alpha,表示学习率。skip模式下默认为0.025, cbow模式下默认是0.05。
output: 对应代码中output_file, 表示词向量保存路径。
window: 对应代码中window,表示训练窗口大小。默认是5
sample: 对应代码中sample,表示下采样阀值。
hs: 对应代码中hs, 表示按huffman softmax模式训练。默认是0, 表示不使用hs。
negative: 对应代码中negative, 表示按负采样模式训练, 默认是5。值为0表示不采用负采样训练;如果使用,值一般为3到10。
threads: 对应代码中num_threads,训练线程数,一般为12。
iter: 对应代码中iter,训练迭代次数,默认是5.
min-count: 对应代码中min_count,表示最小出现频率,低于这个频率的词会被移除词汇表。默认值是5
classes: 对应代码中classes,表示聚类中心数, 默认是0, 表示不启用聚类。
文章一 笔记
构建词汇库
先判断是否已经有处理好现成的词汇库,有的话直接读取,没有的话再进行训练。词汇表训练过程分为以下几个步骤:
- 读取单词(假设单词通过空格或者tab键或者EOL键进行分割)
- 计算单词对应hash值
- 通过hash值得到单词在词汇表中索引
- 将单词加入到词汇表
- 对词汇表根据词频进行降序排序
- 词汇表裁剪函数(当词汇表中词汇量大于一定值时进行裁剪,先裁掉低频词,然后再裁掉高频词,直到词汇量满足要求)
- 保存训练好的词汇表
初始化网络
- 初始化网络参数
- 构建哈夫曼树
- 初始化负采样概率表
模型训练
结果处理
可以直接保存结果或者用k-means聚类算法分析结果
文章二 笔记
Word2Vec的参数解释 (使用Gensim训练Word2vec)
语料库预处理
原始的训练语料转为sentence迭代器
每一次迭代返回的sentence是一个word(utf8格式)的列表。可以使用Gensim中word2vec.py中的LineSentence()方法实现。
训练
将上面处理的结果输入Gensim内建的word2vec对象进行训练即可
保存
将训练好的模型保存在文件中。随后,可以调用load()函数将保存的模型加载进来。