邱锡鹏:从Transformer到BERT --自然语言处理中的表示学习进展

2020-05-13 17:18:06 浏览数 (1)

报告导读

本次报告主要涉及深度学习在自然语言处理(Natural Language Processing,NLP)领域的进展,首先讲解了语言的表示学习、词嵌入等基础概念和知识,然后介绍了无监督预训练、Transformer模型、BERT及多种改进等NLP技术的最新研究工作,最后对深度学习在理论和应用层面的前景进行了展望。

专家介绍

邱锡鹏,复旦大学计算机科学技术学院副教授,博士生导师。开源中文自然语言处理工具FudanNLP作者,FastNLP项目负责人。2015年入选首届中国科协人才托举工程,2017年ACL杰出论文奖,2018年获中国中文信息学会"钱伟长中文信息处理科学技术奖—汉王青年创新奖"。近5年在ACL、EMNLP、AAAI、IJCAI等计算机学会A/B类期刊、会议上发表50余篇学术论文,引用1800余次。主要从事自然语言处理、深度学习等方向的研究。

报告内容

自然语言处理相当于让计算机去理解和生成人说的话。它涉及到非常多的方面,包括人机对话、机器翻译、智能问答等等。

对于传统的NLP技术,一般来讲流程比较复杂,就是从预处理到找一些规则,建立一些模型,最终进行各种各样的应用。大家如果用过自然语言相关的产品,比如像语音识别、机器翻译和个人助理等一些终端的应用,你会发现到目前为止这些产品的智能性并不如我们预期的那么好。从我们近几年来讲,随着深度学习应用到各个领域之后,自然语言的性能得到了非常大的提升,它带来了一个非常大的好处,就是关于在表示学习上面,就是我们怎么表示一个文本的语义,有了深度学习以后我们就可以更加有效的建模一个自然语言的语义,它的模型也更加简单,可以进行端到端的学习,把自然语言的门槛降到非常低。

如果大家对自然语言不是很了解的话,我稍微给大家讲一下,关于怎么在计算机中去表示一个语言的语义信息。一般人的理解就是,我要在计算机中把每个词和句子的意思都写出来计算机才可以理解,这是早期的通过知识库加上规则去表示它的语义。现在我们采取分布式表示,我们把一个语义分散到不同的维度,这些维度加起来可以表示一个词或者一个句子的意思,我们如果用数学表示的话就是一个向量,这是近几年深度学习在自然语言处理中能够带来的一个非常有效的表示方法。如果对于词的话,我们希望把不同的词,比如北京、上海,映射到一个向量上面去,包括还有一些情感词。我们的目的,我们把这个映射过程的空间叫做语义空间,在这个语义空间中,任何的语义都是可以计算的,利用计算机进行各种各样的语义计算。

有了词的表示之后,我们就可以进一步探索怎么把词进一步组成句子的语义,再组成篇章的语义,等等。我们希望通过一个神经网络来做这样的语义组合。

我们给你一段文本,我们希望把它的意思表示出来,这个问题我们就把它理解成语言的表示学习问题。在这个语言表示学习问题里有几个方面的东西需要我们考虑,第一个就是模型层面,我们怎么去设计这个模型,能够去组合它的语义,比如说我们的词,一个句子的语义是怎么用词来表示出来的,我们从语言学得到的经验,句子的语义是由词构成的,词是由一个语法关系来构成,按照词不同的依赖关系,层次化的去构建它整个句子的语义。还有更直接的训练模型,先局部组合,然后再非局部组合。

还有就是学习层面,我们有了模型之后,模型里面肯定有很多参数,我们怎么样去学习这些模型的参数,一种是端到端的学习,我们完全把这些知识带到一个具体任务中去,通过神经网络的梯度下降等方法去学,这种方法在NLP里面用的是任务学习和迁移学习,辅助我们学习到更好的模型。另外一种是更为复杂的,基本上涉及到语义这个定义的话。语义更多的是认知层面的,它还不像感知,所有的人看到一个猫都说是猫,而不像自然语言,自然语言在很多时候都充满歧义性,同样一句话不同的人有不同的理解,涉及到很多认知的方面。如果涉及到一个人他的知识结构,它的背景还有一些常识的东西,这些东西需要在数据之外人为的加进去,从这个方面也导致了自然语言处理比我们一般感知的任务要更加困难。

我们分别从这几个方面来介绍一下,首先我们看一下语义组成模型,这里我列了三个在自然语言处理里面常见的三种模型。第一个就是卷积神经网络,这个卷积神经网络相当于用一个局部的卷积,然后这样层次化的堆上去,先组合,然后再进行非局部的组合。另外是用一个时间序列的方式来去组织。先用所谓的局部组合,就是局部组合优先。这个在自然语言处理里面不一定存在,在一个句子中两个依赖非常近的词并不一定是优先组合的,因为我们的语言并不是一个完全的顺序结构。这两年,从17年开始,谷歌提了一个新的模型叫transformer,就是我们所有的词全链接,它目前成为在自然语言处理中的主流模型,就是它去掉了之前两个隐含假设,就是局部组合的假设。

