Task 4: Contextual Word Embeddings

Contextual Word Embeddings

最想学习哪些内容,汇总如下:


  • 变压器 (Transformers)
  • BERT
  • 问题解答 (QA)
  • 文本生成和摘要

预训练的词向量:早年的Collobert,Weston等人,2011成绩


预训练的词向量:当前(2014 -)


  • 我们可以从随机词向量开始,然后在我们感兴趣的方面进行训练。
  • 但在很多时候,使用预训练的词向量会有所帮助,因为我们可以在更多数据上进行训练以获得更多词
  • Chen和Manning(2014)依赖性解析
  • 随机:均匀(-0.01,0.01)•- - 预训练:
    • PTB(C&W):+ 0.7%
    • CTB(word2vec):+ 1.7%

用词向量识别生词


  • 最简单和常见的解决方案:

  • 训练时间: Vocab is {words occurring, say, ≥ 5 times} ∪ {<UNK>}

  • 映射所有稀少(<5)的字到<UNK>,训练为一个字向量

  • 运行时间:当out-of-vocabulary(OOV)字出现时,使用<UNK>

  • 问题:

    • 不论身份或含义如何,都无法区分不同的UNK词
  • 解决方案:

  1. 我们刚刚学习了用于构建向量的char级模型!
    • 特别是在诸如问答之类的应用中
      • 单词标识匹配的重要位置(甚至单词矢量词汇之外的单词)

2.尝试这些技巧(来自Dhingra,Liu,Salakhutdinov和Cohen,2017年)
- a. 在测试时间内,如果<UNK>字出现在无监督的嵌入字里,就在测试时间内使用该向量。
- b. 另外换句话说,只需给他们分配一个随机向量,将它们添加到您的词汇表中。

  • a. 绝对有很大帮助; b. 可能会有所帮助
  • 您可以尝试的另一件事:
    • 将东西组装成单词类(例如,未知数,大写的东西等),并且每个里都有一个<UNK-class>

1. 怎样描述一个词?


  • 到目前为止,基本上我们已经说过我们有一种描述词的方法:

    • 在一开始就学过的词向量
      • Word2vec,GloVe,fastText
  • 这些有两个问题:

    • 对于单词类型,始终使用相同的表示形式,而不考虑单词标记出现的上下文
      • 我们可能希望细粒度的词义消除歧义
    • 我们只用一个词来表示,但是词有不同的方面,包括语义,句法行为和注册/内涵

我们一直都有解决这个问题的办法吗?


  • 在一个NLM中,我们立即通过LSTM层插入单词向量(也许仅在语料库上训练)
  • 这些LSTM层经过训练可以预测下一个单词
  • 但是这些语言模型在每个位置都产生了上下文特定的单词表示形式!

2. Peters等(2017年):TagLM –“Pre-ELMo”


https://arxiv.org/pdf/1705.00108.pdf

  • 想法:希望在上下文中使用单词的含义,但通常仅在带有小任务标签的数据(例如NER)上学习任务RNN )
  • 为什么不做半监督方法,在大型的未标记语料库上训练NLM(不仅仅是单词向量)?

Tag LM


命名实体识别(NER)


NLP的一个非常重要的子任务:例如,在文本中查找和分类名称:

  • 独立议员安德鲁·威尔基(Andrew Wilkie)决定撤回对少数党工党政府的支持,这听起来很引人注目,但不应进一步威胁其稳定性。 2010年大选后,威尔基,罗伯·奥克肖特,托尼·温莎和绿党同意支持工党时,他们只提供了两项保证:信心和供给。

彼得斯等(2017):TagLM –“Pre-ELMo”


语言模型在“十亿个单词基准”的八亿个训练单词上进行训练
语言模型观察

  • 接受过监督数据培训的LM并没有帮助
  • 双向LM仅能向前推进约0.2
  • 巨大的LM设计(ppl 30)可以将较小的模型(ppl 48)减少0.3
    特定于任务的BiLSTM观察
  • 仅使用LM嵌入来预测效果不好:88.17 F1
  • 远低于仅对标签数据使用BiLSTM标记器

同样在空中:McCann等(2017年)


https://arxiv.org/pdf/1708.00107.pdf

  • 还具有使用训练好的序列模型为其他NLP模型提供上下文的想法
  • 想法:机器翻译旨在保留含义,也许这是一个好目标?
  • 使用作为seq2seq +注意NMT系统的编码器的2层bi-LSTM作为上下文提供者
  • 在各种任务上,生成的CoVe向量的性能均优于GloVe向量
  • 但是,结果并没有其他幻灯片中介绍的更简单的NLM培训那样强大,因此似乎被放弃了
  • 也许NMT比语言建模更难?
  • 也许有一天这个想法会回来吗?

彼得斯等(2018):ELMo:语言的嵌入模型


深度上下文化的单词表示形式。 NAACL 2018.https://arxiv.org/abs/1802.05365

  • 单词标记向量或上下文单词向量的突破版本
  • 使用长上下文而不是上下文窗口来学习单词标记向量(此处,整个句子可能更长)
  • 学习深入的Bi-NLM并将其所有层用于预测

