自然语言处理(NLP)深度学习项目实践集

CS224N学习笔记(六)—— 句法分析

2018-11-14  本文已影响2人  DataArk

写在前面的话:CS224N的第四课和第五课分别是word窗口分类、神经网络和反向传播的知识,但是第四课前半部分内容其实蛮乱的,我个人准备后面在这部分的更新换成对传统的一些机器算法在NLP上的应用上的学习。后面的神经网络和反向早就学过了,所以也就跳过了,后面总结神经网络的时候一起总结。

一、语言学的两种观点

如何描述语法,有两种主流观点,其中一种是短语结构文法,也就是上下文无关文法,英文术语是:Constituency = phrase structure grammar = context-free grammars (CFGs):

另一种是依存结构,用单词之间的依存关系来表达语法。如果一个单词修饰另一个单词,则称该单词依赖于另一个单词:

这部分和歧义的内容具体可以看之前的笔记:python自然语言处理学习笔记(八)

二、依存句法分析

目前的句法分析已经从句法结构分析转向依存句法分析,一是因为通用数据集Treebank(Universal Dependencies treebanks)的发展,虽然该数据集的标注较为复杂,但是其标注结果可以用作多种任务(命名体识别或词性标注)且作为不同任务的评估数据,因而得到越来越多的应用;二是句法结构分析的语法集是由固定的语法集组成,较为固定和呆板;三是依存句法分析树标注简单且parser准确率高。

依存语法的结构没有非终结点,词与词之间直接发生依存关系,构成一个依存对,其中一个是核心词,也叫支配词,另一个叫修饰词,也叫从属词。

依存关系用一个有向弧表示,叫做依存弧。依存弧的方向为由从属词指向支配词。

依存句法通过分析语言单位内成分之间的依存关系解释其句法结构,主张句子中核心动词是支配其他成分的中心成分。而它本身却不受其他任何成分的支配,所有受支配成分都以某种关系从属于支配者。

五个条件:

数据驱动的依存句法分析方法主要可以分为两种,一种是基于图的方法(Graph Based),一种是基于转移(Transition Based)的方法。

目前主流的算法是基于转换的依存句法分析,基于转移的方法将依存树的构成过程建模为一个动作序列,将依存分析问题转化为寻找最优动作序列的问题,下面介绍下arc-standard算法,之后的神经网络就是按这个算法的套路来的。

arc-standard算法

一次分析任务C = (s, b, A)由一个Stack栈,一个buffer缓冲区,一系列依存弧A构成。初始化s里面只包含一个root元素即根元素,s1代表栈顶元素,s2表示栈顶第二个元素。b是一个队列,里面包含了要解析的一句话的序列,A为空。

一条依存弧有两个信息:动作类型+依存关系名称l。l视依存句法语料库中使用了哪些依存关系label而定,在arc-standard系统中,一共有如下三种动作:

举个例子:

如图所示,初始化时Buffer里面有一句话: He has good control 。首先执行SHIFT变换,再执行SHIFT变换,这时栈顶前两个词汇构成了依存关系,He依存于has,同时依存关系是nsubj即名词性主语,这时将从属词He从栈中移除,在A中添加依存弧。然后继续执行SHIFT变换,如此往复。最后当Buffer为空和stack只有ROOT时结束。这时的A就包含了对应一句话的依存关系。

那么模型接下来的工作就是寻找一个分类器,当给定一个Configuration (当前的Stack,Buffer,依存弧)时预测下一步transition的类别。

三、神经网络的依存句法分析器

虽然神经网络依存句法分析器的性能比基于搜索的解析器略差,但是它的计算效率非常高,因为传统方法会花大量的时间在拼装查询特征。

如上面提到的,cs224n里的神经网络的依存句法分析器是按照arc-standard算法改进而来,其实具体就是原来一个Configuration的东西本来需要做跟多特征工程来得到特征,现在只要直接转化成词向量输入到神经网络里就好,模型结构如下:

模型包括输入层,隐含层和softmax层。隐含层的激活函数比较特殊,使用cube激活函数也就是取3次方。

首先模型使用了 word embeddings,将one-hot编码转为词向量,不仅word,对应单词的词性和依存关系标签也被映射为向量,同样有自己的embeddings矩阵。根据论文中分别选择18、18、12个元素作为x^w,x^t,x^l的值。

x^w的组成:

x^t:选择x^w中18个词的对应词性作为输入值

x^l:选择除了堆栈/缓冲区上的6个字之外的单词的相应弧标签,这些元素同样根据自己的embeddings映射为向量。

模型的目标就是输入特征向量,然后预测出对应的转换类型,如LEFT-ARC,SHIFT等。预测出转换类型就进行相应的转换操作,这样就更新了配置信息,然后得到新的向量,再输入模型中预测,如此循环。最后就能得到依存弧集合找出句子中依存关系。

课程还提到的非线性函数,这里就不再提及这部分。

未来工作趋势是:

Google的SyntaxNet 中的 Parsey McParseFace的效果:

参考:

CS224n之句法分析总结
基于神经网络的依存句法分析总结及代码详解
数据驱动的依存句法分析方法简介(一)
基于神经网络的高性能依存句法分析器
CS224n笔记6 句法分析
论文:A Fast and Accurate Dependency Parser using Neural Networks

上一篇下一篇

猜你喜欢

热点阅读