Transformer也带来另外一个问题,它的模型复杂度会更高,对于很多的小样本是没法学的,只会在机器翻译或者大的任务上,因为它有大量的训练语料会表现非常好。这就涉及到在深度学习的NLP里面有一个困境,就是说在一年之前,我们说自然语言处理里面也用了大量的深度学习,但其实这些模型并不深,通常都是一层的Bi-LSTM,深度模型并没有证明有太多的收益。这个原因是什么呢?最基本的原因就是在自然语言处理缺少图象那样的大规模标注数据,因为标注语言的成本非常高,它的语料不是所有的人都可以标,一般都是和具体领域结合,需要一些领域专家才能标这些语料,所以很难形成非常大规模的标志数据。这样的话很难训练一个非常深的模型。

那么怎么办呢,有下面几种思路,一种是引入额外的知识,早期人为在各个领域都有大量的知识库和知识图谱,怎么把我们的深度学习模型和这些智库结合,而另外一个就是用无监督的预训练,因为在文本虽然我们的标注数据非常少,但是我们有大量的无标注的数据,这些无标注的数据怎么充分利用呢,就是帮助我们训练,另外一个多任务学习,所有的自然语言处理都涉及到与意的表述问题,也就是所有的自然语言处理背后都有某种相关性,我们怎么设计一种模型或者框架去同时学习多个自然语言处理模型,就是把每个任务的数据集都放在一起充分利用起来,这也是一个解决思路。

今天我们只关注无监督预训练这部分,我们通过大规模的无监督预训练去学习一个模型,把这个模型迁移到一个具体的任务上面去。这个就涉及到我们怎么样去设计一个无监督的学习任务,给你一个句子,然后估计这个句子的,有非常多种语言模型,我们现在基本上都把这些模型叫做自训练模型,也就是类似于无监督机器学习中的自编码器(Auto-encoder),相当于给原始数据加一些噪声,再把正确的句子预测出来,通过人为的构造这样一个自监督的学习训练任务来去学习这些大模型,因为这些数据不需要标注,所以我们可以收集大量的数据,来训练一个任务,训练好之后,我们再把这些任务迁移到具体的任务上,基本上就可以获得一些非常好的效果。

从去年下半年开始,在NLP领域出现一批的预训练模型。最右边的是Unet,第一个预训练模型出来之前,由我们团队做的一个模型,但是在10月份的时候,谷歌的BERT模型利用了大量的无监督的预训练,训练一个模型,这个模型在大数据上训练了一个最右边的结构,也就是全链接的结构,它比没有预训练的模型要好很多,准确率指标由60%多直接上级到将近80%,在BERT基础上又提出改进,都是基于预训练模型,这些模型在学习机制、设计任务的时候多少有些不一样。右边这个是我们人类的水平。在单模型上,预训练现在最好的结果已经接近人的水平,如果我们把这些模型进行组合,做一些集成模型,已经比人做阅读理解的水平要更好。

最后总结一下,在NLP中这些表示学习依然非常重要,主要涉及两个方面,除去我们认知非常难之外,主要是两个方面,一个就是模型层面,在NLP中它是需要找到更适合模型,传统的CNN、RNN对我们的语言理解并不能带来更好的提升,所以到目前为止我们找到了一个模型就是transformer。另外还是可以在跨语言、跨模态,学习一种更通用化的文本表示模型。

最后再谈一下这个主题,深度学习是不是遇到了瓶颈。在理论方面,我们主要从这几个层面来考虑,一个是表示学习层面,从这个层面来讲的话,我们目前带来的提升大部分都是靠大数据和算力,当然模型设计也非常重要,最主要的还是来自于算力的提升,如果算力有瓶颈,我们深度学习就会遇到瓶颈,另外一个就是模型层面,现在我们主要用的是端到端的学习方式,当然也有迁移学习,但需要这个优化问题都是连续化,更难的一个问题是非连续化的问题,其实我们大的层面也可以把它看成是一种学习问题,我们需要设计一些架构,这方面空间非常大。另外一个是学习理论方面,包括泛化性,包括对抗样本等等,都是有很多东西可以做的。

在应用层面,简单场景的话我觉得目前深度学习还只是刚刚开始,也就是我们大量的传统行业还没有机会应用这些深度学习的技术,如果你能把你在具体应用场景当中,把问题变成非常明确的问题的话,你就可以用深度学习,所以说深度学习我觉得它会取得非常广泛的应用。但是在特别复杂的情况下,目前这种单一靠深度学习还是不够的,还需要其他方面的一些理论的支持,包括前面几位嘉宾讲了它的可解释性和可靠性,在这几个方面总归还是任重道远。

0 人点赞