4 Star 54 Fork 18

绫波绫波零/iMark

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

iMark - 智能阅卷系统

本项目旨在设计和实现一个支持智能化自动阅卷,提供AI自动识别自动评分智能评价数据分析服务的软件平台,并且能够同时在桌面和移动端提供服务。

现阶段项目以 大学数据结构与算法期末考试 情景为切入点,重点解决基本阅卷过程中的一些问题,包括:

  • 试卷识别和存储
  • 不同题型自动评阅
  • 批阅结果智能分析

首先 识别和存储录入的试卷,分析其中的知识点、题型、难度等属性,并构建相应的知识图谱,为后续的智能阅卷提供基础。

对于 客观题,主要研究通过图像识别技术自动识别学生的答案,并进行相应的评分。

对于 主观题,主要研究利用语言大模型自动理解学生的答案,并评估其内容的正确性、逻辑性和表达的清晰度等。

智能阅卷平台 还需要 利用人工智能技术对阅卷结果进行分析和处理,为教师提供教学建议和优化方案,提高教学质量和效果。 最后 ,搭建起软件系统平台承载服务,并在桌面和移动端提供支持。

1 相关理论技术

1.1 文心大模型 ERNIE

文心大模型是百度发布的全球首个知识增强千亿大模型。具有技术领先、全场景覆盖、零门槛使用、真实可落地的四大特点,目标成为百行千业 AI 开发的首选基座大模型。按照任务场景的不同,可以将文心大模型分为三类:NLP大模型、CV大模型和跨模态大模型三类。

本项目需求是借助人工智能技术理解和评判答题内容,重点在于大模型对文字和逻辑的理解分析能力,因此与NLP模型关联性最强。NLP即自然语言处理(Natural Language Processing),它研究能实现人与机器之间用自然语言进行交互的一系列理论和方法,主要集中在对自然语言的深层次理解和有效处理两个方面。文心NLP大模型主要面向 NLP 任务场景,具备超强语言理解能力以及写小说、歌词、诗歌、对联等文学创作能力。此外,文心NLP大模型还创新性地将大数据预训练与多源丰富知识相结合,通过持续学习技术,不断吸收海量文本数据中词汇、结构、语义等方面的新知识,实现模型效果不断进化。

文心一言就是百度基于文心大模型技术推出的生成式对话产品,它的核心技术是ERNIE Bot,这是一种基于Transformer结构的语言模型,依托百度强大的飞桨深度学习平台和文心知识增强大模型持续进化。本文使用基于文心大模型3.5的生成性预训练聊天机器人文心一言作为底层技术支持。

1.1.1 ERNIE SDK

文心一言为开发者提供了成熟的软件开发工具包(Software Development Kit, SDK),即ERNIE SDK。其中,又分为 ERNIE Bot Agent 和 ERNIE Bot两个项目。ERNIE Bot Agent 是百度飞桨推出的基于文心大模型编排能力的大模型智能体开发框架,结合了飞桨星河社区的丰富预置平台功能。ERNIE Bot 则为开发者提供便捷接口,轻松调用文心大模型的文本创作、通用对话、语义向量及AI作图等基础功能。

Diana

​ 图 2‑1 ERNIE SDK 架构

开发者主要通过ERNIE Bot Agent框架对文心一言机器人进行编程和调用。在ERNIE Bot Agent框架中,Agent是一个可以通过行动自主完成设定的目标的智能体。Agent具备自主理解、规划决策能力,能够执行复杂的任务。在用户与Agent的每一轮交互中,agent接收一段自然语言文本作为输入,从输入中分析用户需求,确定需要完成的任务,通过调用外部工具等手段完成任务,最终产生一段自然语言的回复。

Agent的能力来源于其集成的chat model、tool以及memory等组件。Chat model即所调用的文心一言模型,按照其基于的文心大模型版本进行分类,如本文所采用的chat model为ernie-3.5. Tool 模块是智能体(Agent)的辅助工具,可以用来执行一些特定的任务,如获取当前时间、执行代码以及调用内部某 API 执行特定的功能等,通过Tool模块可以使Agent获取到更多信息,也为开发者提供了根据具体需求定制Agent的方法,拓展了Agent的能力范围。Memory模块则赋予了Agent记忆能力,能按照场景需求记录多轮的人机交互消息,并将这些消息上传给Agent分析,使得Agent具有上下文衔接的能力。

1.1.2 Prompt与文心一言的使用

文心一言是生成式的大语言人工智能模型,对于一般的简单场景而言,所需要的输入信息就是用户的“对话内容”,即提示语 Prompt. 在自然语言处理和人工智能领域,提示语 ( Prompt )是用户向计算机程序或大语言模型提供的一组输入集或指令集,以引导其响应或行动。文心一言将根据输入和预置的背景信息给出回应。

然而,如表格 2‑1所示案例,不同格式、标准和内容的输入信息将对文心一言的回应产生极大影响。第一次测试输入的 Prompt 非常贴近日常生活中的用语,没有为人工智能介绍背景、上下文等信息,因此文心一言给出了一长串关于该问题的讨论,力图做到详尽完善地回答。第二次输入的内容详细介绍了问题提出的背景、文心一言需要扮演的角色和思考的角度。可以看到,相较于第一次测试中文心一言的的回应,第二次回应的内容更好地参考了实际场景的要求,如文心一言理解到了题目的总分限制,给出了一个可用的分数。然而,第二次测试没有指定文心一言输出的内容和格式,因此其回应还是显得臃肿复杂、难以实用。在第三次的测试中,用户在第二次测试的输入内容基础上限制了文心一言回应内容的格式,即“直接返回一个数字,代表你的打分,不要有其他内容”,在这样的规则下,开发者就能得到了一个简单直接、更加适用于生产环境的回应。

表格 2‑1文心一言对不同Prompt的回应测试

编号 Prompt Response
1 深度优先搜索算法需要维护一个栈,这个答案打几分? 对于“深度优先搜索算法(DFS)需要维护一个栈”这一说法,从直接的技术实现角度来看,这个说法是正确的,但也可能引发一些讨论。以下是对这个说法的评分和分析: 评分:8/10 分析:…(后续省略)
2 现在你是一名数据结构与算法课程的阅卷老师,负责对学生的答案给出相应的分数。下面引号内的是题目内容:“深度优先搜索算法需要维护一个什么数据结构?”。下面引号内的是学生回答:“需要维护一个栈”。这个题目是填空题,总分5分。 作为数据结构与算法课程的阅卷老师,针对学生的回答“需要维护一个栈”来评估其对于深度优先搜索(DFS)算法的理解,我会按照以下几个标准进行评分: …(此处省略) 基于以上标准,我会给学生的回答4分。虽然学生的回答是准确的,但考虑到DFS算法实现的多样性…(后续省略)
3 现在你是一名数据结构与算法课程的阅卷老师,负责对学生的答案给出相应的分数。下面引号内的是题目内容:“深度优先搜索算法需要维护一个什么数据结构?”。下面引号内的是学生回答:“需要维护一个栈”。这个题目是填空题,总分5分。请你直接返回一个数字,代表你的打分,不要有其他内容。请注意:满足填空题要求的回答都应该得满分,其他答案都是零分。 5

Diana

​ 图 2‑2与人工智能的对话层次

