事件抽取模型(基于paddlehub)深度解析

问题描述

事件抽取 (Event Extraction, EE)是指从自然语言文本中抽取事件并识别事件类型和事件元素的技术。事件抽取是智能风控、智能投研、舆情监控等人工智能应用的重要技术基础,受到学术界和工业界的广泛关注。事件抽取任务涉及事件句抽取、触发词识别、事件类型判别、论元抽取等复杂技术,具有一定的挑战。

环境准备

  1. python适用版本 3.7.x(本代码测试时使用依赖见 ./requirements.txt )
  2. paddlepaddle-gpu >= 1.7.0、paddlehub >= 1.6.1
  3. 请转至paddlepaddle官网按需求安装对应版本的paddlepaddle

依赖安装

pip install -r ./requirements.txt

模型下载&使用

hub install ernie_tiny==1.1.0

更多预训练模型参考 PaddleHub语义模型

使用时修改 sequence_label.py 中的 model_name = "ernie_tiny"

模型训练

需要在data下放训练集(train.json)、验证集(test.json)、测试集(test.json,可用dev.json代替)、预测集(test1.json)和事件schema文件(event_schema.json),可从比赛官网下载

训练触发词识别模型

sh run_trigger.sh 0 ./data/ models/trigger

模型保存在models/trigger、预测结果保存在data/test1.json.trigger.pred

训练论元角色识别模型

sh run_role.sh 0 ./data/ models/role

模型保存在models/role、预测结果保存在data/test1.json.role.pred

提交预测结果

把结果按照官网给定的格式提交

预测结果处理成提交格式

python data_process.py --trigger_file data/test1.json.trigger.pred --role_file data/test1.json.role.pred --schema_file data/event_schema.json --save_path data/test1_pred.json

整体预测结果保存在 data/test1_pred.json

提交结果
提交data/test1_pred.json到 比赛官网

训练触发词识别模型

run_trigger.sh

#!/bin/bash
export CUDA_VISIBLE_DEVICES="2, 3"
export FLAGS_eager_delete_tensor_gb=0 #GC(Garbage Collection)的原理是在网络运行阶段及时释放无用变量的显存空间,达到节省显存的目的
export FLAGS_fraction_of_gpu_memory_to_use=0.3 #设置预分配显存池

data_dir=./data
ckpt_dir=./models/trigger

python sequence_label.py --num_epoch 3 \
    --learning_rate 3e-5 \
    --data_dir ${data_dir} \
    --schema_path ${data_dir}/event_schema.json \
    --train_data ${data_dir}/train.json \
    --dev_data ${data_dir}/dev.json \
    --test_data ${data_dir}/dev.json \
    --predict_data ${data_dir}/test1.json \
    --do_train True \
    --do_predict True \
    --do_model trigger \
    --max_seq_len 256 \
    --batch_size 8 \
    --model_save_step 3000 \
    --eval_step 200 \
    --checkpoint_dir ${ckpt_dir}

sequence_label.py

猜你喜欢

转载自blog.csdn.net/weixin_42462804/article/details/105949961
今日推荐