本次小組課程設計主要完成的分析是對於CMeEE中文醫學實體命名,下面是課程設計的流程
查閱官方文件
前人的經驗
GlobalPointer對CMeEE的處理
GlobalPointer對CMeEE的處理GitHub
基於bert4keras的CLUE基准代碼
GlobalPointer NER實體提取
GlobalPointer:用統一的方式處理嵌套和非嵌套NER
Efficient GlobalPointer:少點參數,多點效果
NER實體抽取_GlobalPointer_torch
Efficient GlobalPointer:少點參數,多點效果
任務解讀
任務簡介
jupyter實現
jupyter規格選擇
使用的jupyter是華為雲modelarts系統,基礎環境選擇如下:
服務器選擇北京四:
鏡像源選擇如圖:
類型與規格如圖:
其他選項不用改變,28元/小時。
環境配置
- 上傳文件夾:
文件夾下載
打開pytorch編輯器
解壓文件夾
import zipfile
import os
files = zipfile.ZipFile('cblue.zip', 'r')
files.extractall(os.getcwd())
files.close()
解壓后結果
- 配置訓練環境
編輯器配置相應環境:
pip install --upgrade pip
pip install transformers==4.5.1
pip install jieba
pip install gensim
在編輯器中依次運行各語句。
開始訓練
在jupyter下打開腳本文件
CBLUE_CMeEE/examples/run_ee.sh
如圖:
全選復制。
打開Terminal,
將剛剛復制的腳本程序粘貼到運行框中
開始訓練:
訓練時間大約為30-60分鍾
提交結果
等待運行完成后,在目錄下找到結果文件,下載。
CBLUE_CMeEE/data/result_output/CMeEE_test.json
壓縮后提交到天池平台,結果為62分。
參數解讀以及調參方法
- 文件夾解釋
此文件夾只是對CBLUE原作者的baseline文件夾的簡單修改,按照原作者的說明方式,本文件夾是如下構成的:
├── cblue ##使用的庫函數文件,在jupyter里,自己添加的庫文件需要放在最底層,所以將它從原CBLUE文件夾的分出
├── CBLUE_CMeEE
| └── baselines
| └── run_classifier.py ##‘main’函數文件
| └── ...
| └── CBLUEDatasets
| └── CMeEE
| └── CMeEE_test.json ##測試集, 需要為每條記錄填充"entities"字段,類型為列表。每個識別出來的實體必須包含"start_idx", "end_idx", "type"3個字段。
| └── CMeEE_train.json ##訓練集
| └── CMeEE_dev.json ##驗證集
| └── data
| └── output ##保存運行日志,相應的參數
| └── model_data
| └── result_output
| └── CMeEE_test.json ##運行結束后輸出結果文件的位置
| └── examples
| └── run_ee.sh ##腳本程序
- 參數說明以及修改方式
參數的修改主要在腳本文件處,目前發現的修改參數的方法如下:
#!/usr/bin/env bash
DATA_DIR="CBLUE_CMeEE/CBLUEDatasets" ##載入數據集目錄,不需要修改
TASK_NAME="ee" ##任務名稱為‘CMeEE’不需要修改
MODEL_TYPE="bert" ##根據選擇的模型修改
MODEL_DIR="hfl" ##huggingface文件夾目錄
MODEL_NAME="chinese-bert-wwm" ##huggingface模型名稱
OUTPUT_DIR="CBLUE_CMeEE/data/output" ##運行日志保存目錄
RESULT_OUTPUT_DIR="CBLUE_CMeEE/data/result_output" ##結果輸出目錄
MAX_LENGTH=128 ##以下參數根據CBLUE給出的標准參數表來更改。
EPOCH=5
BATCH_SIZE=32
LEARNING_RATE=4e-5
WARMUP_PROPORTION=0.1
MAX_GRAD_NORM=1.0
if [ $# == 0 ]; then
python CBLUE_CMeEE/baselines/run_classifier.py \
--data_dir=${DATA_DIR} \
--model_type=${MODEL_TYPE} \
--model_dir=${MODEL_DIR} \
--model_name=${MODEL_NAME} \
--task_name=${TASK_NAME} \
--output_dir=${OUTPUT_DIR} \
--result_output_dir=${RESULT_OUTPUT_DIR} \
--do_train \
--max_length=${MAX_LENGTH} \
--train_batch_size=${BATCH_SIZE} \
--eval_batch_size=${BATCH_SIZE} \
--learning_rate=${LEARNING_RATE} \
--epochs=${EPOCH} \
--warmup_proportion=${WARMUP_PROPORTION} \
--earlystop_patience=100 \
--max_grad_norm=${MAX_GRAD_NORM} \
--logging_steps=200 \
--save_steps=200 \
--seed=2021
python CBLUE_CMeEE/baselines/run_classifier.py \
--data_dir=${DATA_DIR} \
--model_type=${MODEL_TYPE} \
--model_name=${MODEL_NAME} \
--model_dir=${MODEL_DIR} \
--task_name=${TASK_NAME} \
--output_dir=${OUTPUT_DIR} \
--result_output_dir=${RESULT_OUTPUT_DIR} \
--do_predict \
--max_length=${MAX_LENGTH} \
--eval_batch_size=${BATCH_SIZE} \
--seed=2021
fi
調參流程
首先在官網查找相應的模型HFL模型庫
本次實驗使用的主要是HFL(哈工大訊飛聯合實驗室提供的模型)
可以看到一共有42個模型。
下面舉一個例子。比如我想要換用一個模型來訓練。
首先在CBLUE的GITHUB里面找到參數修改列表:
這里比如選擇 macbert-base模型訓練。
在HFL模型庫中找到該模型。我們用的是中文所以帶有Chinese前綴。
然后再在腳本文件中將庫文件語句修改一下:
MODEL_NAME="chinese-macbert-base"
同樣的將需要修改的參數修改成CBLUE對應的參數:
MAX_LENGTH=128
EPOCH=5
BATCH_SIZE=32
LEARNING_RATE=4e-5
修改完成后將其全選復制到腳本運行框中就可以運行了。
同理,按照這種修改方式可以更換成其他模型。