论文地址: https://arxiv.org/pdf/1810.04805.pdf
简介
bert 是 google2018 年提出的一种两阶段语言模型, 全称 Bidirectional Encoder Representations from Transformers, 它本质上是基于 Denoising AutoEncoding 模型, 即 bert 是 AE 语言模型, 好处是能够双向编码获取上下文信息, 缺点是它会在输入侧引入噪声 --[MASK]标记符号, 造成预训练 - 微调两个阶段的数据不一致, 引起误差. 虽然如此, bert 依然有不可小觑的优势, 它在发布之初, 横扫 nlp 领域, 在 11 项自然语言处理的任务中都拿到了第一的好成绩, 接下来我会详细介绍一下 bert.
BERT 的总体思路
bert 分为两个阶段: 预训练阶段和 fine-tunning 阶段. 预训练阶段利用 Transformer 结构进行训练, 输入文本是大量的无监督文本, 通过对无监督数据的训练获取一个泛化能力较强的预训练模型; fine-tuning 阶段即微调阶段, 在这一阶段会使用跟任务相关的有监督数据, 基于上一步训练出的预训练模型进行针对性训练(只增加一个输出层即可), 最终获取一个跟任务相关的模型.
网络结构
BERT 使用的网络结构是标准的 Transformer, 即《Attention is all you need》论文中提出的多层 Transformer 结构, 它不再使用传统的 RNN(RNN 的缺陷是不能很好的处理长文本, 且不能并行处理数据), 而是使用 attention 机制来解决长距离依赖问题. 关于 Transformer 的详细内容可查看我之前的博客.
论文中分别画出了 bert,GPT,ELMO 的三个结构, 如下图所示:
由上述结构对比图可知, BERT 每一层都是用双向信息, gpt 使用的是单向信息, 即只能利用上文, 却不能利用下文进行特征提取, elmo 是使用了两个 lstm 获取信息, 一个 lstm 获取上文信息, 一个 lstm 获取下文信息, 再将两个 lstm 计算的结果进行简单的拼接, 看起来虽然也是获取了双向信息, 但是其本质还是考虑单向信息, 这从他们的目标函数上可以看出来, 目标函数如下所述:
Elmo: lstm1-> P(ω
i
| ω
1
,ω
2
,...,ω
i-1) -> 获取上文信息
lstm2-> P(ωi| ωi+1,ωi+2,...,ωn)-> 获取下文信息
Bert
:
P(ω
i
| ω
1
,ω
2
,...,ω
i-1,
ω
i+1
,ω
i+2
,...,ωn) -> 获取双向信息
Embedding
来源: http://www.bubuko.com/infodetail-3451328.html