word2vec
简介
word2vec 通过无监督的学习方式学会给每个词一个 n 维的向量表示
主要涉及 CBOW 和 Skip-Gram 两种模型,CBOW 通过给定上下文来预测中间词汇,Skip-gram 通过给定中间词来预测上下文。通过这样的学习方式,每个词都会收敛到一个合适的表达,从而达成词向量表示的目的
缺陷:如果直接利用训练好的模型做 word2vec,未结合上下文信息,则无法解决一词多义问题
训练策略
如果每次预测都对所有的词生成一个概率,由于词的数量很多,这样做是不可取的
如果给定两个词输入,输出两个词是相邻词的概率,将 n 个预测转化为 1 个呢?如下图所示:
这样所有标签都成 1 了,所有需要进行负采样,加入标签为 0 的负样本
RNN
缺陷:当前输入依赖于上一时刻的特征,无法做并行计算
Transformer
Self-attention
自注意力机制,序列中的每个元素都要和其它所有元素进行加权计算
是三个需要学习的矩阵,分别乘上输入得到 QKV
qk 做内积得到相关程度评分
,通过该式,便可同一时间计算出所有输入的表征
Multi-head Attention
一次自注意力机制得到的只是一种表达方式,可以通过多次自注意力得到多种表达,最终 concat 多种表达方式,经过全连接降维后得到最优表达
Feed Forward Neural Network
全连接层 + 激活函数
位置编码
自注意力机制每个元素都和其它所有元素做计算,与序列位置无关,但这与实际不符,因此需要为每个元素加上位置编码
Add & Norm
使用残差连接,目的是保证经过一顿操作之后的表征不比原数据差
Norm 使用的是 LayerNorm,同一样本的不同维度做归一化。(BatchNorm 是不同样本的同一维度做归一化)
decoder
和 encoder 的区别主要在两个方面:
- 中间的 Multi-Head Attention 使用 encoder 的 KV
- mask;decoder 的输入是过往的输出,而训练时往往把所有结果一次性给出,然后预测时输出是一个字一个字往外蹦。对于输入的每个字,在做自注意力时应该只能看见自身和前面的字,后面的字不应该参与该位置的计算。像这样加入掩码,就能够做到训练和预测的一致性