机器学习:Bert and its family

Bert

先用无监督的语料去训练通用模型,然后再针对小任务进行专项训练学习。

  • ELMo
  • Bert
  • ERNIE
  • Grover
  • Bert&PALS

Outline

Pre-train Model

首先介绍预训练模型,预训练模型的作用是将一些token表示成一个vector

比如:

  • Word2vec
  • Glove

但是对于英文,有太多的英文单词,这个时候应该对单个字符进行编码:

  • FastText

对于中文,可以对部首偏旁,或者把中文字当做图片送人网络中得到输出:

上述方法的问题不会考虑每个句子意思中相同字会有不同的意思,产生相同的token:

contextualized word embedding

类似于sequence2sequence模型的encoder一样。

同样的token,给出不一样的embedding,上述句子都有苹果两字。

  • Bigger Model
  • Smaller Model

    重点关注ALBERT,将模型变小的技术:

    网络架构设计:

    让模型能读很长的内容,不仅是一篇文章,有可能是一本书。
  • Transformer-XL
  • Reformer
  • Longformer

self-attention的计算复杂度是 O ( n 2 ) O(n^2) O(n2)

How to fine-tune

如何进行预训练

  • 输入:
    一个句子还是两个句子,[sep]进行分割。
  • 输出部分:
    输出一个class,加入一个[cls],产生跟整个句子有关的embedding

    如果没有cls,就是把所有的embedding合起来送入模型,得到一个输出。

    第二种就是给每个token一个class,相当于每个embedding一个class

    Extraction-based QA



    General Sequence
    如何用在生成文本呢?

    上述结构encoder得不到好的使用

将预训练模型当做encoder使用,每次产生一个word后,送入模型继续生成,直到产生eos结束符。

微调有两种方法:

  • 第一种:预训练模型不动,对其产生的embedding 针对具体任务进行训练,只对上层模型微调;
  • 第二种:预训练模型和具体任务模型联合到一起训练,消耗会大一些;
    第二种方法会比对第一种方法获得的效果要更好一点,但是训练整个模型会遇到的一些问题:
  • 训练完了之后预训练模型也发生了改变,相当于每个任务都会有一个不同的预训练模型,每个模型都比较大,这样非常的浪费。

针对上述问题,解决方法:

  • Adapter:只训练少量的参数结构APT


fine-tune的时候只会调APT结构的参数,但是是插入到transformer结构中,加深了网络:

  • Weighted Features
    综合每一层的embedding,送到具体的任务中学习,权重参数可以学出来。




    模型的loss,泛化能力。start-point到end-point,两点间距离越宽,凹的越浅说明泛化能力越一般;两点间距离越近,凹得越深说明泛化能力越好。

How to pre-train

如何进行预训练:

翻译任务

  • Context Vector(Cove)

    把输入的句子A送入encoder,然后decoder得到句子B,需要大量的pair对data

Self-supervised Learning

self-supervised的input和output是自己产生出来的。

Predict Next Token

给定输入,预测下一个token

有了w1预测w2,用w1, w2预测w3, 然后用w1,w2,w3预测w4, 但是不能用右边的数据用来预测左边的数据:

基础架构网络使用的是LSTM:

  • LM
  • ELMo
  • ULMFiT

后续一些算法将LSTM换成Self-attention

  • GPT
  • Megatron
  • Turing NLG

注意:控制Attention的范围

可以用来生成文章: talktotransformer.com




如果只考虑左边的出现关系,为什么不考虑右边文本呢?

Predict Next Token-Bidrectional

左右两边产生的context,二者联合起来作为最终表示:

但是问题是左边只能看到左边的,无法看到右边的结束,右边只能看到右边的,无法看到左边的开始。

Masking input

随机的盖住某个词,是看到了完整的句子才来预测这个词是什么。

这种思想往前推,跟以前的cbow非常像:

Bert与cbow的区别就是左右两边的长度可以无限,而不是有个window窗口长度。

随机mask是否够好呢?有几种mask方法:

  • wwm
  • ERNIE
  • SpanBert
  • SBO

    盖住一整个句子或者盖住好几个词。或者先把Entity找出来,然后把这些词盖住:


    盖住的长度按照上述图的出现概率。

    盖住的左右两边的embedding来预测,以及输入的index来恢复中间的哪个词。
    SBO的设计期待左右两边的token embedding能够包含左右两边的embeeding信息。

