自然语言处理-BERT

Transformer

self-attention + Feed Forward Neural Network

  1. RNN 时间 t t t依赖 t − 1 t-1 t1,不能并行,仍然存在长期依赖的问题
  2. Transformer: 使用Attention机制将序列中任意两个位置之间距离缩小为常量,并且易于并行

Enconder:

s e l f A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k V ) self Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}}V) selfAttention(Q,K,V)=softmax(dk QKTV)

F F N ( z ) = m a x ( 0 , z w 1 + b ) w 2 + b FFN(z)=max(0,zw_1+b)w_2+b FFN(z)=max(0,zw1+b)w2+b

  • Multi-Head
  • 残差网络中的short-cut结构

Decoder:

  • Multi-Head Attention:
  • Encoder-Decoder Attention: Q Q Q来之与解码器的上一个输出, K K K V V V则来自于与编码器的输出。
  • Masked Attention:
  • + 位置向量

ELMO

  1. 使用char CNN 来获取基础embedding
  2. 使用多层双向LSTM ,最上面一层的输出是用softmax来预测下面一个单词。
  3. 结合多层embedding作为单词的动态embedding

LSTM抽取特征能力弱,拼接方式融合双向特征能力弱

GPT2

使用多层transformer的decoder(少了 encoder-decoder antention layer)的传统语言模型(预测下一个词语)

GPT因为采用了传统语言模型所以更加适合用于自然语言生成类的任务 (NLG),因为这些任务通常是根据当前信息生成下一刻的信息
而BERT更适合用于自然语言理解任务 (NLU)。

BERT:

  1. 使用完形填空模型,mask部分词语来预测该词语
  2. 使用Transformer(Encoder)架构,更好的词语间交互
  3. 使用next sentence predict多任务训练,获取语境信息

RoBERTa

  1. 去除next sentence predict任务
  2. 动态掩码. bert是数据预处理每个句子得到一个mask,这里应该是输入句子后动态mask
  3. 更大量的数据、 更大批次
  4. 文本编码. Byte-Pair Encoding(BPE)是字符级和词级别表征的混合,支持处理自然语言语料库中的众多常见词汇。

ERNIR (BERT-wwm)

为中文设计, mask时mask一个中文词语

XLNET

transformer内部在Ti的上文和下文单词中,随机选择i-1个,放到Ti的上文位置中,把其它单词的输入通过Attention掩码隐藏掉.

  1. Permutation Language Modeling(XLNet将句子中的单词随机打乱顺序,这样的话对于单词xi,它原先的上下文单词就都有可能出现在当前的上文中了) (自回归语言模型,自编码语言模型)
  2. Two-Stream Self-Attention 解决1的问题
  3. 引入Transformer-XL,以此来获得更长距离的单词依赖关系(片段级递归机制)
  4. Relative Segment Encoding(判断两个单词是否在同一个segment中,而不是判断它们各自属于哪个segment)

DistilBERT

知识蒸馏是一种模型压缩方法,又叫师生学习。它训练一个小模型,使之复制大模型(或模型集成)的行为。

  1. 移除了token类型的嵌入和pooler(用于下一句分类任务)
  2. 保留了 BERT 的其余架构,不过网络层数只有原版的 1/2

ALBERT

  1. 词嵌入参数因式分解 词嵌入<隐藏层 (添加project层)
  2. 隐藏层参数共享
  3. 更改next sentence predict为sentence order predict任务

模型参数量小、但是时间更长,效果也只是在参数量很大的时候效果好。

猜你喜欢

转载自blog.csdn.net/lovoslbdy/article/details/104860635