赞
踩
上篇:https://blog.csdn.net/qq_35883464/article/details/100042899
再上篇中我们讲解了从one-hot到GloVe,都是2014年以前比较火的模型。那么下篇就来探讨最近几年比较火的文本表示,不谈具体推导公式(公式可以看一手论文),只谈解决了问题和最后结果,按照时间顺序和行业发展,详细讲述为什么会出现这个模型,这个模型又有什么缺点,下个模型是如何克服这些缺点的。
文本表示分类(基于表示方法)
目录
3.1 Transformer/self-attention介绍
再上篇我们谈到了Word2vec,这个模型的缺点是缺乏了整体文本和当前词的关系,负样本采用sample的方式会缺失词的关系信息。
从而出现了GloVe,增加了全局的信息(共线矩阵),解决了Word2vec的缺点。这就是GloVe出现的原因。
但是还有一个关键性问题没有解决!
就是一次多意的情况,如果文章中出现了Apple,不知道是指科技公司还是水果,但是他们2个的词向量是一样的。
如何解决这个问题呢,就引出了下面的话题。
预训练过程就是做图像或者视频领域的一种比较常规的做法,能明显促进应用的效果。
上图展示了这个过程,设计好网络结构以后,对于图像来说一般是CNN的多层叠加网络结构,可以先用某个训练集合比如训练集合A或者训练集合B对这个网络进行预先训练,在A任务上或者B任务上学会网络参数,然后存起来以备后用。
假设我们面临第三个任务C,网络结构采取相同的网络结构,在比较浅的几层CNN结构,网络参数初始化的时候可以加载A任务或者B任务学习好的参数,其它CNN高层参数仍然随机初始化。之后我们用C任务的训练数据来训练网络,此时有两种做法:
一种是浅层加载的参数在训练C任务过程中不动,这种方法被称为“Frozen”;
另外一种是底层网络参数尽管被初始化了,在C任务训练过程中仍然随着训练的进程不断改变,这种一般叫“Fine-Tuning”,顾名思义,就是更好地把参数进行调整使得更适应当前的C任务。一般图像或者视频领域要做预训练一般都这么做。
这么做的好处:解决了数据量少而要训练比较深的神经网络的问题
如果手头任务C的训练集合数据量较少的话,现阶段的好用的CNN等网络结构层数很深,几百万上千万参数量算起步价,训练数据少很难很好地训练这么复杂的网络,但是如果其中大量参数通过大的训练集合预先训练好直接拿来初始化大部分网络结构参数,然后再用C任务手头比较可怜的数据量上Fine-tuning过程去调整参数让它们更适合解决C任务,那事情就好办多了。
为什么这种预训练的思路是可行的?
目前我们已经知道,对于层级的CNN结构来说,不同层级的神经元学习到了不同类型的图像特征,由底向上特征形成层级结构。
如上图所示,如果我们手头是个人脸识别任务,训练好网络后,把每层神经元学习到的特征可视化肉眼看一看每层学到了啥特征。
第一个隐层学到的是线段等特征,第二个隐层学到的是人脸五官的轮廓,第三层学到的是人脸的轮廓,通过三步形成了特征的层级结构,越是底层的特征越是所有不论什么领域的图像都会具备的(比如边角线弧线等底层基础特征),越往上抽取出的特征越与手头任务相关
正因为此,所以预训练好的网络参数,尤其是底层的网络参数抽取出特征跟具体任务越无关,越具备任务的通用性,所以这是为何一般用底层预训练好的参数初始化新任务网络参数的原因。而高层特征跟任务关联较大,实际可以不用使用,或者采用Fine-tuning用新数据集合清洗掉高层无关的特征抽取器。
将图像和语言中的处理对象做一个不太严谨的对应。如下图所示,大体上像素类似于语言中的字母;图像中的对象类似于语言中的单词/概念;图像中对象组成的场景类似于语言中的句子表达的语义;视频则类似于语言中的篇章(文章)。
在这种类比下看,NLP在单词层面的处理要比CV中的图像识别简单得多,只需要做一下tokenization、lemmatization、stemming等(中文复杂一些需要额外做自动分词),就可以利用关键词匹配完成很多任务,例如信息检索、文本分类、拼写纠错、情感分析、关键词提取等等。
而由于图像中对象的复杂性和多样性,仅在对象识别层面,甚至特定的人脸识别,还有很多技术挑战。只不过是近年来,由于深度学习对非结构数据的强大表示和学习能力,开始让对象识别走向了实用化。而进入到更高层面,例如面向图像的场景图构建,面向文本的句法语义分析,都需要对复杂语境(上下文)的精准而强大的建模能力。
刚刚说了预训练在图像领域的应用和图像与NLP的粗略对应关系&#
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。