部署43服务器,nsx_env环境,GPU (Tesla P100 16G)
python3 -m pip install -r requirements.txt
代码结构
- 数据预处理 preprocess.py
利用正则定位噪声,对原始数据的清洗
清除非中英文和非常见标点符号的字符
......
标注4种类型的实体
采用BIO标注策略
修改longfor数据的处理代码bug
去除paddleLAC提取出的数字时间
去除无标注实体的句子
训练集/验证集/测试集划分
将清洗后的数据转换成CONLL格式
数据量2342*32
-
构建实体识别模型 model.py
尝试使用多种预训练语言模型(BERT/AL_BERT/ROBERT),并分别下接了IDCNN-CRF和BLSTM-CRF两种结构来构建实体识别模型。
-
工具类 utils.py
数据迭代器,用于生成batch数据喂给模型
-
模型训练 train_finetune.py
- 数据的喂入
- 模型的fine-tuning
- 模型保存
-
模型预测 predict.py
- 读取最优F1结果的模型,对测试集进行预测
- 将生成的概率文件复原成文字结果
-
post_process.py
后处理脚本
-
config.py
超参数设置和路径设置
- BLSTM+CRF
test: f1: 0.82073, precision: 0.70942, recall: 0.97346
-
BLSTM+CRF+BERT
尝试加入
BERT-Base, Chinese
(版本chinese_L-12_H-768_A-12),模型参数量过大,训练太慢,放弃; -
BLSTM+CRF+ALBERT
- 使用
albert-base, chinese
,去掉BLSTM层- 迭代15次,用时11个小时
- test: f1: 0.90598, precision: 0.92791, recall: 0.88505
- 使用
albert-large, chinese
,去掉BLSTM层- 迭代20次,用时12个小时,一次迭代需55分钟
- test: f1: 0.91092, precision: 0.92695, recall: 0.89544
- 尝试
albert-xlarge, chinese
- 报OOM错误,内存不够,放弃!
- 使用
albert-large, chinese
,加入BLSTM层- 一次迭代需一个半小时
- 调整max_len=150,batch_size=64后,一次迭代需50分钟左右,test一次1个半小时左右
- test: f1: 0.89363, precision: 0.91806, recall: 0.87047(未迭代完....)
- 继续改进
- 加入
自动混合精度训练
- 重计算技巧?AdaFactor?
- 迭代10次之后才开始计算在测试集上的PRF值
- 加入
- 使用