跳转到主要内容

基于图的语义角色标注器

项目描述

基于图的语义角色标注器

这是一个基于图卷积网络的语义角色标注器。目标是针对荷兰语制作一些合理的前沿技术。

这是一个正在进行中的项目。

快速开始

在Conll文件上运行

python -m stroll.srl --dataset example.conll

直接从Python使用Stanza Pipeline

您可以通过导入 stroll.stanza 并将 srl 添加到Stanza处理器中,将Stroll添加到Stanza pipeline中。这将向单词添加 srlframe 属性。(注意,当打印Stanza文档、句子或单词对象时,这些属性不会打印。)

import stanza
import stroll.stanza

nlp = stanza.Pipeline(lang='nl', processors='tokenize,lemma,pos,depparse,srl')
doc = nlp('Stroll annoteert semantic roles.')

for s in doc.sentences:
    for w in s.words:
        print(w.lemma, w.srl, w.frame)

Stroll Arg0 _
annoteren _ rel
semantic Arg1 _
roles _ _
. _ _

训练数据

SoNaR 包含了50万个单词的标注数据集。框架的标注相当基础

  • 语义标注是在句法依存树上进行的
  • 仅(一些)动词被标记
  • 没有与FrameNet或任何框架识别的链接

原始标注是在AlpinoXML上进行的;文件已使用格罗宁根的脚本转换为conllu。Alpino和Lassy到UD格式的转换脚本在此处可用

我计划使用通用依存关系模式进行句法,并假设输入文件为conllu格式。这样,标注器就可以作为Newsreader标注管道的一部分使用。

方法

训练集是在句法树上的标注。我们将使用相同的树,由conll文件中的HEADDEPREL字段给出。单词是节点,我们添加三种类型的边

  • 从依存关系到头(按依存关系的数量加权)
  • 从头到依存关系
  • 从节点到自身

在每个节点上,我们添加一个GRU单元。初始状态使用多个特征的one-hot编码生成。然后,单元的输出传递给两个分类器,一个用于指示这个单词是否是框架词,另一个用于指示这个单词是否是论元(及其哪个论元)的头部。

作为节点特征,我们可以使用conllu文件中的信息。我们还添加了来自fasttext或BERTje的预训练词向量。最后,我们添加了位置编码(即“第一个后代”)。

安装

使用python3设置虚拟环境,并安装依赖项

python3 -m venv env
. env/bin/activate
pip install -r requirements.txt

迄今为止的最佳模型

模型层