由此可见,类似于老式计算设备的“垃圾输入、垃圾输出”问题也存在于人工智能的应用场景中。模糊的提问主题、缺失的背景信息和未指定的输出格式,都无法得到文心一言满足预期的回应。因此在文心一言的使用中,Prompt的设计是非常重要的一个环节。与人工智能的对话可以分为五个层次,如图2‑2所示。基本提问是对话层次中最基础的一层。它可以帮助用户快速获取关于某个主题或问题的基本信息和建议,并帮助用户更好地了解和解决问题。在此基础上,用户可以在问题中加入一些要求,例如回答的格式、深入的方向、看待的角度和遵守的规则等,从而使文心一言的回应更符合用户预期。角色扮演是一种模拟对话的方法,可以让文心一言和用户在虚拟环境中扮演不同的角色进行对话。通过扮演不同的角色,文心一言能够模拟出具体的情境,从而更好地理解其职责和目的。场景应用的提问是与人工智能对话的最高层次。通过这种方式,用户可以更具体地描述自己的需求和问题,从而获得更精准、更个性化的建议和解决方案。

综上所述,我们在设计和开发基于文心一言的相关技术时,要考虑到用户并不都擅长与人工智能进行有效的交流,需要开发者事先为用户预置一定的信息,帮助用户得到想要的回应。例如,对于用户了解某一领域知识的需求,使用最低层次的对话方式即可;对于用户专业性较强的问题,则需要要求文心一言在回应中保证内容的真实、科学和严谨;对于涉及文心一言不能自发得到的用户私人信息的提问,则需要预置一个向用户请求相关信息、并返回给文心一言的步骤。

那么,文心一言是如何调用其内部的众多组件、根据用户的 Prompt 生成回应的呢?首先,ERNIE Bot Agent 通过接口获取了用户输入的 Prompt 及其他信息,在这一层, Agent 会分析解决用户需求是否需要调用到工具 Tool 、插件 Plugin 。如果需要,Agent 会通过理解能力选择需要的工具或插件调用。工具和插件都支持用户自定义,可以在这里实现返回当前日期、温度、天气等等信息,也可以实现一段代码的执行。在处理完这些逻辑后,Agent 调用底层 Bot 的理解和编排能力,组织回应的内容,并通过接口返回给用户。在这整个过程中,文心一言既可以通过调用工具和插件的方式实现业务,又通过固有的聊天机器人功能返回了一段信息。如图2‑3所示。

Diana

​ 图 2‑3 文心一言组件调用

下面通过一个案例介绍组件调用的具体内容。如图 2‑4所示,用户向文心一言输入 Prompt 为:“六年级张三的语文成绩为99分,请添加这个成绩”。 Agent 在接收到这个需求后,会使用 ERNIE Bot 的自然语言能力理解需求内涵,在捕捉到“添加成绩”的操作指令后,Agent 将从 Tool 中寻找能够完成这个指令的工具。开发者需要提前定义好工具函数 addStuScore ,声明函数的作用、输入值和输出值,并编写好函数实现功能的代码。一旦找到能够完成指令的工具, Agent 将从 Prompt 中自动识别提取函数需要的输入参数。如这个案例里的学生姓名“张三”、学科“语文”和分数“99”就将被 Agent 自动提交到函数 addStuScore 中,分别作为参数 stu, sub, score 执行。执行完毕后, Agent 还将调用 Bot 的组织能力生成一段返回内容,告知用户指令完成情况。这就是使用文心大模型进行应用开发的一种原型。

Diana

​ 图 2‑4 文心一言组件调用举例

1.2 飞桨 PaddleOCR 工具库

Diana

​ 图 2‑5 PaddleOCR工具库(图源:百度AI Studio)

PaddleOCR 是一个基于深度学习技术的OCR(Optical Character Recognition,光学字符识别)工具,它专注于从图片中准确识别并提取文字信息。PaddleOCR 旨在打造一套丰富、领先、且实用的OCR 工具库,助力开发者训练出更好的模型,并应用落地。

如图 2‑5所示, PaddleOCR 基于文本检测、文字识别和版面分析等多种前沿算法,开发出 PP-OCR 和 PP-Structure 等识别和分析模型。 PaddleOCR 还支持开发者在这些模型的基础上进行再训练和二次开发,并且支持模型在多种硬件条件和系统环境下部署,覆盖了表单识别、手写识别和文档分析等多个 OCR 场景。

下面以 PP-OCRv4-server-rec 模型为例,介绍 PaddleOCR 的技术及其使用。

PP-OCRv4-server-rec 是 PaddleOCR 于2023年5月发布的服务端文本识别模型,可实现GPU上毫秒级的文本内容精准识别。该模型是 PP-OCRv4 串联系统中的服务端文本识别模型,具有高精度、高性能和大规模处理能力强的特点。 PaddleOCR 根据部署环境的不同,将通用模型定制成适合各种应用场景的二级模型,例如在适合服务端部署的 server 类模型通常具有极高的性能;在移动端部署的 mobile 模型能够适应硬件资源较低的运行环境等等。

算法实现上, PP-OCRv4-server-rec 的基础算法选用 SVTR ,并对其进行产业适配,使用蒸馏策略、 GTC 指导策略等提升模型精度,实现移动端上实时、高精预测。SVTR(Single Visual Transformer for Scene Text Recognition)是一种用于场景文本识别的单一视觉模型算法。该算法摒弃了传统阶段识别方法,即包含特征提取的视觉模块和文本输出的序列模块,而仅通过单个视觉模型实现了高效的场景文本识别。

Diana

​ 图 2‑6 PaddleOCR工作流程(图源:百度AI Studio)

PP-OCRv4-server-rec 的工作流程是:读取用户输入的图像,通过文本检测模块识别出图像中的文本区域,并将这些区域裁剪下来;之后,使用文本框矫正模块进行矫正,例如对倒置的文本进行摆正等;最后,文本识别模块对处理好的文本框进行识别,并将识别得到的信息输出给用户。图2‑6展示了这些处理,还介绍了文本识别模块使用到的一些算法,如前文介绍的SVTR 等。

1.3 Django REST Framework框架

Django 是一个开源的 Python 语言 Web框架,可以用于快速开发和部署网站。Django 遵循 MTV(Model-Template-View)设计模式,其中 Model 代表数据模型,Template 代表模板, View 代表视图。这种模式允许开发者将应用程序逻辑和界面分离,提高代码的可维护性。此外, Django 还提供了强大的 ORM (对象关系映射)功能,使开发人员可以使用 Python 代码而非 SQL 查询语言来操作数据库。这大大简化了数据库操作过程,提高了开发效率。

Diana

​ 图 2‑7 Django的MTV框架

DRF 框架,全称 Django REST Framework (或简称 DRF ),是一个基于 Django框架的 Web RESTful API 构建工具 。DRF 是一个功能强大且灵活的框架,用于构建 Web 服务,特别是 RESTful 风格的 API. 它提供了丰富的工具和模块,如认证、权限、序列化、视图、路由等,帮助开发者快速、高效地开发 RESTful API.

Diana

​ 图 2‑8 RESTful 风格架构

RESTful 框架,全称为Representational State Transfer (表征性状态转移),是一种基于HTTP 协议的软件架构设计风格。这种设计风格强调资源的定义和操作,使得网络应用程序能够更加简洁、可伸缩和可维护。RESTful 框架并没有引入新的技术或组件,而是利用了现有的Web 标准(如HTTP、URI 等)来定义和约束应用程序的行为。

RESTful 架构将应用程序的功能和数据抽象为资源。每个资源都有一个唯一的标识符(URI),用于访问和操作该资源。这种架构使用统一的接口来对资源进行操作。这包括使用标准的HTTP方法(如GET、POST、PUT、DELETE等)来表示对资源的不同操作,以及使用HTTP状态码来表示操作的结果。

1.4 数据存储技术

1.4.1 MySQL关系型数据库

