- 作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI
- 教程地址:http://www.showmeai.tech/tutorials/36
- 本文地址:http://www.showmeai.tech/article-detail/238
- 声明:版权所有,转载请联系平台与作者并注明出处
- 收藏ShowMeAI查看更多精彩内容
ShowMeAI为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了GIF动图!
本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。
引言
授课计划
1.句法结构:成分与依赖
1.1 语言结构的两种观点:无上下文语法
- 句子是使用逐步嵌套的单元构建的
- 短语结构将单词组织成嵌套的成分
- 起步单元:单词被赋予一个类别
- part of speech = pos 词性
- 单词组合成不同类别的短语
- 短语可以递归地组合成更大的短语
- Det 指的是
Determiner
,在语言学中的含义为 限定词 - NP 指的是
Noun Phrase
,在语言学中的含义为 名词短语 - VP **指的是
Verb Phrase
,在语言学中的含义为 动词短语** - P 指的是
Preposition
,在语言学中的含义为 介词 - PP 指的是
Prepositional Phrase
,在语言学中的含义为 介词短语
1.2 语言结构的两种观点:无上下文语法
1.3 语言结构的两种观点:依赖结构
- 不是使用各种类型的短语,而是直接通过单词与其他的单词关系表示句子的结构,显示哪些单词依赖于(修饰或是其参数)哪些其他单词
补充讲解
look
是整个句子的根源,look
依赖于crate
(或者说crate
是look
的依赖)in
,the
,large
都是crate
的依赖in the kitchen
是crate
的修饰in
,the
都是kitchen
的依赖by the door
是crate
的依赖
1.4 为什么我们需要句子结构?
- 为了能够正确地解释语言,我们需要理解句子结构
- 人类通过将单词组合成更大的单元来传达复杂的意思,从而交流复杂的思想
- 我们需要知道什么与什么相关联
- 除非我们知道哪些词是其他词的参数或修饰词,否则我们无法弄清楚句子是什么意思
1.5 介词短语依附歧义
San Jose cops kill man with knife
- 警察用刀杀了那个男子
cops
是kill
的subject
(subject 指 主语)man
是kill
的object
(object 指 宾语)knife
是kill
的modifier
(modifier 指 修饰符)
- 警察杀了那个有刀的男子
knife
是man
的modifier
(名词修饰符,简称为nmod
)
1.6 介词短语依附歧义
补充讲解
from space
这一介词短语修饰的是前面的动词count
还是名词whales
?- 这就是人类语言和编程语言中不同的地方
1.7 介词短语附加歧义成倍增加
- 关键的解析决策是我们如何“依存”各种成分
- 介词短语、状语或分词短语、不定式、协调等。
补充讲解:
上述句子中有四个介词短语
board
是approved
的主语,acquisition
是approved
的谓语by Royal Trustco Ltd.
是修饰acquisition
的,即董事会批准了这家公司的收购of Toronto
可以修饰approved
,acquisition
,Royal Trustco Ltd.
之一,经过分析可以得知是修饰Royal Trustco Ltd.
,即表示这家公司的位置for $27 a share
修饰acquisition
at its monthly meeting
修饰approved
,即表示批准的时间地点
补充讲解:
面对这样复杂的句子结构,我们需要考虑 指数级 的可能结构,这个序列被称为 卡特兰数/Catalan numbers
Catalan numbers
1.8 协调范围模糊
补充讲解
Shuttle veteran and longtime NASA executive Fred Gregory appointed to board
- 一个人:
[[Shuttle veteran and longtime NASA executive] Fred Gregory] appointed to board
- 两个人:
[Shuttle veteran] and [longtime NASA executive Fred Gregory] appointed to board
1.9 协调范围模糊
- 例句:Doctor: No heart,cognitive issues
1.10 形容词修饰语歧义
补充讲解
Students get first hand job experience
first hand
表示 第一手的,直接的,即学生获得了直接的工作经验first
是hand
的形容词修饰语(amod)
first
修饰experience
,hand
修饰job
1.11 动词短语(VP)依存歧义
补充讲解
Mutilated body washes up on Rio beach to be used for Olympic beach volleyball
to be used for Olympic beach volleyball
是 动词短语 (VP)- 修饰的是
body
还是beach
2.依赖语法与树库
2.1 #论文解读# 依赖路径识别语义关系
2.2 依存文法和依存结构
- 关联语法假设句法结构包括词汇项之间的关系,通常是二元不对称关系(“箭头”),称为依赖关系
Dependency Structure有两种表现形式
1.一种是直接在句子上标出依存关系箭头及语法关系
2.另一种是将其做成树状机构(Dependency Tree Graph)
- 箭头通常标记(type)为语法关系的名称(主题、介词对象、apposition等)
- 箭头连接头部(head)(调速器,上级,regent)和一个依赖(修饰词,下级,下属)
- A to 的事情
- 通常,依赖关系形成一棵树(单头,无环,连接图)
2.3 依存语法/解析历史
2.4 依存语法/解析历史
- 依赖结构的概念可以追溯到很久以前
- Paṇini的语法(公元前5世纪)
- 一千年,阿拉伯语的语法的基本方法
- 选区/上下文无关文法是一个新奇的发明
- 20世纪发明(R.S.Wells,1947; then Chomsky)
- 现代依赖工作经常源于 L. Tesnière(1959)
- 是20世纪“东方”的主导方法(俄罗斯,中国,…)
- 有利于更自由的语序语言
- 是20世纪“东方”的主导方法(俄罗斯,中国,…)
- NLP中最早类型的解析器在美国
- David Hays 是美国计算语言学的创始人之一,他很早就(第一个?)构建了依赖解析器(Hays 1962)
2.5 依存语法和依赖结构
- 人们对箭头指向的方式不一致:有些人把箭头朝一个方向画;有人是反过来的
- Tesnière 从头开始指向依赖,本课使用此种方式
- 通常添加一个伪根指向整个句子的头部,这样每个单词都精确地依赖于另一个节点
2.6 带注释数据的兴起:通用依存句法树库
补充讲解
Universal Dependencies:我们想要拥有一个统一的、并行的依赖描述,可用于任何人类语言
- 从前手工编写语法然后训练得到可以解析句子的解析器
- 用一条规则捕捉很多东西真的很有效率,但是事实证明这在实践中不是一个好主意
- 语法规则符号越来越复杂,并且没有共享和重用人类所做的工作
- 句子结构上的 treebanks 支持结构更有效
2.7 带注释数据的兴起
从一开始,构建 treebank 似乎比构建语法慢得多,也没有那么有用
但是 treebank 给我们提供了许多东西
- 可重用性
- 许多解析器、词性标记器等可以构建在它之上
- 语言学的宝贵资源
- 广泛的覆盖面,而不仅仅是一些直觉
- 频率和分布信息
- 一种评估系统的方法
2.8 依赖条件首选项
依赖项解析的信息来源是什么?
- 1.Bilexical affinities (两个单词间的密切关系)
- discussion → issues 是看上去有道理的
- 2.Dependency distance 依赖距离
- 主要是与相邻词
- 3.Intervening material 介于中间的物质
- 依赖很少跨越介于中间的动词或标点符号
- 4.Valency of heads
- How many dependents on which side are usual for a head?
2.9 依赖关系分析
- 通过为每个单词选择它所依赖的其他单词(包括根)来解析一个句子
- 通常有一些限制
- 只有一个单词是依赖于根的
- 不存在循环 A→B,B→A
- 这使得依赖项成为树
- 最后一个问题是箭头是否可以交叉(非投影的 non-projective)
- 没有交叉的就是non-projectice
2.10 射影性
- 定义:当单词按线性顺序排列时,没有交叉的依赖弧,所有的弧都在单词的上方
- 与CFG树并行的依赖关系必须是投影的
- 通过将每个类别的一个子类别作为头来形成依赖关系
- 但是依赖理论通常允许非投射结构来解释移位的成分
- 如果没有这些非投射依赖关系,就不可能很容易获得某些结构的语义
2.11 依存分析方法
1.Dynamic programming
- Eisner(1996)提出了一种复杂度为 O(n3) 的聪明算法,它生成头部位于末尾而不是中间的解析项
2.Graph algorithms
- 为一个句子创建一个最小生成树
- McDonald et al.’s (2005) MSTParser 使用ML分类器独立地对依赖项进行评分(他使用MIRA进行在线学习,但它也可以是其他东西)
3.Constraint Satisfaction
- 去掉不满足硬约束的边 Karlsson(1990), etc.
4."Transition-based parsing" or "deterministic dependency parsing"
- 良好的机器学习分类器 MaltParser(Nivreet al. 2008) 指导下的依存贪婪选择。已证明非常有效。
3.基于转换的依存分析模型
3.1 #论文解读# Greedy transition-based parsing Nivre 2003
- 贪婪判别依赖解析器一种简单形式
- 解析器执行一系列自底向上的操作
- 大致类似于shift-reduce解析器中的“shift”或“reduce”,但“reduce”操作专门用于创建头在左或右的依赖项
- 解析器如下:
- 栈 sigma 以 ROOT 符号开始,由若干 w_i 组成
- 缓存 beta 以输入序列开始,由若干 w_i 组成
- 一个依存弧的集合 A ,一开始为空。每条边的形式是 (w_i,r,w_j),其中 r 描述了节点的依存关系
- 一组操作
3.2 基本的基于转换的依存关系解析器
- 最终目标是 sigma = [ROOT],beta = phi,A 包含了所有的依存弧
补充讲解
state之间的transition有三类:
- 1.SHIFT:将buffer中的第一个词移出并放到stack上。
- 2.LEFT-ARC:将 (w_j,r,w_i) 加入边的集合A,其中 w_i 是stack上的次顶层的词, w_j 是stack上的最顶层的词。
- 3.RIGHT-ARC:将 (w_i,r,w_j) 加入边的集合 A,其中 w_i 是stack上的次顶层的词, w_j 是stack上的最顶层的词。
我们不断的进行上述三类操作,直到从初始态达到最终态。
- 在每个状态下如何选择哪种操作呢?
- 当我们考虑到 LEFT-ARC 与 RIGHT-ARC 各有 left|Rright|(left|Rright|为 r 的类的个数)种类,我们可以将其看做是class数为 2left|Rright| 1 的分类问题,可以用SVM等传统机器学习方法解决。
3.3 基于Arc标准转换的解析器
- 还有其他的 transition 方案
- Analysis of
I ate fish
3.4 #论文解读# MaltParser Nivre and Hall 2005
- 我们需要解释如何选择下一步行动
- Answer:机器学习
- 每个动作都由一个有区别分类器(例如softmax classifier)对每个合法的移动进行预测
- 最多三种无类型的选择,当带有类型时,最多 left|Rright|×2 1 种
- Features:栈顶单词,POS;buffer中的第一个单词,POS;等等
- 在最简单的形式中是没有搜索的
- 但是,如果你愿意,你可以有效地执行一个 Beam search 束搜索(虽然速度较慢,但效果更好):你可以在每个时间步骤中保留 k 个好的解析前缀
- 该模型的精度略低于依赖解析的最高水平,但它提供了非常快的线性时间解析,性能非常好
3.5 传统特征表示
- 传统的特征表示使用二元的稀疏向量10^6 sim 10^7
- 特征模板:通常由配置中的1 sim 3个元素组成
- Indicator features
3.6 依赖分析的评估:(标记)依赖准确性
- UAS (unlabeled attachment score) 指无标记依存正确率
- LAS (labeled attachment score) 指有标记依存正确率
3.7 处理非投影性
- 我们提出的弧标准算法只构建投影依赖树
头部可能的方向:
- 1.在非投影弧上宣布失败
- 2.只具有投影表示时使用依赖形式CFG只允许投影结构
- 3.使用投影依赖项解析算法的后处理器来识别和解析非投影链接
- 4.添加额外的转换,至少可以对大多数非投影结构建模(添加一个额外的交换转换,冒泡排序)
- 5.转移到不使用或不需要对投射性进行任何约束的解析机制(例如,基于图的MSTParser)
3.8 为什么要训练神经依赖解析器?重新审视指标特征
- Indicator Features的问题
- 问题1:稀疏
- 问题2:不完整
- 问题3:计算复杂
- 超过95%的解析时间都用于特征计算
4.神经网络依存分析器
4.1 #论文解读# A neural dependency parser Chen and Manning 2014
- 斯坦福依存关系的英语解析
- Unlabeled attachment score (UAS) = head
- Labeled attachment score (LAS) = head and label
- 效果好,速度快
4.2 分布式表示
- 我们将每个单词表示为一个d维稠密向量(如词向量)
- 相似的单词应该有相近的向量
- 同时,part-of-speech tags 词性标签(POS)和 dependency labels 依赖标签也表示为d维向量
- 较小的离散集也表现出许多语义上的相似性。
- NNS(复数名词)应该接近NN(单数名词)
- num(数值修饰语)应该接近amod(形容词修饰语)
4.3 从配置中提取令牌和向量表示
补充讲解
- 对于Neural Dependency Parser,其输入特征通常包含三种
- stack和buffer中的单词及其dependent word
- 单词的part-of-speech tag
- 描述语法关系的arc label
4.4 模型体系结构
4.5 句子结构的依存分析
- 神经网络可以准确地确定句子的结构,支持解释
- Chen and Manning(2014)是第一个简单,成功的神经依赖解析器
- 密集的表示使得它在精度和速度上都优于其他贪婪的解析器
4.6 基于转换的神经依存分析的新进展
- 这项工作由其他人进一步开发和改进,特别是在谷歌
- 更大、更深的网络中,具有更好调优的超参数
- Beam Search 更多的探索动作序列的可能性,而不是只考虑当前的最优
- 全局、条件随机场(CRF)的推理出决策序列
- 这就引出了SyntaxNet和Parsey McParseFace模型
4.7 基于图形的依存关系分析器
4.8 #论文解读# A Neural graph-based dependency parser Dozat and Manning 2017; Dozat, Qi, and Manning 2017
- 为每条边的每一个可能的依赖关系计算一个分数
- 为每条边的每一个可能的依赖关系计算一个分数
- 然后将每个单词的边缘添加到其得分最高的候选头部
- 并对每个单词重复相同的操作
- 在神经模型中为基于图的依赖分析注入活力
- 为神经依赖分析设计一个双仿射评分模型
- 也使用神经序列模型,我们将在下周讨论
- 非常棒的结果
- 但是比简单的基于神经传递的解析器要慢
- 在一个长度为 n 的句子中可能有 n^2 个依赖项
5.视频教程
可以点击 B站 查看视频的【双语字幕】版本
6.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福CS224n深度学习与自然语言处理》课程学习指南
- 《斯坦福CS224n深度学习与自然语言处理》课程大作业解析
- 【双语字幕视频】斯坦福CS224n | 深度学习与自然语言处理(2019·全20讲)
- Stanford官网 | CS224n: Natural Language Processing with Deep Learning