一文科普自然语言处理的前世与今生
Posted AItalks
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文科普自然语言处理的前世与今生相关的知识,希望对你有一定的参考价值。
人工智能就是希望计算机和人一样能够说话、理解文章内容、与人交互。自然语言理解是人工智能中很有挑战的领域,因为使用语言的能力是人所独有的,是最高智能的体现。
所以本文会从3个部分讲一下自然语言处理那些事。
第一部分是自然语言处理主要解决什么问题,有哪些特点;第二部分是介绍自然语言处理的最新技术;第三部分是展望未来,自然语言处理方向的发展可能性。
对于自然语言理解,有两种定义。第一种是计算机能够将所说的语言映射到计算机内部表示;另一种是基于行为的,你说了一句话,计算机做出了相应行为,就认为计算机理解了自然语言。后者的定义,更广为采用。
为什么自然语言理解很难?其本质原因是语言是一种复杂的现象。自然语言有5个重要特点,使得计算机实现自然语言处理很困难:
(1)语言是不完全有规律的,规律是错综复杂的。有一定的规律,也有很多例外。因为语言是经过上万年的时间发明的,这一过程类似于建立维基百科。因此,一定会出现功能冗余、逻辑不一致等现象。但是语言依旧有一定的规律,若不遵循一定的规范,交流会比较困难;
(2)语言是可以组合的。语言的重要特点是能够将词语组合起来形成句子,能够组成复杂的语言表达;
(3)语言是一个开放的集合。我们可以任意地发明创造一些新的表达。比如,微信中“潜水”的表达就是一种比喻。一旦形成之后,大家都会使用,形成固定说法。语言本质的发明创造就是通过比喻扩展出来的;
(4)语言需要联系到实践知识;
(5)语言的使用要基于环境。在人与人之间的互动中被使用。如果在外语的语言环境里去学习外语,人们就会学习得非常快,理解得非常深。
这些现象都说明,在计算机里去实现与人一样的语言使用能力是一件非常具有挑战性的事情。首先,语言的不完全规律性和组合性,就意味着如果在目前的计算机上去实现,会产生组合爆炸;还有,如果需要语言做比喻,去联系到实践环境,就意味着要做全局的、穷举的计算。如果通过现代计算机来做,非常复杂,几乎不太可能。所以,如果想让计算机像人一样使用语言,原理上需要完全不同的、与人脑更接近的计算机体系架构。
其本质原因是,目前在计算机上去实现东西一定需要数学模型。换句话说,计算机能够做的事情要通过数学形式化。但是,到目前为止,语言的使用还不清楚是否能够用数学模型去刻画。人工智能的终极挑战就是自然语言理解。现实当中,不能因为自然语言理解非常困难就放弃。我们还是希望能够使计算机越来越智能化,能够部分使用语言。因此,就形成了所谓自然语言处理这一领域。我们叫自然语言处理,而不是自然语言理解,因为真正的理解是太难了。
自然语言处理做的第一件事情就是把问题简化。比如,知识问答中,问姚明身高是多少?朋友告诉你是2米26。这是人与人之间的知识问答。那么,这其中有哪些步骤呢?
首先是听,然后去理解问题,然后去做一定的推理,然后再去做信息检索,最后判断怎么去做回答,整个过程相当复杂。现在做自然语言处理时,也做这种知识问答,包括有名的IBM的Watson,其整个步骤也是简化了自然语言处理的过程。一般而言,就是这几个步骤,先分析一下问句,接着去检索相关的知识或者信息,然后产生答案。
自然语言处理领域发展的60多年中,总结出一个经验:目前最好的方法是机器学习,包括深度学习。也就是,基于机器学习,并在一定程度上把人的知识加进来,并参考人脑的机理,从而构建更好的机器学习办法。
在短期内,自然语言处理很难突破这个框架。希望未来能够有更大的突破,人工智能能够完全超出目前基于机器学习的方法去做自然语言处理甚至自然语言理解。但是,目前的其他的路径都非常困难。现在,我们拥有大数据,使得我们能够去更好的做自然语言处理。
现在,无论是自然语言处理,还是人工智能的其他领域,都形成了一个闭环机制。比如,开始有一个系统,然后有用户产生大量的数据,之后基于数据,开发好的算法,提高系统的性能。如果能够闭环跑起来,就可以去收集更多的数据,可以开发出更好的机器学习算法,使得人工智能系统的性能能够不断提升。这个人工智能闭环是现代人工智能技术范式里最本质的一个现象,对于自然语言处理也不是例外。我们可以通过闭环,不断去开发新的算法,提高自然语言处理系统的性能。
目前,所有的自然语言处理的问题都可以分类成为五大统计自然语言处理的方法或者模型,即分类、匹配、翻译、结构预测,马尔可夫决策过程。各种各样的自然语言处理的应用,都可以模型化为这五大基本问题,基本能够涵盖自然语言处理相当一部分或者大部分的技术。主要采用统计机器学习的方法来解决。
第一是分类,就是你给我一个字符串,我给你一个标签,这个字符串可以是一个文本,一句话或者其他的自然语言单元;
其次是匹配,两个字符串,两句话或者两段文章去做一个匹配,判断这两个字符串的相关度是多少;
第三就是翻译,即更广义的翻译或者转换,把一个字符串转换成另外一个字符串;
第四是结构预测,即找到字符串里面的一定结构;
第五是马可夫决策过程,在处理一些事情的时候有很多状态,基于现在的状态,来决定采取什么样的行动,然后去判断下一个状态。我们也可以采用这样的模型,去刻画自然语言处理的一些任务。
分类主要有文本分类和情感分类,匹配主要有搜索、问题回答、对话(主要是单轮对话);翻译主要有机器翻译,语音识别,手写识别,单轮对话;结构预测主要有专门识别,词性标注,句法分析,文本的语义分析;
马可夫决策过程可以用于多轮对话。我们可以看到,自然语言处理里面有很多任务,在现实中我们已经开始使用最基本这五种最基本的模型它都去可以去刻画的。
自然语言处理,在一定程度上需要考虑技术上界和性能下界的关系。现在的自然语言处理,最本质是用数据驱动的方法去模拟人,通过人工智能闭环去逼近人的语言使用能力。
但是,这种技术并没有真正实现人的语言理解机制。可能会有这样的情况,这个技术的准确率(绿线)画了一个上界。比如,语音识别的上届是95%,我们希望不断把这个技术做好,比如通过人工智能闭环,更好的深度学习方法,从而使得上界不断提高。但是,不可能一下子达到百分之百对,或者达到完全与人一样的水平。每个应用,对于下界的要求是不一样的。比如,在葡萄牙问路,对方也不会英语,我也不会葡萄牙语,交流非常困难,在这种环境下我其实就是听懂几个单词,让机器翻译给我翻译几个单词就行了,对性能的要求其实是比较低的,不需要去翻译一大段话。我们可以看到,不同的应用,用户对使用性能的要求不同,如果下界达到这个水平,用户就用了。再比如互联网搜索中排序第一的准确率不高,60%多-70%多,大家往往觉得,互联网搜索引擎已经达到要求了。当然因为搜索的时候,通过排序展示给用户多个结果,用户可以去逐个去看,一定程度上解决一些问题,这时候对性能要求下界相对就比较低。如果,现在的技术上届达到了用户要求的下界,就能够使用。所以,哪些自然语言处理的技术未来能够起飞,能够真正实用化,就可以通过这种关系来看。还是要看具体的应用的场景。
在一些特定场景下,准确率达到99%都不行。我们相信,自然语言处理的技术会不断提高,但是是不是都能够达到我们每一个应用要求的性能的下界,就不好说了,要看未来的发展了。这是自然语言处理技术整个发展情况。
现在自然语言处理领域有代表性的技术都大概达到什么样的水平了呢?如果用各种方法包括深度学习把上述五个问题做好了,就能够把自然语言做得很好。现实当中,就是通过深度学习,达到自然语言处理技术比较好的水平。
下面是自然语言处理的几个应用。
首先,问答系统有很多,包括 IBM 的 Watson 也是一个问答系统,有大量的知识或者信息放在知识库。典型的办法就是把问答用FAQ索引起来,与搜索引擎相似,如果来了一个新问题,有一大堆已经索引好的FAQ,然后去做一个检索(字符上的匹配),之后逐个去做匹配,判断问句与回答的匹配如何。往往匹配的模型有多个,再去将候补做一个排序,把最有可能的答案排在前面,往往就取第一个作为答案返回给用户。
这里面牵扯到几个技术,在线计算的时候要做匹配和排序,现在最先进的技术都是用机器学习,用深度学习技术。就是把问句和回答的可能的候选,用向量来表示,问句的每一个单词都可以用向量来表示。每一个词的语义都可以用一个实数值向量赖表示,问句和候补都是实数值向量的序列。
然后,用一个二维的卷积神经网络来判断两句话在语义上是不是相关,候选是否是很好的答案。通过二维卷积神经网络,可以判断两句话里面哪一些词语、词组是可以相互对应,最后可以做一个判断这两句话是不是相关的。整个模型的学习通过大量的数据、句对,去训练。如果卷积神经网络的参数学好,就可以判断任何给定的两句话是不是能够构成一轮问答。
这样的模型不仅仅可以用到文本问答(知识问答)上,也可以用到图像检索上面。给大家演示一个demo。
这种模型,可以跨模态的把文本和图片联系起来。在深度学习技术出现之前的话,这件事情是不可能的。因为他们是不同的模态。一个是符号表示的信息,一个是像素表示的信息,那么我们可以用深度学习的模型去做这种跨模态的匹配。比如,左边有一个卷积神经网络,他能够抽出左边图片的语意表示,表示成一个向量;右边也是一个卷积神经网络,能够把一段文字的内容抽取出来,表示成为一个向量,还有一个网络判断这两个向量在语义上是否能够匹配。
这个模型可以通过大量的数据去训练。假设每一个照片有3到5个人给出描述。我们用大量这样的数据就可以学这样的神经网络,神经网络可以帮助我们,就是说任何给定的一句话,要去查找一个图片的内容,它就可以在这个图片库里帮你去匹配到最相关的图片,给你返回来。这个技术也是在深度学习出现之前应用的,因为我们不知道怎样把图片和文字匹配到一起。有了深度学习技术,我们可以做这样的事情。
自然语言对话是用另外一种技术,用生成式的模型去做自然语言对话。大量的聊天系统是这么做的,输入一句话,里面准备了大量的FAQ,搜索到一个最相关的回答,反馈给你。这叫做基于检索的自然语言问答系统。
这里可以看到是一种产生式,经过大量数据训练之后,输入一句话系统自动的产生一个回复,理论上产生出无穷多的不同的回复。
第二个特点是能够记住训练数据。发现深度网络有一个共同的特点就是能够记住训练数据,同时也有去泛化的能力,能针对未知的新见到的东西去自动组织出一句话,并返回给你。这种能力很令人惊叹,是否实用并不清楚。在一个很固定的场景里,比如话务中心,如果话务员跟客户之间的交互都是简单的重复,大量的类似数据可以构建一个产生自动的回复系统,而且跟人的回复非常接近。
大家如果熟悉深度学习的话,刚才说自然语言处理有很多问题都是翻译的问题,即把一个文字的字符翻译成另外一个文字字符,那么单轮对话的产生也可以看成是机器翻译。序列对序列学习,sequenceto sequence learning,可以用到这种单轮对话中。每个单词其实是用一个实数值向量表示,就是编码,之后用实数值向量分解成一个回复的一句,叫做解码。通过这种编码、解码这两个过程的话,我们把原始的数据转化成中间表示,再把中间表示,转换成为应该回复的话,可以产生对话系统。
一个很重要的任务就是机器翻译,机器翻译的历史被认为与自然语言处理的历史是一样的。最近,大家也知道,深度学习,更具体的就是序列对序列学习,被成功地运用到机器翻译里,使得机器翻译的准确率要大幅度提升。
谷歌的神经机器翻译系统是一个非常强大的系统,需要很多训练数据和强大计算资源。这个seqto seq模型有八层的编码器和八层的解码器,整个网络非常深。它还用了各种这个新的技术,比如注意力技术,并行处理技术,还有模型分割和数据分割等。目前,翻译的准确率已经超过了传统的统计机器翻译。
那么未来自然语言处理技术发展的前景和趋势是什么呢?
刚才我们看到技术上界和用户对于性能要求的下界,碰到一起就看到技术的使用化。那么,预测一下未来自然语言处理技术的发展。
目前,几个最基本的应用,包括语音识别,就是一个序列对序列学习的问题,就是翻译的问题,目前准确率是95%左右,那么已经比较实用了。单轮对话往往可以变成一个分类问题,或者结构预测问题,就是通过手写一些规则或者建一些分类器,可以做的比较准。很多手机上应用或者是语音助手像siri,就是用这样的技术;
多轮对话还很不成熟,准确率还远远达不到一般期待的要求,只有在特定场景下能做的比较好。单轮问答已经开始实用化,准确率一般来百分之七十八十,自动问答系统没有超过80%的这个准确率的情况。
单轮自动问答会马上越来越实用化,因为我们看到很多成功的例子包括Alexa往往都是用单轮对话技术来做的。文本的机器翻译水平在不断提高,深度学习在不断进步,越来越接近人的专业水平,但只是在一些特定场景下。完全去替代人,还是不太可能。
人的语言理解是一个非常复杂的过程,序列对序列实际上是一种近似,现在这种技术能够去无穷尽的逼近人,但是本质上还是跟人的做法不一样的。即使是这样,准确率可以达到百分之七八十。在某些场景下,用户对性能要求并不是特别高。
总而言之,语音识别、机器翻译已经起飞,大家现在开始慢慢在用,但是真正对话的翻译还很困难,还有很长的路要走,但是也说不定能够做得很好。并不是说序列对序列就没有问题需要解决了,还有细致的问题。
一个典型的问题就是长尾现象。不常用的单词、语音识别、翻译还是做得不是很好。比如用中文语音输入,人名、地名这种专有名词识别率一下就下降,特殊的专业术语识也不好,讲中文中间夹杂一些英文单词也是一种长尾现象。因为现在机器学习的方法是基于统计的,原则上就是看到数据里面的规律,掌握数据的规律。需要看到甚至多次重复看到一些东西,才能够掌握这些规律。
这块相信有很多技术能帮助解决一些问题,使得机器翻译或语音识别技术不断提高,但是完全彻底的解决还是比较困难,因为这是这种方法带来的一个局限性。
单轮的问答,特别是场景驱动的单轮的问答,可能慢慢会开始使用。但是多轮对话技术还是比较难。马尔可夫决策过程实际上是还是个统计学习模型,本质特点就是需要有大量的数据去学习。
其实我们人在做多轮对话的时候,并不需要重复才能掌握这种天生能力。这些是否能够用马尔科夫决策过程去模拟或者近似还不是很清楚。还有一个重要的问题就是多轮对话的数据不够,不能够很好地去学习这样的模型,去研究这些问题。
即使是特定任务,多轮对话还比较困难,如果是任务不特定,比如聊天机器人就更难了,我们都不知道该怎么去做,马尔科夫决策过程都用不上。现实当中的一些聊天机器人就是用单轮技术堆起来,但是形成不了一个很自然合理的多轮对话,变成大家用起来觉得很奇怪的东西。总结起来就是多轮对话,在任务驱动的简单场景,有了更多的数据,我们是有可能做的越来越好。
自然语言理解很难,自然语言处理现在用数据驱动的办法去做,有五个最基本的问题,即分类、匹配、翻译、结构预测和马尔可夫决策过程。在具体的问题上,有了数据就可以跑AI的闭环,就可以不断提高系统的性能、算法的能力。深度学习在我刚说的五个大任务里的前四个都能做得很好,特别是运用seq to seq的翻译和语音识别。单论对话也能做的越来越好,但是多轮对话需要去研究和解决。
以上是关于一文科普自然语言处理的前世与今生的主要内容,如果未能解决你的问题,请参考以下文章
一文带你了解Java编程语言的前世今生 | Java核心知识点整理