菜鸟笔记-信息抽取模型UIE代码学习-数据准备

2023-11-03 02:31

本文主要是介绍菜鸟笔记-信息抽取模型UIE代码学习-数据准备,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据准备

说明:UIE是基于Prompt的通用信息抽取框架,本文为个人学习UIE代码的笔记,学的过程中简单翻译了一下数据准备部分readme(顺序按实际处理过程有所调整),自己添加的说明都在引用格式里。

论文:Unified Structure Generation for Universal Information Extraction

源代码:https://github.com/universal-ie/UIE

本内容所在文件夹:dataset_processing

目录结构:

.
├── converted_data/   # Final converted datasets
├── data/             # Raw data
├── data_config/      # Dataset config
├── README.md
├── run_data_generation.bash  # Convert all datasets
├── run_sample.bash           # Sample low-resource datasets
├── scripts/                  # Scripts for preprocessing
├── uie_convert.py            # Main Python File
└── universal_ie/             # Code for preprocessing

数据集预处理

使用了以下前人所做的数据预处理工作:

DatasetPreprocessing
ACE04mrc-for-flat-nested-ner
ACE05mrc-for-flat-nested-ner
ACE05-Relsincere
CoNLL 04sincere
NYTJointER
SCIERCdygiepp
ACE05-EvtOneIE
CASIECASIE, Our preprocessing code see here.
14lapBARTABSA
l4resBARTABSA
15resBARTABSA
16resBARTABSA

ABSA

git clone https://github.com/yhcc/BARTABSA data/BARTABSA
mv data/BARTABSA/data data/absa

没有问题,按照原文可以下载,如果git clone网速过慢,可以直接去下载BARTABSA库,再从里面把数据拷贝到相应目录。

Entity(实体抽取)

# CoNLL03 这个下下来直接放在data/conll03文件夹下
mkdir data/conll03
wget https://raw.githubusercontent.com/synalp/NER/master/corpus/CoNLL-2003/eng.train -P data/conll03
wget https://raw.githubusercontent.com/synalp/NER/master/corpus/CoNLL-2003/eng.testa -P data/conll03
wget https://raw.githubusercontent.com/synalp/NER/master/corpus/CoNLL-2003/eng.testb -P data/conll03# gdown >= 4.4.0
pip install -U gdown
mkdir data/mrc_ner
# ACE04
gdown 1U-hGOgLmdqudsRdKIGles1-QrNJ7SSg6 -O data/mrc_ner/ace2004.tar.gz
tar zxvf data/mrc_ner/ace2004.tar.gz -C data/mrc_ner# ACE05
gdown 1iodaJ92dTAjUWnkMyYm8aLEi5hj3cseY -O data/mrc_ner/ace2005.tar.gz
tar zxvf data/mrc_ner/ace2005.tar.gz -C data/mrc_ner

CoNLL03我自己的电脑下不下来,是通过aistudio(百度ai平台,在平台上运行上述代码)下载后,又从aistudio中下载的;

ACE04、ACE05自己电脑、aistudio都下不下来,gdown被q了没办法,自己买太贵(好像1500刀)放弃。

Relation(关系抽取)

NYT
mkdir data/NYT-multi
wget -P data/NYT-multi https://raw.githubusercontent.com/yubowen-ph/JointER/master/dataset/NYT-multi/data/train.json
wget -P data/NYT-multi https://raw.githubusercontent.com/yubowen-ph/JointER/master/dataset/NYT-multi/data/dev.json
wget -P data/NYT-multi https://raw.githubusercontent.com/yubowen-ph/JointER/master/dataset/NYT-multi/data/test.json

自己电脑运行指令没连上,通过aistudio运行上述命令下的,也可以下载JointER代码下载后从中找到该数据,并拷贝到data/NYT-multi文件夹。

CoNLL04/ACE05-rel
  1. 使用了来自 sincere 库的预处理方法,并将数据处理为相同的格式。使用下述结构来预处理 CoNLL04 和 ACE05-rel 数据集,将其放置于 data/sincere/目录下。
 $ tree data/sincere/
