NLP系列文章(一)——按照学习思路整理发展史


来源:知乎  LITD《bert发展史……》系列、知乎paperweekly 《NLP的巨人肩膀》、知乎 张俊林《bert时代的创新(应用篇)》
                
0.  缘由

个人还是比较喜欢语言方面的研究,但是研究生期间存在在诸多意外,研究课题一直难以确定,在人工智能的大流中摸爬打滚,秉承实验室前辈的理念,一年来找文献、看文献、翻译文献……总之,一直徘徊在 换研究方向→学新领域入门→看某个模型或算法的文献【英文】→翻译文献→看配套源码→尝试跑通→然后 再次陷入迷茫,开始反省→重新梳理这个领域的发展路线、基础知识→思考定什么题目、如何往下进行……

总之,感觉什么都不会,什么都没有收获到……

又开始了新一轮的反省……说实话,本人很焦躁、之前不是没有梳理过这些发展、但总是难以进行下去,一开始信心满满,梳理一些后就开始反省这样做是不是正确的?自己的了解这些是不是有什么帮助?然后就搜索其他的资料,越看越心乱……然后笔记也不了了之。
所以,这次要好好梳理这些发展史、其中他们的思想、相互之间的关系


1. 什么是机器学习?


通俗理解,机器学习(特指有监督)是使用计算机对事件的结果进行建模的过程。
也就是f(x)->y,其中,y表示“事件的结果”,x表示影响“事件结果”的各个因素,f表示所使用的机器学习算法。
即,使用机器学习是希望将<u>事件结果</u>与<u>影响结果的因素</u>**以某种函数的形式映射起来**。

eg:我们要预测这次期末考试能不能及格。
事件的结果:是能及格和不能及格。
影响因素:有很多,有的对预测结果很重要,有的则无关紧要。

本人平时的学习状态和课堂小测的成绩读预测期末能否及格就很重要,但是本人的身高、体重、性格对于预测可有可无。那么在机器学习中,寻找对事件结果影响较大因素的过程就称为特征工程,所以,特征工程是为了依据现有数据挖掘出对事件结果有影响的因素(即 特征),然后利用挖掘到的特征对结果进行建模。
因此,大致的数据挖掘流程为:数据预处理—>特征工程—>建模。很多时候,挖掘出优秀的特征对最后结果的影响>模型本身。
最想指明的其实还是,机器学习中,数据本身的价值优于train模型。根据以往参看的源码,其实也能验证,模型的搭建往往就那么几行代码, 数据处理和特征工程占据整个implementation的90%。


自然语言领域word embeddig的渊源

要讲自然语言的预训练,得先从图像领域的预训练说起。

自从深度学习兴起后,预训练成为图像/视频领域一种常规做法,有比较长的历史,且这种做法很有效,他能明显促进应用的效果。

Eg:图像领域怎么做预训练?如下图所示,设计网络结构后(图像一般是CNN的多层叠加网络结构),先用某个训练集(比如A、B两个数据集)对这个网络预训练,这样就学会了基于A、B两个数据集的网络参数。对于新任务C,采取相同的网络结构,在浅层CNN结构中使用基于A、B的预训练参数初始化,高层网络参数随机初始化,在后续用任务C的数据集训练网络有两种方式:frozen和fine-tuning。
frozen是指浅层参数不随着新任务的训练改变;fine-tuning是指浅层参数随着新任务的训练改变,使得参数更加适合当前任务。
好处:
对于训练数据量较少,网络结构深且复杂的任务,它们几乎都有几百万上千万甚至上亿的参数,比如 现阶段基于CNN的Resnet/Densenet/Inception等网络结构,训练数据少很难很好地训练这么复杂的网络,但是如果使用预训练后的网络参数去初始化部分参数,那么就弥补了缺少训练数据的问题。同时也能极大加快任务训练的收敛速度。
 

那么新的问题来了,为什么这种预训练的思路是可行的? 

目前我们已经知道,对于层级的CNN结构来说,不同层级的神经元学习到了不同类型的图像特征,由底向上特征形成层级结构,如下图所示,对于人脸识别任务,训练好网络后,最底层的神经元学线段等特征,第二个隐层学人脸五官的轮廓,第三层学人脸的轮廓,通过三步形成了特征的层级结构,越是底层的特征越是通用的基础特征,越往上的特征越与实际任务相关。
所以一般用底层预训练好的参数初始化新任务网络参数。而高层特征跟任务关联较大,实际可以不用使用,或者采用Fine-tuning用新数据集合清洗掉高层无关的特征抽取器。
 

一般都喜欢用ImageNet来做图像领域网络的预训练,主要有两点,①ImageNet是图像领域有标记的数据集,数据量很大,越大训练出的参数越有效;②ImageNet有1000类,类别多,是通用图像数据,跟领域没太大关系,预训练完后哪都能用,是个万金油。 数据量足且通用,那肯定人人都喜欢。那**既然图像领域预训练这么好用,为什么自然语言处理不做呢?是不是搞NLP的人比搞CV的傻啊?就算你傻,你看见人家这么做,有样学样不就行了吗?这不就是创新吗,也许能成,万一成了,你看,你的成功来得就是这么突然!” 其实,NLP的人早就尝试过了,比如 word embedding→2003年出品,陈年技术,馥郁芳香。word embedding其实就是NLP里的早期预训练技术。当然也不能说word embedding不成功,一般加到下游任务里,都能有1到2个点的性能提升,只是没有那么耀眼的成功而已。