彼得斯等(2018):ELMo:语言模型的嵌入模型


  • 训练双向LM
  • 针对绩效较高的LM,但不要过大:
  • 使用2个biLSTM层
  • 使用字符CNN构建初始单词表示(仅)
  • 2048克克过滤器和2个高速公路层,512d投影
  • 用户4096个暗淡隐藏/单元格LSTM状态和512个暗淡
    下一个输入的投影
  • 使用剩余连接
  • 绑定令牌输入和输出(softmax)的参数,并将其绑定在前向和后向LM之间

彼得斯等(2018):ELMo:语言的嵌入模型


  • ELMo学习特定任务的biLM表示形式的组合
  • 这是一项创新,仅在使用LSTM堆栈的顶层时有所改进

  • 可将ELMo的总体实用性扩展到任务;

  • 是softmax-normalized混合模型权重

彼得斯等(2018):ELMo:与任务配合使用


  • 首先运行biLM以获取每个单词的表示形式
  • 然后让(任何)最终任务模型使用它们
  • 冻结ELMo的重量以用于监督模型
  • 将ELMo权重连接到特定于任务的模型中•详细信息取决于任务
  • 连接到中间层,以实现标记LM典型
  • 可以在产生输出时再次提供EL更多表示,例如在问题回答系统中

序列标记器中使用的ELMo


CoNLL 2003命名实体识别(en news testb)


ELMo结果:适用于所有任务


ELMo:图层权重


  • 两个biLSTM NLM层具有不同的用途/含义•较低的层更适合较低层的语法等。
  • 词性标记,句法依赖性,NER•较高的层更适合较高级别的语义
  • 情感,语义标签,问题回答,SNLI
  • 这看起来很有趣,但是看起来似乎更有趣
    它如何通过两层以上的网络来实现

周围还有:ULMfit


Howard and Ruder(2018)通用语言模型微调,用于文本分类。 https://arxiv.org/pdf/1801.06146.pdf

  • 转让NLM知识的一般思路
  • 适用于文本分类

ULMfit


在大型通用领域语料库上训练LM(使用biLM)在目标任务数据上调整LM
微调为目标任务的分类器

ULMfit重点


