信息抽取数据集处理——RAMS

news2024/11/24 9:45:27

引言

RAMS数据集(RAMS:Richly Annotated Multilingual Schema-guided Event Structure)由约翰斯·霍普金斯大学于2020年发布,是一个以新闻为基础的事件抽取数据集。它标注了9,124个事件,涵盖了139种不同的事件类型和65种元素角色类型。事件类型涉及多个领域,如:

  • 生命事件(life)
  • 冲突事件(conflict)
  • 灾难事件(disaster)
  • 司法事件(justice)
  • 联络事件(contact)
  • 政府事件(government)

而元素角色类型包括如:

  • 地点(place)
  • 参与者(participant)
  • 目的地(destination)
  • 起源(origin)
  • 受害者(victim)
  • 被告人(defendant)

这个数据集非常适合用于事件抽取、自然语言处理任务,特别是对事件结构、事件角色的识别和分类。

一、特点(features)

  1. 事件类型多样化:涵盖多个领域,增强了事件抽取任务的广泛性和复杂性。
  2. 角色标注详细:为每个事件详细标注了不同的角色,为构建事件图、进行因果推理等任务提供了丰富的上下文信息。
  3. 结构化标注:不仅仅提供文本,还为每个事件及其参与者标注了详细的语义信息,使其适用于高层次的文本分析。

二、下载(download)

  • 可以通过访问官方下载网站进行最新和历史数据集的下载。
  • 也可以通过访问我的主页提供的数据集来进行下载。

三、数据集(database)

3.1 数据

数据被分成 train/dev/test 三个文件,

每个数据文件的每一行包含一个 json 字符串,

每个 json 包含:

  • ent_spans:开始和结束(包含)索引以及事件/参数/角色字符串。
  • evt_triggers:开始和结束(包括)索引以及事件类型字符串。
  • sentences:文档文本
  • gold_evt_links:遵循上述格式的三元组(事件、论点、角色)
  • source_url:文本来源
  • split:它属于哪个数据分割
  • doc_key:它对应于哪个单独的文件(nw\_ 添加到所有文件前面)

所有其他字段都是多余的,以允许 RAMS 的未来迭代。

格式化之后的一条数据(train.jsonlines的第1行)如下展示:

{
    "rel_triggers": [],
    "gold_rel_links": [],
    "doc_key": "nw_RC000462ebb18ca0b29222d5e557fa31072af8337e3a0910dca8b5b62f",
    "ent_spans": [
        [
            42,
            43,
            [
                [
                    "evt090arg02victim",
                    1.0
                ]
            ]
        ],
        [
            85,
            88,
            [
                [
                    "evt090arg01killer",
                    1.0
                ]
            ]
        ],
        [
            26,
            26,
            [
                [
                    "evt090arg04place",
                    1.0
                ]
            ]
        ]
    ],
    "language_id": "eng",
    "source_url": "https://www.washingtonpost.com/news/powerpost/paloma/daily-202/2016/06/17/daily-202-more-republicans-ditch-trump-conclude-he-cannot-win/5763a1e0981b92a22d0f8a36/",
    "evt_triggers": [
        [
            69,
            69,
            [
                [
                    "life.die.deathcausedbyviolentevents",
                    1.0
                ]
            ]
        ]
    ],
    "split": "train",
    "sentences": [
        [
            "Transportation",
            "officials",
            "are",
            "urging",
            "carpool",
            "and",
            "teleworking",
            "as",
            "options",
            "to",
            "combat",
            "an",
            "expected",
            "flood",
            "of",
            "drivers",
            "on",
            "the",
            "road",
            "."
        ],
        [
            "(",
            "Paul",
            "Duggan",
            ")"
        ],
        [
            "--",
            "A",
            "Baltimore",
            "prosecutor",
            "accused",
            "a",
            "police",
            "detective",
            "of",
            "\u201c",
            "sabotaging",
            "\u201d",
            "investigations",
            "related",
            "to",
            "the",
            "death",
            "of",
            "Freddie",
            "Gray",
            ",",
            "accusing",
            "him",
            "of",
            "fabricating",
            "notes",
            "to",
            "suggest",
            "that",
            "the",
            "state",
            "\u2019s",
            "medical",
            "examiner",
            "believed",
            "the",
            "manner",
            "of",
            "death",
            "was",
            "an",
            "accident",
            "rather",
            "than",
            "a",
            "homicide",
            "."
        ],
        [
            "The",
            "heated",
            "exchange",
            "came",
            "in",
            "the",
            "chaotic",
            "sixth",
            "day",
            "of",
            "the",
            "trial",
            "of",
            "Baltimore",
            "Officer",
            "Caesar",
            "Goodson",
            "Jr.",
            ",",
            "who",
            "drove",
            "the",
            "police",
            "van",
            "in",
            "which",
            "Gray",
            "suffered",
            "a",
            "fatal",
            "spine",
            "injury",
            "in",
            "2015",
            "."
        ],
        [
            "(",
            "Derek",
            "Hawkins",
            "and",
            "Lynh",
            "Bui",
            ")"
        ]
    ],
    "gold_evt_links": [
        [
            [
                69,
                69
            ],
            [
                85,
                88
            ],
            "evt090arg01killer"
        ],
        [
            [
                69,
                69
            ],
            [
                42,
                43
            ],
            "evt090arg02victim"
        ],
        [
            [
                69,
                69
            ],
            [
                26,
                26
            ],
            "evt090arg04place"
        ]
    ]
}