XLNet

结构不是使用的Transformer,而是使用Transformer-XL

随机把顺序打乱,用各式各样不同的信息训练一个token。

Bert的训练语料比较规整:

Bert不擅长做Generative任务,因为bert训练的时候给的是整个句子,而generative只是给一部分,然后由左得右预测下一个token

MASS/BART

要对w1,w2, w3,w4进行一些破坏,不然model学不到任何东西,破坏的方法:

  • mask(随机mask)
  • delete(直接删掉)
  • permutation(打乱)
  • rotation(改变起始位置)
  • Text Infilling (插入一个别的误导,少掉一个mask)

结果是:

UniLM


UniLM进行多项训练

Replace or Not

  • ELECTRA,避开了需要训练和生成的东西,判断哪个位置是否被置换,训练非常简单,另外每个输出都被用到。
    *
    置换的词不好弄,如果是随便置换肯定很容易知道。所以有了下面的结果,用一个小的bert预测的结果作为替换的结果,小的bert效果不要太好,不然预测的结果跟真实的一样,得不到替换的效果,因为替换的结果是一模一样的。


    只需要四分之一的计算量,就能达到XLNet的效果。

Sentence Level

需要整个句子的embedding。

  • 使用skip thought,如果两个句子的预测结果比较像,那么两个输入句子也比较像。
  • quick thought,如果两个句子的输出是相连的,让相似的句子距离越近越好。
    上述方法避开做生成的任务。

原始的Bert其实还有一项任务NSP,预测两个句子是否是相接的还是不相接的。两个句子中间用sep符号分割。

  • nsp:效果表现不好
  • Roberta:效果一般
  • sop: 正向是相接,反向是不相接,被用在ALBERT
  • structBert:Alice,

T5 Comparison

5个T就叫T5

4个C就叫C4

ERNIE

希望在train的时候加入knowledge

Audio Bert


Multi-lingual BERT

多语言BERT

使用多种语言训练一个Bert模型

104种语言进行训练,可以做到Zero-shot的阅读理解。

在英文语料上进行训练,但在中文的QA任务上,效果还不错


中文翻译成英文,然后进行英文训练,发现结果并没有直接用中文训练的模型。

  • NER
  • Pire:词性标注

NER任务和词性标注任务都符合上述规律,用一种语言进行训练,然后在另外一种语音上进行任务处理。

是不是可以用来处理甲骨文?

Cross-lingual Alignment

中文的兔子embedding与英文的兔子embedding是比较接近的,模型可能去掉了语音的特性,而只考虑意思。


year排在第一名,month排在第三名,对应的分数是rank的倒数


资料量要非常大才能有比较好的结果,从BERT200k和BERT1000k中结果可以看到。

对传统的算法GloVe和Word2Vec也进行同样的实验,发现Bert效果还是要优于之前的算法。

How alinment happens


用fake-english代替真的english,然后去训练,跨语言的能力不需要中介语音的存在。

bert是知道语言的信息的,但是不是很在意语言类型。

每串文字代表一种语言,语言还是有一些差距的。


黄色是英文编码,蓝色是中文编码,二者融合起来,通过α进行控制:

在英文上进行fine-tune,然后在中文上进行测试,让embedding更像中文,在测试阶段,加上蓝色向量会提升效果。

相关推荐
红客59711 小时前
Transformer和BERT的区别
深度学习·bert·transformer
Shy96041812 小时前
Bert完形填空
python·深度学习·bert
软工菜鸡21 小时前
预训练语言模型BERT——PaddleNLP中的预训练模型
大数据·人工智能·深度学习·算法·语言模型·自然语言处理·bert
向阳12181 天前
Bert快速入门
人工智能·python·自然语言处理·bert
湫ccc2 天前
Bert框架详解(上)
人工智能·深度学习·bert
快乐点吧2 天前
BERT 模型在句子分类任务中的作用分析笔记
笔记·分类·bert
weixin_543662862 天前
BERT的中文问答系统28
人工智能·python·bert
湫ccc2 天前
Bert框架详解(下)
人工智能·深度学习·bert
Landy_Jay3 天前
跟李沐学AI:BERT
人工智能·自然语言处理·bert
0x2113 天前
[论文阅读]BERT-based Lexical Substitution
论文阅读·人工智能·bert