观其大致,能够比较好的融会贯通,理解整个任务。这是这篇post的主要目的。

Bert的应用模式

bert在应用到具体的任务上时,通常采用两阶段策略:

  • 第一阶段利用通用语言模型任务,采用自监督的学习方法,选择某个具体的特征抽取器,来学习预训练模型
  • 第二个阶段,根据手头具体的监督学习任务,采取特征集成或finetune的应用模型,

总之,加载预训练模型,然后为不同的任务定制第二阶段的定制网络

特征集成任务

ELMO方法是典型的特征集成方式,把当前要判断的输入句子,走一遍ELMO预训练好的的双层双向LSTM网络,然后把每个输入单词对应位置的高层LSTM激活embedding(或者输入单词对应位置的若干层embedding进行加权求和),作为下游任务单词对应的输入。

这是一种典型的应用预训练模型的方法,更侧重于单词的上下文特征表达方面。

finetune模式

GPT和bert采用finetune应用模式,在获得了预训练模型以及对应的网络结构(Transformer)后,第二个阶段仍然采用与预训练过程相同的网络结构,拿出手头任务的部分训练数据,直接在这个网络上进行模型训练,以针对性地修正预训练阶段获得的网络参数,一般这个阶段被称为Fine-tuning。

搜索引擎的未来就是QA和阅读理解:搜索引擎通过理解文本,对于用户提出的问题直接给出答案。

Bert生成式任务

例如将bert用在生成式摘要任务中。从技术角度上来讲,生成式任务符合典型的encoder-decoder框架。encoder部分好解决,只需要用预训练好的Bert模型初始化encoder部分的transformer即可。另一方面是decoder端。大量的实验证明直接将bert的预训练参数用来初始化decoder的部分效果都不好。主要原因是bert预训练的时候使用的是双向的语言模型,而一般的decoder任务是从左到右依次生成的,无法利用bert在预训练阶段学到的上下文信息。这也是bert在做生成类任务时遇到的最大问题。

如何用bert

简而言之,使用bert的核心在于使用transformer作为特征提取器,用bert预训练模型初始化transformer参数,然后再用当前的任务去finetune。