本篇论文的整体结构如下:
- 对比模型:
- NNLM
- RNNLM
- Word2Vec
- Skip-Gram
- CBOW
- 关键技术
- 层次softmax
- 负采样
- 实验结果
- 与对比模型的直接对比结果
- 不同参数的实验
- 不同模型的效率分析
一、对比模型
语言模型基本思想: 句子中一个词出现和前面的词是有关系的,可以使用前面的词预测下一个词
NNLM:
输入层: 将词映射成向量,相当于一个1*v的one-hot向量乘以一个v*d的向量得到一个1*d的向量
隐藏层: 一个以tanh为激活函数的全连接层 a = tanh(d+ux), u、d为参数
输出层: 一个全连接层,后面接一个softmax函数来生成概率分布,y = b + wa, 其中y是一个1*v的向量
P(wt|wt-n+1........wt-1) = exp(ywt)/sum(exp(yi))
参数个数:
1) 每一个词映射为1*D的向量N个词concat,参数个数为N*D
2) 隐藏层大小为H,所以w参数矩阵大小为N*D*H
3) 词表大小为V,所以u的参数个数为H*V
所以NNLM参数个数Q = N*D + N*D*H + H*V
RNNLM:
输入层: 和NNLM一样,需要将当前步转化为词向量
隐藏层: 对输入和上一个时间步的隐藏输出进行全连接层操作:
s(t) = Uw(t) + ws(t-1) + d
输出层: 一个全连接层后面接一个softmax函数来生成概率分布
y(t) = b + vs(t)
其中y是一个1*v的向量,P(wt|wt-n+1........wt-1) = exp(ywt)/sum(exp(yi))
参数个数:
s(t) = Uw(t) + Ws(t-1)
y(t) = Vs(t) -- softmax --> p(xi|xi-N,.....xi-1)
y = [y1,y2,.....yv] = e^yi/(sum(e^yi))
w(t)表示t时刻当前输入的单词词向量,s(t-1)表示隐藏层的前一层输出,y(t) 表示输出的词的index
w维度是H, s维度是H, W维度是H*H, U维度是H*H, V维度是H*V(V表示词表大小)
所以RNNLM 参数个数Q = H*H + H*V
评价语言模型常用指标-困惑度
Loss : L = -1/Tlogp(wi|wi-n+1,.....wi-1)
pp(s) = p(w1,w2,....wt)^(-1/T)
logpp(s) = -1/Tlog(p(w1)p(w2|w1)....(wt/wt-n+1...wt-1))
logpp(s) = -1/T(log(p(w1)) + log(p(w2|w1)) + ...... log(p(wt|wt-n+1.....wt-1)))
logpp(s) = -1/Tsumi=1->Tlogp(wi|wi-n+1....wi-1)
pp(s) = e^Loss
上述模型存在的问题:
1、仅对一部分有意义的词进行梯度传播(如 the,a无意义)
2、引入先验知识,如词性等
3、解决一词多意问题
4、加速softmax层
二、Word2Vec
word2vec基本思想是句子中相近的词之间是有联系的,用词预测词
skip-gram: 中心词预测周围词
CBOW: 周围词预测中心词
Skip-gram:
1、中心词预测周围词
2、中心词生成2*windowsize个样本,中心词词向量和周围词做内积的方式得到周围词的概率,并进行优化
训练 W*,W, 词向量可以为W或者为(W + W*)/2
CBOW
1、周围词预测中心词
2、周围词向量求和或者平均 之后和中心词向量内积,进行softmax,然后反向优化
模型复杂度(模型参数个数)
Skip-gram: Q = C(D + D*V) C表示周围词,D表示每个中心词D维词向量
负采样:Q = C(D + D*(K+1)) K个负样本,1个正样本
CBOW:Q= N*D + D*V 因为sum或者avg所以向量维度与词向量维度一致,不是concat
层次softmax: Q = N*D + D*log2V
负采样: Q = N*D + D*(K+1)
N表示N个周围词,D表示每一个词词向量维度
三、实验结果
1、任务描述
2、最大化正确率
数据集越大、维度越大,效果越好
3、不同模型间比较
与其它人开源的词向量比较,Skip-gram比CBOW稍微慢一些,但是效果较好
4、大规模并行模型训练
词与词之间的关系,给一个词五个句子选择最合适的句子
5、微软研究院相关比赛
6、学习到句子间的关系
四、论文小结
关键点:
1、更简单的预测模型 -- word2vec
2、更快的分类方案 -- HS和NEG
创新点:
1、使用词对的预测来替代语言模型的预测
2、使用HS和NEG降低分类复杂度
3、使用subsampling 加快训练
4、新的词对推理数据集来评估词向量的质量
启发点:
1、大数据集上的简单模型往往强于小数据集上的复杂模型
2、理解数据 + 模型应用
一些经验:
超参数选择: 利用gensim做word2vec的时候,词向量的维度和单词数目有没有一个比较好的对照范围
1、dim一般在100-500之间选择
2、初始值词典大小V的1/4次方V = 10K,dim=100
3、min_count(词频出现的最少次数) 一般在2-10之间选择
4、时间比较多,可以用网格搜索grid_search
五、相关复现代码
代码详见: https://github.com/wangtao666666/NLP/tree/master/Word2Vec