MySQL 是一个流行的关系型数据库管理系统,由瑞典 MySQL AB 公司开发,现属于 Oracle 公司旗下的产品。 MySQL 将数据保存在不同的表中,而不是将所有数据放在一个“大仓库”内,这样增加了查询性能并提高了灵活性。 MySQL 的语言基于 SQL 标准,系统采用了双授权政策,分为社区版、企业版和集群版。因为 MySQL 体积小、运行速度快、总体拥有成本低和开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库管理系统。

1.4.2 SQLite关系型数据库

SQLite 是一个轻量级的关系型数据库管理系统( RDBMS ),它包含在一个相对小的 C 库中,并提供了一个通过 API 访问的、完整的 SQL 数据库引擎。由于其小巧、快速、可靠和零配置的特性, SQLite 广泛应用于各种应用程序中,从桌面应用到移动设备应用,再到嵌入式系统。

SQLite 不需要一个单独的服务器进程或操作系统级别的配置。它只需要几个标准的 C 库文件就可以运行。同时也不需要安装或管理,只需将 SQLite 库与应用程序一起分发,然后即可开始创建、查询和管理数据库。此外, SQLite 可以在所有主要的操作系统上运行,包括 Windows、Linux、macOS、UNIX 等。

2 系统设计

2.1 系统功能设计

根据上一章节中对智能阅卷系统的功能需求分析,本节设计和给出系统的功能结构设计。智能阅卷系统的功能结构图如图4‑1所示,本系统主要分为智能助理功能、考试管理功能和个人信息功能。

Diana

​ 图 4‑1 智能阅卷系统功能结构

智能助理模块的功能是:能够与用户进行自然语言对话,理解用户的输入信息,并依据理解内容完成页面跳转、功能实现和数据查询等任务。

考试管理模块的主要功能有:实现试卷和答卷的上传与存储,智能自动阅卷功能,试卷信息的管理功能,完成阅卷后的分析生成与查看功能。

个人信息模块的功能是:支持用户通过管理员账号认证教师角色,支持用户修改自己账号的密码和头像等信息。

2.2 系统技术架构设计

智能阅卷系统是基于文心大模型和PaddleOCR技术的Web软件系统,其技术架构如图4‑2所示。

Diana

​ 图 4‑2 智能阅卷系统技术架构

浏览器通过 HTTP 协议与表现层交互。

表现层主要通过 Vue 框架搭建用户界面,使用 Element-UI 组件库提供的页面控件设计。表现层还通过 Ajax 向后端发起请求。

逻辑层使用Python语言进行开发,以基于 Django 的 DRF 框架为主体,向上提供遵守 RESTful 风格的接口。同时,系统的业务逻辑实现还需要调用文心大模型提供的 ERNIE Bot Agent SDK 和百度飞桨的 PaddleOCR 模型与工具库。

数据层使用 MySQL 存储大型业务数据,兼用 SQLite 作为部分临时数据存储。

基础设施层使用 Nginx 作为代理服务器处理和转发请求。系统部署在安装 Linux 系统的服务器上,开销小也易维护。文心大模型 ERNIE 与飞桨 PaddleOCR 都基于百度的飞桨深度学习平台 PaddlePaddle 提供支持。

系统测试采用 DRF 内置的 Testing 类,可实现单元测试和集成测试等。前后端交互的接口测试使用 Apifox 提供的自动测试服务。

2.3 系统技术架构设计

按照数据结构来组织、存储和管理数据的仓库就是数据库,而要获取数据库服务,首先必须进行的前期工作是完成数据库设计。数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求。数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建设中的核心技术。

本节根据系统的需求和功能设计,将对智能阅卷系统数据库的建立进行设计,总结和反映各对象实体的特征,以及相互的关系。

2.4 数据库设计

2.4.1 逻辑设计

数据库的逻辑设计是数据库设计过程中的一个重要阶段,其过程是把概念结构转化为具体DBMS 所支持的逻辑模型,对初步设计的逻辑模型进行调整、修改和优化,是逻辑结构设计的重要工作。逻辑设计的目标是定义数据库的逻辑结构,即描述数据库中数据的组织方式、数据之间的关系以及数据的完整性和安全性要求。

Diana

​ 图 4‑3 智能阅卷系统 E-R 图

图 4‑3 展示了智能阅卷系统的数据实体以及实体之间的关系。这些数据实体有:管理员、用户,作为系统的主要面向对象;试卷、答卷,这是系统中接受的来自用户的输入;试题、答题内容,是系统处理得到的中间数据;单题和整卷的批阅结果是教师在进行评阅后产生的进一步实体;考试用于管理和分类试卷、答卷等数据;个人和集体分析数据由系统在综合整理相关数据后作为系统输出反馈给用户的结果。

这些数据实体之间,管理员与用户是 1:N 的管理关系,用户与试卷、答卷都是1:N 的上传关系,试卷(或答卷)与试题(或答题内容)之间是 1:N 的包含关系,考试与试卷、答卷之间都是 1:N 的从属关系,1 份答题内容产生 1 份评阅结果,考试和个人分析、集体分析之间分别是 1:N 和 1:1 的产生关系。

2.4.2 物理设计

根据数据库的逻辑设计,下面对部分重要表的结构定义做出展示和说明。

系统保存用户与 AI 机器人的聊天交互记录,聊天记录模型如表格 4‑1所示。

​ 表格 4‑1 聊天记录数据表

表名 message
字段名 类型大小 说明 约束
message_id int 自增 PRIMARY KEY
message_typ int 消息类型(人类消息/AI消息) NOT NULL
message_num int 消息序号 DEFAULT 1
content text 消息内容 NOT NULL
add_time DateTime 消息记录产生的时间 NOT NULL
system_id varchar(16) 消息所属用户的id FOREIGN KEY

系统在进行图像处理时,会将切割图像的记录保存在数据库中。同样,系统还会保存每次 OCR 的结果。如下两表所示。

​ 表格 4‑2 文字识别记录数据表

表名 ocr
字段名 类型大小 说明 约束
ocr_id int 自增 PRIMARY KEY
do_img varchar(256) 被处理的图像URL NOT NULL
result text 图像识别的结果文本
show_img varchar(256) 制作的OCR展示图像URL NOT NULL
img_type int 图像所属类型 DEFAULT -1

​ 表格 4‑3 图像分割记录数据表

表名 segement
字段名 类型大小 说明 约束
seg_id int 自增 PRIMARY KEY
seg_img varchar(256) 被处理的图像URL NOT NULL
seg_num int 切割序列 NOT NULL
left_x int 左上角x轴坐标 NOT NULL
right_x int 右下角x轴坐标 NOT NULL
left_y int 左上角y轴坐标 NOT NULL
right_y int 右下角y轴坐标 NOT NULL
seg_time datetime 切割时间
paper int 来源试卷 FOREIGN KEY
question_id int 所属题目 FOREIGN KEY
img_url varchar(128) 图像地址 NOT NULL
img_type int 图像所属类型 DEFAULT -1

用户信息中包含一个用于内部区分定位的系统 ID 和一个用于登录的工号,以及用户可以自定义的用户名、密码和头像。

​ 表格 4‑4 用户信息表

表名 role
字段名 类型大小 说明 备注
system_id varchar(64) 系统 ID PRIMARY KEY
role_id varchar(64) 工号 NOT NULL
username varchar(32) 用户名 NOT NULL
password varchar(64) 登录密码 NOT NULL
avatar varchar(256) 头像url DEFAULT …

试题信息表存储的是题目的类型、内容、参考答案和分值,系统内部还将根据大数据统计不断修正试题的难度等级。

​ 表格 4‑5 试题信息表