data/sincere/
├── ace05.json
└── conll04.json

conll04可以通过下载 sincere 库下下来,ace05-rel放弃。

  1. 将 conll/ace05-rel 转化为 sincere 的格式
python scripts/sincere_processing.py

PS:由于没有下载到ACE05-rel,因此需要将scripts/sincere_processing.py中的第26行中的’ace05’删除,如下图所示:

在这里插入图片描述

代码操作:将一个文件划分成train、test、dev三个,保存格式改成每行一个样本,样本关键字[‘relations’]改为[]‘span_pair_list’],[‘entities’]改为[‘span_list’],每个entity的结束索引([‘end’])减1。

运行后在data/relation/conll04目录能够看到转换后的数据。

在这里插入图片描述

SciERC

首先使用来自 DyGIE 库对于SciERC的预处理代码。请将在dygiepp 的 collated_data目录下的处理过的数据集放到如下目录

ps:这个里面引用的数据挺多,回头需要数据可以来看看

$ tree data/dygiepp
data/dygiepp
└── scierc├── dev.json├── test.json└── train.json

这个要先下载dygiepp 的代码,然后通过代码中bash scripts/data/get_scierc.sh下载并处理数据,我这还是wget连接失败,直接在get_scierc.sh中复制下载连接。

http://nlp.cs.washington.edu/sciIE/data/sciERC_raw.tar.gz
http://nlp.cs.washington.edu/sciIE/data/sciERC_processed.tar.gz

第一个直接下,第二个600M+用迅雷下,500kb/s+。

接下来将文件拷贝到data/scierc,运行scripts/data/get_scierc.sh后面部分

out_dir=data/scierc
mkdir $out_dir# Decompress.
tar -xf $out_dir/sciERC_raw.tar.gz -C $out_dir
tar -xf $out_dir/sciERC_processed.tar.gz -C $out_dir# Normalize by adding dataset name.
python scripts/data/shared/normalize.py \$out_dir/processed_data/json \$out_dir/normalized_data/json \--file_extension=json \--max_tokens_per_doc=0 \--dataset=scierc# Collate for more efficient non-coref training.
python scripts/data/shared/collate.py \$out_dir/processed_data/json \$out_dir/collated_data/json \--file_extension=json \--dataset=scierc

然后将scierc的格式转化为与CoNLL04/ACE05-Rel相同。

mkdir -p data/relation/scierc
python scripts/scierc_processing.py

Event(事件抽取)

ACE05-Evt

ACE05-Evt 的预处理代码使用了 OneIE 的,请使用以下指令并将预处理后的数据集放在 data/oneie

## OneIE Preprocessing, ACE_DATA_FOLDER -> ace_2005_td_v7
$ tree data/oneie/ace05-EN 
data/oneie/ace05-EN
├── dev.oneie.json
├── english.json
├── english.oneie.json
├── test.oneie.json
└── train.oneie.json

提示:

  • 实验中使用了nltk==3.5 ,使用nltk==3.6+ 可能会导致句子数量变化。

没有搞到这个数据

CASIE

casie的预处理代码在 data/casie目录.请使用以下指令进行处理

cd data/casie
bash scripts/download_data.bash
bash scripts/download_corenlp.bash
bash run.bash
cd ../../

直接运行失败了,看脚本依次处理:

scripts/download_data.bash 先下载了CASIE库,并将数据找到拷贝出来,并用命令行删除file_id为999 10001 10002的三个包含某些错误的文件。

scripts/download_corenlp.bash 下载corenlp 网速很慢,把文件中的链接复制,使用迅雷下载,速度会快一些。

最后将文件复制、解压到相应目录。

