TPlinker解读

news/2024/11/17 4:22:28/

参考:
关系抽取之TPLinker解读加源码分析
TPLinker 实体关系抽取代码解读
实体关系联合抽取:TPlinker
TPLinker中文注释版

Tagging

TPLinker模型需要对关系三元组(subject, relation, object)进行手动Tagging,过程分为三部分:
(1)entity head to entity tail (EH-TO-ET)
(2)subject head to object head (SH-to-OH)
(3)subject tail to object tail (ST-to-OT)
标记示例见下图,EH-TO-ET用紫色表示,SH-to-OH用红色表示,ST-to-OT用蓝色表示。

- 其中紫色标签代表实体的头尾关系,红色标签代表 subject 和 object 两个实体的头部关系,蓝色标签代表 subject 和 object 两个实体的尾部关系,因为三种关系可能重叠,所以三种标签是存在于不同的矩阵,这里为了便于阐述,才放在一起。 - 因为实体尾部不可能出现在头部之前,所以紫色标签是不可能出现在下三角区的,那么这样标就有点浪费资源,我们可以舍弃掉下三角区域;但是红标和蓝标可能出现在下三角区域,因此,我们可以把下三角区域的值映射到上三角,并标记为2 - 标记方案如图:

模型框架

模型比较简单,整个句子过一遍 encoder,然后将 token 两两拼接输入到一个全连接层,再激活一下输出作为 token 对的向量表示,最后对 token 对进行分类即可。换句话说,这其实是一个较长序列的标注过程。

预测三元组

将模型对应的输出结果与输入的text进行匹配,解码出所需要的三元组。
通常先进行实体抽取得到字典D(key是实体头部,value是实体尾部)。
通过解码ST-to-OT关系得到有关系的两个实体的尾部,构建为字典E
通过解码SH-to-OH关系得到有关系的两个实体的头部,然后结合字典D,可以得到后续两个实体尾部。判断这两个实体尾部在不在字典E里面,如果在就是成功抽取了一条三元组。

训练数据的格式:

{"text": "In Queens , North Shore Towers , near the Nassau border , supplanted a golf course , and housing replaced a gravel quarry in Douglaston .", "id": "valid_0", "relation_list": 
[{"subject": "Douglaston", "object": "Queens", "subj_char_span": [125, 135], "obj_char_span": [3, 9], "predicate": "/location/neighborhood/neighborhood_of", "subj_tok_span": [26, 28], "obj_tok_span": [1, 2]}, {"subject": "Queens", "object": "Douglaston", "subj_char_span": [3, 9], "obj_char_span": [125, 135], "predicate": "/location/location/contains", "subj_tok_span": [1, 2], "obj_tok_span": [26, 28]}], "entity_list": 
[{"text": "Douglaston", 
"type": "DEFAULT", 
"char_span": [125, 135], 
"tok_span": [26, 28]}, 
{"text": "Queens", "type": "DEFAULT", "char_span": [3, 9], "tok_span": [1, 2]}, 
{"text": "Queens", "type": "DEFAULT", "char_span": [3, 9], "tok_span": [1, 2]}, 
{"text": "Douglaston", "type": "DEFAULT", "char_span": [125, 135], "tok_span": [26, 28]}]}

训练数据的最外层有4个主键:

  • “text”:输入数据的文本
  • “id”:输入数据的id
  • “relation_list”:输入数据文本当中存在的关系。
  • “entity_list”:输入数据文本当中存在的实体。

模型所需要的输入数据

  1. 其中作为输入的有:
  • batch_input_ids:是单词在词典中的编码
  • batch_attention_mask:指定对哪些词进行self - Attention操作
  • batch_token_type_ids:区分两个句子的编码(上句全为0,下句全为1)
  1. 其中作为模型输出的标签来辅助更新权重的有:
  • batch_ent_shaking_tag:token的【起始位置,尾部位置,实体标签】
  • batch_head_rel_shaking_tag:【关系类别,实体_1 头部,实体_2头部,关系标签a】
  • batch_tail_rel_shaking_tag:【关系类别,实体_1 尾部,实体_2尾部,关系标签b】

根据模型所需要输入的数据对训练数据进行一系列的处理。
调整训练时的参数去训练自己的数据。
调整输入输出为自己喜欢的样式。


http://www.ppmy.cn/news/84022.html

相关文章

用工业显微镜来观察生物细胞

尝试用工业显微镜来观察生物细胞,成像质量不是很好,但感觉还是能看一下。专业生物用显微镜真的太贵了。 软件:JCameraPro可以在这下载:www.jfirmware.com 摄像机:OPLENIC Cam的某个OEM版。 OPLENIC Cam很多OEM版&am…

详解Python的Flash框架的常用语句 app = Flask(__name__),为什要以全局变量__name__作为初始化参数?

详解Python的Flash框架的常用语句: app Flask(__name__)这一语句创建了一个Flask应用程序对象。 Flask是一个基于Python的轻量级Web框架,用于构建Web应用程序。在使用Flask时,我们需要创建一个Flask应用程序对象,该对象将充当我…

华为OD机试之字符串重新排列、字符串重新排序(Java源码)

字符串重新排列、字符串重新排序 题目描述 给定一个字符串s,s包括以空格分隔的若干个单词,请对s进行如下处理后输出: 1、单词内部调整:对每个单词字母重新按字典序排序 2、单词间顺序调整: 1)统计每个单词…

sa:segment anything Demo学习与介绍

地址 论文地址:https://arxiv.org/pdf/2304.02643v1.pdf 代码:https://github.com/facebookresearch/segment-anything 贡献 1、对未知的数据集和任务具有良好的零样本(zero-shot)分割性能。分割过程可全自动分割(Everything模式)或由不同的手工提示(Prompt模式)驱动…

gcc编译器报错集锦

文章主要记录一下不常见的错误,供后续开发参考: 日期:2023-05-25 16:31:41 报错:cc1: all warnings being treated as errors 编译条件: Ubuntu 18.04,编译器:aarch64-mix210-linux-gcc编译代码…

2023-04-23 学习记录--C/C++-邂逅C/C++(中)

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 上一篇:邂逅C/C(上) 一、if语句 ⭐️ (一)、格式 🍭 if…

【突发奇想 之 vector使用时性能测试】

目录: 前言分析vector不同操作对时间的影响1.for循环中使用 size()成员函数2.初始化时初始化为0,与其他值3.vector分配容量问题4. vector赋值操作5. 遍历:下标和迭代器 总结 前言 打怪升级:第90天 分析vector不同操作对时间的影响…

成功加冕!用友大易获评2023最佳招聘管理软件供应商

人力资源服务业旗帜性商业奖项2023金帜奖(HRFLAG AWARDS)颁奖典礼于近日隆重举行。经过3个月的评选,用友大易从615家人力资源服务机构中脱颖而出,最终荣获「2023最佳招聘管理软件供应商」奖项。 2023金帜奖(HRFLAG AWARDS)是人力资源服务行业旗帜性的商业…