表名 question
字段名 类型大小 说明 备注
ques_id varchar(64) 试题 ID PRIMARY KEY
ques_kind_id int 题目类型 FOREIGN KEY
ques_content text 题目内容 NOT NULL
ques_answer text 参考答案
ques_default_score double 分值 NOT NULL
ques_level int 题目难度等级 DEFAULT 0

试卷信息表包含试卷的名称、总分、难度分布、题型结构和包含试题。试卷状态规定默认为 0,表示试卷还未录入;若试卷状态为 1,则表示试卷已录入而答卷还未录入;若试卷状态为 2,则表示试卷与相应的答卷都已经录入,平台中已经具有了完全的用户输入信息。

​ 表格 4‑6 试卷信息表

表名 paper
字段名 类型大小 说明 备注
paper_id varchar(64) 试卷 ID PRIMARY KEY
paper_name varchar(64) 试卷名称 NOT NULL
paper_full_score double 试卷总分 NOT NULL
paper_level decimal 全卷难度等级 NOT NULL
ques_structure varchar(255) 试卷结构
ques_content varchar(255) 包含试题 NOT NULL
paper_stasus int 试卷状态 DEFAULT 0

考试信息表记录了一场考试的名称、时间和所使用的试卷。

​ 表格 4‑7 考试信息表

表名 exam
字段名 类型大小 说明 备注
exam_id varchar(64) 考试ID PRIMARY KEY
exam_name varchar(64) 考试名称 NOT NULL
paper_id varchar(255) 使用试卷 NOT NULL
exam_time varchar(255) 考试时间 NOT NULL
has_answer int 上传答卷状态 DEFAULT 0

答题内容记录表记录的是某位学生某个题目的答题内容,通过考试、试卷、准考证号、试题的 ID 进行定位,这张表还记录了答题内容的截取图片,以及从图片中提取出的文字内容。

​ 表格 4‑8 答题内容记录表

表名 answer
字段名 类型大小 说明 备注
answer_id varchar(64) 答题 ID PRIMARY KEY
exam_id varchar(64) 考试 ID FOREIGN KEY
paper_id varchar(64) 试卷 ID FOREIGN KEY
cert_id varchar(64) 准考证号 FOREIGN KEY
ques_id varchar(64) 试题 ID FOREIGN KEY
ans_img varchar(255) 截取内容 NOT NULL
scan_result varchar(255) 答题结果 NOT NULL

单题评阅结果记录了某个题目的评阅结果,包括评阅时间、评阅教师、AI 给分、AI 评价和由教师确定的最终得分、最终评价。

​ 表格 4‑9 单题评阅结果记录表

表名 mark
字段名 类型大小 说明 备注
id varchar(64) 记录 ID PRIMARY KEY
exam_id varchar(64) 考试 ID FOREIGN KEY
paper_id varchar(64) 试卷 ID FOREIGN KEY
ques_id varchar(64) 试题 ID FOREIGN KEY
answer_id varchar(64) 答卷 ID FOREIGN KEY
mark_time datetime 批阅时间 NOT NULL
teacher_id varchar(64) 批阅教师系统 ID FOREIGN KEY
ai_score double AI 评分
teacher_score double 教师评分
ai_comment varchar(255) AI 意见
teacher_comment varchar(255) 教师意见

整卷评阅结果是系统在单题评阅结果上进行整理和数据分析得到的得分详情、总得分等内容。

​ 表格 4‑10 整卷评阅结果记录

表名 paper_score_sheet
字段名 类型大小 说明 备注
id varchar(64) 记录 ID PRIMARY KEY
exam_id varchar(64) 考试 ID FOREIGN KEY
paper_id varchar(64) 试卷 ID FOREIGN KEY
cert_id varchar(64) 准考证号 FOREIGN KEY
detail_scores varchar(255) 得分详情
final_score double 总得分

考试分析记录是系统在所有评阅都完成后,自动整理考试数据,汇总形成的一份数据报告,记录了本次考试的最高分、最低分、平均分等考情数据。

​ 表格 4‑11 考试分析记录表

表名 analyse
字段名 类型大小 说明 备注
analyse_id varchar(64) 分析 ID PRIMARY KEY
exam_id varchar(64) 考试 ID FOREIGN KEY
paper_id varchar(64) 试卷 ID FOREIGN KEY
ques_id varchar(64) 试题 ID FOREIGN KEY
update_time datetime 最后更新时间
top_score double 最高分分数
top_student varchar(64) 最高分考生
bot_score double 最低分分数
bot_student varchar(64) 最低分考生
avg_score double 平均分
mod_score double 众数
variance decimal 方差

此外,系统还支持用户申请 AI 参与考情数据分析,并将分析记录保存在数据库。

​ 表格 4‑12 AI 分析记录表

表名 analyse_pro
字段名 类型大小 说明 备注
pro_id varchar(64) 高级分析 ID PRIMARY KEY
request_time datetime 申请时间 NOT NULL
analyse_id varchar(64) 采用基本分析 FOREIGN KEY
request_img tinyint 是否需要返回图片 DEFAULT 0
prompt varchar(255) 询问语句 NOT NULL
description varchar(255) 分析结果

2.5 接口设计

本项目的接口设计遵循 RESTful 风格,使用HTTP协议进行通信。一般情况下,请求采用JSON格式,响应也返回JSON格式的数据。

具体的接口类型与功能设计如下:

​ 表格 4‑13 主要接口设计表

序号 接口名称 地址 请求方式 响应数据
1 文件上传 /file/upload/ PUT 文件URL
2 下载 /file/download/ GET 文件
3 图像分割 /api/seg/save/ POST 操作结果
4 保存分割结构 /api/seg/structure/ PUT 操作结果
5 更新切片信息 /api/seg/update/ PATCH 更新后信息
6 统一分割答卷 /api/seg/do/ POST 操作结果
7 基本文字识别 /api/ocr/simple/ PUT 操作结果
8 识别+答案获取 /api/ocr/ques/ PUT 操作结果
9 AI 助手对话 /api/ai/assistant/ PUT AI回应
10 获取聊天记录 /api/ai/history/ GET 记录内容
11 获取AI评价 /api/ai/comment/ POST 评价结果
12 获取AI打分 /api/ai/mark/ POST 打分结果
13 新建题目 /api/ques/ PUT 操作结果
14 新建试卷 /api/paper/ PUT 操作结果
15 添加准考证信息 /api/certify/ PUT CERT模型
16 新建考试 /api/exam/ PUT EXAM模型
17 更新考试信息 /api/exam/ PATCH EXAM模型
18 查询考试信息 /api/exam/ GET EXAM模型
19 创建阅卷任务 /api/mark/task/ PUT 操作结果
20 保存评阅记录 /api/mark/ PUT 操作结果
21 评阅记录查询 /api/mark/ GET 查询结果
22 用户注册 /user/ PUT 操作结果
23 用户登录 /user/login/ POST 操作结果
24 个人信息修改 /user/ PATCH 操作结果
25 较低级的分析 /api/analyze/normal/ GET 分析结果
26 较高级的分析 /api/analyze/pro/ GET 分析结果
27 分析报告生成 /api/analyze/report/ GET 报告文件URL

在表格 4‑13 中,第 1 和第 2 号接口实现了文件的上传和下载,这为整个系统的输入和输出提供了方法。第 3 到第 8 号接口实现的是图像分割到识别的一系列功能,这些接口实现了将输入的图片转化成文字内容的设计。第 9 到第 12 号接口为人工智能助手提供了本地支持。第 13 到第 21 号接口是考试管理的相关功能接口,支持用户对考试、试卷和试题等内容进行增删查改等操作。第 22 号到第 24 号接口实现了用户系统的登录、注册和信息修改功能。余下的 25 到 27 号接口支持分析报告的生成和输出。