快速数据处理指令

  1. 根据数据集预处理内容准备数据 Dataset preprocessing

    运行前将data_config中的所有没有搞到的数据集的配置文件全部删掉,不删可能会因为抛出异常跳过同类数据集。

    $ tree data_config
    data_config
    ├── absa
    │   ├── pengb_14lap.yaml
    │   ├── pengb_14res.yaml
    │   ├── pengb_15res.yaml
    │   └── pengb_16res.yaml
    ├── entity
    │   └── conll03.yaml
    ├── entity_zh
    │   └── zh_weibo.yaml
    ├── event
    │   └── casie.yaml
    └── relation├── conll04.yaml├── NYT-multi.yaml└── scierc.yaml
    
  2. 运行bash run_data_generation.bash 生成所有数据集,最终生成的目录。
    在这里插入图片描述

  3. 运行bash run_sample.bash 采样形成低资源数据集

转换详细步骤说明

  1. 读取数据集配置文件并自动查找读取数据的任务格式(task_format )类 ;
  2. 基于配置文件,任务格式实例读取数据;
  3. 根据不同的生成格式(generation_formats)生成对应格式的数据;
  • 读取配置文件中的表情映射用于修改原始标注中的标签名
  • 生成数据文件格式

数据集设置示例

# data_config/entity/conll03.yaml
name: conll03               # Dataset Name
path: data/conll03  # Dataset Folder
data_class: CoNLL03         # Task Format
split:                      # Dataset Splittrain: eng.trainval: eng.testatest: eng.testb
language: en
mapper: # Label MapperLOC: locationORG: organizationPER: personMISC: miscellaneous
 $ tree converted_data/text2spotasoc/entity/conll03
converted_data/text2spotasoc/entity/conll03
├── entity.schema
├── event.schema
├── record.schema
├── relation.schema
├── test.json
├── train.json
└── val.json

Example of entity

{"text": "EU rejects German call to boycott British lamb .","tokens": ["EU", "rejects", "German", "call", "to", "boycott", "British", "lamb", "."],"record": "<extra_id_0> <extra_id_0> organization <extra_id_5> EU <extra_id_1> <extra_id_0> miscellaneous <extra_id_5> German <extra_id_1> <extra_id_0> miscellan
eous <extra_id_5> British <extra_id_1> <extra_id_1>","entity": [{"type": "miscellaneous", "offset": [2], "text": "German"}, {"type": "miscellaneous", "offset": [6], "text": "British"}, {"type": "organization", "offset": [0], "text": "EU"}],"relation": [],"event": [],"spot": ["organization", "miscellaneous"],"asoc": [],"spot_asoc": [{"span": "EU", "label": "organization", "asoc": []}, {"span": "German", "label": "miscellaneous", "asoc": []}, {"span": "British", "label": "miscellaneous", "asoc": []}]
}

小样本数据集采样

See details in run_sample.bash, it will generate all low-resource datasets for experiments.

bash run_sample.bash

Low-ratio smaple

 $ python scripts/sample_data_ratio.py -h
usage: sample_data_ratio.py [-h] [-src SRC] [-tgt TGT] [-seed SEED]optional arguments:-h, --help  show this help message and exit-src SRC-tgt TGT-seed SEED

Usage: sample 0.01/0.05/0.1 of training instances for low-ratio experiments

python scripts/sample_data_ratio.py \-src converted_data/text2spotasoc/entity/mrc_conll03 \-tgt test_conll03_ratio 

N-shot Sample

 $ python scripts/sample_data_shot.py -h
usage: sample_data_shot.py [-h] -src SRC -tgt TGT -task {entity,relation,event} [-seed SEED]optional arguments:-h, --help            show this help message and exit-src SRC              Source Folder Name-tgt TGT              Target Folder Name, n shot sampled-task {entity,relation,event}N-Shot Task name-seed SEED            Default is None, no random

Usage: sample 1/5-10-shot of training instances for low-shot experiments

python scripts/sample_data_shot.py \-src converted_data/text2spotasoc/entity/mrc_conll03 \-tgt test_conll03_shot \-task entity

Note:

  • -task indicates the target task: entity, relation and event

这篇关于菜鸟笔记-信息抽取模型UIE代码学习-数据准备的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/334976

相关文章

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,