关于自然语言处理:NLP教程4-句法分析与依存解析

80次阅读

共计 5793 个字符,预计需要花费 15 分钟才能阅读完成。

  • 作者:韩信子 @ShowMeAI
  • 教程地址:http://www.showmeai.tech/tutorials/36
  • 本文地址:http://www.showmeai.tech/article-detail/237
  • 申明:版权所有,转载请分割平台与作者并注明出处
  • 珍藏 ShowMeAI 查看更多精彩内容


本系列为 斯坦福 CS224n《自然语言解决与深度学习 (Natural Language Processing with Deep Learning)》的全套学习笔记,对应的课程视频能够在 这里 查看。


ShowMeAI 为 CS224n 课程的全副课件,做了 中文翻译和正文 ,并制作成了 GIF 动图!点击 第 5 讲 - 句法分析与依存解析 查看的课件正文与带学解读。更多材料获取形式见文末。


概述

CS224n 是顶级院校斯坦福出品的深度学习与自然语言解决方向专业课程,核心内容笼罩 RNN、LSTM、CNN、transformer、bert、问答、摘要、文本生成、语言模型、浏览了解等前沿内容。

笔记外围词

  • Dependency Grammar
  • Dependency Structure
  • Neural Dependency Parsing
  • 依存解析
  • 依存句法
  • 语法依赖

1. 依存语法与依存构造

与编译器中的解析树相似,NLP 中的解析树是用于剖析句子的句法结构。应用的构造次要有两种类型——短语构造 依存构造

短语构造文法应用短语构造语法将词组织成嵌套成分。前面的内容会开展对它做更具体的阐明。咱们当初关注依存语法。

句子的依存构造展现了单词依赖于另外一个单词 (润饰或者是参数)。词与词之间的二元非对称关系称为依存关系,形容为从head (被润饰的主题) 用箭头指向dependent (修饰语)。个别这些依存关系造成树结构,他们通常用语法关系的名称 (主体,介词宾语,同位语等)。

Bills on ports and immigration were submitted by Senator Brownback,Republican of Kansas. 依存树的例子如下图所示:

有时,在依存树的头部减少一个假的 ROOT 节点,这样每个单词都依存于惟一一个节点。

1.1 依存剖析

依存语法是给定一个输出句子 \(S\),剖析句子的句法依存构造的工作。依存句法的输入是一棵依存语法树,其中输出句子的单词是通过依存关系的形式连贯。

正式一点定义,依存语法问题就是创立一个输出句子的单词 \(S=w_{0}w_{1} \cdots w_{n}\) (其中 \(w_{0}\) 是 ROOT) 到它的依存语法树的映射图 \(G\)。最近几年提出了很多以依存句法为根底的的变体,包含基于神经网络的办法,咱们将会在前面介绍。

确切地说,在依存语法中有两个子问题:

  • 学习:给定用依赖语法图标注的句子的训练集 \(D\),创立一个能够用于解析新句子的解析模型 \(M\)
  • 解析:给定解析模型 \(M\) 和句子 \(S\),依据 \(M\) 失去 \(S\) 的最优依存语法图

1.2 基于转移的依存剖析

Transition-based 依存语法依赖于定义可能转换的状态机,以创立从输出句到依存句法树的映射。

  • 学习」问题是创立一个能够依据转移历史来预测状态机中的下一个转换的模型。
  • 解析 」问题是应用在学习问题中失去的模型对输出句子构建一个 最优的转移序列

大多数 Transition-based 零碎不会应用正式的语法。

1.3 Greedy Deterministic Transition-Based Parsing

这个零碎是由 Nivre 在 2003 年提出,与过后的罕用办法截然不同。

这个转换零碎是一个状态机,它由状态和这些状态之间的转换组成。该模型导出了从初始状态到几种终端状态之一的一系列转换。

1) 状态

对任意句子 \(S=w_{0}w_{1} \cdots w_{n}\),一个状态能够形容为一个三元组 \(c=(\sigma, \beta,A)\):

  • ① 来自 \(S\) 的单词 \(w_{i}\) 的堆 \(\sigma\)
  • ② 来自 \(S\) 的单词 \(w_{i}\) 的缓冲区 \(\beta\)
  • ③ 一组模式为 \((w_{i},r,w_{j})\) 的依存弧,其中 \(w_{i},w_{j}\) 是来自 \(S\),和 \(r\) 形容依存关系。

因而,对于任意句子 \(S=w_{0}w_{1} \cdots w_{n}\):

  • ① 一个模式为 \(([w_{0}]_{\sigma},[w_{1}, \cdots ,w_{n}]_{\beta},\varnothing)\) 的初始状态 \(c_{0}\) (当初只有 ROOT 在堆 \(\sigma\) 中,没有被抉择的单词都在缓冲区 \(\beta\) 中。
  • ② 一个模式为 \((\sigma,[]_{\beta},A)\) 的起点状态。

2) 转移