3 智能阅卷系统实现

智能阅卷系统旨在提供一套全面而高效的阅卷解决方案。从功能实现上,可以分化为三个子系统,即《图像处理系统》、《智能评阅系统》和《智能分析系统》。如图5‑1所示,系统接受用户地试卷图像作为输入,在经过三大系统的线性处理后,能够反馈分数表和分析报告作为系统的输出。

Diana

​ 图 5‑1 系统功能架构和数据流图

3.1 图像处理系统实现

《图像处理系统》主要负责对输入的试卷图像进行处理,实现自动化试卷处理流程:通过图像文字识别技术,快速扫描试卷并提取关键信息。系统基于百度飞桨的通用模型进行进一步训练,注重增强其在复杂场景下的识别能力。

《图像处理系统》实现了以下功能:试卷上传、试卷结构标记、试题内容提取和答卷自动切割处理。处理流程如图5‑2所示。

Diana

​ 图 5‑2 图像处理流程图

用户准备的试卷和答卷通过系统的文件上传接口进行上传,并存储在平台的图床系统中。用户需要对试卷的题目位置进行标记,以此得到试卷的试题结构,对答卷展开自动裁切处理。系统还能智能自动识别和处理标记后的试题、答卷切片,得到提取的文字内容和信息。

其中,试卷结构分析和答卷自动切割主要依靠试卷结构标记方法实现;试卷内容的提取流程中加入了分类器的机制来提高识别准确率。下面将分别讨论这两种机制的细节和实现方法。

3.1.1 试卷结构标记

传统的自动阅卷一般通过特制的答题卡定位题目位置,这样的做法有两大弊端:其一是耗时耗力,既要印制问卷,又要设计答卷,还需要专业的光学扫描机进行答卷扫描读入。可以注意到:很多使用特制答题卡进行答题的考试,最后也是教师手工进行批阅,这样的考试方法很难能够普及到随堂考、周测等小型考试中。其二,每次考试的答题卡都需要特别设计,复用性较低,难以适用于复杂繁多的考试类型。

针对这些问题,智能阅卷系统设计了一套新的阅卷流程,利用文心大模型和PaddleOCR 技术赋能从试卷录入到批阅结果的输出的整个业务链,能够改良传统自动阅卷中上述提到的两个弊端。

Diana

​ 图 5‑3 试卷结构标记实机演示

首先,平台支持任意结构的试卷录入。如图 5‑3展示的试卷结构标记实机演示页面所示,用户只需要上传试卷的扫描图像,再使用平台提供的工具对各个试题的区域进行划分,即可得到试卷结构的坐标列表。通过这份人工划分的试卷结构,系统将自动对待批阅的答卷进行区域划分,得到每个考生作答的每个题目的图像。这样,就使平台能够满足任意结构的试卷的自动阅卷需求,同时还能够兼容目前主流的考试模式,即答题卡作答、试卷上作答和空白纸张作答三种。

图 5‑4 展示了录入试卷和录入答卷的流程。用户上传了试卷图像后,通过上述的页面划分试题区域,得到整张试卷的结构数据。对于划分出来的题目,平台会自动对其进行文字识别和智能理解,得到题目类型、题目内容和题目分值,并通过文心大模型生成题目的参考答案。同时,为了保证环节的可靠性,系统还添加了人工二次编辑和确认的功能。经过教师手动确认的数据,将被录入到数据库中,作为这份试卷的裁切模板。

Diana

​ 图 5‑4 录入试卷与答卷流程图

对于这份试卷对应的后续上传的答卷,系统会查询并调用这份结构数据,自动地对答卷图像进行切割,得到每个学生的每个题目所属的图像切片。这些切片也会被自动识别和提取出文字,即学生的作答内容,并将这些信息录入到数据库。以上的这些流程,都是由系统自动完成的,教师在这一步只需要预先做好试卷结构的划分,并上传好完整的答卷。通过这样的环节设计,能够在维护信息正确性的前提下,最大地减轻教师的工作量。

3.1.2 分类器机制

面对试卷评阅手写和印刷体同时存在、多种题型同时存在的复杂业务场景,本文提出一种“分类器”的创新实现方法。对于输入的图像,将其按照印刷内容和手写内容的占比等因素分成不同的类,并分发给专门训练的模型进行文字识别和内容理解。如所示。通过这样的方式,图像识别环节的效率和准确度能够得到提升。

Diana

​ 图 5‑5 文字识别流程实现细节示意图

图 5‑5 展示了整个文字识别流程的实现流程。待识别的图像首先要通过预处理,图像预处理是实现高准确度测量和图像识别的基础和前提,是图像的低层处理阶段,目的是去除噪声、保留原始图像中的整体信息。本系统使用的是 PaddleOCR 工具库提供的预处理工具。预处理后的图像将被图像分类器判定出所属的类型,比如试题图像将被分类成打印体试题图像、手写作文图像将被分类成手写体答题图像。

被分类为不同类型的图像,系统将选用对应方向的模型进行识别。基于 PP-OCRv4-server-det 模型,本文使用 PaddleX 工具训练了多个不同细化方向的识别模型,即使用印刷体数据集训练的试题内容识别模型printing-model,使用手写体数据集训练的答题卡内容识别模型writing-model,使用印刷体和打印体的英文字符数据集训练的代码题识别模型code-model,以及使用印刷体和打印体的数字和符号数据集训练的口算题识别模型calculating-model。表格 5‑1的实验结果证明,使用各细分模型方向的分类数据作为数据集测试时,与通用性的OCR模型进行对比,各细化模型在其专用方向上的识别准确率均有提高。

​ 表格 5‑1 模型识别准确率对比

测试模型 印刷体 识别准确率 手写体 识别准确率 代码题 识别准确率 口算题 识别准确率
PP-OCRv4-server-det 0.71 0.26 0.62 0.39
printing-model 0.78 -- -- --
writing-model -- 0.30 -- --
code-model -- -- 0.65 --
calculating-model -- -- -- 0.47

这个分类器的分类依据是:通过PP-Structure 的文档结构和表单分析功能先得到粗略的识别结果,然后将识别置信率和识别内容提交给文心大模型进行判断,确定该图片匹配的最佳的识别模型。如图 5‑6所示。例如:PP-Structure 对一张图像的分析显示,图像上所有文本的识别置信度都在0.9以上,识别的内容是一道选择题,具有明显的题号、选项、问句等内容。文心大模型根据这些内容,会判定这张图像属于打印体试题图像类型,并从模型池中分配 printing-model 对图像进行文字提取。

Diana

​ 图 5‑6 分类器数据流示意图

3.2 智能评阅系统实现

智能评阅系统》调用文心大模型,支持对答题图像的识别结果进行理解和批阅,根据给出的题目信息给出恰当的打分,并生成一段针对该回答的评价。

在评分环节,《智能评阅系统》根据预设的评分标准和答案模板进行比对和评分,在缺少标准答案时,系统会自动通过文心大模型获取。之后,系统通过计算学生答案与标准答案之间的相似度、关键词匹配度等指标,给出较为客观、公正的评分结果。

为了解决传统阅卷中“有阅无评”的问题,系统会为每一个回答生成一段文字评价。文心大模型将扮演“老师”的角色,讲解题目相关的知识点,学生回答的正误,以及回答错误的情况下,错误发生的原因和改正的方向。通过这样的方法,能够使得考试为学生提供更好的反馈,使得分数更加立体而具有意义。

同时,为了保证为学生提供公平公正的评阅结果,系统在智能自动评阅的结果上添加了人工二次编辑和最终确认的程序,只有经过人工确认的评阅结果才会被写入数据库中。具体的评判流程如图5‑7所示。

