被迫要使用语义角色标注(Deep Semantic Role Labeling)技术,本来想直接使用github上的项目Tagger,奈何作者说自己本来用tensorflow写的,后来改成pytorch但没完全改(Model ensemble不可用,且预训练好的模型只提供了tensorflow版本的,需要用pytorch来调用),所以计划来读这篇文章,方便日后的改动
任务设置给定一个句子,SRL(Semantic Role Labeling)的目标是定义每个目标动词的论元(可以简单理解为与目标动词有关系的词),并将他们分类为语义角色。如下图这个例子:
SRL就需要为“发表”这个目标动词定义论元,并指定这些论元的语义角色(包括who did what to whom, when and where等)
所以,SRL中就包括定义论元和分类论元这两个任务。有时在定义论元前,也会对明显的非候选论元进行剪枝,或者是在分类论元后,应用后处理流程去调整不一致的预测。在测试中,动态规划算法经常被用来寻找全局最优解。
引入问题:训练阶段是需要指定目标动词和论元角色的,但是测试阶段需不需要也指定目标动词呢?
背景:最初的SRL方法是需要句法输入的(也就是把输入句子的结构同时告诉算法),后来提出了堆叠的LSTM网络并获得了很好的效果,这种方法能够端到端地处理潜在的句法结构
动机:现在的RNN方法存在两个问题:1)内存压缩问题,也就是处理长句和短句都使用单个固定大小的向量,这种不平衡的方式导致网络在长句上表现差、短句上浪费内存 2)缺乏处理树结构输入的方式(?)
提出的方法:1)能建立任意两个token之间的直接关系 2)提供了一个更灵活的方式案例挑选、表示和合成输入信息 3)这使得网络在领域外的数据集上表现也很好
网络简介:输入原本的句子和动词mask,首先转化为embedding,然后将其放入深度注意力神经网络(由多个相同的层组成,每层包括非线性子层和注意力子层)来获取句子的嵌套结构和label之间的潜在关系,其中,非线性子层可选RNN/CNN/FNN或合成,分别称为DeepAtt-RNN/CNN/FFN以及Model ensemble。测试阶段,只有最高层的attention子层输出被放入逻辑回归层来进行最终的预测(训练阶段不也是?)
其中每个模块在当时看来可能是比较新的技术,但在2022年已经屡见不鲜了,这里就不再一一赘述了
问题:仍然不知道训练阶段需不需要输入谓词判别向量mask,还需要去代码中找答案



