自然语言处理(NLP)是计算机科学和人工智能的一个研究领域,它的主要关注点就是人和计算机之间对于自然语言的理解。NLP的终极目标就是能够让计算机对自然语言的理解能力和人一样。这些研究推动了很多项目,诸如虚拟助手,语音识别,情感分析,自动摘要,机器翻译等等一些内容。在本文中,你将学到自然语言处理的基础内容,探索它的技术,并了解前沿科技深度学习是如何对NLP起到助力作用的。
一个简短的目录:
1.简介
2.NLP的难点在哪
3.句法分析和语义分析
4.NLP技术
5.NLP和深度学习
6.总结
1.简介
自然语言处理是融合了计算机科学,语言学和机器学习的交叉学科,主要研究人和计算机如何使用自然语言来交流的问题。NLP最关心的问题就是如何理解人类语言,并且可以生成人类语言。NLP的科技成果有语音小助手,就像亚马逊的Alexa,苹果的Siri。还有机器翻译和文本过滤等一些内容。NLP大量使用了机器学习的相关内容,尤其是深度学习的东西。主要的研究领域可以细分成下面三个部分:
1.语音识别——把语音翻译成文字。
2.自然语言理解——让计算机明白我们再说/写些什么。
3.自然语言生成——让计算机开始说人话。
2.NLP的难点在哪
人类语言是极其特殊的。这么说,不是瞎编乱造,而是有几点依据的。人类语言的意义在于表述说话或者书写的意思。尽管它是一个非常复杂的体系,但是小屁孩都能很快的学会,这真让人费解。还有一个神奇的地方,就是,人类语言实际上就是一堆符号。查尔斯曼宁(斯坦福大学机器学习专业教授)试图给人类语言下个定义——离散的,符号化的,明确的信号系统。这就意味着,你可以用不同的方法来表述同样的意思,比如说话,手势或者其他方式。人的大脑会把这些东西进行编码,形成一种连续的内容,比如说这一堆符号是通过连续的声音或者图像来传输给大脑的。
所以,理解人类语言通常都被认为是一项非常困难的事情,因为它确实很复杂。例如,把单词任意排列成句子的方法是无穷无尽的。同时,单词又有不同的意思,要想正确的翻译一个句子,必须得有上下文信息。每一种语言都有一些独特的地方,而且是含混不清的,存在很多一语双关的表达。随意来看一看,下面这则新闻标题“The Pope’s baby steps on gays”。这个题目明显有两种差距非常大的意思,这是NLP的工作极具挑战的典型例子。
值得注意的是,完美的理解人类语言可以让AI具备处理网络上所有有用信息的能力。反过来,这个技术也能促进人工智能的发展。
3.句法分析和语义分析
句法分析和语义分析是自然语言理解中的两个重要技术。语言是由一系列合法的句子构成的集合,但是怎么去判断一个句子是不是合法呢?事实上,你可以把合法性分成两个部分来看待:句法和语义。句法指的是文本具有合乎文法的组织结构,语义则是说的它能够表述实际的意思。然鹅,一个语法正确的句子不一定是语义正确的。我们来看看这个例子。“cows flow supremely”,这个句子的语法没啥问题,符合主语,动词,谓语的语法结构,但是它根本没有鸟意思。
句法分析:
句法分析句法分析,叫语法分析或者语法解析也行,都依你。它的主要工作就是分析一个自然语言是不是符合某个语法规则。语法规则适用于一组词或者一类词上面,但是总会有一些个例让人头疼。对于一个固定的文本,语法分析通常有一个语义上的结构。
比如说,一个句子有主语和谓语,主语是一个名词短语,谓语是一个动词短语。再来看个例子,“The dog (名词短语) went away (动词短语)”.我们可以随便组合任意的名词短语和动词短语,都能构成一个句子。但是,这样拼凑起来的内容是不能够表达意思的,尽管它的语法是合乎规则的。
语义分析:
对于我们自身来说,要想理解别人说的是什么梗,好像靠的是一些无意识的行为,这依赖于我们的直觉和对于语言自身相关知识的学习。因此,我们理解语言的方式严重依赖意思和上下文。可是计算机对这技巧一点都不能理解,它需要不同的方法。“Semantic”这个词是一个语言学术语,指的是那些跟含义和逻辑相关的事情。
语义分析
因此,语义分析就是要理解单词的含义,学习符号的意思以及句子结构的意义。解决了这个问题,才能让计算机像人一样去理解含义和上下文。但是目前这个项目的发展状况并不怎么样,只能说达成了一部分小目标。实际上这是NLP领域里最难的一个部分,到现在也没有太好的解决方案。例如语音识别现在都已经很成熟了,基本上识别的没有半点错误,但是在语义理解方面,还是十分欠缺的。你的手机通常能知道你说了哪些词,但是它却不会有半点反应,因为它不能理解你说的这些话的意思。就算现有的一些看起来比较高科技的东西,也只是让你觉得它理解你的意思,实际上就呵呵了吧。表面上那些基于关键词或者基于统计,甚至是纯粹的机器学习方案,背地里可能也在使用单纯的匹配和词频计算来识别文本可能的意思。这些方法都是有局限性的,都不是对语义的真正理解。
4.NLP技术
接下来,我们来探讨几个时下最流行的NLP技术。这些技术都是相互交叉的,他们的研究都是为了解决更大的问题而设立的子任务。
解析
什么是解析?首先先来看一下字典释义:
解析:把句子分解成组成部分,并描述句法结构
这就是它的定义,但是我们可以再详细的解释一下。解析指的是使用计算机对句子进行规范化的成分分析,结果会产生一个解析树能够可视化的展示句法结构。这种分析结果有助于进一步的解析和理解。
下面是一个解析树实例。被分析的句子是“The thief robbed the apartment”。我们产生了三种不同的信息描述模型来表述这个句子。
解析树
看一下每个单词上面的字母符号,表示了每个词在句子中的成分(名词,动词,定语)。再往上看一层,这一层用来描述一组短语。“the thief”是一个名词短语,“robbed the apartment”是一个动词短语。把它们组合在一起就构成了句子,最高层就标注了一个句子。
但是名词短语或者动词短语到底意味着什么呢?我们来解释一下“名词短语”。名词短语由一个或者一些单词构成,包含一个名词,还有可能是描述性词语,动词,副词。一个想法是给和他们相关的名词分组。
解析树同时也提供了语法关系,根据解析树的表述结构就能够获取语法信息。比如上面的例子“the thief”就是“ robbed”的主语。
动词“ robbed”使用一个“V”进行标记,在上层用“VP”标记。它跟主语“the thief”用一个“S”标记联系起来,“the thief”用“NP”标记。这个例子就是一个主语-动词关系模板,对于其他类型的语法也会有更多其他的模板。
词干提取
词干提取源于词形变换和信息抽取。做词干提取的目的是NLP预处理和提升效率。先来看看字典中对词干提取的解释。
词干:起源或起因
词干提取就是把单词变成词干的过程,但是词干到底是什么?通常来说,词干就是把去除掉单词所有词缀之后的内容。举个栗子,比如说“touched”,它的词干是“touch”。同时,“touching”的词干也是“touch”,诸如此类的。
你可能不能理解,为什么我们要提取词干出来?因为一个单词会有很多变种,但是实际上它们都表示的是一个意思,而且它们的词干是一样的。下面再来举个栗子:
I was taking a ride in the car
I was riding in the car.
这两句话实际上说的是一个意思,而且它们用的单词基本也差不多。
想想字典里的那些词吧,还有又它们所产生的各种变形。要把这些都存储下来需要很大的数据库,而且这里面有很多词都是一个意思。借助词干提取,我们可以解决这个问题,只保留词干就好了。有一些很棒的算法来进行词干提取,比如1979年发明的“Porter Stemming Algorithm”。
文本分割
NLP任务中讲的文本分割是指的把文本分割成有意义的单元,比如切割成单词,句子,话题,甚至潜在意图的分割等等。同城,文本都被分割成单词,根据不同语言的特性,这个任务可能简单也可能很难。这都是因为人类语言的复杂性造成的。例如,在英语中,根据空格去切割单词就很简单,当然有时候也有一些问题,比如“ice box”我们想把它作为一个单词来切割,可是他们中间也有一个空格。不仅如此,有时候人们还会写成“ice-box”,所以有时候这也很复杂。
命名实体识别
命名实体识别的任务是希望从文本中找出符合预先定义的类别的实体项目(称为实体)。它们的类别定义可以是人名,组织机构名,地名,也可以是货币值,比率值等等内容。
来看一个例子:
“Martin bought 300 shares of SAP in 2016.”
经过命名实体识别之后我们可以得到如下结果“[Martin]Person bought 300 shares of [SAP]Organization in [2016]Time.”可以看出,识别出了人名Martin,组织机构名SAP,时间2016.
关系提取
关系提取实际上是基于命名实体识别的,在命名实体识别的基础上,试图分析这些实体在语义上的关系。比如说,尝试提取谁和谁结婚,发现某人在某个公司工作等等语义上的关系。这个问题实际上也可以转化成一个分类问题,为每一个关系类型训练一个机器学习模型。
情感分析
对于情感分析来说,我们试图识别文字所表达的态度(或者说情感)。比如一个发言人或者留言者赞成一篇文章,一次交流,或者一个事件。因此,这是一个NLP的问题,需要去理解文本内容,并预测潜在的意图。情感分析中,情感通常被分为三类——正面,负面和中立的。借助情感分析,我们可以去预测一个顾客对于某个产品的态度和观点,通过分析他写的评论。所以,情感分析通常会应用在对评论,调查,文章等方面。
如果你对这个有兴趣,可以试试用Python来实践一下。我写了一个 Jupyter Notebook
参考资料,方便你使用Python’s Natural Language Toolkit (NLTK),有兴趣的可以看看。你也可以看看我的博客文章,我写了一些关于使用Keras来构建神经网络的内容,我训练了一个神经网络来处理情感分析的问题。
5.NLP和深度学习
现在我们对NLP的任务有了一定的了解,但是,该怎么用深度学习来处理NLP的问题呢?
现在,深度学习和NLP最核心的问题就是如何用一个数字向量去定量的表示一个单词,或者说一个单词的意思。使用这些向量,我们可以把单词转换成更高维度空间。有意思的是,这些已经变成向量的单词依然具备语义上的关系。那些相似的单词或者意思雷同的单词在高维空间中也会倾向于聚集在一起。看看下面这个图:
在使用主成分分析(PCA)或者T-SNE降维之后,你可以大概总结出聚在一起的一群单词的意思,当然有时候会有一些误导的成分,因为过分简单或者丢弃了部分信息导致的。因此,这是一个好的方法,比如要进行逻辑回归或者线性回归,但是这并不是最前沿的,还可以做得更好。
以单词“ undesirability”为例子,使用形态学的方法,我们可以把这个单词拆成“Un + desire + able + ity”。每一部分词素成为一个向量。我们用它来构建神经网络,这可以构建一个更大单元的含义,直到最终由全部的语素构建的单元。
深度学习也可以理解句子结构,构建句法解析可以识别句子结构。谷歌在项目“ McParseface”和“SyntaxNet”所使用的依赖解析技术跟这个类似,只不过更加的复杂。
弄清楚了句子的结构之后,我们可以开始尝试理解句子的含义。跟之前所讨论的一样,我们用向量表达单词的意思,同样的,我们也可以用向量去表示一个句子或者一个短语的意思。不进入吃,如果我们知道句子之间的关系,我们也可以训练一个神经网络模型来进行处理这些问题。
深度学习技术在情感分析方面表现也很出色。来看一段影评:“This movie does not care about cleverness, with or any other kind of intelligent humor”,用传统的方法来处理可能会被套路,认为这是一个负面评论,因为“cleverness, with or any other kind of intelligent humor”听起来似乎是负面倾向的,但是神经网络能理解它的真实含义。其他的应用,比如聊天机器人,机器翻译,Siri,Google Inboxes 回复等等。
使用递归神经网络在机器翻译领域也取得了重大的成就,关于这个内容,我又另外一篇博文来介绍。blog-post.
使用深度学习算法,在机器翻译的时候,先把一个句子转换成向量,然后把这个向量转换成表达同一个意思的另一种语言。
总的来说,NLP和深度学习都是基于词语的向量化表达去处理的。并在某种程度上表达了词语的意思。
6.总结
这篇文章,介绍了很多关于自然语言处理的内容。现在你明白了为什么NLP是一个很难搞的事情,而且一个优秀的语言理解能力对人工智能的提升是多么重要。我们讨论了句法分析和语义分析的区别,也学习了一些如何分析和生成语言的NLP相关技术。作为总结,我们讨论了解析,词干提取,文本分割,命名实体识别,关系提取和情感分析。在这些的基础上,我们又讨论了深度学习技术是如何促进NLP的发展的。
网友评论