1. sentences

  • 文档内容被分为多个句子:
    • 句子1:"Transportation officials are urging carpool and teleworking as options to combat an expected flood of drivers on the road."
    • 句子2:"(Paul Duggan)"
    • 句子3:"A Baltimore prosecutor accused a police detective of ‘sabotaging’ investigations related to the death of Freddie Gray."
    • 句子4:"The heated exchange came in the chaotic sixth day of the trial of Baltimore Officer Caesar Goodson Jr."

2. evt_triggers(事件触发器)

  • [69, 69] 对应的词是句子3中的 "homicide",标注事件类型为 "life.die.deathcausedbyviolentevents"(与暴力事件导致的死亡相关)。

3. ent_spans(实体标注,开始和结束索引,以及事件角色)

  • [42, 43] 对应的词是句子3中的 "Freddie Gray",角色为 "victim"(受害者)。
  • [85, 88] 对应的词是句子4中的 "Caesar Goodson Jr.",角色为 "killer"(凶手)。
  • [26, 26] 对应的词是句子3中的 "Baltimore",角色为 "place"(地点)。

4. gold_evt_links(事件-论点-角色三元组)

  • 第一个三元组:触发词 "homicide",论点是 "Caesar Goodson Jr.",角色是 "killer"
  • 第二个三元组:触发词 "homicide",论点是 "Freddie Gray",角色是 "victim"
  • 第三个三元组:触发词 "homicide",论点是 "Baltimore",角色是 "place"

5. source_url

  • 文档来源是:https://www.washingtonpost.com/news/powerpost/paloma/daily-202/2016/06/17/daily-202-more-republicans-ditch-trump-conclude-he-cannot-win/5763a1e0981b92a22d0f8a36/

6. split

  • 样本属于 训练集(train)

7. doc_key

  • 对应的文档ID为 "nw_RC000462ebb18ca0b29222d5e557fa31072af8337e3a0910dca8b5b62f",该ID用于唯一标识文档。

四、数据处理

import json

def load_data(file_path):
    data = []
    with open(file_path, 'r') as f:
        for line in f:
            data.append(json.loads(line))
    return data

def save_to_json(data, file_path):
    with open(file_path, 'w') as f:
        json.dump(data, f, indent=4)

def extract_event_data(entry):
    sentences = [" ".join(s) for s in entry["sentences"]]
    text = [item for sublist in entry["sentences"] for item in sublist]
    # text = entry["sentences"]
    # text = " ".join(sentences)

    # 处理实体
    ent_spans = [(span[0], span[1], span[2][0][0]) for span in entry["ent_spans"]]

    # 处理事件触发词
    evt_triggers = [(trigger[0], trigger[1], trigger[2][0][0]) for trigger in entry["evt_triggers"]]

    # 处理事件-论点链接
    evt_links = entry["gold_evt_links"]

    return text, ent_spans, evt_triggers, evt_links


def prepare_training_data(entries):
    dataset = []
    for entry in entries:
        text, ent_spans, evt_triggers, evt_links = extract_event_data(entry)

        # 生成训练样本
        dataset.append({
            'text': text,
            'entities': ent_spans,
            'triggers': evt_triggers,
            'links': evt_links
        })
    return dataset



if __name__ == '__main__':
    train_data = load_data("./train.jsonlines")

    training_dataset = prepare_training_data(train_data)
    save_to_json(training_dataset, 'train.json')
    print(training_dataset[0])

4.1 加载并解析数据

首先,加载JSON格式的数据文件,并解析其中的字段。

import json

def load_data(file_path):
    data = []
    with open(file_path, 'r') as f:
        for line in f:
            data.append(json.loads(line))
    return data

train_data = load_data('train.json')

4.2 数据预处理

