本文共 1506 字,大约阅读时间需要 5 分钟。
通过组合,产生不同粒度语言单元的(向量)表示方式,然后通过在向量空间中的运算,就可以支撑多种多样的应用。例如想要识别两个句子是否互为复述(Paraphrase),就可以使用以上任意一种神经网络结构,将两个句子分别表示为两个向量,并通过在其之上再构建神经网络构成二元分类器的方式,判断两个向量之间是否互为复述[9] ;然后通过反向传播(Back Propagation)算法,就可以学习获得三个神经网络的参数。
另外,两个单元也可以是不同的粒度,如完形填空,空白处的上下文可以使用神经网络表示为向量,候选词也可以使用向量表示,然后同样使用另一个神经网络模型判断它们之间是否匹配,从而判断填入该词是否合适。
这种以向量的形式表示,然后再计算的思想可以扩展为多种语言,从而实现机器翻译等功能。对于机器翻译,我们首先将源语言表示为向量,该向量代表了源语言的语义信息;然后根据该向量,逐词的生成目标语言[10] 。这套方法又称为编码 - 解码(Encoder-Decoder)或者序列到序列(seq2seq,sequence to sequence)的框架。现实情况中,很难用一个向量表示源语言全部信息,所以在生成一个目标语言词时,如果能有其对应的源语言词作为输入,则生成的词会更准确。由于两种语言之间的词并非一一对应,所以很难判断当前的目标语言的词是由那个源语言生成的,于是人们设计出注意力(Attention)机制[11] ,即当前目标语言的词是全部源语言的词经过加权求和后的向量及前一个目标词的隐含层向量(h t -1)共同生成的,每个权重由 h t -1和每个源语言词的隐层向量(h s )共同决定,源语言的词权重越大,说明其对生成该目标语言的贡献越大,这其实也隐含说明这两个词越对齐。
以上的这种 seq2seq 思想又可以进一步应用于更多的自然语言处理任务中,如抽象式文摘(Abstractive Summarization)这一前人很难触及的任务。传统的文摘研究多集中于抽取式文摘(Extractive Summarization),即从篇章中摘取重要的句子组成文摘,而缺乏有效的手段能够将句子打破。基于 seq2seq 技术,就可以将原文表示为一个向量,然后通过该向量,逐词的生成连贯的文摘,从而不受限于必须抽取原文中的句子。
再进一步将该思想进行扩展,是否也可以将图片或者视频表示为向量,然后在生成对应的文字描述?这正是图像字幕生成(Image CaptionGeneration)这一非常有趣的研究任务所采用的基本思想,其中图像的向量可以由卷积神经网络来生成[12] 。
另外,一些传统的自然语言处理任务,如词性标注、句法语义分析等也都受益于深度学习方法。以基于转移的句法分析器为例,该方法使用一系列由初始到终止的状态(State 或 Configuration)表示句法分析的过程,一个状态经过一个转移动作(Action),如移进(Shift)或归约(Reduce),变为一个新的状态。我们的目的就是要学习一个分类器,其输入为一个状态,输出为该状态下最可能的动作。具体介绍可以参见 Google 最新发布的 SyntaxNet 文档1 。传统的方法通过抽取一系列人工定义的特征来表示状态,即分类的依据,如栈(Stack)顶的词、词性,缓存(Buffer)顶的词、词性以及各种特征组合等。显然,这种人工定义特征的方式存在特征定义不完备等问题。因此可以采用任一种神经网络结构,如LSTM循环神经网络[13] ,更全面地表示一个状态,从而省去了繁琐的特征定义过程,并能够获得更好的分类效果。
转载地址:http://utcia.baihongyu.com/