使用大小适中的“ 1 GPU”语言模型不是真正庞大的模型在LM微调中要多加注意
每层学习率不同
倾斜的三角形学习率(STLR)进度表学习分类器时,使用层级[h#,maxpool +,meanpool +]进行分类时逐步分层和STLR

ULMfit性能

  • 文本分类器错误率

ULMfit转移学习


让我们扩大规模!


GPT-2语言模型(精选)输出


系统提示(人为写)
模型完成(机器编写,10条)
在一个令人震惊的发现中,科学家发现了一群独角兽,它们生活在安第斯山脉一个偏远的,以前未被开发的山谷中。令研究人员更加惊讶的是,独角兽会说完美的英语。
这位科学家以其独特的号角Ovid的独角兽命名了这个种群。这些四角银白色独角兽以前是科学界所不知道的。
现在,在将近两个世纪之后,终于解决了引发这种奇怪现象的谜团。
拉巴斯大学(University of La Paz)的进化生物学家豪尔赫·佩雷斯(JorgePérez)博士和几位同伴在安第斯山脉发现一个没有其他动物或人类的小山谷时正在探索。佩雷斯注意到该山谷似乎是一个天然喷泉,周围环绕着两个岩石和银色雪峰。
佩雷斯和其他人然后进一步冒险进入山谷。 ...

变压器模型


所有这些模型都是Transformer体系结构模型...所以也许我们最好了解一下Transformers?

4. 变压器的动力


  • 我们想要并行化,但RNN本质上是顺序的

  • 尽管有GRU和LSTM,但RNN仍需要注意机制来处理远距离依赖关系–状态之间的路径长度会随着序列的增长而增加
  • 但是,如果注意力使我们能够进入任何状态……也许我们可以只使用注意力而无需RNN?

变压器概述


注意就是您所需要的。 2017.阿斯瓦尼(Aswani),Shazeer,Parmar,Uszkoreit,Jones,Gomez,Kaiser,Polosukhin https://arxiv.org/pdf/1706.03762.pdf

  • 非循环序列到序列编码器-解码器模型
  • 任务:具有平行语料库的机器翻译
  • 预测每个翻译的单词
  • 最终成本/误差函数是softmax分类器之上的标准交叉熵误差

变压器基础


  • 自己了解变压器?
  • 重要推荐资源:
    http://nlp.seas.harvard.edu/2018/04/03/attention.html•TheAnnotatedTransformerbySashaRush
  • 使用PyTorch的Jupyter笔记本可以解释所有内容!
    • 现在:让我们定义基本的构建基块
      变压器网络:首先,新的关注层!

点积注意(扩展我们以前的DEF)


-输入:查询q和到输出的一组键值(k-v)对

  • 查询,键值对和输出都是向量
  • 输出是值的加权总和,其中
  • 每个值的权重由查询的内积计算和相应的密钥
  • 查询和键具有相同的维数dk值具有dv

点产品注意–矩阵符号


  • 当我们有多个查询q时,我们将它们堆叠在矩阵Q中:

  • 成为:

逐行softmax

点积乘积注意


  • 问题:随着dk变大,qTk的方差增加-softmax内的一些值变大- softmax变得非常尖峰,因此其梯度变小。
  • 解决方案:按查询/键向量的长度缩放:

编码器中的自我注意


  • 输入的单词向量是查询,键和值
  • 换句话说:单词向量本身彼此选择
  • Wordvectorstack = Q = K = V
  • 我们将在解码器中看到为什么我们在定义中将它们分开

多头注意力


  • 简单的自我关注的问题:
  • 单词彼此交互的唯一方式
  • 解决方案:多头注意力
  • 将第一个Q,K,V映射到h = 8时要低很多
    W矩阵维空间
  • 然后注意,然后连接输出并通过 全联接层进行传递

完整的变压器块


每个块都有两个“子层”

  • 多头注意力
  • 2层前馈NNet(带有ReLU)

这两个步骤还具有:
残余(短路)连接和LayerNorm
LayerNorm(x +子层(x))
Layernorm将输入更改为均值0和方差1,
每层和每个训练点(并增加了两个参数)

由Ba,Kiros和Hinton,进行的图层归一化,https://arxiv.org/pdf/1607.06450.pdf

编码器输入


  • 实际的单词表示形式是字节对编码
    • 与上一讲一样
  • 还添加了位置编码,因此在不同位置的相同单词具有不同的整体表示形式

完整的编码器


  • 对于编码器,在每个块中,我们使用相同的Q,K和V
    来自上一层
  • 块重复6次
    • (在垂直堆栈中)

第5层中的注意力可视化


  • 单词开始以明智的方式关注其他单词

关注可视化:隐式回指解析


在第5层。 注意头5和6的注意力仅与“它”一词分开。请注意,此单词的注意非常尖锐。

变压器解码器


  • 解码器中有2个子层更改
  • 对先前生成的输出进行屏蔽的解码器自我关注:

  • Encoder-Decoder Attention,其中查询来自先前的解码器层,而键和值来自编码器的输出

块也重复了6次

提示和变压器的技巧


详细信息(书面和/或以后的讲座):

  • 字节对编码
  • 检查点平均
  • ADAM优化与学习率的变化
  • 在添加残差之前,在每一层的训练过程中都会出现辍学现象
  • 标签平滑
  • 具有波束搜索和长度的自动回归解码
    处罚
  • 变压器的使用正在普及,但是它们很难进行优化,与LSTM不同,它们通常不是开箱即用的
    而且它们在其他任务构建块上还不能很好地发挥作用。

MT的实验结果


解析实验结果


5. BERT:Devlin,Chang,Lee,Toutanova(2018年)


BERT(来自变压器的双向编码器表示):
深度双向变压器的预训练以提高语言理解能力

基于Jacob Devlin的幻灯片

  • 问题:语言模型仅使用左上下文或右上下文,但是语言理解是双向的。
  • LM为什么是单向的?
  • 原因1:需要方向性才能生成格式正确的
    概率分布。
    • 我们不关心这个。
  • 原因2:单词可以在双向编码器中“看到自己”。

  • 解决方案:屏蔽掉k%的输入单词,然后预测被屏蔽的单词
  • 他们总是使用k = 15%

该男子去了[MASK]买的牛奶[MASK]

  • 掩膜太少:训练太昂贵
  • 掩盖过多:上下文不足

BERT复杂化:下一句预测


  • 要了解句子之间的关系,请预测句子B是执行句子A的实际句子还是随机句子

BERT句子对编码


令牌嵌入是单词片段
学习的分段式嵌入表示每个句子位置式嵌入与其他Transformer架构相同

BERT模型结构和训练


  • 变压器编码器(以前一样)
  • 自我关注⇒没有地方偏见
  • 长距离范围内有“机会均等”
  • 每层单乘法⇒GPU / TPU的效率
  • 在Wikipedia + BookCorpus上进行训练
  • 训练2种模型尺寸:
  • BERT-Base:12层,768隐藏层、12头层
  • BERT-Large:24层,1024隐藏层,16头层
  • 在4x4或8x8 TPU切片上训练了4天

BERT模型微调


  • 微调每个任务,只需学习建立在顶层的分类

BERT在GLUE任务上的结果


  • GLUE基准测试由自然语言推理任务主导,但也具有句子相似度和情感度
  • MultiNLI
  • 前提:耆那教教徒特别崇尚丘陵和山脉。
    假设:耆那教讨厌自然。
    标签:矛盾
  • CoLa
  • 句子:马车在路上轰隆作响。 标签:可接受
  • 句子:汽车在路上鸣喇叭。 标签:不可接受

CoNLL 2003命名实体识别(en news testb)


BERT在SQuAD 1.1上的结果


SQuAD 2.0排行榜,2019-02-07


预培训任务的效果


大小事项


  • 从110M到340M参数有很大帮助
  • 尚未出现改进



Reference: https://www.jianshu.com/p/1bb863c4f26f

猜你喜欢

转载自blog.csdn.net/m0_38024592/article/details/107117461