模型简介:

BERT简介:
首先我们要理解监督学习和自监督学习之间的区别:
监督学习是有人工设定好的label标签,而自监督学习一开始是没有label的

bert功能一:masking
首先决定要遮盖那几个tokens,决定之后遮盖的方法有两种:一种是直接mask遮盖,还有一种是随机生成汉字填充

bert功能二:句子衔接预测
句子与句子之间用SEP连接,只有开头的CLS作为输出,用来表示这两个句子是否衔接,但是这个功能一般效果不明显,不使用该功能模型识别衔接效果也不错

补充:我们一般说的Fine-tune就是在原有的BERT模型进行改造,生成新的模型

那么我们做好的模型怎么测试其效果怎么样呢?我们可以从以下几个方面进行测试


如果只使用BERT上面提到的两个功能,并没有什么作用,重要的是BERT可以通过变式得到更广泛的应用
案例一:语句情感分析



做填空题训练的时候是supervised,但是用在下游标注的时候是unsupervised


预训练BERT和未预训练模型区别:

案例二:词性分析



案例三:条件推断
输入自然语言,premise作为输入的条件/场景,hypothesis作为推断内容,最终输入推断是否正确

采用的是同样的结构:

案例四:阅读理解
现在的问题是这样的,我输入一个问题,如何让机器在原文中找到答案呢?输入:问题,输出:答案的起始位置到终点位置(也就是s和e)

处理过程如下:
将问题和文章作为输入(需要注意的是,BERT的结构和encoder类似,但是BERT的输入长度并没有很长,一般输入512就差不多了),同时提前训练好random initialized作为"标准答案"用来和输出的向量计算loss,通过inner product和softmax计算相似度,相似度越高,说明和正确答案的位置越接近



几个可能产生疑惑的问题:




问:每次问一个问题不都得拿真实答案去预测吗,这样的意义在哪里



如何预训练一个seq2seq的model:
首先把encoder的输入弄坏,然后让decoder还原输出

各种各样的弄坏方法:

BERT输出的文字不仅仅代表一个向量,甚至可以包含这个字的具体意思,这样是怎么做到的呢?
如下图所示,BERT主要采用的是上下文学习机制,以此来学习文字的"意思",最初版的模型是word embedding模型,但是这个最初模型只采用两个transformer结构,现在的BERT是更复杂的结构

但是实际上,并不只是这样的学习方式使得BERT达到这样的效果,如果我们进行随机训练,就会发现BERT的训练结果比随机训练还要好,说明BERT在初始化参数的过程就比较好
Multi-lingual BERT:
该模型是一种多语言模型,如果我们训练好了英文的语义填空,中文的类似语境也可以实现

这说明同样意思的中英文字词之间的距离向量也是很近的

但是这不代表BERT模型不区分语言,我们把中英文的embedding差距做成差距向量,发现英文的输出加上这个向量就变成中文输出了