将文档中的句子、事件触发词、角色和实体进行标注与转换,以便用于事件抽取模型。我们可以提取句子、事件触发词及角色信息。

def extract_event_data(entry):
    sentences = [" ".join(s) for s in entry["sentences"]]
    text = " ".join(sentences)
    
    # 处理实体
    ent_spans = [(span[0], span[1], span[2][0][0]) for span in entry["ent_spans"]]
    
    # 处理事件触发词
    evt_triggers = [(trigger[0], trigger[1], trigger[2][0][0]) for trigger in entry["evt_triggers"]]
    
    # 处理事件-论点链接
    evt_links = entry["gold_evt_links"]
    
    return text, ent_spans, evt_triggers, evt_links

# 示例提取
for entry in train_data:
    text, ent_spans, evt_triggers, evt_links = extract_event_data(entry)
    print(f"文本: {text}")
    print(f"实体: {ent_spans}")
    print(f"事件触发词: {evt_triggers}")
    print(f"事件-论点链接: {evt_links}")

4.3 生成模型输入

为了进行事件抽取,常见的输入是文本与相应的事件触发器和角色。我们可以构建一个数据集,将文本标注为序列标注任务或使用分类任务标注事件触发词和论点。

def prepare_training_data(entries):
    dataset = []
    for entry in entries:
        text, ent_spans, evt_triggers, evt_links = extract_event_data(entry)
        
        # 生成训练样本
        dataset.append({
            'text': text,
            'entities': ent_spans,
            'triggers': evt_triggers,
            'links': evt_links
        })
    return dataset

training_dataset = prepare_training_data(train_data)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2212548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

celery 项目中mysql 数据库连接数耗尽事故记录

python 项目中使用 celery 中导致mysql数据库连接耗尽记录【mysql数据库连接池使用错误】 结论:由于使用 celery 进行项目的多任务管理,在worker任务定义的过程中,使用了 dbutils 中的 PooledDB 连接池进行 mysql数据库连接, 因此…

IO密集型任务及Vertx框架入门

注意: 本文内容于 2024-10-02 02:25:47 创建,可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容,请访问原文地址:IO密集型任务及Vertx框架入门。感谢您的关注与支持! 一、背景 1.1 铺垫知识 涉及到…

C++入门基础知识112—【关于C++嵌套 switch 语句】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C嵌套 switch 语句的相关内容&#xff…

C++20中头文件numbers的使用

<numbers>是C20中新增加的头文件&#xff0c;提供一组常量用于表示数学中的某些特殊值&#xff0c;此头文件是numeric库的一部分。包括&#xff1a; 1. 圆周率π:std::numbers::pi、std::numbers::pi_v<T> 2. 圆周率π的倒数&#xff1a;numbers::inv_pi、std::num…

灵当CRM data/pdf.php 任意文件读取漏洞复现

0x01 产品简介 灵当CRM是一款专为中小企业打造的智能客户关系管理工具,由上海灵当信息科技有限公司开发并运营。广泛应用于金融、教育、医疗、IT服务、房地产等多个行业领域,帮助企业实现客户个性化管理需求,提升企业竞争力。无论是新客户开拓、老客户维护,还是销售过程管…

软件开发----SQL基础每日刷题(转载于牛客)

1. 查询语句select stuff(lo ina,3, 1, ve ch)结果为&#xff1f; A love B love china C china love D china 正确答案&#xff1a;B 解析&#xff1a; STUFF(原字符, 开始位置, 删除长度, 插入字符) 从指定的起点处开始删除指定长…

六tomcat

​​​​​​ Java Web环境搭建 1. 初识Tomcat Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选。Tomcat 是 Apache 服务器…

redis集成到spring boot中使用

&#xff08;一&#xff09;添加依赖 redis服务器在官网中公开了自己使用的协议--RESP&#xff0c;所以我们可以使用这个协议来访问redis服务器&#xff0c;但是如果我们要自己实现库&#xff0c;那肯定是非常麻烦的&#xff0c;所以我们可以使用网上的库&#xff0c;我们直接调…

读数据工程之道:设计和构建健壮的数据系统08主要架构概念

1. 域和服务 1.1. 域是你正在为其构建的现实世界主题区域 1.2. 服务是一组功能&#xff0c;其目标是完成一项任务 1.3. 一个域可以包含多个服务 1.4. 确定领域中应包含的内容 1.4.1. 确定领域应该包含什么以及要包括哪些服务时&#xff0c;最好的建议是简单地去与用户和利益…

SQLAlchemy入门:详细介绍SQLAlchemy的安装、配置及基本使用方法

