目录

  • 论文导读
    • 课前基础知识
    • 学习目标
    • 知识树
    • 研究背景
    • 初始BERT
    • 研究成果
    • 研究意义
    • 论文结构
    • 摘要
  • 论文精读
    • 模型总览BERT、Poly-encoder
      • BERT的出现
      • BERT结构
        • BERT的实现
        • 小结
      • Poly-Encoder结构
        • Bi-Encoder
        • Cross-encoder
        • Poly-encoder
    • 论文算法模型的细节
      • BERT模型细节
        • Transformer
        • BERT模型
      • Poly-Encoder模型细节
        • Bi-encoder模型
        • Cross-encoder模型
        • Poly-encoder模型
        • Poly-encoder简化模型
    • 实验设置及结果分析
      • 数据集
      • 实验结果及分析
    • 论文总结
      • BERT
      • Poly-Encoder

论文导读

课前基础知识

学习目标

知识树

研究背景


Bert应用广泛

初始BERT

BERT: Bidirectional Encoder Representation from Transformers.

  • 1.what is Bidirectional language model
  • 2.how get Representations
  • 3.why use Transformers
    BERT做文本匹配的一般模式:

    首先先去忽略一些细节,它的一般设计是文本匹配一般是前、后两句话,通过一个分隔符拼起来,在序列的最前面再加上一个字符,将这些拼接起来,作为BERT的输入,通过模型的一系列运算,其实每个位置都会得到对应向量的输出,通常使用CLS对应位置的输出向量,使用这个向量去设计后面的loss,如全连接网络或softmax层等,这就是bert做文本匹配的一般的模式。
    【思考】
  • 1.文本匹配任务如何设计loss函数?
  • 2.为什么可以用来计算?其他方法呢?
  • 3.这种模式的最大问题是什么?
  • 4.都是Encoder,凭啥你就行?

研究成果

  • 1.在四个著名的文本匹配相关任务上取得了SOTA的成果(ConvAI2, DTSC7, Ubuntu V2, Wikipedia IR)
  • 2.提出Poly-encoder, 站在BERT的肩膀之上,又好又快实现文本匹配
  • 3.发现在领域数据内继续per-train,可以进一步提升模型表现
  • 4.首次定义并命名 三种文本匹配的设计模式

研究意义

Poly-encoder模型价值:

  • 解决BERT过大、预测太慢的问题
  • 提出一种不阉割bert仍然可以生成上线的模型
  • 验证了poly-encoder这种模式的有效性和高效性,可以方便迁移到其他模型

论文结构

摘要

摘要核心:

  • 1.定义了pairwise文本匹配的两种基本范式:cross-encoder、bi-encoder
  • 2.提出了基于bert的poly-encoder模型
  • 3.模型最大优势:在保证准确率的前提,可以达到实时预测速度,非常适合工业场景的部署
  • 4.poly-encoder在四个数据集上达到了SOTA
  • 5.在数据集领域内继续预训练可以进一步提升预训练模型效果
    【思考】
  • 为什么bert这么厉害?
  • 还可以有哪些“poly-encoder”的设计?

论文精读

模型总览BERT、Poly-encoder

知识树

BERT的出现

预测一个句子中的某一个词语,是通过语言模型做的,但是语言模型只是通过单方向的,单边的这种语言模型往往很难做到很周全。


每个词用一个固定维度的向量表示,并没有考虑语境,但是在不同的语境中,相同的词却有不同的语义。解决办法是希望从预料中,训练得到在不同的语境或不同的句子中,词语有不同的表征,这种表征是带有上下文的。到这个阶段,一般就不会用word/token级别的表征,一般是做整句的表征或其他的任务,而不是像词向量那样,每个词有固定的词向量。带有上下文的表征如何得到?
通常来讲,通过预训练一个语言模型,再在分类任务上做微调,所谓的微调就是用某一个分类任务的数据,来继续训练这个模型的参数。微调之后得到的模型来继续做这个分类任务。
这个模型的问题在于只是使用了单向的语言模型。

实现双向的语言模型。

ELMO存在的问题:

  • 有位置偏见—只能关注到“前面”的token
  • 无法并行—大规模训练受限制
  • “假”双向语言模型(独立训练,实际上它们之间是没有信息交互的)


GPT使用transformer训练单向语言模型,但是transformer的优势就可以使GPT使用非常大的语料进行训练,当使用大语料训练模型时,肯定可以获得更多的有用的知识,可以使得模型更强大。GPT的缺点是仍然是单向语言模型。适合做文本生成的任务

