BERT的应用
- 分类问题
- 问答系统
- Named Entity Recognition(NER)
- 聊天机器人
- 阅读理解
- 情感分析
- 指代分析
- Fact checking
用于抽取特征
分类任务
输入一个句子,然后对这个句子进行分类。可以文字进行分类,例如对文章进行分类,按一些主题进行分类,如这是娱乐新闻,这是体育新闻等等。
- 情感分析
- 文章分类
具体怎么做呢,就是在你要输入序列最前面添加 [CLS] 然后这个表示分类 输出给线性分类器(Class Label)进行分类即可。这里分类器(Class Label)参数是可以随机初始化,而且 BERT 也可以作为 Fine-tune 一起学习。
对词分类任务
输入一个句子,对句子中每一个词进行分类,确定词汇输入那个一分类,而不是对句子进行分类。输出我们可以对每一个词进行输出其分类。在订票系统我们可以给每一个词加上标签,例如那些词表示地点,那些词表示时间,那些是出发时间,那个词是你的目的地
- 订票系统
推论任务
输入两个句子,输入一个分类,常见任务有推理任务。例如给机器一个输入前提,然后机器判断根据这个前提作为假设后一句是否成立。
- 推理
这个做法也比较简单,就是给 BERT 输入两个句子,中间使用 [SEP] 分隔,然后在前面添加 [CLS] 用于表示分类符号。[CLS] 对应输出给分类器即可。
阅读理解任务
让机器读一篇文章然后回答一些问题,和我们高中的阅读理解很相似,不过要相对简单,为什么说是简单,因为这是有前提的,也就是这些表示答案的词一定可以在文章中找到。
- 阅读理解
我们给BERT 输入文章 和问题
这些数据都是用token 序列表示。将 D 和 Q 输入 QA 模型会得到两个整数 s(start) 和 e(end) 这两个整数表示你的答案位于文章第 s 词汇到第 e 词汇之间。
我们用一个向量 (维度和BERT输出词向量维度相同)与文章中每一个词汇做点积后得到一个标量,然后文章中出现词汇和这个向量作为点积后标量输入到一个 softmax 会得到一个概率分布。然后看那个分数最高 s = 等于这个词汇位置。这样就计算出开始位置,同理可以计算出结束的位置(e)。
BERT 是如何工作
上图中是一个基础BERT,这里只有 12 层,我们看一看这些层都做了哪些事情
- 1 层每一词看的很广。
- 2-3 层做的是每一个词推测下一个词
- 8-7 推断词属于哪一个句子
我们来 BERT 模型中层,每一个层具体做了哪些事情。BERT 举例有 24 层,BERT 每一层就好像是在作为 NLP 任务。例如我们在 NLP 首选会 POS 来判断每一个词的词性,接下来分析句子的文法,当我们知道句子的文法后,就可以进行进一步分析,确定指代关系,词汇关系分析,都是从比较简单到比较复杂。BERT 同样也是按这流程来安排他的每一层的工作,也是从简单到复杂。
那么 BERT 有 24 层,我们回忆一下 ELMo 模型就是将模型每一层的输出抽取通过加权求和来得到最终输出。而且这些权重是根据任务模型一起学出来,通过权重我们就可以知道那些层与那些任务关系更紧密。
我们用同样方法来检查一下 BERT 每一层与那些任务相关。图中深蓝色表示任务对某一层的权重。图中每一行代表了一个 NLP 的任务。在每一个 NLP 任务对于某一层权重越大就说明这个 NLP 任务越需要 BERT 某一层。