在状态之间有三种不同类型的转移:

  • ① \(SHIFT\):移除在缓冲区的第一个单词,而后将其放在堆的顶部 (前提条件:缓冲区不能为空)。
  • ② \(Left\text{-}Arc_{r}\):向依存弧汇合 \(A\) 中退出一个依存弧 \((w_{j},r,w_{i})\),其中 \(w_{i}\) 是堆顶的第二个单词,\(w_{j}\) 是堆顶部的单词。从栈中移除 \(w_{i}\) (前提条件:堆必须蕴含两个单词以及 \(w_{i}\) 不是 ROOT )
  • ③ \(Right\text{-}Arc_{r}\):向依存弧汇合 \(A\) 中退出一个依存弧 \((w_{i},r,w_{j})\),其中 \(w_{i}\) 是堆顶的第二个单词,\(w_{j}\) 是堆顶部的单词。从栈中移除 \(w_{j}\) (前提条件:堆必须蕴含两个单词)

下图给出了这三个转换的更正式的定义:

1.4 神经网络依存解析器

尽管依赖项解析有很多深层模型,这部分特地侧重于贪婪,基于转移的神经网络依存语法解析器。与传统的基于特色的判断依存语法解析器相比,神经网络依存语法解析器性能和成果更好。与以前模型的次要区别在于这类模型依赖浓密而不是稠密的特色示意。

咱们将要形容的模型采纳上一部分中讲述的规范依存弧转换零碎。最终,模型的指标是预测从一些初始状态 \(c\) 到一个起点状态的转换序列,对模型中的依存语法树进行编码的。

因为模型是贪婪的,它基于从以后的状态 \(c=(\sigma, \beta, A)\) 提取特色,而后尝试一次正确地预测一次转移 \(T\in {SHIFT, Left\text{-}Arc_{r},Right\text{-}Arc_{r}}\)。回忆一下,\(\sigma\) 是栈,\(\beta\) 是缓存,\(A\) 是对于一个给定的句子的依赖弧的汇合。

1) 特征选择

依据该模型所需的复杂性,定义神经网络的输出是灵便的。对给定句子 \(S\) 的特色蕴含一些子集:

  • ① \(S_{word}\):在堆 \(\sigma\) 的顶部和缓冲区 \(\beta\) 的 \(S\) 中一些单词的词向量 (和它们的依存)。
  • ② \(S_{tag}\):在 \(S\) 中一些单词的词性标注 (POS)。词性标注是由一个离散汇合组成:\(\mathcal{P}={NN,NNP,NNS,DT,JJ, \cdots}\)。
  • ③ \(S_{label}\):在 \(S\) 中一些单词的依存标签。依存标签是由一个依存关系的离散汇合组成:\(\mathcal{L}={amod,tmod,nsubj,csubj,dobj, \cdots}\)。

对每种特色类型,咱们都有一个对应的将特色的 one-hot 编码映射到一个 \(d\) 维的浓密的向量示意的嵌入矩阵。

  • \(S_{word}\) 的齐全嵌入矩阵是 \(E^{w}\in \mathbb{R}^{d\times N_{w}}\),其中 \(N_{w}\) 是字典 / 词汇表的大小。
  • POS 和依存标签的嵌入矩阵别离为 \(E^{t}\in \mathbb{R}^{d\times N_{t}}\) 和 \(E^{l}\in \mathbb{R}^{d\times N_{l}}\),其中 \(N_{t}\) 和 \(N_{l}\) 别离为不同词性标注和依存标签的个数。

最初,定义从每组特色中选出的元素的数量别离为 \(n_{word}\),\(n_{tag}\),\(n_{label}\)。

2) 特征选择的例子

作为一个例子,考虑一下对 \(S_{word}\),\(S_{tag}\) 和 \(S_{label}\) 的抉择:

  • ① \(S_{word}\):在堆和缓冲区的前三个单词:\(s_{1},s_{2},s_{3},b_{1},b_{2},b_{3}\)。栈顶部两个单词的第一个和第二个的 leftmost / rightmost 的子单词:\(lc_{1}(s_{i}),rc_{1}(s_{i}),lc_{2}(s_{i}),rc_{2}(s_{i}),i=1,2\)。栈顶部两个单词的第一个和第二个的 leftmost of leftmost / rightmost of rightmost 的子单词:\(lc_{1}(lc_{1}(s_{i})),rc_{1}(rc_{1}(s_{i})),i=1,2\)。\(S_{word}\) 总共含有 \(n_{word}=18\) 个元素。
  • ② \(S_{tag}\):相应的词性标注,则 \(S_{tag}\) 含有 \(n_{tag}=18\) 个元素。
  • ③ \(S_{label}\):单词的对应的依存标签,不包含堆 / 缓冲区上的 \(6\) 个单词,因而 \(S_{label}\) 含有 \(n_{label}=12\) 个元素。

留神咱们应用一个非凡的 \(NULL\) 示意不存在的元素:当堆和缓冲区为空或者还没有指定依存关系时。

对一个给定句子例子,咱们依照上述的办法抉择单词,词性标注和依存标签,从嵌入矩阵 \(E^{w},E^{t},E^{l}\) 中提取它们对应的浓密的特色的示意,而后将这些向量连接起来作为输出 \([x^{w},x^{t},x^{l}]\)。

