• 主页
  • 算法
  • 小桥流水人家
  • python
  • linux
  • mysql
所有文章 友链 关于我

  • 主页
  • 算法
  • 小桥流水人家
  • python
  • linux
  • mysql

bio-based语义角色标注

2021-11-12

定义

定义1:

1
Semantic Role Labeling (SRL) is defined as the task to recognize arguments for a given predicate and assign semantic role labels to them.

定义2(ltp):

1
语义角色标注 (Semantic Role Labeling, SRL) 是一种浅层的语义分析技术,标注句子中某些短语为给定谓词的论元 (语义角色) ,如施事、受事、时间和地点等。其能够对问答系统、信息抽取和机器翻译等应用产生推动作用。 仍然是上面的例子,语义角色标注的结果为:

实现

https://github.com/geasyheart/srl-parser

欢迎Star!

示例1:


看黄色那部分:

  • 他叫汤姆,他作为施事者,叫为谓语,汤姆为受事者
  • 去拿外衣(为一个完整语义)
  • 汤姆拿外衣,汤姆为施事者,拿为谓语,外衣为受事者

示例2:

‘各位/PN 好/VA ,/PU 欢迎/VV 您/PN 收看/VV 国际/NN 频道/NN 的/DEG 今日/NT 关注/NN 。/PU’

此图自己画的,如有需要可参考

  • 欢迎您,欢迎为谓语,您为受事者,收看国际频道的今日关注为语义角色
  • 其余忽略…

数据集

数据集来自ontonotes5.0,但是此为收费数据集,或者需要大学帐号注册,找到一个开源的https://github.com/GuocaiL/Coref_Resolution/archive/master.zip#data/,处理后的数据集以 jsonlines后缀存储,放到此处。

具体的处理逻辑可参考这里。

实现

目前常见的有span-based,bio-based,treecrf,treecrf是yzhangcs的实现方式。bio-based是用序列标注的方式来做(hanlp和ltp均以此实现),故是本文的重点。

数据处理

看这个文件,其中预测的label处理后是这个样子,解释如下:

  • 各位 好,好是第二个字,和第一个词有关系,关系为3。
  • 欢迎 您收看国际频道的今日关注, 对应关系为1, 13, 23, 23, 23, 23, 23。
1
2
3
4
5
6
7
8
9
10
11
12
13
tensor([[ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
[ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 1, 13, 23, 23, 23, 23, 23, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])

看到这里是否知道其模型结构了,biaffine+crf哇,biaffine转换成临接矩阵,用于预测谓词和论元的关系,论元用crf序列标注的方式来进行预测。

模型结构

1
2
3
4
5
6
7
SpanBIOSemanticRoleLabelingModel(
(transformer): TransformerEncoder(n_out=256,dropout=0.1)
(s_layer): MLP(n_in=256, n_out=300, dropout=0.1)
(e_layer): MLP(n_in=256, n_out=300, dropout=0.1)
(biaffine): Biaffine(n_in=300, n_out=64, bias_x=True, bias_y=True)
(crf): CRF(num_tags=64)
)

步骤

1. loss计算和解码

到biaffine这一层没什么需要特别注意的,bert获取词向量的方式从以前的求平均改成了以首字代表词向量。后面接两个mlp以及biaffine。重点在于如何和crf融合到一起?

  1. biaffine输出后维度为(batch_size,seq_length,seq_length,hidden_size),crf是用在第二个seq_length那一维。
  2. crf的输入为发射概率,此维度为(batch_size,seq_length,hidden_size)。

基于上述两个前提,将batch_size和第一个seq_length进行flatten,因为第一个seq_length为谓语,不影响论元的预测,转换后输入到crf中,就可以计算loss了,解码一样。

2. 评估指标

预测出来的结果示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# pred

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 13, 23, 23, 23, 23, 23, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[12, 6, 3, 4, 4, 4, 4, 4, 4, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

pred类型为List[List[int]],他的长度等于batch_tokens中每个词的长度,即:

1
len(pred) == sum([len(i) for i in batch["batch_tokens"]])

** 其中每一行表示的是当前词和整句每个词所呈现出来的关系。 **

基于上面结论,就不难写评估代码了,将其转成(token_index, start, end, label),然后set取交集,最终计算f1值,可看这里。

3. 解码预测

基本如上,具体可看。

性能

ltp v4

从这里也可以看出,语义角色标注任务任重道远。

ltp关系类型

ltp关系类型1
ltp关系类型2

关系类型

Tag

Description

Example

ARG0

causers or experiencers

施事者、主体、触发者

[政府 ARG0]鼓励个人投资服务业。

ARG1

patient

受事者

政府鼓励[个人 ARG1]投资服务业。

ARG2

range

语义角色2

政府鼓励个人[投资服务业 ARG2]。

ARG3

starting point

语义角色3

巴基斯坦[对谈判前景 ARG3]表示悲观。

ARG4

end point

语义角色4

产检部门将产检时间缩短到[一至三天 ARG4]。

ADV

adverbial

状语

我们[即将 ADV]迎来新年。

BNF

beneficiary

受益人

义务[为学童及老师 BNF]做超音波检查 。

CND

condition

条件

[如果早期发现 CND],便能提醒当事人注意血压的变化。

CRD

coordinated arguments

并列

跟南韩、[跟美国 CRD]谋求和平关系的举动也更加积极。

DGR

degree

程度

贫铀弹含有放射性比铀强[20万倍 DGR]。

DIR

direction

方向

[从此处 DIR] 我们可以发现寇克斯报告的精髓。

DIS

discourse marker

会话标记

警方上午针对目击者做笔录,[而 DIS]李士东仍然不见踪影。

EXT

extent

赏

谢谢你请我吃糖果

支付宝
  • 算法

扫一扫,分享到微信

微信分享二维码
语义依存分析
基于树形条件随机场的高阶句法分析
  1. 1. 定义
    1. 1.1. 定义1:
    2. 1.2. 定义2(ltp):
  2. 2. 实现
    1. 2.1. 示例1:
    2. 2.2. 示例2:
  3. 3. 数据集
  4. 4. 实现
    1. 4.1. 数据处理
    2. 4.2. 模型结构
    3. 4.3. 步骤
      1. 4.3.1. 1. loss计算和解码
      2. 4.3.2. 2. 评估指标
      3. 4.3.3. 3. 解码预测
  5. 5. 性能
  6. 6. ltp关系类型
© 2025 张宇
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链
  • 关于我

tag:

  • linux
  • 技术
  • 小桥流水人家
  • MySQL
  • flutter
  • 算法
  • machine learning
  • SQLAlchemy
  • python
  • CI
  • git
  • go
  • grpc
  • 机器学习

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • Github
  • Google
  • StackOverFlow
探索世界美好的存在。