type
status
date
slug
summary
tags
category
icon
password
基于Bert微调的自动判卷系统
本项目为基于华为云服务器Ascend: 1*Ascend910与mindspore-ascend 1.10.0的使用Bert进行全模型微调的问答机器人,其可以实现输入一句英文问题以及一个句子,从而获得该句子是否为问题答案的分类。
1. 实验环境准备
- 安装相应的库,由于git上的mindnlp库中不包含
tqdm
库,故需要单独安装。
- 导入相应的包
2. 数据处理
2.1. 实验文件导入
在ours文件夹下存放有
WikiQA-train.tsv
、WikiQA-dev.tsv
、WikiQA-test.tsv
三个tsv文件,其中包含问题Question、句子Sequence和判断是否为答案的标识Label在这里书写
Loader
类对实验内容进行加载,并返回一个字典,其中包含问题question
、句子answer
和判断是否为答案的标识label
2.2. 对原始数据的处理
由于原始数据与Bert的输入有较大区别,故在进行训练之前,需要对数据进行处理,其大体可以分为以下几个步骤:
- 将数据导入
mindspore.dataset.GeneratorDataset
中,以便于后续的直接处理
- 将question与answer进行tokenizer的处理,变成token的形式,将label转化成type_cast_op
- 将question与answer进行合并,生成
[CLS]question[SEP]answer[SEP]
的形式,记作input_ids
- 对
input_ids
剩下的部分用[PAD]
进行填充,填充为max_seq_len
的长度
3. 模型训练
基于预训练好的
BertForSequenceClassification
中的bert-base-uncase
进行微调,以适配本项目的任务需求。- 模型导入
- 模型评估
4. 模型推理
对于未知的问题及解答(英文)使用训练好的模型进行推理,得到答案是否正确
由于数据集的限制,模型在推理未知的问题上精确度有所缺失
5. 模型评价
- 与未经微调的mindnlp自带的
BertForSequenceClassification
在同一验证集上进行验证,准确率有较大提升(上图为未经微调,下图为微调后的)
- 由于答辩效果极好(拜谢凯文哥哥~),最终收获一等奖第二名!
参考资料
- MindNLP开源地址:https://openi.pcl.ac.cn/lvyufeng/mindnlp
- MindNLP文档:https://mindnlp.cqu.ai/en/latest/
- 作者:王大卫
- 链接:https://tangly1024.com/article/program:QABot
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。