在训练阶段,咱们反向流传到浓密的向量示意,以及前面各层的参数。

3) 前馈神经网络模型

(对于前馈神经网络的内容也能够参考 ShowMeAI 的对吴恩达老师课程的总结文章深度学习教程 | 神经网络根底 ,深度学习教程 | 浅层神经网络 和深度学习教程 | 深层神经网络

这个神经网络蕴含一个输出层 \([x^{w},x^{t},x^{l}]\),一个暗藏层,以及具备穿插熵损失函数的最终 softmax 层。

咱们能够在暗藏层中定义单个权值矩阵,与 \([x^{w},x^{t},x^{l}]\) 进行运算,咱们能够应用三个权值矩阵 \([W^{w}_{1},W^{t}_{1},W^{l}_{1}]\),每个矩阵对应着相应的输出类型,如下图所示。

而后咱们利用一个非线性函数并应用一个额定的仿射层 \([W_{2}]\),使得对于可能的转移次数 (输入维度),有雷同数量的 softmax 概率。

  • Softmax layer:\(p=\operatorname{softmax}\left(W_{2} h\right)\)
  • Hidden layer:\(h=\left(W_{1}^{w} x^{w}+W_{1}^{t} x^{t}+W_{1}^{l} x^{l}+b_{1}\right)^{3}\)
  • Input layer:\(\left[x^{w}, x^{t}, x^{l}\right]\)

留神在上图中,应用的非线性函数是 \(f(x)=x^{3}\)。

无关 greedy transition-based 神经网络依存语法解析器的更残缺的解释,请参考论文:[A Fast and Accurate Dependency Parser using Neural Networks](https://cs.stanford.edu/~danq…)。

2. 参考资料

  • 本教程的 在线浏览版本
  • 《斯坦福 CS224n 深度学习与自然语言解决》课程学习指南
  • 《斯坦福 CS224n 深度学习与自然语言解决》课程大作业解析
  • 双语字幕视频】斯坦福 CS224n | 深度学习与自然语言解决(2019·全 20 讲)

ShowMeAI 系列教程举荐

  • 大厂技术实现 | 举荐与广告计算解决方案
  • 大厂技术实现 | 计算机视觉解决方案
  • 大厂技术实现 | 自然语言解决行业解决方案
  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程 | 吴恩达专项课程 · 全套笔记解读
  • 自然语言解决教程 | 斯坦福 CS224n 课程 · 课程带学与全套笔记解读

NLP 系列教程文章

  • NLP 教程(1)- 词向量、SVD 合成与 Word2vec
  • NLP 教程(2)- GloVe 及词向量的训练与评估
  • NLP 教程(3)- 神经网络与反向流传
  • NLP 教程(4)- 句法分析与依存解析
  • NLP 教程(5)- 语言模型、RNN、GRU 与 LSTM
  • NLP 教程(6)- 神经机器翻译、seq2seq 与注意力机制
  • NLP 教程(7)- 问答零碎
  • NLP 教程(8)- NLP 中的卷积神经网络
  • NLP 教程(9)- 句法分析与树形递归神经网络

斯坦福 CS224n 课程带学详解

  • 斯坦福 NLP 课程 | 第 1 讲 – NLP 介绍与词向量初步
  • 斯坦福 NLP 课程 | 第 2 讲 – 词向量进阶
  • 斯坦福 NLP 课程 | 第 3 讲 – 神经网络常识回顾
  • 斯坦福 NLP 课程 | 第 4 讲 – 神经网络反向流传与计算图
  • 斯坦福 NLP 课程 | 第 5 讲 – 句法分析与依存解析
  • 斯坦福 NLP 课程 | 第 6 讲 – 循环神经网络与语言模型
  • 斯坦福 NLP 课程 | 第 7 讲 – 梯度隐没问题与 RNN 变种
  • 斯坦福 NLP 课程 | 第 8 讲 – 机器翻译、seq2seq 与注意力机制
  • 斯坦福 NLP 课程 | 第 9 讲 – cs224n 课程大我的项目实用技巧与教训
  • 斯坦福 NLP 课程 | 第 10 讲 – NLP 中的问答零碎
  • 斯坦福 NLP 课程 | 第 11 讲 – NLP 中的卷积神经网络
  • 斯坦福 NLP 课程 | 第 12 讲 – 子词模型
  • 斯坦福 NLP 课程 | 第 13 讲 – 基于上下文的表征与 NLP 预训练模型
  • 斯坦福 NLP 课程 | 第 14 讲 – Transformers 自注意力与生成模型
  • 斯坦福 NLP 课程 | 第 15 讲 – NLP 文本生成工作
  • 斯坦福 NLP 课程 | 第 16 讲 – 指代消解问题与神经网络办法
  • 斯坦福 NLP 课程 | 第 17 讲 – 多任务学习(以问答零碎为例)
  • 斯坦福 NLP 课程 | 第 18 讲 – 句法分析与树形递归神经网络
  • 斯坦福 NLP 课程 | 第 19 讲 – AI 平安偏见与偏心
  • 斯坦福 NLP 课程 | 第 20 讲 – NLP 与深度学习的将来

正文完
 0