NLP和应用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/MoreALittle/article/details/70369861

自然语言处理(NLP)和应用

1. 自然语言处理
2. NLP的应用


1、自然语言处理

       自然语言处理是研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法,也是人工智能领域中一个最重要、最艰难的方向。

  • 自然语言的理解(two definitions)
    第一种是计算机能够将所说的语言映射到计算机内部表示;另一种是基于行为的,你说了一句话,计算机做出了相应行为,就认为计算机理解了自然语言。(后者更为广泛采用)

  • 自然语言的重要特点
    1、语言是不完全有规律的,规律是错综复杂的。有一定的规律,也有很多例外。因为语言是经过上万年的时间发明的,这一过程类似于建立维基百科。因此,一定会出现功能冗余、逻辑不一致等现象。但是语言依旧有一定的规律,若不遵循一定的规范,交流会比较困难;2、语言是可以组合的。语言的重要特点是能够将词语组合起来形成句子,能够组成复杂的语言表达;3、语言是一个开放的集合。我们可以任意地发明创造一些新的表达。比如,微信中“潜水”的表达就是一种比喻。一旦形成之后,大家都会使用,形成固定说法。语言本质的发明创造就是通过比喻扩展出来的;4、语言需要联系到实践知识;5、语言的使用要基于环境。在人与人之间的互动中被使用。如果在外语的语言环境里去学习外语,人们就会学习得非常快,理解得非常深。

       自然语言处理领域发展过程中,总结出目前最好的方法是机器学习,包括深度学习。也就是基于机器学习,并在一定的程度上把人的知识加进来,并参考人脑的机理,从而构建更好的机器学习方法。在短期内,自然语言处理很难突破这个框架。我们希望未来能够有更大的突破,人工智能能够完全超出目前机器学习的方法去做自然语言处理。现在,无论是自然语言处理,还是人工智能的其他领域,都形成了闭环机制。比如,开始有一个系统,然后又用户产生大量的数据,之后基于数据,开发好的算法,提高系统的性能。如果闭环能够运行,就可以去收集更多的数据,可以开发出更好的机器学习算法,使得人工智能系统的性能不断提升。人工资能闭环是现代人人工智能技术范式里最本质的一个现象,对自然语言处理也不例外。我们可以通过闭环,不断去开发新的算法,提高自然语言处理系统的性能。

闭环机制
  • 自然语言处理的5大类问题
           目前,所有自然语言处理的问题都可以分类为五大统计自然语言处理的方法的或模型,即分类、匹配、翻译、结构预测,马尔科夫决策过程。各种各样的自然语言处理的应用,都可以模型化为这五大基本问题,基本能够涵盖自然语言处理相当一部分或者大部分的技术。主要采用统计学习的方法来解决。第一是分类,就是你给我一个字符串,我给你一个标签,这个字符串可以是一个文本,一句话或者其他的自然语言单元(分类主要有文本分类和情感分类);其次是匹配,两个字符串,两句话或者两段文章去做一个匹配,判断这两个字符的相关度是多少(匹配主要有搜索、问题回答、对话(主要是单轮对话));第三是翻译,即更广义的翻译或者转换,把一个字符串转换成另外一个字符串(翻译主要有机器翻译,语音识别,手写识别,单轮对话);第四是结构预测,即找到字符串里的一定结构(结构预测主要有专门识别,词性标注,句法分析,文本的语义分析);第五是马尔科夫决策过程,在处理一些事情的时候有很多状态,基于现在的状态,来决定采取什么样的行动,然后判断下一个状态(马可夫决策过程可以用于多轮对话)。我们也可以采取这样的模型,去刻画自然语言处理的一些任务。

2、NLP的应用

2.1 问答–深度学习(CNN)

       首先,问答系统有很多,包括IBM的Watson也是一个问答系统,有大量的知识或者信息放在知识库。典型的方法就是把问答用FAQ索引起来,与搜索引擎相似,如果来了一个新问题,有大一堆已经索引好的FAQ,然后去做一个检索(字符上的匹配),之后逐个去做匹配,判断问句与回答的匹配如何。往往匹配的模型有多个,再去将候补做一个排序,把最有可能的答案排在前面,往往就去第一个作为答案返回给用户。

问答系统

       上图描述的是基于CNN的问答系统。现在在线的时候是做匹配和排序,最先进的技术都是用机器学习。先把问句和答案的候选,用向量进行表示,问句和答案的每一个单词都可以用向量表示。每一个词的语义都可以用一个实数值向量来表示,问句和后补都是实数值向量的序列。然后用一个二维卷积神经网络来判断两句话在语义上是不是相关,候选是否很好的答案。通过二维卷积神经网络,可以判断两句话里面哪一些词语、词组是可以相互对应,滑动窗口的大小决定你选的词组的大小,最后可以做一个判断这两句话是不是相关的。整个模型的学习通过大量的数据、句对,去训练。如果卷积神经网络的参数学好,就可以判断任何给定的两句话是不是能够成一轮问答。
       这种知识问答模型不仅可以用到文本问答(知识问答)方面,也可以用到图像检索上面。其模型如下图所示。

