![cf0909e7ad7440d23265e55834b73f40.png](https://img-blog.csdnimg.cn/img_convert/cf0909e7ad7440d23265e55834b73f40.png)
词语,作为NLP任务中的一个基本组成成分,是人类的一个抽象表示,是符号形式的,所以必须表示为计算机可处理的数值形式。将词语表示嵌入到多维数据空间中即为word embedding,word2vec为word embedding的一种。
1、skip-gram和cbow模型
word2vec的训练方式有2种,一个是根据上下文预测中心词的CBOW模型,一种是由中心词预测上下文的skip-gram模型。这里以skip-gram为说明。
![d1423ddb26192b5cc78ae4945a6756fd.png](https://img-blog.csdnimg.cn/img_convert/d1423ddb26192b5cc78ae4945a6756fd.png)
对于一个训练语料库,我们设定词汇量为V,需要嵌入的数据空间维度为N(即词向量维度,实践中50-2000左右)。对每一个单词我们用one-hot向量表示(向量维度为v,只有对应单词的index位为1,其余全为0),随机初始化2个矩阵W和W`,
即为模型给出的中心词预测上下文词的概率分布。损失函数为预测值与真实one-hot向量的交叉熵,模型训练时使用滑动window的方式,取k个上下文。使用反向传播梯度下降方法迭代在大量无监督样本中训练。输入矩阵W即为我们需要的嵌入矩阵。对于CBOW模型,根据上下文预测中心词,对于k个输入一般取加权平均的方式处理。
2、word2vec的使用
实际使用中都有现成的软件包可供使用。gensim包比较推荐使用:
from gensim.models import Word2Vec
model = Word2Vec(
sentences, #预料库
sg, #使用skip-gram或者cbow
size, #嵌入维度
window, #滑动窗口大小
min_count, #忽略出现频率小于此的单词
negative, #优化算法负采样大小
hs #是否使用层级softmax优化算法
)
3、negative sample
对于Word2vec的2个基础算法,每次梯度更新只能优化一个向量且softmax里的指数求和操作计算量太大,一般使用比较高效的负采样算法。负采样算法以1:k的比例取正负样本(正样本为W,负样本U
最大化条件概率函数:
对上面的目标函数使用梯度下降法。这样每次只取一小部分样本大大减少运算量提高效率。
对于负采样,使用带权采样方法即高频词采用的概率大一些,低频词采用的概率小一些。
带权采样算法:len(w)=