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元/小时。

环境配置

  1. 上传文件夹:
    文件夹下载

打开pytorch编辑器

解压文件夹

import zipfile
import os

files = zipfile.ZipFile('cblue.zip', 'r')
files.extractall(os.getcwd())
files.close()

解压后结果

  1. 配置训练环境

编辑器配置相应环境:

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分。

参数解读以及调参方法

  1. 文件夹解释

此文件夹只是对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                 ##脚本程序

  1. 参数说明以及修改方式

参数的修改主要在脚本文件处,目前发现的修改参数的方法如下:

#!/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

修改完成后将其全选复制到脚本运行框中就可以运行了。
同理,按照这种修改方式可以更换成其他模型。

Q&A