# XF-Event-Extraction
## 天池中医药NER冠军方案已经开源,欢迎star
项目链接:https://github.com/z814081807/DeepNER
2020
科大讯飞事件抽取挑战赛
比赛链接:http://challenge.xfyun.cn/topic/info?type=hotspot
结果:
| Name | Score | Rank|Team member|
| :--------|:------|:----|:----------|
|我是蛋糕王 | 0.73859| 1 |https://github.com/WuHuRestaurant<br>https://github.com/aker218|
事件抽取系统,包含触发词(trigger),事件论元(role),事件属性(attribution)的抽取。基于 pytorch 的 pipeline 解决方案。
## 主要思路
将任务分割为**触发词抽取**,**论元抽取**,**属性抽取**。具体而言是论元和属性的抽取结果依赖于**触发词**,因此只有一步误差传播。**因 time loc 并非每个句子中都存在,并且分布较为稀疏,因此将 time & loc 与 sub & obj 的抽取分开(role1 提取 sub & obj;role2 提取 time & loc)**
模型先进行**触发词提取**,由于复赛数据集的特殊性,模型限制抽取的事件仅有一个,**如果抽取出多个触发词,选择 logits 最大的 trigger 作为该句子的触发词**,如果没有抽取触发词,筛选整个句子的 logits,取 argmax 来获取触发词;
然后根据触发词抽取模型抽取的触发词,分别输入到 role1 & role2 & attribution 模型中,进行后序的论元提取和属性分类;四种模型都是基于 Roberta-wwm 进行实验,加入了不同的特征。
最后将识别的结果进行整合,得到提交文件。
### pipeline 思路如下:
<div align=center><img width="400" height="300" alt="pipeline" src="./imgs/pipeline.png"/></div>
### trigger 提取器:
trigger 提取采用的特征是**远程监督 trigger**,把所有标注数据当做一个知识库,对当前文本进行匹配。注:在训练时,需要排除自身的label,我们采用的是KFold的训练集 distant trigger 构造,即将训练集分成K份,用前K-1份的所有label当做后一份的知识库,构造训练数据的distant trigger;test 时候采用所有 trigger。
在测试时若出现预测为空,选取 distant trigger logits 最大的解码输出 trigger。
具体模型如下:
<div align=center><img width="400" height="300" alt="trigger" src="./imgs/trigger.png"/></div>
### role 提取器:
role 采用的特征是**trigger的相对距离**,然后采用了苏神的 **Conditional Layer Norm** 来让整个句子融入 trigger 信息,同样采用 Span 解码的方式。由于数据中 subject/object 分布相似,同时与 time/loc 分布相差很大,我们进一步进行了优化,将前两者和后两者的抽取分开,防止 time/loc 的数据对 subject/object 的 logits 稀疏化。
<div align=center><img width="400" height="300" alt="role" src="./imgs/role.png"/></div>
### attribution 分类器:
attribution 分类器并没有进行特殊优化,采用了一个**动态窗口**的方法,我们认为某一 trigger 的 tense & polarity 只与其附近的语境有关,因此我们设定了一个窗口,对该窗口内进行 pooling 操作,然后利用 pooling 后的 logits 进行多任务学习,同时分类出 tense 和 polarity。因属性数据类别不均及其严重,最后我们用 ERNIE 模型做了一个10折交叉验证,有较大的提升。
<div align=center><img width="400" height="300" alt="attribution" src="./imgs/attribution.png"/></div>
### 数据增强:
本次比赛主要的上分点在于数据增强的工作,初赛和复赛数据的分布差别极大,一起训练反而会导致结果下降。因此我们做了一个初赛数据筛选的工作,筛选出与复赛数据分布相近的数据进行增量训练。主要流程详见PPT中**基于标签验证的数据增强部分**。
## 项目运行主要环境
运行系统:
```python
Ubuntu 18.04.4
```
---
python:
```python
python3.7
```
----
python 运行环境,可以通过以下代码完成依赖包安装:
```python
pip install -r requirements.txt
```
```python
transformers==2.10.0
pytorch_crf==0.7.2
numpy==1.16.4
torch==1.5.1+cu101
tqdm==4.46.1
scikit_learn==0.23.2
torchcrf==1.1.0
```
CUDA:
```python
CUDA Version: 10.2 Driver 440.100 GPU:Tesla V100 (32G) * 2
```
## 项目目录说明
```shell
xf_ee
├── data # 数据文件夹
│ ├── final # 复赛数据(处理过的)
│ │ ├── mid_data # 中间数据 (词典等)
│ │ ├── preliminary_clean # 清洗后的初赛数据
│ │ └── raw_data # 复赛经过初步清洗后的 raw_data
│ └── preliminary # 初赛数据(略)
│
├── out # 存放训练的模型
│ ├── final # 复赛各个单模型(trigger/role/attribution)
│ └── stack # 十折交叉验证的 attribution 模型
│
├── script/final # 放训练 / 评估 / 测试 的脚本
│ ├── train.sh
│ ├── dev.sh
│ └── test.sh
│
├── src_final
│ ├── features_analysis # 数据分析
│ │ └── images # 分析时画得一些图
│ ├── preprocess
│ │ ├── convert_raw_data.py # 处理转换原始数据
│ │ ├── convert_raw_data_preliminary.py # 转换初赛数据为复赛格式并处理
│ │ └── processor.py # 转换数据为 Bert 模型的输入
│ ├── utils
│ │ ├── attack_train_utils.py # 对抗训练 FGM / PGD
│ │ ├── dataset_utils.py # torch Dataset
│ │ ├── evaluator.py # 模型评估
│ │ ├── functions_utils.py # 跨文件调用的一些 functions
│ │ ├── model_utils.py # 四个任务的 models
│ │ ├── options.py # 命令行参数
│ | └── trainer.py # 训练器
|
├── 答辩PPT # 决赛PPT
├── dev.py # 用于模型评估
├── ensemble_predict.py # 用百度 ERNIE 模型对 attribution 十折交叉验证
├── predict_preliminary.py # 对初赛数据进行清洗
├── readme.md # ...
├── test.py # pipeline 预测复赛数据 (包含 ensemble)
└── train.py # 模型训练
```
## 使用说明
### 数据转换
数据转换部分只提供代码和已经转换好的数据,具体操作在 **src_final/preprocess**中的 convert_raw_data中,包含对初赛/复赛数据的清洗和转换。
### 训练阶段
```shell
bash ./script/final/train.sh
```
注:**脚本中指定的 BERT_DIR 指BERT所在文件夹,BERT采用的是哈工大的全词覆盖wwm模型,下载地址 https://github.com/ymcui/Chinese-BERT-wwm ,自行下载并制定对应文件夹,并将 vocab.txt 中的两个 unused 改成 [INV] 和 [BLANK](详见 processor 代码中的 fine_grade_tokenize)**
**如果设备显存不够,自行调整 train_batch_size,脚本中的 batch_size(32)在上述环境中占用显存为16G**
**最终训练的结果是每一个 epoch 下存一次,线下评估结果在 eval_metric.txt 下,保留最优线下结果作为训练结果,其余删掉即可**
可更改的公共参数有
```
lr: bert 模块的学习率
other_lr: 除了bert模块外的其他学习率(差分学习率)
weig
没有合适的资源?快使用搜索试试~ 我知道了~
科大讯飞2020事件抽取挑战赛第一名解决方案&完整事件抽取系统.zip
共104个文件
json:41个
pyc:26个
py:18个
需积分: 3 0 下载量 121 浏览量
2024-01-15
10:48:36
上传
评论
收藏 18.32MB ZIP 举报
温馨提示
方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、项目管理还是个人发展,方案的制定都有助于明确目标并提供达成目标的路径。 资源优化: 方案在设计时考虑了可用资源,以最大化其效用。通过明智的资源分配,方案可以在有限的资源条件下实现最大的效益,提高效率并减少浪费。 风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据驱动的方法有助于减少不确定性,提高决策的准确性。 团队协作: 复杂的问题通常需要多个人的协同努力。方案提供了一个共同的框架,帮助团队成员理解各自的职责和任务,促进协作并确保整个团队朝着共同的目标努力。 监控与评估: 方案通常包括监控和评估的机制,以确保实施的有效性。通过定期的评估,可以及时调整方案,以适应变化的环境或新的挑战。 总体而言,方案的作用在于提供一种有序、有计划的方法,以解决问题、实现目标,并在实施过程中最大化资源利用和风险管理。
资源推荐
资源详情
资源评论
收起资源包目录
科大讯飞2020事件抽取挑战赛第一名解决方案&完整事件抽取系统.zip (104个子文件)
train.csv 1.46MB
test.csv 149KB
submit_sample.csv 64KB
preliminary_pred_triggers_pred_roles.json 11.01MB
preliminary_data_pred_trigger_and_role.json 10.93MB
raw_preliminary.json 6.84MB
preliminary_data_pred_trigger.json 6.73MB
preliminary_stack_10fold.json 6.5MB
raw_preliminary_clean.json 6.22MB
raw_preliminary.json 6.21MB
preliminary_stack.json 6.11MB
trigger_third.json 4.96MB
trigger_first.json 4.66MB
raw_stack_clean.json 4.28MB
role_first.json 3.47MB
role1_first.json 3.47MB
stack.json 2.75MB
raw_stack.json 2.61MB
raw_stack.json 2.53MB
train.json 2.48MB
stack.json 2.17MB
role1_third.json 2.17MB
role_third.json 2.17MB
train.json 1.85MB
submit_v1_ensemble.json 1.53MB
submit_v1.json 1.53MB
trigger_second.json 1.4MB
test.json 1.06MB
submit_sample.json 961KB
role_second.json 851KB
role1_second.json 851KB
tense.json 736KB
trigger_third_new.json 662KB
sentences.json 630KB
dev.json 335KB
test.json 320KB
dev.json 283KB
triggers_dict.json 15KB
triggers_dict.json 4KB
attribution2id.json 306B
role2id.json 286B
tense2id.json 203B
polarity2id.json 159B
trigger2id.json 94B
readme.md 11KB
role.png 95KB
attribution.png 57KB
trigger.png 54KB
pipeline.png 27KB
res.png 19KB
attributions_in_event.png 14KB
tense.png 13KB
attributions.png 13KB
polarity.png 12KB
final_text_len.png 11KB
iFLYTEKAI2020-EE-我是蛋糕王.pptx 650KB
processor.py 23KB
convert_raw_data.py 18KB
predict_preliminary.py 16KB
model_utils.py 15KB
evaluator.py 13KB
test.py 12KB
train.py 8KB
convert_raw_data_preliminary.py 7KB
options.py 6KB
trainer.py 6KB
ensemble_predict.py 6KB
functions_utils.py 4KB
dev.py 4KB
dataset_utils.py 4KB
attack_train_utils.py 3KB
__init__.py 169B
__init__.py 169B
__init__.py 168B
processor.cpython-37.pyc 16KB
processor.cpython-36.pyc 15KB
model_utils.cpython-37.pyc 13KB
convert_raw_data.cpython-36.pyc 12KB
convert_raw_data.cpython-37.pyc 12KB
model_utils.cpython-36.pyc 10KB
evaluator.cpython-37.pyc 10KB
evaluator.cpython-36.pyc 9KB
trainer.cpython-36.pyc 5KB
trainer.cpython-37.pyc 5KB
options.cpython-36.pyc 5KB
dataset_utils.cpython-36.pyc 5KB
dataset_utils.cpython-37.pyc 5KB
options.cpython-37.pyc 5KB
functions_utils.cpython-37.pyc 4KB
ensemble_predict.cpython-36.pyc 4KB
ensemble_predict.cpython-37.pyc 4KB
functions_utils.cpython-36.pyc 4KB
attack_train_utils.cpython-37.pyc 3KB
attack_train_utils.cpython-36.pyc 3KB
__init__.cpython-37.pyc 315B
__init__.cpython-37.pyc 309B
__init__.cpython-37.pyc 304B
__init__.cpython-36.pyc 303B
__init__.cpython-36.pyc 297B
__init__.cpython-36.pyc 292B
共 104 条
- 1
- 2
资源评论
JJJ69
- 粉丝: 6236
- 资源: 5778
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于java开发的密码解锁APP,包含手势密码解锁+指纹密码解锁+源码+项目界面展示(毕业设计&课程设计&项目开发)
- 基于单片机的智能窗帘设计
- 基于STM32F103C8T6+LCD1602+MCP6S28的8通道模拟可编程增益放大器Proteus仿真
- 5G RAN NR TDD单用户峰值吞吐率计算过程.pptx
- 基于Objective-C开发的手势密码解锁和面容解锁(代码简洁高效通俗易懂)+源码+开发文档+源码解析(毕业设计&课程设计)
- LangChain学习之 Question And Answer的操作附带数据文件
- linux常用命令大全.zip
- CATIA入门操作案例-正八边异形带孔凸台绘制,等距点绘制正多边形,凸台绘制
- 大型代码语言模型的项目级提示生成pdf
- 纸片战争The War of paper.sb3
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功