20201110-NLP的巨人肩膀-1引子

转载:https://zhuanlan.zhihu.com/p/50443871
没办法,写的太好了

图片.png

NLP的巨人肩膀

我们都知道,牛顿说过一句名言

If I have seen further, it is by standing on the shoulders of giants.

无可否认,牛顿取得了无与匹敌的成就,人类历史上最伟大的科学家之一,但同样无可否认的是,牛顿确实吸收了大量前人的研究成果,诸如哥白尼、伽利略和开普勒等人,正因如此,联合国为了纪念伽利略首次将望远镜用作天文观测四百周年,2009年的时候,通过了”国际天文年“的决议,并选中《巨人的肩膀》(Shoulders Of Giants)作为主题曲。我想这大概是告诉后人,“吃水不忘挖井人”,牛顿的成就固然伟大,他脚下的“巨人肩膀”伽利略也同样不能忘了。

也许,“巨人肩膀”无处不在,有些人善于发现,有些人选择性失明,而牛顿的伟大之处在于他能够发现,这是伟大其一,更为重要的是,他还能自己造了梯子爬上“巨人的肩膀”,并成为一个新的“巨人肩膀”,这是伟大其二。

而回到这篇文章的主题,作为平凡人的我们,暂且先把如何发现并造了梯子云云撇开不谈,让我们先来捋一捋现在NLP当中可能的“巨人肩膀”在哪里,以及有哪些已经造好的“梯子”可供攀登,余下的,就留给那些立志成为“巨人肩膀”的人文志士们吧。

通常来说,NLP中监督任务的基本套路都可以用三个积木来进行归纳:

  • 文本数据搜集和预处理
  • 将文本进行编码和表征
  • 设计模型解决具体任务
图片.png

其中数据处理阶段自不用说,各个任务按照各自的逻辑去处理和得到相应的输入。而其中的第二阶段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人也花了一些时间去思考NLP中究竟该如何设计一些更通用的可以迁移利用的东西,而不是所有的任务都要“from scratch”。因为如何尽量利用已有的知识、经验和工具,避免重复造轮子,想尽一切办法“站在巨人的肩膀上”快速发展,我想大概也是最朴素的“发展是硬道理”的体现。

为了更好的厘清这个思路,我们先来看看人类和CV(Computer Vision,计算机图像)曾经都是如何“站在巨人的肩膀上”的。

你可能感兴趣的:(20201110-NLP的巨人肩膀-1引子)