CNN图像检索模型

       这种模型,通过两个卷积神经网络(一个是文本的卷积神经网络和一个是图像的卷积神经网络,同时提取文本和图像的特征)可以跨模态的把文本和图片联系起来。在深度学习技术技术出现之前,这是不可能的。因为图像和文本是不同的模态。一个是符号表示的信息,一个是像素表示的信息,于是我们可以用深度学习的模型去做这种跨模态的匹配。例如,左边有一个卷积神经网络,它能够抽取左边图片的语意表示,表示成一个向量;右面也是一个神经网络,能够把一段文字的内容抽取出来,表示成为一个向量,在添加一个网络判断这两个向量在语义上是否能匹配。这个模型可以通过大量的数据去训练。假设每一个照片有3到5个人给出描述。我们用大量这样的数据就可以学这样的神经网络,神经网络可以帮助我们,就是说任何给定的一句话,要去查找一个图片的内容,它就可以在这个图片库里帮你去匹配到最相关的图片,给你返回来。

       自然语言对话是用另外一种技术,用生成式的模型去做自然语言对话。大量的聊天系统是这么做的,输入一句话,里面准备了大量的FAQ,搜索到一个最相关的回答,反馈给你。这叫做基于检索的自然语言问答系统。

自然语言对话模型

       如图所示是自然语言对话的产生式,经过大量数据训练之后,输入一句话系统自动产生一个回复,理论上产生出无穷多的不同回复。在微博上爬了四百万的微博数据,微博数据可以看作是一种简单的单轮对话。用400万数据训练了这样一个系统能够去自动产生对话。理论上它可以回答任何你输入的对话。用400万的微博数据就可以训练这样一个模型。系统产生一句话的比例是96%,真正形成一个有意义的单轮对话的比例是76%左右。这个系统的一大特点是,可以回答没有见过的一句话。
       第二个特点是能够记住训练数据。发现深度网络有一个共同的特点就是能够记住训练数据,同时也有去泛化的能力,能针对未知的新见到的东西去自动组织出一句话,并返回给你。这种能力很令人惊叹,是否实用并不清楚。在一个很固定的场景里,比如话务中心,如果话务员跟客户之间的交互都是简单的重复,大量的类似数据可以构建一个产生自动的回复系统,而且跟人的回复非常接近。
       刚才说自然语言处理有很多问题都是翻译的问题,即把一个文字的字符翻译成另外一个文字字符,那么单轮对话的产生也可以看成是机器翻译。序列对序列学习,sequence to sequence learning,可以用到这种单轮对话中。每个单词其实是用一个实数值向量表示,就是编码,之后用实数值向量分解成一个回复的一句,叫做解码。通过这种编码、解码这两个过程的话,我们把原始的数据转化成中间表示,再把中间表示,转换成为应该回复的话,可以产生对话系统。

2.2文本分类(情感分析CNN)

        传统的神经网络可以分为三个部分,即输入层,隐藏层,输出层。其中,隐藏层可以扩展成为多层结构,相邻两层之间的神经元相互连接,层内部神经元没有连接。最为经典的多层感知机是上下文神经元全部相连的神经网络。而CNN通过变换隐藏层结构,将相邻神经元之间的交互信息加入到隐藏层中,并且通过降采样的方式,抽取出任务相关的信息。简易的CNN模型可以分为四个部分:输入层(Input)、卷积层(Convolution)、池化层(Pooling)和分类层(Softmax)。其简易的模型图如下图所示。

神经网络

给定一段长度为n的文本 s,其中 wis 中的第i 个词所对应的词向量。因此,文本s 可以表示为w1n=w1w2wn ,其中 为连接操作,即 wi:j表示s 中第j 个词对应向量的首尾连接。输入层即为文本 s对应的词向量操作。
卷积层将输入的多个词向量进行卷积操作。一个卷积操作可以解释为一个卷积滤波器mRdh(filter)与h个词向量进行点乘操作所获取到的新的特征值,公式如下所示。

Cj=f(mTwjh+1:j+b)