SQLAlchemy是一个流行的Python SQL工具包和对象关系映射&#xff08;ORM&#xff09;框架&#xff0c;它为开发人员提供了一种高效、灵活的方式来与数据库进行交互。本文将详细介绍SQLAlchemy的安装、配置及基本使用方法&#xff0c;并通过代码示例和案例分析&#xff0c;帮助新…

C++ | Leetcode C++题解之第478题在圆内随机生成点

题目&#xff1a; 题解&#xff1a; class Solution { private:mt19937 gen{random_device{}()};uniform_real_distribution<double> dis;double xc, yc, r;public:Solution(double radius, double x_center, double y_center): dis(0, 1), xc(x_center), yc(y_center),…

Web前端高级工程师培训:异步处理专题

异步处理专题 课前准备 工具 编辑器 VSCode浏览器 Chorme 前置知识 ES6基础语法 课堂主题 同步及异步概念方块运动的实现promise的用法then的返还值Async 函数 和 await 课堂目标 理解并学会使用promise使用方式以及async 、await的使用 同步异步概念 js是单线程 单线程…

动态规划-多状态问题——LCR.090.打家劫舍

1.题目解析 题目来源&#xff1a;LCR.090.打家劫舍——力扣 测试用例 2.算法原理 1.状态表示 每一个房子都有两个状态&#xff1a;被偷与不被偷&#xff0c;因此需要两个dp表f/g来表示被偷与不被偷&#xff0c;其中f[i]/g[i]表示小偷走到第i个位置的最大偷钱数 2.状态转移方程…

【开源物联网平台】Fastbee系统稳定性和压测报告

目录 一、机器准备 二、压测步骤 2.1 去除认证&#xff0c;修改clientid识别问题 2.2 添加重发布脚本 三、压测结果 四、压测工具使用 一、机器准备 准备两台服务器&#xff0c;一台为部署fastbee服务端应用&#xff0c;另一台为客户端压力机。其中&#xff1a; fastbee…

TensorRT-LLM七日谈 Day3

今天主要是结合理论进一步熟悉TensorRT-LLM的内容 从下面的分享可以看出&#xff0c;TensorRT-LLM是在TensorRT的基础上进行了进一步封装&#xff0c;提供拼batch&#xff0c;量化等推理加速实现方式。 下面的图片更好的展示了TensorRT-LLM的流程&#xff0c;包含权重转换&…

动态规划-简单多状态dp问题——面试题17.16.按摩师

多状态问题的核心就是每个位置不止有一个状态&#xff0c;因此需要多个dp表表示不同状态对应位置的值&#xff0c;然后根据题目考虑特定情况写出状态转移方程即可 1.题目解析 题目来源&#xff1a;面试题17.16.按摩师——力扣 测试用例 2.算法原理 1.状态表示 这里与路径问…

红米AC2100路由器原官方固件关闭IPv6防火墙

红米AC2100路由器原官方固件关闭IPv6防火墙 问题背景 我家里宽带开通了IPv6&#xff0c;并且获得了公网的IPv6地址。在同一Wi-Fi内部&#xff0c;可以使用公网IPv6正常访问。 但是&#xff0c;当我切换为手机流量&#xff0c;也就是公网环境&#xff0c;访问就失败了。 问题…

苹果最新论文:LLM只是复杂的模式匹配 而不是真正的逻辑推理

大语言模型真的可以推理吗&#xff1f;LLM 都是“参数匹配大师”&#xff1f;苹果研究员质疑 LLM 推理能力&#xff0c;称其“不堪一击”&#xff01;苹果的研究员 Mehrdad Farajtabar 等人最近发表了一篇论文&#xff0c;对大型语言模型 &#xff08;LLM&#xff09; 的推理能…

<<迷雾>> 第11章 全自动加法计算机(5)--顺序取数 示例电路

顺序地从存储器里取数的电路方案. info::操作说明 在开始之前, 地址计数器 AC 需要清零, 以指向地址 0000. 按一下开关 KAR, 将 AC 当前的地址锁存到 AR 地址寄存器. 按住 KRD, 不要松开(注: 系统中使用的是普通开关, 无需按住), 再按一下 KDR, 数据保存到寄存器 DR 中, 最后,…

Mapstruct的使用备忘【代替BeanUtils高效率属性拷贝】

文章目录 Mapstruct的使用备忘【代替BeanUtils高效率属性拷贝】1. 引入mapstruct依赖2. 数据准备2-1 准备一个子类&#xff0c;TestData2-2 准备两个类&#xff0c;SourceData&#xff0c;TargetData&#xff0c;属性完全一样 3. 定义Mapper接口【注&#xff1a;这里的Mapper是…