Diana

​ 图 5‑7 阅卷流程图

下面讨论智能评阅系统中智能分数和评语生成的实现,系统通过对输入提示词的调整实现文心大模型不同内容与格式的返回。在程序中,后端相关业务逻辑代码调用ERNIE SDK 实现与文心大模型的交互,具体代码如下:

async def talk(msgs, system, funcs):    
	 print(">>> talk:", msgs)    
	 ai_message = await ERNIE_MODEL.chat(messages=msgs, system=system, functions=funcs)    
	 print(">>> ai_message:", ai_message)    
	 return ai_message    

在 ERNIE SDK 中,Message 表示人与大语言模型交互的消息记录。有 4 类:

HumanMessage:用户输入给模型的普通信息,比如聊天的问题。

SystemMessage:用户输入给模型的全局信息,比如角色扮演的指令、输出格式设置的指令。

AIMessage:模型返回的信息,比如聊天的回答、触发 Function call 的回答。

FunctionMessage:上一轮模型的输出是带有Funciton call的AIMessage,则用户需要首先调用 Function,然后将 Function 的结果输入给大语言模型。

综上所述,开发时主要通过对 HumanMessage 和 SystemMessage 的定制的优化来实现不同的功能。

3.2.1 智能打分功能

智能打分的功能需要人工智能理解题目和学生的作答,并参考教师自定义的评分准则给出恰当的评分。这一业务的场景是阅卷评分,文心大模型需要扮演的角色是阅卷老师,用户为文心大模型提供的输入包括题目、作答、题目分值、参考答案和其他自定义评分准则,系统需要文心大模型给出的回应是一个数字,代表该题的给分。

依据这一功能分析,能得到输入的提示词,如表格 5‑2所示。

​ 表格 5‑2 智能打分功能的提示词设计

类型 内容
HumanMessage 这个题目的总分是{full}分,下面被中括号包围的是题目内容:[{ques}]。下面被两个中括号包围的是文字扫描结果[[{ans}]]。下面被三个中括号包围的是参考答案[[[{crt}]]]
SystemMessage 你是一名阅卷老师,负责对学生的答案进行打分。 我将给出题目、总分和一段文字扫描结果,扫描结果中包含题干和学生的作答内容。\n你的任务是识别出学生作答的内容,并针对学生回答的正确性给出适当的评分,并讲解题目考察的知识点。 请注意学生作答的内容不包含题干,如果是选择题,作答的内容只有选择的选项。 请注意给分的规则:你需要自行判断题目的类型,如果是单选题,那么答对给满分,答错给零分;如果是多选题,答对部分给一半分,答对全部给满分,有错误选项就给零分;如果是填空题,答对给满分,打错给零分;如果是其他题型,按照一般规则或者关键点给分。如果没有作答,则给零分。 请直接回复一个json字符串对象,对象具有三个属性:属性'answer'表示学生作答的内容,对应的值是一个字符串;属性'score'表示你的打分,对应的值是一个数字;属性'reson'是对这个题目考察的知识点的讲解,对应的值是一个字符串。不要有其他多于内容。

同样,这一提示词也通过 ERNIE SDK 提供的接口输入给文心大模型,具体实现的代码如下:

@action(methods=['post'], detail=False, url_path='mark')  
	def mkMark(self, request):  
		"""AI 评分"""  
		data = dict(request.data.copy())  
	    ques = str(data['question'])  # 问题  
	    ans = str(data['answer'])  # 作答  
	    full = str(data['full'])  # 总分  
	    crt = None  
	    if 'crt' in data.keys():  
	        crt = str(data['correct'])  # 参考答案  
	    msgs = [HumanMessage(mkMarkPrompt(ques, ans, crt, full))]  
	    resp = ''  
	    while '```json ' not in resp:  
	        resp = asyncio.run(talk(msgs, MARK.content, []))
	.content.replace('\n', ' ').replace('\r', ' ').replace('\t',' ')  
	    resp = resp.split('```json ')[1].split(' ```')[0]    
	    return HttpResponse(resp, content_type='application/json', status=status.HTTP_200_OK) 

3.2.2 智能评语功能

与打分同理,智能评语生成的功能也需要人工智能理解题目和学生的作答,并参考教师自定义的评分准则给出一段评语。这一业务的场景是阅卷评价,文心大模型需要扮演的角色是阅卷老师,用户为文心大模型提供的输入包括题目、作答、题目分值、参考答案和其他自定义评价维度,系统需要文心大模型给出的回应是一段文字,代表对该题作答情况的评价。

依据这一功能分析,得到的输入的提示词如表格 5‑3所示。

​ 表格 5‑3 智能评语功能提示词设计

类型 内容
HumanMessage 下面被中括号包围的是题目内容:[{ques}]。下面被两个中括号包围的是文字扫描结果[[{ans}]]。下面被三个中括号包围的是参考答案[[[{crt}]]]。下面被四个中括号包围的是需要的评价数量[[[[{cnt}]]]]
SystemMessage 你是一名阅卷老师,负责对学生的答案进行评价。 我将给出题目、需要的评价数量和一段文字扫描结果,扫描结果中包含题干和学生的作答内容。 你的任务是识别出学生作答的内容,针对学生回答的正确性给出评价,要求以老师语境,评价全面客观,能反映学生的学习情况和知识点掌握情况,每个评价的字数都要不少于20字,不超过50字。 请注意学生作答的内容不包含题干,如果是选择题,作答的内容只有选择的选项。 请直接回复一个json字符串对象,对象是一个字符串数组,每个字符串表示一个评价。不要有其他多于内容。

这一部分的实现代码如下所示:

@action(methods=['post'], detail=False, url_path='comment')  
	def mkComment(self, request):  
	    """获取 AI 评价"""  
	    data = dict(request.data.copy())  
	    crt = None  
	    cnt = int(data['count'][0])  # 评价数量  
	    ques = str(data['question'])  # 问题  
	    ans = str(data['answer'])  # 学生作答  
	    if 'crt' in data.keys():  
	        crt = str(data['correct'])  # 参考答案  
	    msgs = [HumanMessage(mkCommentPrompt(ques, ans, crt, cnt))]  
	    resp = asyncio.run(talk(msgs, COMMENT.content, [])).content.replace('\n', '').replace('\r','').replace(  '\t', '').replace('\\', '').replace(' ', '')  
	    resp = resp.split('```json')[1].split('```')[0]  
	    print(">>> resps:", resp)  
	    return HttpResponse(resp, content_type='application/json', status=status.HTTP_200_OK)  

3.3 智能分析系统实现

《智能分析系统》综合借助大数据分析算法,对阅卷结果进行综合分析,为教育工作者提供有价值的教学反馈,助力教学质量的提升。

Diana

​ 图 5‑8 智能分析系统数据流示意图

系统具有较低级和较高级的两套智能分析功能,如图 5‑8 所示:较低级的智能分析主要运用数学统计函数,负责统计数据库中的打分结果,汇总出学生的考试成绩表、最高分、最低分、平均分,某班或某学生群体在某张试卷上的得分情况等等初级的呈现内容。较高级的智能分析则以较低级的智能分析结果为初始数据,在此基础上通过文心大模型的理解得出教学效果评价、知识点掌握情况、教学建议等内容产出,并生成报告。

3.4 系统使用说明

用户首次使用需进行注册,填写相关信息并设置密码。注册成功后,使用注册时的账号和密码登录系统。请确保密码安全,避免泄露。(图 5‑9)。

Diana

​ 图 5‑9 平台登录页

