1. word2vec简介
gensim中的word2vec模块可以基于用户提供的语料快速计算相应词向量,从而用于下游任务。
word2vec基于语言学中经典的分布式假设,包含了基于中心词预测周围词的skip-gram和基于周围词预测中心词的CBOW两大类方法,同时为了解决词表庞大带来的softmax计算问题,可分别采用基于Huffman树的层次softmax方法以及基于局部小样本优化的negative sampling方法来减小计算规模。
word2vec在以bert为代表的预训练模型横空出世前,是大部分NLP下游任务的标配,尤其是采用fine-tune的形式,能充分利用大样本语料词向量的优势和当前任务的特点。
在gensim中,训练word2vec,一般将原始语料进行分词,逐行记录token,将语料存入文件。英文语料天然存在空格,而在中文语料中,可分别建立基于每个字和分词结果的word2vec。
2. 相关类
gensim中与word2vec模型相关的重要类包括:
gensim.models.keyedvectors.Word2VecKeyedVectors
词向量,记录了每个分词对应的n_dim维向量
gensim.models.word2vec.Word2VecVocab
词字典,记录了分词字典,可用字典或通过huffman树的形式存储
gensim.models.word2vec.Word2VecTrainables
用全连接神经网络NN训练出来的权重矩阵
gensim.models.word2vec.LineSentence
参数可为文件路径或者文件流对象
Word2Vec
是直接训练word2vec词向量的类,其相关参数包括:
sentences
语料,可为双层列表(外层为sentence,内层为token),或者通过gensim.models.word2vec.LineSentence
封装的语料文件
size
词嵌入空间,默认值100
window
上下文窗口大小 c c c(整个上下文+中心词长度为 2 c + 1 2c+1 2c+1),默认值5
min_count
低频词阈值,在构建词汇表时不考虑频数低于该参数的值,默认值5
workers
并行数,如设定workers=multiprocessing.cpu_count()
sg
模型框架,0-CBOW,1-skip-gram
hs
优化算法,0-negative-sampling,1-层softmax
negative
负采样的个数,一般5-20
ns_exponent
负采样分布的幂指数,一般为0.75
cbow_mean
在CBOW框架中,采用均值或和。0-和,1-均值。
alpha
梯度下降算法的学习率
min_alpha
最小学习率,使得学习率动态线性下降。动态策略,可由min_alpha
、alpha
和iter
共同得到
max_vocab_size
限制RAM大小
max_final_vocab
限制词汇表中的词个数
sample
高频词的下采样阈值,即高于该值的词将采用下采样,默认值1e-3
hashfxn
对初始词向量进行hash操作
iter
迭代的epoch
trim_rule
可定义对低频次的处理函数,默认None,即遵从min_count
参数设定
sorted_vocab
是否在构建词汇时,先对词进行长度排序,再编码。默认是。
compute_loss
是否保存中间的损失记录
`#### 3. 常用方法和属性
model.wv
返回词向量对象
model.wv.get_vector("word")
某个词的向量
model.wv.vocab
词汇表
model.wv.most_similar("word")
最接近的词向量
model.wv.similar_by_word('word', topn=10)
最接近的topn词向量
model.wv.similarity('wd1', 'wd2')
两个词的相似度(夹角余弦)
model.wv.doesnt_match(['wd1', 'wd2', 'wd3', 'wd4'])
词中不是同一类的
model.save
整个训练模型的保存
model.wv.save_word2vec_format( vector_file_path, vocab_file_path,, binary=False)
词向量的存储,分别存储为向量文件txt文件和模型bin文件(可为二进制或非二进制),注意顺序
word2vec.Word2Vec.load()
整个模型的导入,然后主要调用其下wv
的方法
gensim.models.KeyedVectors.load_word2vec_format
直接导入词向量