CBLUE 中文医疗信息处理基准 NLP (论文复现流程)
本次小组课程设计主要完成的分析是对于CMeEE中文医学实体命名,下面是课程设计的流程
查阅官方文件
CBLUE论文
CBLUE官方简介
天池打榜(截至2022年4月30日)
jupyter官网
前人的经验
GlobalPointer对CMeEE的处理
GlobalPointer对CMeEE的处理GitHub
实体命名识别之嵌套实体识别
基于bert4keras的CLUE基准代码
GlobalPointer NER实体提取
GlobalPointer:用统一的方式处理嵌套和非嵌套NER
【代码复现】NER之GlobalPointer解析
Efficient GlobalPointer:少点参数,多点效果
NER实体抽取_GlobalPointer_torch
Efficient GlobalPointer:少点参数,多点效果
中文预训练RoBERTa模型
任务解读
任务简介
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
修改完成后将其全选复制到脚本运行框中就可以运行了。
同理,按照这种修改方式可以更换成其他模型。