登录成功后,用户在系统首页可以与人工智能进行对话交互。首页的人工智能将扮演用户的助理角色,提供页面跳转、功能执行和问题解答等服务。(图 5‑10)

Diana

​ 图 5‑10 AI 助理对话

用户可在“考试管理”模块中上传待阅卷的试卷。支持各种图片格式。请确保上传的试卷清晰、完整,以便系统准确识别。

Diana

​ 图 5‑11 考试管理

击“添加试卷”,将进入试卷上传页面。为了体验整个阅卷流程,可以打开“演示模式”使用平台预置的数据。

Diana

​ 图 5‑12 添加试卷

在新页面中,使用标记工具标记试卷上各个题目的位置,并提交,请求图片切割和识别。

Diana

​ 图 5‑13 标记题目

于切割出来的题目,iMark 将自动请求文字识别和智能理解。用户需要对识别内容进行确定,并指定题目的分值。

Diana

​ 图 5‑14 切片识别与确认

在组卷完成后,可以新建考试,并将刚刚创建的试卷绑定到考试中。

Diana

​ 图 5‑15 添加考试信息

考试创建成功后,就需要上传对应的答卷,可以提供“答卷上传”接口处理。平台需要用户上传答卷扫描图像和对应的学生准考证号表格。(.xlsx格式)

Diana

​ 图 5‑16 上传答卷

答卷上传的页面,如果试卷上传时使用了演示模式,则答卷上传也可以打开演示模式选择平台预置的数据体验流程。

Diana

​ 图 5‑17 演示模式

答卷上传完毕,用户应当点击“阅卷分配”来分配阅卷任务。

Diana

​ 图 5‑18 分配阅卷任务

​ 被分配到阅卷任务的老师在登录平台后,可以在“阅卷”页面中选择开始批阅该考试。在阅卷页面中,老师可以选择选用AI智能自动给分给评,也可以参考AI给出的内容进行二次编辑和手动提交。

Diana

​ 图 5‑19 阅卷

Diana
									  图 5‑20 AI 打分与评价          

以上就是在智能阅卷系统中进行智能阅卷的核心交互业务链流程。

4 智能阅卷系统测试

软件测试就是在软件投入运行前, 对软件需求分析、设计规格说明和编码的最终审查, 是软件质量保证的关键步骤。本文前面的章节详细介绍了智能阅卷系统的系统设计、系统实施和使用方法,本章将根据以上功能,采用黑盒测试的方法,设计合适的测试用例进行测试,最后对整个系统做出评估。

4.1 测试环境与方法

按照实际应用环境,选取部署合适的智能阅卷系统测试环境,硬件设备如 Web服务器、数据库主机、网络设备等,选用常见商业云服务器。功能测试部分针对各项功能设计相应的测试用例,进行数据的增删查改测试,非功能测试部分使用 Django Test 测试工具进行系统压力测试。具体测试环境如下:

​ 服务器:阿里云2核2G,Alibaba Cloud Linux 3.2104 LTS 64位

​ 客户端:教学办公电脑 (联想 ThinkBook 14 Windows 11)

​ 浏览器: Microsoft Edge

​ 测试工具: Django Test

4.2 功能性测试

功能性测试是在指定环境下,根据产品或系统的特性和操作描述,测试其特征和可操作行为,以确定其满足设计需求中明确和隐含要求的功能的程度[29]。这种测试方法主要用于验证软件产品是否按照预期运行,是否满足设计需求,并确保程序与规范的一致性。

按照智能阅卷系统功能结构划分,本节从图像处理、智能评阅和智能分析三个方向设计测试用例,并进行测试。

4.2.1 图像处理功能测试

图像处理包括上传图像、分割图片、自动识别和自动处理几个功能,针对这些功能的测试用例和测试结果如表格 6‑1所示。

​ 表格 6‑1 图像处理功能测试用例及结果表

编号 测试项目 测试方法 预期结果 实际结果
1 上传图片 登录系统,点击录入试卷,选择要上传的图片 提示“上传成功”, 并进入分割标记页面 符合预期
2 分割图片 拖动鼠标,标记试题位置,点击确认标记 提示“标记成功”, 并进入内容确认页面 符合预期
3 内容识别 鼠标悬停在题目切片处 弹出题目信息窗口,显示题目内容、题型和分值 符合预期
4 确认内容 点击窗口的确定键 提示“已确定” 符合预期
5 处理答卷 点击录入答卷,选择要上传的图片,上传之后,打开阅卷页面 显示每个学生每道题的答题切片,以及题目信息 符合预期

4.2.2 智能评阅功能测试

智能评阅功能实现的是教师在 AI 辅助下进行阅卷的整个流程,主要包括获取AI评阅、修改评分评语和提交评阅结果等功能。针对这些功能的测试用例和测试结果如表格 6‑2所示。

​ 表格 6‑2 智能评阅功能测试用例及结果表

编号 测试项目 测试方法 预期结果 实际结果
1 获取AI评阅 登录系统,点击开始阅卷,进入阅卷页面后,点击获取 AI 评阅 将 AI 打分和 AI 评价自动填充到打分输入框和评价输入框 符合预期
2 修改评分评语 点击打分板数字键修改评分,点击输入框键入评语 分数显示为点击的数字,评语显示为修改后的内容 符合预期
3 提交评阅结果 点击“下一份” 页面显示下一份待阅答案,并将目前的批阅结果提交到后端 符合预期

4.2.3 智能分析功能测试

智能分析功能负责生成和导出考情数据、分析报告,并为教师提供教学建议,主要包括查看个人成绩、查看集体成绩、导出个人分析、导出集体分析和 AI 智能建议等功能。针对这些功能的测试用例和测试结果如表格 6‑3所示。

​ 表格 6‑3 智能分析功能测试用例及结果表

编号 测试项目 测试方法 预期结果 实际结果
1 查看个人成绩 登录系统,点击考试分析,点击查看成绩,切换到个人,选择学生 显示考生本次考试的成绩数据 符合预期
2 查看集体成绩 切换到集体,选择班级 显示该班学生本次考试的成绩数据 符合预期
3 导出个人分析 点击导出分析 得到个人考情分析报告 符合预期
4 导出集体分析 点击导出分析 得到集体考情分析报告 符合预期
5 AI 智能建议 向 AI 助理键入问题 AI 助理回复教学建议 符合预期

4.3 非功能性测试

非功能性测试主要关注于软件应用程序的非功能性方面,如性能、可用性、可靠性和其他非功能特征。本节使用 Django 框架内置的测试框架 test 类和 Apifox 的自动接口测试工具对系统进行性能测试,包括并发性能测试、文字识别准确率测试和文心大模型响应速度测试。

4.3.1 并发性能测试

本小节提前准备多个测试用户数据,使用 Apifox 的接口测试工具,对系统的登录接口和文件上传接口进行并发请求的压力测试。并发量分别设置为10、100、200、500、1000、2000。系统的登录接口接受用户名和密码作为请求数据,返回登录令牌或错误信息,表格 6‑4展示了该接口的压力测试结果。文件上传测试中使用的测试文件是一张 700 KB 的图片,展示了文件上传接口的压力测试结果。

​ 表格 6‑4 登录接口压力测试结果表

编号 并发量 最慢响应时间(ms) 平均响应时间(ms) 结果说明
1 10 22 13 通过测试
2 100 101 89 通过测试
3 200 397 174 通过测试
4 500 578 286 通过测试
5 1000 1253 893 通过测试
6 2000 3031 2106 通过测试

​ 表格 6‑5 文件上传接口压力测试结果表