Net(
  (embedding): Sequential(
    (0): Linear(in_features=189, out_features=100, bias=True)
    (1): BatchNorm1d(100, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (2): ReLU()
  )
  (gru): RGRUGCN(
    in_feats=100, out_feats=100
    (gru): GRU(100, 100)
    (batchnorm): BatchNorm1d(100, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  )
  (task_a): MLP(
    (fc): Sequential(
      (0): Linear(in_features=100, out_features=100, bias=True)
      (1): BatchNorm1d(100, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (2): ReLU()
      (3): Linear(in_features=100, out_features=2, bias=True)
    )
  )
  (task_b): MLP(
    (fc): Sequential(
      (0): Linear(in_features=100, out_features=100, bias=True)
      (1): BatchNorm1d(100, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (2): ReLU()
      (3): Linear(in_features=100, out_features=21, bias=True)
    )
  )
)

训练设置

  • 使用的特征:UPOS,DEPREL,FEATS,RID,FastText100
  • 隐藏状态大小:100
  • GRU迭代次数:4
  • 激活函数:relu
  • 批大小:50个句子
  • Adam优化器:ADAM
  • 初始学习率:1e-02
  • 学习率调度器:StepLR,gamma=0.9
  • 焦点损失,gamma=5。
  • 添加了两个损失函数,两者权重均为1

结果

有两个类别非常罕见,它们不在我们的10%评估集中,模型也没有预测出来。(Arg5ArgM-STR)。

混淆矩阵和统计数据(classification_report)是用scikit-learn制作的。

最佳模型是在6628920个单词,或15个epoch后得到的。

框架

_ rel
_ 45602 152
rel 164 3561
精确度 召回率 f1分数 支持度
_ 1.00 1.00 1.00 45754
rel 0.96 0.96 0.96 3725
准确率 0.99 49479
宏平均 0.98 0.98 0.98 49479
加权平均 0.99 0.99 0.99 49479

角色

Arg0 Arg1 Arg2 Arg3 Arg4 ArgM-ADV ArgM-CAU ArgM-DIR ArgM-DIS ArgM-EXT ArgM-LOC ArgM-MNR ArgM-MOD ArgM-NEG ArgM-PNC ArgM-PRD ArgM-REC ArgM-TMP _
Arg0 1650 113 9 0 0 2 2 1 0 0 3 0 0 0 2 0 0 0 32
Arg1 232 2596 111 0 6 4 3 3 0 5 41 17 1 6 7 2 2 2 100
Arg2 16 154 346 2 8 1 0 10 0 3 91 27 0 1 16 6 2 6 18
Arg3 0 9 26 5 0 0 0 1 0 0 7 3 0 0 8 1 0 4 1
Arg4 0 5 11 0 28 0 0 3 0 0 7 0 0 0 0 0 0 1 0
ArgM-ADV 0 8 13 0 0 312 10 2 27 5 20 32 0 0 4 6 0 45 44
ArgM-CAU 9 5 5 0 0 13 96 1 1 0 0 20 0 0 1 0 0 7 12
ArgM-DIR 0 0 10 0 4 0 0 30 0 0 4 5 0 0 0 1 0 2 2
ArgM-DIS 0 0 0 0 0 27 3 0 322 2 5 13 0 0 0 0 0 14 157
ArgM-EXT 0 4 4 1 0 6 0 0 0 47 2 8 0 1 0 0 0 9 5
ArgM-LOC 0 12 49 0 3 8 1 7 0 1 519 6 0 1 4 2 1 26 36
ArgM-MNR 3 25 35 0 0 38 6 8 4 13 18 313 1 1 0 10 0 14 27
ArgM-MOD 0 2 0 0 0 1 0 0 0 0 0 1 598 0 0 0 0 0 54
ArgM-NEG 1 2 1 0 0 2 0 0 0 0 0 2 1 266 0 0 0 3 13
ArgM-PNC 0 9 20 0 0 2 7 0 0 0 4 4 0 0 119 0 0 5 11
ArgM-PRD 0 9 7 0 0 9 0 0 0 2 3 13 0 0 2 74 2 1 12
ArgM-REC 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 1 105 0 0
ArgM-TMP 0 4 13 1 1 45 7 0 3 13 31 24 1 3 4 0 0 862 32
_ 81 138 24 0 1 37 9 2 13 3 27 28 50 15 8 7 0 30 38234
精确度 召回率 f1分数 支持度
Arg0 0.83 0.91 0.87 1814
Arg1 0.84 0.83 0.83 3138
Arg2 0.51 0.49 0.50 707
Arg3 0.56 0.08 0.14 65
Arg4 0.55 0.51 0.53 55
ArgM-ADV 0.62 0.59 0.60 528
ArgM-CAU 0.67 0.56 0.61 170
ArgM-DIR 0.44 0.52 0.48 58
ArgM-DIS 0.87 0.59 0.71 543
ArgM-EXT 0.50 0.54 0.52 87
ArgM-LOC 0.66 0.77 0.71 676
ArgM-MNR 0.61 0.61 0.61 516
ArgM-MOD 0.92 0.91 0.91 656
ArgM-NEG 0.90 0.91 0.91 291
ArgM-PNC 0.68 0.66 0.67 181
ArgM-PRD 0.67 0.55 0.61 134
ArgM-REC 0.94 0.96 0.95 109
ArgM-TMP 0.84 0.83 0.83 1044
_ 0.99 0.99 0.99 38707
准确率 0.94 49479
宏平均 0.71 0.67 0.68 49479
加权平均 0.94 0.94 0.94 49479

参考文献

  1. 使用图卷积网络对句子进行编码以进行语义角色标注
  2. 使用不确定性加权损失进行场景几何和语义的多任务学习
  3. 密集目标检测的焦点损失
  4. GaAN:用于学习大型时空图的门控注意力网络
  5. 再次审视语法:用于性别模糊代词解析的关系图卷积网络 代码
  6. 深度图库
  7. CoNLL-2009共享任务:多种语言的句法和语义依存关系
  8. 2009共享任务评估脚本
  9. 超级加速:使用大学习率快速训练神经网络
  10. 标签分布学习
  11. 关于深度神经网络在分类中的损失函数
  12. 通过最小化对比度散度训练专家产品
  13. 在对数意见池中选择权重因子.pdf

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

stroll-srl-0.5.1.tar.gz (25.3 KB 查看哈希值

上传时间

构建分发

stroll_srl-0.5.1-py3-none-any.whl (27.5 KB 查看哈希值

上传于 Python 3

由以下组织支持