之前方法的问题

  • 语言模型只能看到左边语境或者右边语境,但是语言理解应该是双向的;
  • 单向语言模型中,语言只是为了得到一个很好的概率分布,但是但部分任务重并不需要很好的概率分布,比如说做整句的分类、做token的标注、句子的编码,实际上很少用到这种概率分布;
  • 之前的双向语言模型中,即“假”双向模型,在预测过程中,词语是可以“看见自己的”,即标准的语言模型为目标,没办法实现真正的双向训练,因为这种模型在预测某一个单词时,会间接在多层中看见自己,比如elmo是多层实现的,它可能在多层的上下文中看见自己,这样会导致泄露,这样训练语言模型会失真的。

考虑到以上问题,bert引入Masked LM,即遮盖住%k的序列中的词然后再预测他们。

随机的掩盖住一个序列中的一些词,比如“同学”、“篮球”,然后再对整句话进行编码,去预测这句话。
存在的问题:遮盖的词语在fine-tuning阶段看不见。因为bert也是先pre-training,再fine-tuning。在pre-training阶段,用masked lm去训练一个模型,然后在fine-tuning阶段用某一个任务的语料继续训练,因为在pre-training的时候,用了masked lm,这时候是有masked的,但是mask具体是什么,在fine-tuning阶段是看不见的,因此如何很好的从pre-training过渡到fine-tuning,让fine-tuning阶段减少对mask固定token符号所带来的偏差或信息的不匹配,这是一个主要的问题,这个问题的解决方案是什么?
Masked LM:如何解决遮盖的词语在fine-tuning阶段看不见?

Bert还可以应用到Next Sentence Prediction任务(预测两句话是否是相邻的)中,像QA、NLI、PI等任务是基于理解句子之间的关系,这是做句子级别任务的。

BERT结构

BERT的实现


BERT = Encoder of Transformer
模型的输入:

模型的输入部分是由三种embedding加起来,bert解决两种任务masked lm和next sentence prediction。通常需要将两句话拼接起来,[CLS]为开始标志,[SEP]为结尾标志,[SEP]为分隔符。
每个位置对应三种embedding:

  • token embedding:之前常见的词向量embedding
  • segment embedding:用于区分两句话
  • position embedding:随机初始化的,随机初始化后同模型一块训练

训练BERT—Masked LM

例如input中improvisation被mask,通过bert后,所有的位置都会有对应的隐向量,通常是512个序列长度,mask标志对应的隐向量后接一层神经网络FFNN和softmax,得到整个词典上所有token的概率分布。
训练BERT—Next Sentence Prediction

用于测试Sentence A与Sentence B是否是相邻的。同样,所有位置都有对应的输出,第一个token即开头标志[CLS],这里使用第一个位置的隐向量,输入到FFNN+softmax中,做一个二分类。

小结

BERT出现所要解决的问题:

  • 词向量–>带语境:词向量是一种独立的token,独立的向量表示,因此想训练一个带语料的语言模型;
  • 带语境的模型,既可以用单向的也可以用双向的,双向的效果比单向的好,但之前的双向模型是“假”双向的,可能会看到自己,存在泄露问题,bert也是为了解决这种问题;
  • 之前都是用LSTM,但是LSTM无法并行且存在位置偏见问题。
    BERT使用Masked LM替换常规的语言模型,用transformer替换LSTM。
    What is Bidirectional language model?
    对应bert为Masked LM
    How get Representations?
    bert通过使用transformer,从大量的预料中来训练语言模型,用token-level和sentence-level多任务去训练bert,然后将bert看做是一个编码器,从而得到任意句子的向量表征,此向量表征带有真正学习到的知识。
    Why use Transformers?
    transformer可以并行,可以使用大批量的语料训练,从更大的预料中学习知识;且没有位置偏见

Poly-Encoder结构

Bi-Encoder


类似孪生网络,Context Encoder使用的是BERT,聚合层是将所有输出的向量表示进行降维,做信息的聚合,得到固定维度的向量,这个向量用来表示输入的序列,在计算层做计算。

Cross-encoder


Bi-encoder的左、右两边完全是独立运算,只是在最后计算得分;
Cross-Encoder也是输入两句话,将这两句话先拼接起来,这里的拼接与bert的输入是相同的,然后输入到bert编码器中,得到每个位置的向量表示,聚合层对向量进行降维、聚合,得到固定维度的向量,在计算层算出score,score表示两句话的关系,这个关系可能是相似关系、推理关系等。
聚合层可能有不同的表示方法。

Poly-encoder


