問題描述
事件抽取 (Event Extraction, EE)是指從自然語言文本中抽取事件並識別事件類型和事件元素的技術。事件抽取是智能風控、智能投研、輿情監控等人工智能應用的重要技術基礎,受到學術界和工業界的廣泛關注。事件抽取任務涉及事件句抽取、觸發詞識別、事件類型判別、論元抽取等複雜技術,具有一定的挑戰。
環境準備
- python適用版本 3.7.x(本代碼測試時使用依賴見 ./requirements.txt )
- paddlepaddle-gpu >= 1.7.0、paddlehub >= 1.6.1
- 請轉至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}