来源:PaperWeekly
本文为你分析当下NLP 当中可能的“巨人肩膀”在哪里,有哪些已经造好的“梯子”可供攀登。
[ 导读 ]我们都知道,牛顿说过一句名言"If I have seen further, it is by standing on the shoulders of giants".?无可否认,牛顿取得了无与匹敌的成就,人类历史上最伟大的科学家之一,但同样无可否认的是,牛顿确实吸收了大量前人的研究成果,诸如哥白尼、伽利略和开普勒等人,正因如此,联合国为了纪念伽利略首次将望远镜用作天文观测四百周年,2009 年的时候,通过了”国际天文年“的决议,并选中《巨人的肩膀》(Shoulders Of Giants)作为主题曲。我想这大概是告诉后人,“吃水不忘挖井人”,牛顿的成就固然伟大,他脚下的“巨人肩膀”伽利略也同样不能忘了。
也许,“巨人肩膀”无处不在,有些人善于发现,有些人选择性失明,而牛顿的伟大之处在于他能够发现,这是伟大其一,更为重要的是,他还能自己造了梯子爬上“巨人的肩膀”,并成为一个新的“巨人肩膀”,这是伟大其二。
而回到这篇文章的主题,作为平凡人的我们,暂且先把如何发现并造了梯子云云撇开不谈,让我们先来捋一捋现在 NLP 当中可能的“巨人肩膀”在哪里,以及有哪些已经造好的“梯子”可供攀登,余下的,就留给那些立志成为“巨人肩膀”的人文志士们吧。
前言
通常来说,NLP 中监督任务的基本套路都可以用三个积木来进行归纳:
文本数据搜集和预处理
将文本进行编码和表征
设计模型解决具体任务
其中数据处理阶段自不用说,各个任务按照各自的逻辑去处理和得到相应的输入。而其中的第二阶段 Encoder 模块与第三阶段的 Task-specific Model 模块,通常来说,界限并不是特别清晰,二者之间互有渗透。
回顾过去基于深度学习的 NLP 任务可以发现,几乎绝大多数都比较符合这三层概念。比如很多生成任务的 Seq2Seq 框架中不外乎都有一个 Encoder 和一个 Decoder。对应到这里,Decoder 更像是一个 Task-specific Model,然后相应的将 Encoder 做一些细微调整,比如引入 Attention 机制等等。
对于一些文本分类任务的结构,则 Encoder 模块与 Task-specific Model 模块的区分更为明显和清晰,Encoder 负责提取文本特征,最后接上一些全连接层和 Softmax 层便可以当做 Task-specific Model 模块,如此便完成了一个文本分类任务。
既然很多的 NLP 任务都可以用这三个模块来进行归纳,并且其中数据层和 Task-specific Model 模块层可能根据具体任务的不同需要做一些相应设计,而 Encoder 层便可以作为一个相对比较通用的模块来使用。那么自然会有一个想法,能不能类似于图像领域中的 ImageNet 上预训练的各种模型,来做一个 NLP 中预训练好的 Encoder 模块,然后我拿来直接利用就好了?
应该说,这个想法并不难想到,NLP 人也花了一些时间去思考究竟该如何设计一些更通用的可以迁移利用的东西,而不是所有的任务都要“from scratch”。因为如何尽量利用已有的知识、经验和工具,避免重复造轮子,想尽一切办法“站在巨人的肩膀上”快速发展,我想大概也是最朴素的“发展是硬道理”的体现。
为了更好地厘清这个思路,我们先来看看人类和 CV(Computer Vision,计算机视觉)曾经都是如何“站在巨人的肩膀上”的。