【笔记】概述-基于神经网络的自然语言处理

Part0-概述-基于神经网络的自然语言处理

“基于神经网络的自然语言处理”一书由Yoav Goldberg于2017年出版,作者整合了近年来用于自然语言处理的神经网络模型,从而构建了一个比价系统的描述。书的前半部分(Part I和Part II)涵盖了监督机器学习和前馈神经网络,在语言数据上使用机器学习的工作基础以及基于向量(vector-based)而不是词的符号表示(symbolic representations for words)。同时还覆盖了计算图抽象(computation-graph abstraction),可以允许简单地定义和训练任意的神经网络。

这本书的后半部分(Part III和Part IV)介绍了更具体的神经网络架构,这些架构和技术时当前在机器翻译、句法分析等state-of-the-art 算法的驱动力。

自然语言处理(Natural Language Processing)作为计算机科学和语言学的交叉学科(interdisciplinary),也被称作为计算语言学(Computational Linguistics)。

统计自然语言处理(Statistical Natural Language Processing)

过去的研究通常将统计机器学习技术应用于自然语言处理,因此有了统计自然语言处理。一个统计自然语言处理系统通常由两部分组成:训练数据(样本)和统计模型(算法)。

但是传统的机器学习方法在数据获取和模型构建方面存在一些局限性,主要表现在:

  • 需要大规模的标记数据

    (大规模、高质量的人工标记数据通常难以获得) —> 容易造成严重的数据稀疏问题

  • 需要人工设计模型需要的特征或特征的组合

​ (特征的好坏通常取决于开发人员对所研究的问题是否有深刻的理解和丰富的经验)—>好的特征难以获得

基于深度学习的自然语言处理

深度学习一般是指建立在多层非线性变化的神经网络结构上,对数据的表示进行抽象和学习的一系列机器学习算法。深度学习为自然语言处理的研究带来了两方面的变化:

  • 使用统一的分布式向量表示不同粒度的语言单元,如词、短语、句子、文档篇章等
  • 使用循环、卷积、递归等神经网络模型对不同的语言单元向量进行组合
    • 不同粒度的语言单元
    • 不同种类的语言 —> 都可以通过组合方式表示在相同的语义向量空间中
    • 不同模态的数据

神经网络的端到端训练(End to End Training)大大降低了门槛

只需要“输入-输出映射”,网络可以自主学习如何将数据和期望的标签建立联系,研究人员只需设计网络结构和训练方式。

将神经网络应用于语言的一个主要组件是使用嵌入层(embedding layer),即将离散的符号应设为相对低维的连续向量。(discrete symbols -> continual vectors)

几种主要的神经网络类型

有两种主要的神经网络结构

  • 前馈网络(feed-forward network)
  • 循环/递归网络(recurrent / recursive network)

它们可以以各种方式组合。

前馈网络(feed-forward network)

前馈网络,特别是多层感知计(Multi-Layer Perceptron)。

  • 输入:允许使用固定大小的输入,或使用可变长度输入,我们可以忽略元素的顺序。当我们为网络提供一系列输入组件时,它会学习以一种有意义的方式将其组合起来。
  • 效果:之前线性模型能应用的地方,多层感知机都能使用。网络的非线性性以及易于整合预训练词嵌入的能力,通常可以达到很高的分类准确率。

卷积前馈网络(Convolutional feed-forward network)

卷积前馈网络是一种特别的架构,专门用于提取数据中的局部模式。它们被提供任意大小的输入,并且有能力提取出对词序敏感的有意义的局部模式。非常适合在长句或文件中识别长达固定长度的指示性短语或习语。

循环神经网络(Recurrent neural network)

循环神经网络是适合处理序列数据的专用模型。网络接收输入序列作为输入,并产生固定长度的向量用于概括(summaize)该序列。循环网络很少被当作独立组件应用,其能力在于可以被当作可训练的组件作为其他神经网络的输入,然后一起被串联地训练。而递归网络处理的数据对象扩展到树。

递归神经网络(Recursive neural network)

在自然语言中,我们经常与任意长度的结构化数据打交道,例如序列和树。我们想要有能力捕获这种结构中的规则,或者对其结构之间的相似性建模。循环和递归架构对序列和树结构很有效,能够保留很多结构话信息。循环网络(1990)被设计用于对序列进行建模,而递归网络(1996)是对循环网络的泛化,能够处理树结构。

一些术语(Terminology)和数学符号说明

术语(Terminology)

  • “特征(feature)”一词被用于表示一个具体的、语言学的输入,如一个词、一个后缀或一个词性标签;
  • 术语"输入向量(input vector)"用于表示被“喂”给神经网络分类器的真正输入;
  • 类似地,术语"输入向量条目(input vector entry)"表示输入的具体值。

数学符号(Mathematical Notation)

  • 粗体大写字母表示矩阵 — (X,Y,Z)​

  • 粗体小写字母表示向量 — (b)

  • 当有一系列相关的矩阵和向量时(如每一个矩阵代表网络中不同的层),使用上标(superscript indices) — (W1,W2)(W^{1},W^{2})

  • 我们使用方括号[] 作为向量和矩阵的索引运算符:

    • b[i]b_{[i]}是向量bb的第ii个元素
    • W[i,j]W_{[i,j]}是矩阵的第ii行第jj
  • 当没有歧义时,我们有时使用更标准的数学符号表示向量和矩阵

    • bib_{i} 表示向量bb的第ii个元素
    • wi,jw_{i,j}表示矩阵WW的元素
  • 我们使用\cdot表示点乘运算 — wv=iwivi=iw[i]v[i]w\cdot v = \sum_{i}w_{i} v_{i}= \sum_{i}w_{[i]} v_{[i]}

  • 使用x1:nx_{1:n}表示向量x1,,xnx_{1},…,x_{n}的序列

    x1:nx_{1:n}是向量x1,,xnx_{1},…,x_{n}的序列时,xn:1x_{n:1}为序列的逆序

    x1:n[i]=xi,xn:1[i]=xni+1x_{1:n}[i]=x_{i},x_{n:1}[i]=x_{n-i+1}

    • 我们使用[v1v2][v_{1};v_{2}]表示向量串联
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章