摘要:深度学习是当前机器学习领域的研究的前沿与热点之一,深度学习的概念源于人工神经网络的研究。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。本文讨论了深度学习在句法分析和语义分析等相关任务中的主要算法,总结了存在的问题及深度学习在中文信息处理的发展方向。
关键词:深度学习 机器学习 自然语言处理
1. 引言
深度学习在图像的语音领域取得了突出成果,但是在自然语言处理上还未取得重大突破,与语音和图像不同,语言是一种经过人类大脑产生并加工处理的符号系统,似乎模仿人脑结构的人工神经网络应该在自然语言处理领域拥有更多优势,但实际情况并非如此.同时,近几十年来,基于统计的模型成为自然语言处理非主流方法之后,属于统计方法典型代表的人工神经网络在自然语言处理领域依然没有得到足够重视.当然,这一切在Hinton等提出深度学习以后,情况发生了变化,当前结合深度学习模型开展自然语言处理相关应用已经取得了一定成果,并成为研究热点之一[6]。 2. 深度学习与自然语言处理的关系
自然语言处理的主要目标是让人类语言能够更容易被计算机识别、操作,其主要应用包括信息抽取、机器翻译、摘要、搜索及人机交互等。传统的自然语言处理,不管是英文还是中文,仍然选择分而治之的方法,把应用分解成多个子任务来发展和分析自然语言处理,很少能够发展一个统计的架构,并且为了更好地提高性能,从而导致需要加入大量为特定任务指定的人工信息[7]。从这点来说,大多数系统主要有这样的几个缺点:首先这些系统是浅层结构,并且分类器是线性的;其次为了一个线性分类器有更好的性能,系统必须融入大量为特定任务指定的人工特征;最后这些系统往往丢弃那些从其他任务学来的特征。
从2006年开始,研究者们开始利用深层神经网络在大规模无标注语料上无监督的为每个词学到了一个分布式表示,形式上把每个单词表示成一个固定维数的向量,当作词的底层特征。在此特征基础上,Collobert&Weston完成了词性标注、命名实体识别和语义角色标注等多个任务,Richard Socher等人则利用递归神经网络完成了句法分析、情感分析和句
子表示等多个任务,这也为语言表示提供了新的思路[1]。 3. 深度学习在自然语言处理领域的研究概况
神经网络和深度学习模型首先是在计算机视觉等领域取得了进展,而在自然语言处理领域,其获得大量应用的时间相对较晚.从二十一世纪初开始,一些将神经网络和深度学习应用在自然语言处理领域的文章被陆续发表.
Bengio et al.(2003)[2]提出了利用递归神经网络建立语言模型,该模型利用递归神经网络为每个词学习一个分布表示(distributed representation)的同时,也为词序列进行了建模.该模型在实验中取得了比同时期最优的n元语法模型更好的结果,且可以利用更多的上下文信息.
Bordes et al.(2011)[3]提出了一种利用神经网络和知识库(knowledge base)学习介个化信息嵌入(Structured Embeddings)的方法,该方法在WordNet和Freebase上的实验结果表明其可以对结构化信息进行嵌入表示.
Mikolov et al.(2013)[4]提出了连续词袋模型(continuous bag ofwords,CBOW),该模型使用句子中某个词位置周围的词来预测该词;该工作还同时提出了skipgram模型,该模型可以利用句子中某个位置的词预测其周围的词.基于这两个模型,Mikolov et al.[4]开源了工具word2vec4,用来训练词向量,该工具已经得到了广泛应用.
Kim(2014)[5]将卷积神经网络引入自然语言处理的句子匪类任务.该工作利用一个具有两个通道(channel)的卷积神经网络对句子进行特征提取,最后对提取的特征进行匪类.实验结果表明卷积神经网络在对自然语言进行特征提取方面具有显著的效果.
基于长短期记忆神经网络,Sutskever et al.(2014)[1]提出了序列到序列(sequence to sequence)模型,在该文章中,序列到序列模型被应用于机器翻译任务.该模型使用了两个长短期记忆神经网络分别作为编码器(encoder)和解码器(decoder).在编码器部分,该网络在每个时候读取一个源语言词汇,直到读取至一个结束符,即得到了该序列的一个表示.将源语言序列编码完成后,使用源语言序列的编码表示初始化编码器.使用递归神经网络的预测模型,即可解码出相应的目标语言序列.
Tai et al.(2015)[3]提出了树状长短期记忆神经网络.由于传统的递归神经网络通常用于处理线性序列,而对于自然语言这种 有着内在结构的数据类型,这种线性的模型可能一些信息丢失.因此,该模型将长短期记忆神经网络用于分析树中,并在情感分类(sentiment analysis)取得了良好的效果.
4. 面向自然语言处理的深度学习平台工具
面向自然语言处理的深度学习平台或具较多, 根据开发语言的不同,可以分为基于Python、C++、C 或 Java 等不同程序设计语言实现的算法库或框架; 根据实现的神经网络模型的不同, 可以分为面向 RBM/DBN (Deep belief net-work) 等组件、卷积神经网络 (CNN)、循环神经网络、递归神经网络实现的框架平台; 根据功能目标不同, 又可以分为提供深度学习基本功能实现的函数库/工具包、在函数库基础上面向领域任务构建的不同应用框架等。[7]
5. 使用向量表示语义
深度学习使用向量来表示语义,因此概念不再是由一个庞大的符号来表示,而是由特征值表示的一个向量来表示。向量的每个索引代表神经网络训练得到的一个特征,向量的长度一般在300左右。这是一种更加有效的概念表示方法,因为这里的概念是由特征组成的。两个符号只有相同或者不同两种情况,而两个向量可以用相似性来衡量。“庆丰包子”对应的向量与“狗不理包子”对应的向量很接近,但是它们和“轿车”对应的向量差别很大。如同WordNet处理方式一样,相似的向量被归为同一类[8]。
向量还存在内部结构。如果你用意大利向量减去罗马向量,得到的结果应该与法国向量减去巴黎向量的结果非常接近。我们可以用一个等式来表示:
意大利 - 罗马 = 法国 - 巴黎
另一个例子是:
国王 - 皇后 = 男人 - 女人
我们通过训练神经网络来预测每个词语附近的词语,得到带有这些属性的向量。你可以从谷歌或者是斯坦福直接下载已经训练好的向量,或是用Gensim软件库自己训练。令人惊讶的是这种方法竟然有效,而且词向量有如此直观的相似性和联系,但事实上确实是有效。 6. 由词向量构成语义
我们已经有了原来表示单个词语的向量,该如何用这些词表示语义,甚至形成完整的句子呢?我们使用一种称为递归神经网络(recurrent neural network, RNN)[2]的技术,如下图所示。用RNN把句子“The woman ate tacos.”编码为向量,记作h4。单词“the”的词向量记作h0,然后RNN把h0与表示“woman”的词向量结合,生成新的向量h1。然后向量h1继续与下一个单词“ate”的词向量结合,生成新的向量h2,以此类推,直到向量h4。向量h4则表示了完整的句子。
一旦信息被编码为一个向量,我们就能将其解码为另一种形式,如上图所示。比如,RNN随后可以将向量h4表示的句子翻译(解码)成西班牙语。它先根据已有向量h4生成一个最有可能的单词。向量h4与新生成的单词“La”一起又产生了向量h5。在向量h5的基础上,RNN推出下一个最有可能出现的单词,“mujer”。重复进行这个过程直到产生句号,网络结构也到此为止。
使用这种编码器—解码器模型来做语言转换,需要用一个包含大量源语言与目标语言的语料库,基于这个语料库训练RNN网络。这些RNN通常含有非常复杂的内部节点,整个模型往往有几百万个参数需要学习。
我们可以将解码的结果以任何形式输出,例如解析树(parse tree),或是图像的描述,假设有足够多包含描述的图像素材。当给图片添加描述时,你可以用图片训练一个神经网络来识别图像中的物体。然后,把神经网络输出层的权重值作为这幅图像的向量表示,再将这个向量用解码器解析出图像的描述 7. 从合成语义到关注、记忆和问答
我们可以把解码的过程想象成回答问题,“这句话该怎么翻译?”或者,已经有了待翻译的句子,并且一部分内容已经翻译了,那么“接下去该怎么写?”
为了回答这些问题,算法首先需要记住一些状态。在之前提到的例子中,系统只记住当前向量状态h以及最后写下的单词。若是我们想让它能运用之前全部所见所学该怎么办?在机器翻译的例子里,这就意味着在选择下一个单词时,要能够回溯之前的状态向量h0、h1、h2和h3。创造了能满足这种需求的网络结构。神经网络学习如何在每个决策点确定之前哪个记忆状态是最相关的[9]。我们可以认为这是一个关注记忆的焦点。
它的意义在于,由于我们可以将概念和语句编码为向量,并且我们可以使用大量的向量作为记忆元素,通过搜索能找到问题的最佳答案,那么深度学习技术就能用文字来回答问题了[10]。举一个最简单的例子,用表示问题的向量与表示记忆的向量做内积运算,把最吻合的结果作为问题的最佳回答。另一种方法是把问题和事实用多层神经网络进行编码,并把最后一层输出传给一个函数,函数的输出即为答案。这些方法都是基于模拟问答的数据来训练,然后用下文所示的方法回答问题。
8. 准确理解语义
设想桌上放着一本书。计算机如何才能知道你挪动桌子的同时也挪动了书本?同样的,计算机怎么知道屋外只是下雨了呢?就如Marvin Minsky所问,计算机如何知道你能用一根绳索拉箱子而不是推箱子呢?因为这些事实我们不会都写下来,故事将只限于能被我们算法所表示的知识。为了获取这部分知识,我们的机器人(robot)将通过实景体验或者模拟体验来学习。
机器人必须经历这种实景体验,并用深度神经网络编码,基于此可以构建通用语义。如果机器人总是看到箱子从桌上掉下来,它则会根据这一事件创建一条神经回路。当妈妈说“天啊,箱子跌落下来了”,这条回路将会和单词“跌落”结合。然后,作为一个成熟的机器人,当它再遇到句子“股票跌落了10个点”,根据这条神经回路,它就该理解其中的意思了[10]。
机器人还需要把一般的实景体验与抽象推理相结合。试着来理解这句话的含义“他去了垃圾场。”(Hewenttothejunkyard.)WordNet只能提供一组与“went”相关的单词。ConceptNet能把“went”和“go”联系在一起,但是永远也不明白“go”的真正意思是什么。FrameNet有一个self-motion的框架,已经非常接近了,但还是不够。深度学习能把句子编码成向量,然后回答各种问题,诸如用“垃圾场”回答“他在哪儿”的问题。然而,没有一种方法能够传递出一个人在不同位置这层意思,也就是说他既不在这里,也不在其它地方。我们需要有一个连接自然语言和语言逻辑的接口,或者是用神经网络对抽象的逻辑进
行编码。
9. 存在的问题与未来研究的方向
自然语言在深度学习中用于初始输入的“数据源”是字或词,和图像、语音分别采用像素点及音素作为初始“数据源”相比较,前者已经包含了人类的语义解释,是经过人类主观思考处理后形成的,而后者是原始的,还没有经过人类加工处理.这一点是自然语言处理和其他两种应用最大的不同.由此,我们联想到,这是否也是深度学习在图像、语音方面能够取得巨大成功, 而在自然语言方面还没有成功的关键原因呢?因为包含原始信号的情况下,不容易丢失未知信息,从而能够通过深度学习的不同分层特征表示,更为全面地表征原始输入, 进一步为分类、聚类等具体应用提供充分的特征支撑.
目前来看,面向自然语言处理的深度学习中的数据表征主要还是 Word embedding [10]概念,只是可能在不同语言中,具体 Word 的表示单位有所不同,如英文中可以是单词或词缀,中文中自然语言”在深度学习中用于初始输入的“数据源”是字或词, 和图像、语音分别采用像素点及音素作为初始“数据源”相比较,前者已经包含了人类的语义解释,是经过人类主观思考处理后形成的,而后者是原始的,还没有经过人类加工处理.这一点是自然语言处理和其他两种应用最大的不同.由此,我们联想到,这是否也是深度学习在图像、语音方面能够取得巨大成功,而在自然语言方面还没有成功的关键原因呢?因为包含原始信号的情况下,不容易丢失未知信息,从而能够通过深度学习的不同分层特征表示,更为全面地表征原始输入, 进一步为分类、聚类等具体应用提供充分的特征支撑. 10. 结束语
相比于图像处理,自然语言的分层抽象其实并不明显.自然语言处理在深度学习中所采用的特征表示,目前主要是 Word embedding 机制.尽管从语言表达的形式角度,也可以构建字母、单词、词组、短语、句子等层次结构,但从语义表达角度来看,似乎没有如图像处理那样具有明显的抽象分层,例如单词和词组、词组和短语之间,语义表达上面并没有非常明显的不同.抽象层次不明显, 实质上就可能限制了特征表示的多样性,从而无法最好地发挥深度学习多层特征表示的长处.除了词向量之外,是否还更好的特征表示方式?采用何种模型来构建明显分层机制?等等此类问题,也是面向自然语言处理的深度学习在未来发展中需要重点研究的内容.当然,尽管目前来看,面向自然语言的深度学习还存在着各种各样的问题, 但是总体而言,现有深度学习的特征自动表示及分层抽象思想。
参考文献
[1] Neural machine translation by jointly learning to align and translate. arXiv preprint arXiv:1409.0473, 2015
[2] Learning phrase representations using RNN encoder-decoder for statistical machine translation. arXiv preprint arXiv:1406.1708,2015
[3] Deep visual-semantic alignments for generating image descriptions. arXiv preprint arXiv:1412.2306, 2015
[4] Memory networks. arXiv preprint arXiv:1410.3916, 2015
[5] Efficient estimation of word representation in vector space. arXiv preprint arXiv:1301.3781,2016
[6] 《深度学习在自然语言处理中的应用》翟剑锋 2015年9月
[7]《从深度学习回顾自然语言处理词嵌入方法》吴禀雅 魏苗 2016年12月 [8] 《基于深度学习的文本情感分析研究》 曹宇慧 2015年12月 [9] 《面向自然语言处理的深度学习研究》奚雪峰 周国栋 2016年10月 [10] 《自然语言处理的研究与发展》李生 2015年9月
因篇幅问题不能全部显示,请点此查看更多更全内容