- Python 深度学习
- 吕云翔 刘卓然 关捷雄等编著
- 2895字
- 2025-02-28 02:11:26
1.2 自然语言处理
自然语言,区别于计算机所使用的机器语言和程序语言,是指人类用于日常交流的语言。而自然语言处理的目的是让计算机理解和处理人类的语言。
由于语言对感知的抽象很多时候并不直观、完整。我们视觉感知到一个物体,是实实在在地接收到了代表这个物体的所有像素。但是,自然语言的一个句子背后往往包含着不直接表述的常识和逻辑。这使得计算机在试图处理自然语言的时候不能从字面上获取所有的信息。因此自然语言处理的难度更大,它的发展与应用相比于计算机视觉呈现出滞后的情况。
深度学习在自然语言处理上的应用也是如此。为了将深度学习引入这个领域,研究者尝试了许多方法来表示和处理自然语言的表层信息(如词向量、更高层次、带上下文信息的特征表示等),也尝试过许多方法来结合常识与直接感知(如知识图谱、多模态信息等)。其中的许多成果都已应用于现实中,甚至用于社会管理、商业和军事中。
1.2.1 自然语言处理的基本问题
自然语言处理主要研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法,其主要任务如下。
● 语言建模:计算一个句子在一个语言中出现的概率。这是一个高度抽象的问题,在第8章中有详细介绍。其常见形式是,给出句子的前几个词,预测下一个词是什么。
● 词性标注:句子都是由单独的词汇构成的,自然语言处理有时需要标注出句子中每一个词的词性。需要注意的是,句子中的词汇并不是独立的,在研究过程中,通常需要考虑词汇的上下文。
● 中文分词:中文的自然最小单位是字,但单个字的意义往往不明确或者含义较多,并且在多语言的任务中与其他以词为基本单位的语言不对等。因此不论是从语言学特性还是从模型设计的角度,都需要将中文句子恰当地切分为单个的词。
● 句法分析:由于人类表达的时候只能逐词地按顺序说,因此自然语言的句子也是扁平的序列。但这并不代表一个句子中不相邻的词之间没有关系,也不代表整个句子中的词只有前后关系。它们之间的关系是复杂的,需要用树状结构或图才能表示清楚。句法分析中,人们希望通过明确句子内两个或多个词的关系来了解整个句子的结构。最终句法分析的结果是一棵句法树。
● 情感分类:给出一个句子,我们希望知道这个句子表达了什么情感:有时是正面/负面的二元分类,有时是更细粒度的分类;有时是仅仅给出一个句子,有时是指定对于特定对象的态度/情感。
● 机器翻译:最常见的是把源语言的一个句子翻译成目标语言的一个句子。与语言建模相似,给定目标语言一个句子的前几个词,预测下一个词是什么,但最终预测出的整个目标语言句子必须与给定的源语言句子具有完全相同的含义。
● 阅读理解:有许多形式。有时是输入一个段落,一个问题,生成一个回答(类似问答),或者在原文中标定一个范围作为回答(类似从原文中找对应句子),有时是输出一个分类(类似选择题)。
1.2.2 传统方法与神经网络方法的比较
本节主要从以下3个方面来对传统方法与人工智能方法进行比较。
1.人工参与程度
传统的自然语言处理方法中,人参与得非常多。比如基于规则的方法就是由人完全控制,人用自己的专业知识完成了对一个具体任务的抽象和建立模型,对模型中一切可能出现的案例提出解决方案,定义和设计了整个系统的所有行为。这种人过度参与的现象在基于传统统计学方法出现以后略有改善,人们开始让出对系统行为的控制;被显式构建的是对任务的建模和对特征的定义,然后系统的行为就由概率模型来决定,而概率模型中的参数估计则依赖于所使用的数据和特征工程中所设计的输入特征。到了深度学习的时代,特征工程也不需要了,人们只需要构建一个合理的概率模型,特征抽取就由精心设计的神经网络架构完成了;当前人们已经在探索神经网络架构搜索的方法,这意味着人们对于概率模型的设计也部分地交给了深度学习代劳。
总而言之,人的参与程度越来越低,但系统的效果越来越好。这是合乎直觉的,因为人对于世界的认识和建模总是片面的、有局限性的。如果可以将自然语言处理系统的构建自动化,将其基于对世界的观测点(即数据集),所建立的模型和方法一定会比人类的认知更加符合真实的世界。
2.数据量
随着自然语言处理系统中人工参与的程度越来越低,系统的细节就需要更多的信息来决定,这些信息只能来自于更多的数据。今天当我们提到神经网络方法时,都喜欢把它描述成为“数据驱动的方法”。
从人们使用传统的统计学方法开始,如何取得大量的标注数据就已经是一个难题了。随着神经网络架构的日益复杂,网络中的参数也呈现爆炸式的增长。特别是近年来深度学习加速硬件的算力突飞猛进,人们对于使用巨量参数的需求更加强烈,这就显得数据量日益捉襟见肘。特别是一些低资源的语言和领域中,数据短缺问题更加严重。
这种数据的短缺,迫使人们研究各种方法来提高数据利用效率(Data Efficiency)。于是Zero-shot Learning, Domain adaptation等半监督乃至非监督的方法应运而生了。
3.可解释性
人工参与程度的降低带来的另一个问题是模型的可解释性越来越低。在理想状况下,如果系统非常有效,人们根本不需要关心黑盒系统的内部构造。但事实是自然语言处理系统的状态离完美还有相当大的差距,因此当模型出现问题时,人们总是希望弄清问题的原因,并找到相应的办法来避免或修补。
一个模型能允许人们检查它的运行机制和问题成因,允许人们干预和修补问题,要做到这一点是非常重要的,尤其是对于一些商用生产的系统来说。传统基于规则的方法中,一切规则都是由人手动规定的,要更改系统的行为非常容易,同时在传统的统计学方法中,许多参数和特征都有明确的语言学含义,要想定位或者修复问题通常也可以做到。
然而,现在主流的神经网络模型都不具备这种能力,它们就像黑箱子,人们可以知道它有问题,或者有时候可以通过改变它的设定来大致猜测问题的可能原因,但要想控制和修复问题则往往无法在模型中直接完成,而要在后处理(Post-Processing)阶段重新拾起旧武器—基于规则的方法。
这种隐忧使得人们开始探索如何提高模型的可解释性这一领域,主要的做法包括试图解释现有的模型和试图建立透明度较高的新模型。然而要做到完全理解一个神经网络的行为并控制它,还有很长的路要走。
1.2.3 发展趋势
从传统方法和神经网络方法的对比中,可以看出自然语言处理的模型和系统构建是向着越来越自动化、模型越来越通用的趋势发展的。
一开始,人们试图减少和去除人类专家知识的参与。因此就有了大量的网络参数和复杂的架构设计,这些都是在概率模型中提供潜在变量(Latent Variable),使得模型具有捕捉和表达复杂规则的能力。这一阶段,人们渐渐地摆脱了人工制订的规则和特征工程,同一种网络架构可以被许多自然语言任务通用。
之后,人们觉得每一次为新的自然语言处理任务设计一个新的模型架构并从头训练的过程过于烦琐,于是试图开发利用这些任务底层所共享的语言特征。在这一背景下,迁移学习逐渐发展,从前神经网络时代的LDA、Brown Clusters,到早期深度学习中的预训练词向量Word2Vec、GloVe等,再到今天家喻户晓的预训练语言模型ELMo和BERT。这使得不仅仅是模型架构可以通用,连训练好的模型参数也可以通用了。
现在,人们希望神经网络的架构都可以不需要设计,而是根据具体的任务和数据来搜索得到。这一新兴领域方兴未艾,可以预见随着研究的深入,自然语言处理的自动化程度一定会得到极大提高。