Word2vec & RNN & Transformer 入门

170 阅读2分钟

word2vec

简介

word2vec 通过无监督的学习方式学会给每个词一个 n 维的向量表示

主要涉及 CBOW 和 Skip-Gram 两种模型,CBOW 通过给定上下文来预测中间词汇,Skip-gram 通过给定中间词来预测上下文。通过这样的学习方式,每个词都会收敛到一个合适的表达,从而达成词向量表示的目的

缺陷:如果直接利用训练好的模型做 word2vec,未结合上下文信息,则无法解决一词多义问题

训练策略

如果每次预测都对所有的词生成一个概率,由于词的数量很多,这样做是不可取的

如果给定两个词输入,输出两个词是相邻词的概率,将 n 个预测转化为 1 个呢?如下图所示:

image.png

这样所有标签都成 1 了,所有需要进行负采样,加入标签为 0 的负样本

RNN

image.png

缺陷:当前输入依赖于上一时刻的特征,无法做并行计算

Transformer

Self-attention

自注意力机制,序列中的每个元素都要和其它所有元素进行加权计算

WQWKWVW^{Q} W^{K}W^{V} 是三个需要学习的矩阵,分别乘上输入得到 QKV

image.png

qk 做内积得到相关程度评分

image.png

Attention(Q,K,V)=Softmax(QKdk)VAttention(Q,K,V) = Softmax(\frac{QK}{\sqrt{d_k}})V,通过该式,便可同一时间计算出所有输入的表征

Multi-head Attention

一次自注意力机制得到的只是一种表达方式,可以通过多次自注意力得到多种表达,最终 concat 多种表达方式,经过全连接降维后得到最优表达

Feed Forward Neural Network

全连接层 + 激活函数

位置编码

自注意力机制每个元素都和其它所有元素做计算,与序列位置无关,但这与实际不符,因此需要为每个元素加上位置编码

Add & Norm

使用残差连接,目的是保证经过一顿操作之后的表征不比原数据差

Norm 使用的是 LayerNorm,同一样本的不同维度做归一化。(BatchNorm 是不同样本的同一维度做归一化)

decoder

和 encoder 的区别主要在两个方面:

  • 中间的 Multi-Head Attention 使用 encoder 的 KV
  • mask;decoder 的输入是过往的输出,而训练时往往把所有结果一次性给出,然后预测时输出是一个字一个字往外蹦。对于输入的每个字,在做自注意力时应该只能看见自身和前面的字,后面的字不应该参与该位置的计算。像这样加入掩码,就能够做到训练和预测的一致性