其中f为非线性函数,如双曲正切激活函数、S型曲线激活函数等,b为偏置项, wjh+1:j表示文本s中的第jh+1个词到第i 个词对应的词向量。在该操作下,我们可以将 wjh+1:j通过卷积滤波器m进行内积在和偏置项求和得到卷积为特征值cj 。因此,在大小为h的滑动窗口下,我们可以得到特征值序列c([c1,c2,,cnh+1]) ,并且 cRnh+1
通过一个卷积滤波器我们可以得到一份特征值序列。但不同的文本s长度不一定相同,这就导致了c的长度也不同,并且我们只需要c中较为重要的信息。因此CNN模型中通过降采样,即添加池化层的方式来获取特征值序列中重要的信息以及控制输出的一致性。通过池化操作,可以使同一个卷积滤波器对不同文本生成相同维度的特征。
通过池化层,我们可以得到特征 z=[c1^,c2^,,cq^],其中q表示卷积滤波器的数量。将该特征输入到softmax层,即可预测出该文本s的类标。得到预测类标后,与标准文本类标进行比价,通过反向传播(backpropagation)方式将误差传递给前面各个层,更新网络中的参数。Softmax函数公式如下所示。
p(y=1|z;θ)=ezTθ1kk=1ezTθk

2.3机器翻译(google机器翻译)

       机器翻译的历史被认为与自然语言处理的历史是一样的。最近,深度学习,更具体就是序列对序列的学习,被成功的运用到机器翻译里,使得机器翻译的准确率大幅度提升。google自然语言机器翻译模型如下。

google机器翻译

       谷歌的神经机器翻译系统是一个非常强大的系统,需要很多训练数据和强大计算资源。这个seqto seq模型有八层的编码器和八层的解码器,整个网络非常深。它还用了各种这个新的技术,比如注意力技术,并行处理技术,还有模型分割和数据分割等。目前,翻译的准确率已经超过了传统的统计机器翻译。

performance

       下面,再看一下未来自然语言处理技术发展的前景和趋势。刚才我们看到技术上界和用户对于性能要求的下界,碰到一起就看到技术的使用化。那么,就预测一下未来自然语言处理技术的发展。目前,几个最基本的应用,包括语音识别,就是一个序列对序列学习的问题,就是翻译的问题,目前准确率是95%左右,那么已经比较实用了。单轮对话往往可以变成一个分类问题,或者结构预测问题,就是通过手写一些规则或者建一些分类器,可以做的比较准。很多手机上应用或者是语音助手像siri,就是用这样的技术;多轮对话还很不成熟,准确率还远远达不到一般期待的要求,只有在特定场景下能做的比较好。单轮问答已经开始实用化,准确率一般来百分之七十八十,自动问答系统没有超过80%的这个准确率的情况。去年,我有一个报告就讲鲁棒的自动问答或者知识问答,并不要求准确率是百分之百。单轮自动问答会马上越来越实用化,因为我们看到很多成功的例子包括Alexa往往都是用单轮对话技术来做的。文本的机器翻译水平在不断提高,深度学习在不断进步,越来越接近人的专业水平,但只是在一些特定场景下。完全去替代人,还是不太可能。人的语言理解是一个非常复杂的过程,序列对序列实际上是一种近似,现在这种技术能够去无穷尽的逼近人,但是本质上还是跟人的做法不一样的。即使是这样,准确率可以达到百分之七八十。在某些场景下,用户对性能要求并不是特别高。

       总而言之,语音识别、机器翻译已经起飞,大家现在开始慢慢在用,但是真正对话的翻译还很困难,还有很长的路要走,但是也说不定能够做得很好。并不是说序列对序列就没有问题需要解决了,还有细致的问题。一个典型的问题就是长尾现象。不常用的单词、语音识别、翻译还是做得不是很好。比如用中文语音输入,人名、地名这种专有名词识别率一下就下降,特殊的专业术语识也不好,讲中文中间夹杂一些英文单词也是一种长尾现象。因为现在机器学习的方法是基于统计的,原则上就是看到数据里面的规律,掌握数据的规律。需要看到甚至多次重复看到一些东西,才能够掌握这些规律。这块相信有很多技术能帮助解决一些问题,使得机器翻译或语音识别技术不断提高,但是完全彻底的解决还是比较困难,因为这是这种方法带来的一个局限性。

       单轮的问答,特别是场景驱动的单轮的问答,可能慢慢会开始使用。但是多轮对话技术还是比较难。马尔可夫决策过程实际上是还是个统计学习模型,本质特点就是需要有大量的数据去学习。其实我们人在做多轮对话的时候,并不需要重复才能掌握这种天生能力。这些是否能够用马尔科夫决策过程去模拟或者近似还不是很清楚。还有一个重要的问题就是多轮对话的数据不够,不能够很好地去学习这样的模型,去研究这些问题。即使是特定任务,多轮对话还比较困难,如果是任务不特定,比如聊天机器人就更难了,我们都不知道该怎么去做,马尔科夫决策过程都用不上。现实当中的一些聊天机器人就是用单轮技术堆起来,但是形成不了一个很自然合理的多轮对话,变成大家用起来觉得很奇怪的东西。总结起来就是多轮对话,在任务驱动的简单场景,有了更多的数据,我们是有可能做的越来越好。

展开阅读全文

没有更多推荐了,返回首页