🗒️基于Bert微调的问答系统
00 分钟
2023-9-1
2023-9-5
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.tsvWikiQA-dev.tsvWikiQA-test.tsv三个tsv文件,其中包含问题Question、句子Sequence和判断是否为答案的标识Label
在这里书写Loader类对实验内容进行加载,并返回一个字典,其中包含问题question、句子answer和判断是否为答案的标识label
训练集样式
训练集样式

2.2. 对原始数据的处理

由于原始数据与Bert的输入有较大区别,故在进行训练之前,需要对数据进行处理,其大体可以分为以下几个步骤:
  1. 将数据导入mindspore.dataset.GeneratorDataset中,以便于后续的直接处理
  1. 将question与answer进行tokenizer的处理,变成token的形式,将label转化成type_cast_op
  1. 将question与answer进行合并,生成[CLS]question[SEP]answer[SEP]的形式,记作input_ids
  1. input_ids剩下的部分用[PAD]进行填充,填充为max_seq_len的长度

3. 模型训练

基于预训练好的BertForSequenceClassification中的bert-base-uncase进行微调,以适配本项目的任务需求。
  • 模型导入
  • 模型评估

4. 模型推理

对于未知的问题及解答(英文)使用训练好的模型进行推理,得到答案是否正确
由于数据集的限制,模型在推理未知的问题上精确度有所缺失

5. 模型评价

  • 与未经微调的mindnlp自带的BertForSequenceClassification在同一验证集上进行验证,准确率有较大提升(上图为未经微调,下图为微调后的)
    • notion image
      notion image
  • 由于答辩效果极好(拜谢凯文哥哥~),最终收获一等奖第二名!
    • notion image
notion image

参考资料


评论
Loading...