微调预训练语言模型(BERT、Roberta、XLBert等),用于计算两个文本之间的相似度(通过句子对分类任务转换),适用于中文文本
2020-07-23:在使用AlBert时,请将该项目下的modeling.py文件更新为官方ALBert项目中下的modeling.py,而后在运行。
2020-3-2:新增tf-serving模块部署方式。
- 项目驱动
- 数据集
- 模型训练
- 模型导出
- 预测
在公司做意图分类以及CAIL比赛时,由于句子对应的标签往往为一个短句描述,而且类别数量或者标签数量在50以上,通过将<sent1, label>转换成<sent, label, 1/0>这种句子对分类形式,并取模型的softmax层输出的概率值来衡量sent和label之间的相似度。
通过这种模式,可解决以下类型的问题:
(1)多分类问题
(2)多标签问题
(3)相似句子匹配问题
该项目所采用的的数据集来源于CAIL2019的要素识别数据集,不过本项目中通过特殊处理将其处理成了下述形式:
第一列为句子对的分类标签(0代表不相关,1代表相关),第二列表示句子sent对应的类别label,第三列代表句子sent。
运行命令:
bash train.sh
运行参数说明:
BERT_BASE_DIR:下载的预训练语言模型所在路径(本文使用的是Roberta-base模型,下载地址:https://pan.baidu.com/s/1qVzinv0KzFzKHIABJKquuw&shfl=sharepset 提取码:usav)
DATA_DIR:数据集所在路径,该路径下包括三个文件train.tsv,dev.tsv,test.tsv
TRAINED_CLASSIFIER:模型保存的路径
MODEL_NAME:模型名称。模型保存时会保存在$TRAINED_CLASSIFIER/$MODEL_NAME目录下
模型训练完成会在指定的$TRAINED_CLASSIFIER/$MODEL_NAME目录下生成ckpt格式的文件,如下所示:
- checkpoint
- model.ckpt-926.data-00000-of-00001
- model.ckpt-926.index
- model.ckpt-926.meta
但这种ckpt格式的模型占用空间很大,一般都需要好几个G的空间,为了压缩模型,也为了进一步加速模型加载的速度,使用export.sh来导出模型
模型导出命令:
bash export.sh
注意,除了需要将do_eval、do_train设置为False,还要把do_export设置为True,再指定模型导出的目录export_dir.
本项目运行导出命令,会生成exported目录,如下图所示:
支持两种模式:
运行命令:
python test_serving.py
方式1:flask简单部署 运行命令:
python test_serving_api.py
运行效果:
方式2:tf-serving部署
详细部署步骤可参考this post