# CHIP-2020 中文医学文本实体关系抽取
## Dataset
CHIP-2020-2中文医学文本实体关系抽取数据集,数据集包含儿科训练语料和百种常见疾病训练语料,儿科训练语料来源于518种儿科疾病,百种常见疾病训练语料来源于109种常见疾病。近7.5万三元组数据,2.8万疾病语句和53种定义好的schema。
同时相比于医学教材,临床实践文本指代关系明显,往往一段话中不会直接提及该主题疾病,因此针对临床实践类语料进行预处理,设计规则在每句之前增加主题疾病实体,并以@和原文分割。抽取语料时,如果三元组来源于上下多个句子,此时将句子进行拼接,”spo_list”中的Combined字段记录拼接信息。若句子中存在多个三元组,则记录在”spo_list”字段中,”text”字段记录来源文本。
数据原始格式形如:
### 数据集格式
```
{
"spo_list" : [
{
"Combined" : true,
"object" : {
"@value" : "外照射"
},
"object_type" : {
"@value" : "其他治疗"
},
"predicate" : "放射治疗",
"subject" : "慢性胰腺炎",
"subject_type" : "疾病"
},
{
"Combined" : true,
"object" : {
"@value" : "外照射"
},
"object_type" : {
"@value" : "其他治疗"
},
"predicate" : "放射治疗",
"subject" : "非肿瘤性疼痛",
"subject_type" : "疾病"
}
],
"text" : "慢性胰腺炎@### 低剂量放射 自1964年起,有几项病例系列报道称外照射 (5-50Gy) 可以有效改善慢性胰腺炎患者的疼痛症状。慢性胰腺炎@从概念上讲,外照射可以起到抗炎和止痛作用,并且已经开始被用于非肿瘤性疼痛的治疗。"
}
```
本代码需要将数据处理成如下的格式:
```
{
"spo_list" : [
{
"Combined" : true,
"object" : "外照射",
"object_type" : "其他治疗",
"predicate" : "放射治疗",
"subject" : "慢性胰腺炎",
"subject_type" : "疾病"
},
{
"Combined" : true,
"object" : "外照射",
"object_type" : "其他治疗",
"predicate" : "放射治疗",
"subject" : "非肿瘤性疼痛",
"subject_type" : "疾病"
}
],
"text" : "慢性胰腺炎@### 低剂量放射 自1964年起,有几项病例系列报道称外照射 (5-50Gy) 可以有效改善慢性胰腺炎患者的疼痛症状。慢性胰腺炎@从概念上讲,外照射可以起到抗炎和止痛作用,并且已经开始被用于非肿瘤性疼痛的治疗。"
}
```
### schemas格式
数据集中schemas的原始格式如下:
schemas需被处理成如下格式:
```
... ...
{"subject_type": "疾病", "predicate": "发病部位", "object_type": "部位"}
{"subject_type": "疾病", "predicate": "转移部位", "object_type": "部位"}
{"subject_type": "疾病", "predicate": "外侵部位", "object_type": "部位"}
... ...
```
### dataloader单条格式
`{'text': text, 'spo_list': [(s, p, o)]}`
ATTENTION:
- **`schema`中的`predicate`不能重复,如有重复要更改,加以区别,否则就算`object_type`和`subject_type`不一致,只要`predicate`一致,就认为是一个关系。数据里的`predicate`也要同步更改。**
## Project Structure
```
./
├── README.md
├── chinese_roformer-v2-char_L-12_H-768_A-12 roformer-v2 12层base版
│ ├── bert_config.json
│ ├── bert_model.ckpt.data-00000-of-00001
│ ├── bert_model.ckpt.index
│ ├── bert_model.ckpt.meta
│ ├── checkpoint
│ └── vocab.txt
├── chinese_roformer-v2-char_L-6_H-384_A-6 roformer-v2 12层base版
│ ├── bert_config.json
│ ├── bert_model.ckpt.data-00000-of-00001
│ ├── bert_model.ckpt.index
│ ├── bert_model.ckpt.meta
│ ├── checkpoint
│ └── vocab.txt
├── config.py 部分超参数配置
├── data
│ ├── chip2020 数据集
│ │ ├── 53_schemas.json
│ │ ├── train_data.json
│ │ └── val_data.json
│ └── pred 最佳模型预测样本
│ ├── val_pred_ep38.json
│ └── val_pred_ep73.json
├── dataloader.py 数据编码器
├── evaluate.py 模型评估
├── images 数据绘图
│ ├── train_loss.png
│ ├── train_loss_base.png
│ ├── val_f1.png
│ └── val_f1_base.png
├── log 日志
│ ├── f1.out
│ ├── nohup.out
│ ├── nohup_base.out
│ ├── train_log.csv
│ └── train_log_base.csv
├── main.py
├── model.py 模型文件
├── path.py 项目路径
├── plot.py 画图工具
├── predict.py 预测文件
├── report 模型评估报告
│ ├── f1.csv
│ ├── predicate_f1.csv
│ └── predicate_f1_base.csv
├── schemaloader.py schema加载器
├── test.py token转可读字符
├── train.py 训练
├── utils bert4keras工具包,可pip下载
│ ├── __init__.py
│ ├── adversarial.py
│ ├── backend.py
│ ├── layers.py
│ ├── models.py
│ ├── optimizers.py
│ ├── snippets.py
│ └── tokenizers.py
└── weights 保存的权重
├── gplinker_roformer_best.h5
└── gplinker_roformer_v2_best.h5
10 directories, 51 files
```
## Requirements
```
Keras==2.2.4
matplotlib==3.4.0
pandas==1.2.3
pydot==1.4.1
tensorflow==1.14.0
tqdm==4.61.2
```
## Steps
1. 将数据转换成规定格式
2. 修改path.py中的地址
3. 根据需要修改model.py模型结构
4. 调整超参数
5. fit前debug
6. 训练
## Model
### 预训练模型
> RoFormer-v2 base版,是SimBERT模型的升级版。
>
> [https://github.com/ZhuiyiTechnology/roformer-sim](https://github.com/ZhuiyiTechnology/roformer-sim)
>
> 基于UniLM思想、融检索与生成于一体的BERT模型。
>
> 权重下载:[https://github.com/ZhuiyiTechnology/pretrained-models](https://github.com/ZhuiyiTechnology/pretrained-models)
### 三元组抽取下游模型
> [GlobalPointer:用统一的方式处理嵌套和非嵌套NER](https://spaces.ac.cn/archives/8373)
>
> [Efficient GlobalPointer:少点参数,多点效果](https://spaces.ac.cn/archives/8877)
>
> [GPLinker:基于GlobalPointer的实体关系联合抽取](https://spaces.ac.cn/archives/8888)
gplinker的标签loader有3个:`batch_entity_labels`、`batch_head_labels`、`batch_tail_labels`。
- `batch_entity_labels`为实体指针,实体头指向实体,维度(batch_size, 2, batch内最大单条object数, 2),其中第二维包括subject和object指针,subject和object指针的第三维数量都要填充到batch内最大单条object数。第四维是头指针和尾指针,第一个是实体头在tokens中的下标,第二个是实体尾在tokens中的下标。`batch_entity_labels`的GlobalPointer中需要mask掉下三角,因为实体头不可能出现在实体为后面。
- `batch_head_labels`为头对头指针,subject
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于python实现中文医学文本实体关系抽取源码+数据集+项目说明.zip 【项目介绍】 CHIP-2020-2中文医学文本实体关系抽取数据集,数据集包含儿科训练语料和百种常见疾病训练语料,儿科训练语料来源于518种儿科疾病,百种常见疾病训练语料来源于109种常见疾病。近7.5万三元组数据,2.8万疾病语句和53种定义好的schema。 同时相比于医学教材,临床实践文本指代关系明显,往往一段话中不会直接提及该主题疾病,因此针对临床实践类语料进行预处理,设计规则在每句之前增加主题疾病实体,并以@和原文分割。抽取语料时,如果三元组来源于上下多个句子,此时将句子进行拼接,”spo_list”中的Combined字段记录拼接信息。若句子中存在多个三元组,则记录在”spo_list”字段中,”text”字段记录来源文本。 基于python实现中文医学文本实体关系抽取源码+数据集+项目说明基于python实现中文医学文本实体关系抽取源码+数据集+项目说明基于python实现中文医学文本实体关系抽取源码+数据集+项目说明基于python实现中文医学文本实体关系抽取源码+数据集+项目说明基于pytho
资源推荐
资源详情
资源评论
收起资源包目录
基于python实现中文医学文本实体关系抽取源码+数据集+项目说明.zip (55个子文件)
chip2020_relation_extraction-gplinker
chinese_roformer-v2-char_L-6_H-384_A-6
checkpoint 193B
bert_config.json 248B
vocab.txt 52KB
evaluate.py 4KB
plot.py 1KB
chinese_roformer-v2-char_L-12_H-768_A-12
checkpoint 197B
bert_config.json 250B
vocab.txt 52KB
main.py 487B
data
chip2020
val_data.json 2.46MB
train_data.json 10.08MB
53_schemas.json 5KB
pred
val_pred_ep73.json 3.92MB
val_pred_ep38.json 4.01MB
predict.py 4KB
utils
__init__.py 49B
tokenizers.py 15KB
optimizers.py 42KB
layers.py 55KB
adversarial.py 4KB
models.py 91KB
backend.py 13KB
snippets.py 30KB
model.py 3KB
.idea
webServers.xml 607B
vcs.xml 180B
misc.xml 213B
GPLinker.iml 345B
inspectionProfiles
Project_Default.xml 12KB
profiles_settings.xml 174B
modules.xml 268B
deployment.xml 804B
csv-plugin.xml 792B
.gitignore 182B
remote-mappings.xml 598B
report
f1.csv 5KB
predicate_f1_base.csv 2KB
predicate_f1.csv 2KB
dataloader.py 6KB
path.py 975B
.gitignore 2KB
images
train_loss_base.png 71KB
val_f1.png 75KB
val_f1_base.png 73KB
train_loss.png 76KB
schemaloader.py 340B
train.py 3KB
test.py 533B
README.md 22KB
log
train_log_base.csv 3KB
f1.out 4KB
nohup.out 47KB
train_log.csv 6KB
nohup_base.out 49KB
config.py 209B
共 55 条
- 1
资源评论
猰貐的新时代
- 粉丝: 1w+
- 资源: 2571
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python 模块和 IPython Notebooks,用于《Python 统计学入门》一书.zip
- Python 概览.zip
- 基于深度学习的火焰场景识别matlab仿真,包括程序,中文注释,仿真操作步骤
- 机械臂RLS控制程序matlab simulink
- bellsoft-jdk8u432+7-windows-amd64.msi
- android 移动应用与开发
- 运动物体识别 opencv python
- 技术资料分享uCOS-II信号量集很好的技术资料.zip
- 技术资料分享ucOS-II入门教程(任哲)很好的技术资料.zip
- 技术资料分享UCOSII 2.90 ReleaseNotes很好的技术资料.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功