事件抽取模型(基於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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章