【笔记3-1】CS224N课程笔记 - 深度自然语言处理
【笔记3-2】CS224N课程笔记 - 词向量表示 word2vec
【笔记3-3】CS224N课程笔记 - 高级词向量表示
【笔记3-4】CS224N课程笔记 - 分类与神经网络
【笔记3-6】CS224N课程笔记 - RNN和语言模型
【笔记3-7】CS224N课程笔记 - 神经机器翻译seq2seq注意力机制
【笔记3-8】CS224N课程笔记 - 卷积神经网络

CS224n:深度学习的自然语言处理(2017年冬季)1080p https://www.bilibili.com/video/av28030942/

涉及到的论文:

Globally Normalized Transition-Based Neural Networks (Daniel Andor, Chris Alberti, DavidWeiss, Aliaksei Severyn, Alessandro Presta, Kuzman Ganchev, Slav Petrov and Michael Collins,2016)
https://arxiv.org/pdf/1603.06042.pdf

A Fast and Accurate Dependency Parser using Neural Networks (Danqi Chen, Christopher D. Manning,2014)
https://cs.stanford.edu/people/danqi/papers/emnlp2014.pdf

Incrementality in Deterministic Dependency Parsing (Joakim Nivre,2004)
https://www.aclweb.org/anthology/W04-0308

依存语法和依存结构

与编译器中的解析树类似,NLP中的解析树用于分析句子的句法结构。使用的结构主要有两种类型——constituency和dependency。

Constituency Grammar:使用短语结构语法将单词放入嵌套的组件中。

Dependency Parsing:句子的从属结构显示哪些词依赖于(修饰或是)哪些词。这些单词之间的二元非对称关系称为依赖关系,并被描述为从head到dependent。通常这些依赖关系形成一个树结构。经常用语法关系的名称进行分类(主语,介词宾语,同位语等)。有时会将假根节点作为head添加到树中,所以每个单词都依赖于一个节点。
【笔记3-5】CS224N课程笔记 - 依存分析

依存分析

依存分析:分析给定输入句的语法依赖结构。依存解析器的输出是依赖树,其中输入句的单词通过类型化依赖关系连接。在形式上,依存关系问题要求从输入语句(包含单词S=w0w1...wnS=w_0w_1...w_n)到依存关系树创建一个映射。

依存分析有两个子问题:

  • 学习:给定一组用依赖关系图标注的句子训练集D,导出一个解析模型M,该模型可用于解析新句子。
  • 解析:给定一个解析模型M和一个句子S,根据M推导出S的最优依赖关系图D。

基于转换的依存分析

基于转换的依存解析依赖于状态机,状态机定义可能的转换,以创建从输入语句到依赖项树的映射。学习问题是根据状态机的过渡历史,建立预测状态机下一个过渡的模型。解析问题是根据前面推导的模型,构造输入句子的最优转换序列。大多数基于转换的系统不使用正式语法。

贪婪转换依存分析

这个转换系统是一个状态机,它由状态以及这些状态之间的转换组成。该模型推导一系列从某种初始状态到几种终端状态之一的转换。

  • 状态 state:
    对于任意一个句子S=w0w1...wnS=w_0w_1...w_n,状态是以下三者的组合 c=(σ,β,A)c=(\sigma,\beta,A)
    σ\sigma是一个包含 SS 中的 wiw_i 的堆栈(stack);β\beta 是包含wiw_i的缓冲区(buffer);A是依存弧(wi,r,wj)(w_i,r,w_j)的集合,其中 wi,wjw_i,w_j来自于句子S,rr表示依存关系。
    对于任意一个句子S=w0w1...wnS=w_0w_1...w_n,初始状态 c0c_0可以表示为 ([w0]σ,[w1,...,wn]β,)([w_0]_{\sigma},[w_1,...,w_n]_{\beta},\varnothing),即只有ROOT在堆栈 σ\sigma 中,其他单词都在buffer β\beta 中,暂未采取任何行动。终止状态为 (σ,[]β,A)(\sigma,[]_{\beta},A)
  • 转换 transition:
    状态之间的转换有三种:
    Shift:删除缓冲区中的第一个单词,并将其推到堆栈顶部。(要求缓冲区非空)
    Left-arc:往集合A中添加一个依存弧 (wj,r,wi)(w_j,r,w_i),其中 wiw_i 是距离栈顶第二近的单词,而 wjw_j 是栈顶单词。将 wiw_i 从堆栈中移除(要求堆栈至少包含两个单词,且 wiw_i 不能为ROOT)
    Right-arc:往集合A中添加一个依存弧 (wi,r,wj)(w_i,r,w_j),其中 wiw_i 是距离栈顶第二近的单词,而 wjw_j 是栈顶单词。将 wjw_j 从堆栈中移除(要求堆栈至少包含两个单词)
    【笔记3-5】CS224N课程笔记 - 依存分析