poly-encoder是本文提出的模型,相比之前的两种encoder,主要的区别是加了交互层。
做文本匹配任务,很重要的一个方法或方式就是做更多的交互,比如在多层做交互、在更早的时候做交互,因此,交互是文本匹配这个任务很重要的一个技能,做交互其实就是为了做对齐,那如何做对齐呢?其实就是通过做attention来实现。

论文算法模型的细节

BERT模型细节

BERT模型的实现是用transformer的encoder部分。

Transformer

  • Multi-headed self attention
    学习序列的上下文语义特征
  • Feed-forward layers
    学习多层的非线性特征
  • Layer norm and residuals
    有利于训练深度神经网络
  • Positional embeddings
    让模型学习序列中词语的相对位置信息

    self-attention

    通过self-attention,it可以更多的关注到与它相关的那部分。模型处理每个位置的token时,self-attention可以让模型关注到序列中其他位置的信息,让模型更好的编码每个位置的token,因为需要对每个位置的token做学习或编码,在编码每个位置的token时,需要真正的了解它指的是什么东西。
    self-attention的实现
    1.得到Q、K、V

    2.计算一个得分score


    对应的矩阵运算

    Multi-head attention
    目的是为了关注不同的位置

BERT模型


通过pre-training得到预训练语言模型之后,再在不同的任务上进行fine-tuning,只是bert做编码器是一个基础,不同的任务做不同的上层的损失函数设计,在不同的任务上进行fine-tuning。
Bert—文本匹配

  • 1.文本匹配任务如何设计loss函数?
    常规的分类任务,softmax做一个交叉熵损失来做loss函数。
  • 2.为什么可以用来计算?其他方法呢?
    向量可以很好的表征整句话的知识或信息,通过实验也表明,这种效果比较好;其它方法可以用平均或求和或pooling等方法。
  • 3.这种模式的最大问题是什么?
    慢。
  • 4.都是encoder,凭啥你就行?
    这也是bert的优势,它可以学到更多知识,因为bert使用了双向语言模型,从根本上很好的去理解序列。

Poly-Encoder模型细节

Bi-encoder模型



点积操作的集合意义为一个向量在另一个向量上的投影,可以用来计算一些两个向量的相似性或相关性。
图中Context Encoder和Candidate Encoder为bert,Red(.)为聚合方法
这个模型的问题是完全没有交互。

Cross-encoder模型



拼接两句话,使用bert进行编码,得到各个位置的隐向量,取第一个位置的向量作为ctxt和cand这两个向量的表征;scoring的计算是将向量转换成标量
特点:完全交互

Poly-encoder模型


之前都是使用一个向量来表示context向量,在poly-encoder中,想用多个向量来表示context。


将Cand emb看做是query,与左边得到的m个context embedding做attention运算。

Poly-encoder简化模型

直接使用前m个隐向量或后m个隐向量

实验设置及结果分析

数据集

实验结果及分析


三种模型在测试集上的表现:

  • 1.微调过的cross-encoder想过最好,达到SOTA
  • 2.用相同的batch-size和优化器训练poly-encoder
    2.1poly-encoder效果全面好于bi-encoder
    2.2使用更多codes,一般效果都会更好
    2.3 poly-encoder使用bert在DSTC数据集上甚至比cross-encoder结果要好

Domain-specific Pre-training
相同的模型超参和训练设置

  • 在Reddit数据集上fine-tuning得到SOTA

  • pre-train的语料,而不是模型训练细节,是影响模型在下游任务的表现的主要原因
    不同版本Poly-encoder的对比

  • First m outputs 一般表现很好

  • 不同数据集上结果表现不同

  • codes越多,结果往往越好
    不同策略Fine-tuning的结果

    微调整个模型有帮助,但是不要改变embedding
    预测速度
    ConvAI2,对n个candidate打分

  • 1.cross-encoder的耗时指数量级的增加,达不到实时效果(对话系统需要实时)

  • 2.在1k额候选集,poly-encoder与bi-encoder耗时差不多

  • 3.使用learnt-codes几乎不增加耗时,但是增加learnt-codes会增加效果
    训练速度

    不同reductions策略的对比

  • 1.使用cls位置向量做下游任务一般比较好

  • 2.不同任务需要尝试不同策略

论文总结

BERT

关键点:

  • 带有上下文的表征
  • 双向语言模型
  • Masked LM
  • Transformer
  • 迁移学习
    创新点:
  • Masked LM实现双向语言模型
  • Token-level和Sentence-level两种task的多任务加成
  • 大规模双向预训练语言模型的实现

