Word2vec是一种简化版的神经网络模型,主要由两种词训练模型构成:CBOW(连续词袋模型)与Skip-Gram模型。这两种模型的结构如下:
CBOW模型:通过周围的词预测中心词。该模型的第一层是输入层,输入值采用one-hot编码形式。第二层隐含层对输入值进行加权求和,但不使用激活函数进行非线性变换。输入值的维度与输出值的维度不同。
Skip-Gram模型:通过中心词预测周围的词。该模型的第一层同样是输入层,输入值为one-hot编码形式。隐含层只进行线性变换,然后将输入值转换成softmax概率。模型的神经网络结构如下:
神经网络的输入值、输入值以及模型参数决定了模型的行为。在这里,我们把模型的参数定义为隐含层的权重矩阵。隐含层的输入是每个输入单词的“嵌入词向量”。
词向量的优点包括:一、降低输入的维度。例如,将5维的one-hot编码转换为三维形式。二、增强了语义信息,即相似的词向量也具有一定的相似性。
python
class gensim.models.word2vec.Word2Vec(sentences=None, corpus_file=None, 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, hs=0, negative=5,
ns_exponent=0.75, cbow_mean=1, hashfxn=, iter=5, null_word=0, trim_rule=None,
sorted_vocab=1, batch_words=10000, compute_loss=False,
callbacks=(), max_final_vocab=None)
以下是主要参数的介绍:
1) sentences:需要分析的语料,可以是一个列表,也可以从文件中读取(使用word2vec.LineSentence(filename))。
2) size:词向量的维度,默认值为100。这个维度的大小通常与语料的规模相关。对于较小的语料,如小于100MB的文本,使用默认值即可。对于较大的语料,建议增加维度。
3) window:即词向量上下文的最大距离。窗口越大,与某个词较远的词也会产生上下文关系。默认值为5。在实际应用中,可以根据需求动态调整这个窗口大小。对于小语料,可以设置得更小。对于一般语料,推荐范围为[5, 10]。
4) sg:选择Word2vec的模型。如果为0,则是CBOW模型;如果为1,则是Skip-Gram模型。默认是0,即CBOW模型。
5) hs:选择Word2vec的解法。如果为0,则是负采样;如果为1且负采样个数negative大于0,则是层次化Softmax。默认是0,即负采样。
6) negative:当使用负采样时,负采样的个数,默认是5。推荐范围为[3, 10]。这个参数在算法原理中被标记为neg。
7) cbow_mean:仅用于CBOW模型,在做投影时,如果为0,则算法中的xw为上下文词向量之和;如果为1,则为上下文词向量的平均值。默认值为1,不推荐修改默认值。
8) min_count:需要计算词向量的最小词频。这个值可以过滤掉一些生僻的低频词,默认是5。对于小语料,可以降低这个值。
9) iter:随机梯度下降法中的最大迭代次数,默认是5。对于大语料,可以增大这个值。
10) alpha:随机梯度下降法中的初始步长,默认为0.025。
11) minalpha:算法支持在迭代过程中逐步减小步长,minalpha给出了最小的迭代步长。
```python import logging import gensim from gensim.models import word2vec
wordVec = gensim.models.KeyedVectors.loadword2vecformat("word2Vec.bin", binary=True)
sentences = word2vec.LineSentence("../data/preProcess/wordEmbdiing.txt") a = list(sentences) len(a)
model = gensim.models.Word2Vec(sentences, size=200, sg=1, iter=8) model.wv.saveword2vecformat("./word2Vec" + ".bin", binary=True)
```
原文链接:https://blog.csdn.net/weixin_40437821/article/details/102638337(我的博客)