神经依存分析

依存分析有许多深入的模型,本节特别关注贪婪的基于转换的神经依存分析器。与传统的基于特征的依存分析器相比,这类模型具有相当的性能和显著的效率。与以前模型的主要区别是依赖于密集而非稀疏的特性表示。

这里介绍的模型运用前面介绍过的弧转换系统,目的是从一个初始的配置 cc,预测出直到终止配置的转换序列,在这个过程中编码一棵分析树。每次训练,模型都会基于当前的配置 c=(σ,β,A)c=(\sigma,\beta,A)预测出一轮转化 T{shift,leftarc,rightarc}T\in \{shift, left-arc,right-arc\}

  • 特征选择
    根据模型所需的复杂性,可以灵活地定义神经网络的输入。某句话的特征一般包括以下部分:
    SwordS_{word}:在堆栈 σ\sigma 和缓冲区 β\beta 顶部的S(及其依赖项)中的一些单词的向量表示。
    StagS_{tag}:词性(POS)标签是由一个小的离散集合构成的,它包括 P={NN,NNP,NNS,DT,JJ}P = \{NN, NNP, NNS, DT, J J,…\}
    SlabelS_{label}:S中的一些单词的arc-label,由一个小的离散集组成,描述依赖关系 L={amod,tmod,nsubj,csubj,dobj}L = \{amod, tmod, nsubj, csubj, dobj,…\}
    对于单词三个特征对应的独热码,会训练出三个embedding矩阵,将稀疏的独热向量转换成稠密向量。EwRdNw,EtRdNt,ElRdNlE^w\in\mathbb{R}^{d*N_w},E^t\in\mathbb{R}^{d*N_t},E^l\in\mathbb{R}^{d*N_l}
  • 特征选择示例
    SwordS_{word}:堆栈和缓冲区上的前3个单词 s1,s2,s3,b1,b2,b3s_1,s_2,s_3,b_1,b_2,b_3。堆栈上顶部两个单词的第一个和第二个最左边/最右边的子单词:lc1(si),rc1(si),lc2(si),rc2(si),i=1,2lc_1(s_i),rc_1(s_i),lc_2(s_i),rc_2(s_i),i = 1,2。堆栈上最前两个单词的最左边/最右边的子元素:lc1(lc1(si)),rc1(rc1(si)),i=1,2lc_1(lc_1(s_i)),rc_1(rc_1(s_i)),i = 1,2。总共包含18个元素。(nw=6+24+22)(n_w=6+2*4+2*2)
    StagS_{tag}SwordS_{word}对应的POS标签(n_{t}=18)
    SlabelS_{label}SwordS_word中除了stack/buffer中的6个单词之外其他词的arc-label
  • 前向传播神经网络
    包含输入层 [xw,xt,xl][x_w,x_t,x_l] 隐藏层和输出层(交叉熵损失softmax层)
    【笔记3-5】CS224N课程笔记 - 依存分析

相关文章: