CS224n系列:
【CS224n】Neural Networks, Backpropagation
【CS224n】Neural-Dependency-Parsing
【CS224n】Language Models, RNN, GRU and LSTM
【CS224n】Neural Machine Translation with Seq2Seq
【CS224n】ConvNets for NLP
1.1 Dependency Parsing
依存句法分析就是表示句子中词与词之间的关系,如下图所示:
有向弧表示两个词有依存关系,箭头表示父节点指向子节点,弧上的标签表示具体的依存关系。
除了根节点(此处为submitted),其他词都有词作为它的父节点,根节点的父节点为ROOT。
依存句法树的数据表示如下图:
1.2 Transition-Based Dependency Parsing
基于转移的依存句法解析器
包括两个部分:状态和动作,状态用来记录中间变化过程,动作用来控制状态的变化(转移)。
定义以下三个状态:
状态之间的转移包括以下三个类型:
转移过程可以参照下图进行理解:
堆从空状态开始,通过动作转移到下一个状态,直到堆和缓冲区都没有元素结束,一步步生成依存句法树。
从网上找了一张图可以清楚地了解整个转移过程(图片来源:详解Transition-based Dependency parser基于转移的依存句法解析器):
通过以上分析,我们可以看到,整个生成依存句法树的任务变成了一个预测动作的过程,这个动作包括下一步的转移以及转移过程中涉及到的两个词之间的依存关系。
因此,我们可以很直接地想到用神经网络来预测下一步动作:
参考:https://blog.csdn.net/Despacit0/article/details/92835286
1.3 作业
1.3.1 Machine Learning & Neural Networks
(a)给定以下依存句法树,写出状态转移过程。
Stack | Buffer | New dependency | Transition |
---|---|---|---|
[ROOT] | [I,parsed,this,sentence,correctly] | Initial Configuration | |
[ROOT,I] | [parsed,this,sentence,correctly] | SHIFT | |
[ROOT,I,parsed] | [this,sentence,correctly] | SHIFT | |
[ROOT,parsed] | [this,sentence,correctly] | parsed → \rightarrow →I | LEFT-ARC |
[ROOT,parsed,this] | [sentence,correctly] | SHIFT | |
[ROOT,parsed,this,sentence] | [correctly] | SHIFT | |
[ROOT,parsed,sentence] | [correctly] | sentence → \rightarrow →this | LEFT-ARC |
[ROOT,parsed] | [correctly] | parsed → \rightarrow →sentence | RIGHT-ARC |
[ROOT,parsed,correctly] | SHIFT | ||
[ROOT,parsed] | parsed → \rightarrow → correctly | RIGHT-ARC | |
[ROOT] | ROOT → \rightarrow →parsed | RIGHT-ARC |
(b)一个长度为n的句子,需要多少步进行解析?
答:2*n+1。理由:需要进行n次移位(SHIFT)+n次左规约/右规约(LEFT-ARC/RIGHT-ARC)+1次初始化。
1.3.2 Coding
代码: https://github.com/sfeng-m/Neural-Dependency-Parsing
结果:训练10个epoch,在小数据集上(small subset of the data),Loss=0.0928(要求<0.2); dev UAC(Unlabeled Attachment Score)=71.26(要求>65).
训练10个epoch,在全量数据集上,Loss=0.0282(要求<0.08); dev UAC=89.15(要求>87).