Poly-Encoder

关键点:

  • 使用BERT
  • 表现与性能具佳
  • 三种模式
    创新点:
  • 引入codes,非常巧妙的改造BERT
  • 使用领域相关数据来预训练和微调
  • 结合Bi和Cross两者优点,可以生产部署
    启发点:
  • 语料越多,效果越好:
  • “trade-off”的思路来做模型
  • 这种顶层交互设计的其他策略

Transformer Architectures and Pre-training Strategies for Fast and Accurate Multi-sentence Scoring相关推荐

  1. DAFormer: Improving Network Architectures and Training Strategies for Domain-Adaptive Semantic Segme

    DAFormer: Improving Network Architectures and Training Strategies for Domain-Adaptive Semantic Segme ...

  2. Training RNNs as Fast as CNNs

    本期论文 Training RNNs as Fast as CNNs 本文通过有意简化状态计算并展现更多的并行性而提出了一个替代性的 RNN 实现,这一循环单元的运算和卷积层一样快,并且比 cuDNN ...

  3. 【CVPR2020视频超分辨率】Zooming Slow-Mo: Fast and Accurate One-Stage Space-Time Video Super-Resolution 阅读笔记

    paper:Zooming Slow-Mo: Fast and Accurate One-Stage Space-Time Video Super-Resolution code:Zooming-Sl ...

  4. Fast and Accurate CNN Object Detector with Scale Dependent Pooling and Cascad Rejection Classifiers

    论文的题目是<Exploit All the Layers: Fast and Accurate CNN Object Detector with Scale Dependent Pooling ...

  5. The genome polishing tool POLCA makes fast and accurate corrections in genome assemblies

    The genome polishing tool POLCA makes fast and accurate corrections in genome assemblies  基因组抛光工具POL ...

  6. Fast and accurate short read alignment with Burrows-Wheeler transform

    Fast and accurate short read alignment with Burrows-Wheeler transform 快速和准确的短读对准Burrows-Wheeler变换 本文 ...

  7. 论文Fast and accurate short read alignment with Burrows-Wheeler transform

    Fast and accurate short read alignment with Burrows-Wheeler transform BWT(Burrows–Wheeler transform) ...

  8. Que2Search: Fast and Accurate Query and Document Understanding for Search at Facebook论文笔记

    0.论文资料 论文地址:Que2Search: Fast and Accurate Query and Document Understanding for Search at Facebook | ...

  9. 消失点:Fast and Accurate Vanishing Point Detection in Complex Scenes

    消失点:Fast and Accurate Vanishing Point Detection in Complex Scenes 1.韦伯定律 1.1 WLD 1.2 WOD 算法实现 获得WOD ...

最新文章

  1. 如何创建.gitignore文件,忽略git不必要提交的文件
  2. python3爬虫入门教程-有什么好的python3爬虫入门教程或书籍吗?
  3. 央视再次点赞阿里云ET城市大脑,树立用人工智能治理城市的标杆
  4. android jni malloc和free的使用
  5. MFC中Windows窗口消息循环及多线程之间关系
  6. 怎么查询局域网内全部电脑IP和mac地址..
  7. 牛客16494 生活大爆炸版石头剪刀布
  8. JDBC是什么?和JDBC程序的基本编写
  9. 输入网址后发生了什么
  10. oracle数据库6月之后的数据,Oracle数据库SCN存在可能在2019年6月导致宕机问题
  11. java api教程_Java api 入门教程 之 JAVA的文件操作
  12. POJ 2195 Going Home(最小费用最大流)题解
  13. 向Maven的本地库中添加jar文件
  14. 高并发与负载均衡-nginx-反向代理概念
  15. 如何VS Code打造成Java开发IDE?
  16. 数据分析上海长租房市场
  17. Flume采集数据利器
  18. 有序列表和无序列表的不同类型
  19. leetcode 51. N 皇后
  20. 忍不住推荐给你的4个导航网站

热门文章

  1. 小米android隐藏游戏,MIUI8小米手机开启隐藏选项
  2. 用duilib制作仿QQ2013动态背景登录器
  3. JavaEE常见面试问题
  4. python反向切片_python切片
  5. TriSun PDF 13.0中文版本,TriSun PDF15的发布
  6. 企业微信官方认证的好处是什么?
  7. Educational Codeforces Round 40千名记
  8. 解构金蝶EAS 开发工具
  9. 用python画一颗樱花树
  10. oracle imp 版本错误,【exp/imp不同版本】Oracle不同版本的exp/imp使用注意事项