编号 并发量 最慢响应时间(ms) 平均响应时间(ms) 结果说明
1 10 79 33 通过测试
2 100 216 111 通过测试
3 200 497 359 通过测试
4 500 1263 1003 通过测试
5 1000 2977 2837 通过测试
6 2000 4101 3792 通过测试

4.3.2 文字识别准确率测试

这一小节对系统的文字识别准确率进行测试,此处参与测试的是系统中包含分类器在内的整个识别系统,在前文中已经通过实验数据证明了分类器对提高识别准确率的正向作用。测试使用的数据来自百度 AI Studio 中开源的图像数据集。

测试流程是:向智能阅卷系统中进 OCR 识别的接口发送识别请求,记录下其响应的识别内容,并与图片的实际内容进行对比,一般认为只有完全相同的文本内容才可以被判定为识别准确。最后,统计不同测试量下的平均准确率。

根据以上流程进行的测试,结果如表格 6‑6 所示。

​ 表格 6‑6 文字识别准确率测试结果表

编号 图像类型 处理数量(张) 平均准确率(%) 结果说明
1 中文印刷体 118 64.40 通过测试
2 中文手写体 103 31.06 通过测试
3 英文印刷体 231 74.89 通过测试
4 英文手写体 297 41.07 通过测试
5 中英文印刷体 131 31.29 通过测试
6 代码段 200 56.50 通过测试

4.3.3 文心大模型响应速度测试

智能阅卷系统对文心大模型的调用主要来自智能助理功能、智能评阅生成和智能分析生成功能,这些功能对于文心大模型的响应速度都有一定的要求。本小节以智能评分生成作为测试点,主要测试在较高并发的场景下文心大模型的承受能力。

测试方法是:预先准备 200 条不同的提示词语句作为文心大模型的输入,内容是要求对某个题目的回答给出适当的分数。记录并统计文心大模型做出响应的时间。

按照这一方法测试的文心大模型响应速度结果如所示。

​ 表格 6‑7 文心大模型响应速度测试结果表

编号 并发量 最慢响应时间(ms) 平均响应时间(ms) 结果说明
1 5 213 95 通过测试
2 10 376 115 通过测试
3 20 580 227 通过测试
4 50 1300 863 通过测试
5 100 3681 1537 通过测试
6 200 5417 3100 通过测试

4.4 测试结果说明

上述的测试结果说明:从功能实现上,智能阅卷系统满足前期需求分析和设计的要求,实现了图像处理、智能评阅和智能分析等功能,系统对用户的操作具有正确和良好的反馈。从系统性能上,智能阅卷平台在较高的并发环境下依然具有较短的响应时间,且远远小于 HTTP 通信中规定的的超时时间;系统中的文字识别技术也具有较好的识别准确度,能够保证阅卷流程的顺利运行;此外,系统对文心大模型的调用也能经受一定的并发压力。

然而,本系统还存在一些问题需要完善。例如提升对手写体的识别准确度、优化教师的阅卷体验和加快文心大模型在大规模文字生成业务下的响应速度等。这些还需要进一步加深研究、开发实现。

综上所述,智能阅卷系统已达到需求设计要求,满足实际应用条件。

5 部署与开发

本项目采用分布式前后端开发,前端、业务逻辑处理、人工智能与图片处理模块分开部署。

(以下命令默认在 CentOS7 操作系统下进行)

5.1. 人工智能与图片处理模块

5.1.1 环境

  • 下载 Anaconda
sudo yum install wget
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.05-Linux-x86_64.sh
  • 安装 Anaconda
sh Anaconda3-2021.05-Linux-x86_64.sh #按照安装提示安装即可
  • 将conda加入环境变量

    • 在终端中打开 ~/.bashrc

        # 在终端中输入以下命令:
        vim ~/.bashrc
      
    • ~/.bashrc 中将conda添加为环境变量:

        # 先按i进入编辑模式
        # 在第一行输入:
        export PATH="~/anaconda3/bin:$PATH"
        # 若安装时自定义了安装位置,则将~/anaconda3/bin改为自定义的安装目录下的bin文件夹
      
    • 修改 ~/.bash_profile

        # 修改后的~/.bash_profile文件应如下(其中xxx为用户名):
        export PATH="~/opt/anaconda3/bin:$PATH"
        # >>> conda initialize >>>
        # !! Contents within this block are managed by 'conda init' !!
        __conda_setup="$('/Users/xxx/opt/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
        if [ $? -eq 0 ]; then
            eval "$__conda_setup"
        else
            if [ -f "/Users/xxx/opt/anaconda3/etc/profile.d/conda.sh" ]; then
                . "/Users/xxx/opt/anaconda3/etc/profile.d/conda.sh"
            else
                export PATH="/Users/xxx/opt/anaconda3/bin:$PATH"
            fi
        fi
        unset __conda_setup
        # <<< conda initialize <<<
      
    • 修改完成后,先按esc键退出编辑模式,再输入:wq!并回车,以保存退出

  • 验证是否能识别conda命令:

    • 在终端中输入source ~/.bash_profile以更新环境变量

    • 再在终端输入conda info --envs,若能显示当前有base环境,则conda已加入环境变量

  • 创建新的conda环境

# 在命令行输入以下命令,创建名为paddle_env的环境
# 此处为加速下载,使用清华源
conda create --name paddle_env python=3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  • 激活刚创建的conda环境,在命令行中输入以下命令:
# 激活paddle_env环境
conda activate paddle_env

以上anaconda环境和python环境安装完毕

5.2 拉取项目

确保在 paddle_env 环境下:

  • 安装 git
yum install git
  • 获取项目
cd ~
mkdir imark & cd imark
mkdir statics
git clone https://gitee.com/genshin_ayanami/i-mark.git

完成之后在 /root/imark 路径下会存在一个 i-mark 文件夹和一个 statics 文件夹

5.3 编辑配置

  • 安装 uwsgi
pip install uwsgi
  • 编写 uwsgi.ini , 修改为自己的配置
vim /root/imark/uwsgi.ini
# uwsgi.ini file
[uwsgi]

# Django-related settings

# 端口号
http = :8008

# the base directory (full path)
chdir           =/root/imark/i-mark/demo

# 静态文件访问映射
static-map=/files/download=/root/imark/i-mark/demo/upload/imgs

# Django s wsgi file
module          = server.wsgi:application
wsgi-file=server/wsgi.py

# process-related settings
# master
master          = true

# maximum number of worker processes
processes       = 4

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

token

申请后点击复制键复制自己的token

  • 编写项目配置文件

    • 根据定位访问 settings.py
    | i-mark
    | - demo
    | | -- aibit
    | | -- ocr
    | | -- seg
    | | -- server
    | | | --- settings.py
    ...
    
    • 在文件中替换为自己的 token
      os.environ["EB_AGENT_ACCESS_TOKEN"] = "<access token>"
    
    • 更改为自己的服务器地址
      SERVER_PATH = 'http://127.0.0.1:8000/'
    
    • 根据需要选择是否开启 Debug
      DEBUG = True # 能看到内部和报错信息
    
  • 安装依赖

/root/imark/i-mark/demo/ 下:

pip3 install -r requirements.txt

5.4 开启服务

uwsgi.ini 文件的位置下(一般是 /root/imark/ ):

uwsgi uwsgi.ini

关于 uwsgi 命令,请参考:uwsgi

5.2 业务逻辑处理模块

5.3 前端

MIT License Copyright (c) 2024 holanswide Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

基于文心一言语言大模型的智能阅卷系统 展开 收起
Python 等 5 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/genshin_ayanami/i-mark.git
git@gitee.com:genshin_ayanami/i-mark.git
genshin_ayanami
i-mark
iMark
master

搜索帮助