利用gensim训练word2vec

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_alphaalphaiter共同得到

  • 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

直接导入词向量

你可能感兴趣的:(自然语言处理)