基于doc2vec的主观题自动评分应用
2022-04-14肖灵云刘军库李春红
肖灵云,刘军库,李春红
(1.湛江科技学院计算机系,湛江 524000;2.湛江科技学院机械系,湛江 524000)
0 引言
随着网络技术的不断发展,在线考试已逐步成为一种普遍的考试方式。应用计算机自动评分不仅效率高、速度快、准确率高、不会产生疲劳,而且主观题自动评分可以提高教师的工作效率,为教师分担繁重的阅卷工作,同时也保证了考试评分的公平。对于选择题、判断题的自动评分,已有较成熟的自动评分技术。由于主观题的特殊性,目前大部分的主观题批阅形式仍采用人工评分。不论是有参考答案的主观题还是开放式答案的主观题,这两种类型的主观题评分均依托自然语言处理技术,有参考答案的主观题评分的核心工作是计算考生答案和参考答案之间的语义相似度,开放式答案的主观题评分方式关键的问题是文本的特征抽取。在国内,现有的主观题自动评分技术,大部分是基于有参考答案的主观题,且大多是提取答案中的关键字,并计算其相似度来进行评分。即使有些考虑到了语义分析,其评分结果也令人不满意。由于主观题的答案表现形式很灵活,每个人的表述方式不同,其给出的答案不可能完全同参考答案一致,因此仅仅利用关键词来进行评分,很难有说服力。针对此问题,本文提出以doc2vec算法计算文本之间的整体语义的相似度,来实现有参考答案的主观题自动评分。
1 相关技术
1.1 doc 2vec算法
目前文本的相似度大多是计算句子中词语的相似度,这种计算方式没有考虑到词语的深层含义,而且仅靠匹配两文本中的关键词来计算相似度,其计算相似度的结果有待斟酌。因此,提出基于doc2vec算法的主观题评分方法,doc2vec算法中包含Distributed Memory(DM)和Distributed Bag of Words(DBOW)两种模型,DM模型是尝试预测某单词在给定上下文中出现的概率,DM模型中的上下文包含的范围更广泛,它不仅仅包含上下文中的单词而且还包含了相对应的段落,所以DM模型可以依据上下文中的词向量和段向量来对目标词的概率分布进行预测。基于doc2vec算法的自动评分的评分过程:
第一步,对参考答案文本的处理过程:对文本进行预处理,包括去停用词、分词等。
对考生答案文本的处理过程:对文本进行预处理,包括去停用词、分词等。
第二步,对参考答案文本的处理过程:对预处理后的参考答案文本,用doc2vec算法对该参考答案文本进行文本段向量化。
对考生答案文本的处理过程:对预处理后的考生答案文本,用doc2vec算法对该考生答案文本进行文本段向量化。
第三步,计算参考答案的文本段向量与考生答案文本段向量之间的相似度,将相似度值代入计算得分模型中,并计算得分。
1.2 文本语义相似度计算
本文采用余弦相似度来计算考生提交的答案和参考答案之间的相似度,其中以参考答案作为标准。将事先已经进行段向量化表示的考生答案和参考答案,依据两向量之间的夹角大小来评估向量之间的相似性,用夹角的余弦值来度量两向量的相似度,计算公式如(1)所示:
其中,表示相似度,、分别为参考答案文本及考生答案文本的语义特征段向量,表示与两个向量之间的夹角,A、B分别表示向量及向量的各分向量,表示分向量总数。
1.3 实现代码
输入:输入参考答案以及考生答案.txt文本
输出:输出考生的考试成绩
def text_similarity_doc2vec(sid,v):
model=gensim.models.Doc2Vec.load('zhiwiki_news.doc2vec')//加载模型
w1='p00.txt' //参考答案文本
w2='p01.txt' //考生答案文本
p1_doc2vec=doc2vec(w1,model)//参考 答案 文本向量化
p2_doc2vec=doc2vec(w2,model)//考生答案文本向量化
sim=simlarityCalu(p1_doc2vec,p2_doc2vec)
weight=sim
return weight
def simlarityCalu(vector1,vector2): //计算文本向量相似度
vector1mod=numpy.sqrt(vector1.dot(vector1))
vector2mod=numpy.sqrt(vector2.dot(vector2))
if vector2mod!=0 and vector1mod!=0:
similarity=(vector1.dot(vector2))/(vector1mod*vector2mod)
else:
similarity=0
return similarity
def main():
new_mark_xlsx=openpyxl.Workbook()
new_sheet= new_mark_xlsx.get_sheet_by_name("Sheet")
temp=data_select()
i=1
for data_list in temp:
print(data_list)
one_hot_id,sid,v,stu_answer,que_ans,question,stu_name=record_temp(data_list)
if stu_answer:
mark_d2c=text_similarity_doc2vec(one_hot_id,v)
else:
mark_d2c=0
print("本题考生未做答,0分")
d2v=mark_d2c*int(v)sql_save(d2v,sid,question,stu_name)
print('d2c=%.2f)
new_sheet.cell(row=i, column=1, value=stu_name)
new_sheet.cell(row=i, column=2, value=one_hot_id)
new_sheet.cell(row=i,column=3,value=sid)
new_sheet.cell(row=i,column=4,value=question)new_sheet.cell(row=i,column=5,value=que_ans)new_sheet.cell(row=i,column=6,value=v)
new_sheet.cell(row=i,column=7,value=stu_an⁃swer)
new_sheet.cell(row=i,column=8,value=d2v)
print(i)
i=i+1
new_mark_xlsx.save("成绩汇总.xlsx")
2 实验和结果
2.1 数据集
本文实验以《管理学基础》课程考试的10名考生的10道题目共100份答案作为实验数据集,且每一道题均提供参考答案。
2.2 实验结果
为了验证本文所提出的基于doc2vec的主观题自动评分方法的有效性,在此进行了实验对比。并与基于TextRank算法的主观题自动评分方法的评分结果及人工评分结果进行对比,本文只展示部分内容。两种自动评分方法与人工评分结果分析表如表1所示,其中TextRank差值是指TextRank算法评分与人工评分差的绝对值,doc2vec差值是指doc2vec算法评分与人工评分差的绝对值。
表1 两种算法得分结果比较(部分评分结果)
3 实验结果分析
以算法评分与人工评分的差距以2分为分界点,差距大于等于2分的为不合格评分,小于2分的为合格,根据评分差距,则可分别得出两种算法的准确率,如表2所示。
表2 两种算法的准确率
由表2结果可知,采用doc2vec算法评分的准确率为96%,比采用TextRank算法评分的准确率高24%。明显看出本文提出的基于doc2vec算法评分的准确率要高于基于TextRank算法评分的准确率。
上述采用的准确率是从定量角度来描述表示主观题评分结果的优劣,但是准确率只能判断是否批错,不能真正表示出自动评判效果优劣程度,为了进一步验证本文提出的基于doc2vec算法评分结果的有效性,本文进一步引入了偏差率的概念来进行评判。偏差率(De⁃viation)的定义如式(2)、式(3)所示。
式中,代表平均偏差率,是评判的总份数。实验结果如表3所示。
表3 《管理学基础》自动评分结果对比
从表3可以看出,经过与人工评分结果的对比,发现本文提出的基于doc2vec算法的评分结果较基于TextRank算法的评分结果的有效性明显有较大幅度的提高,其中基于doc2vec算法的评分结果的平均偏差率较基于TextRank算法的评分结果小0.081,最大偏差率降低了0.321。
为了更直观地体现出两种算法的差距,特附有两道题各10个考生的成绩结果进行比较,图1展示出两种评分结果的偏差率柱状图,并随机选择了第二题评分结果和第九题评分结果绘制趋势如图2、图3所示。
图1 两种算法评分结果与人工评分偏差率柱状图
图2 第二题两种算法评分结果与人工评分趋势
图3 第九题两种算法评分结果与人工评分趋势
由图1—图3可以看出,基于doc2vec算法评分的整体趋势与人工评分结果较吻合,而且其稳定性比较好,而基于TextRank算法评分的整体趋势与人工评分结果相差较大,且其稳定性不好,其自动评分成绩波动较大。
分析造成这种结果的原因有以下两个方面:一是采用TextRank算法没有考虑到考生答案与参考答案的语序信息,使得采用TextRank算法在关键词提取方面,其提取的准确率不高,损失了很多的主要信息,而是仅仅依靠关键词的匹配来评分,说服力较低。而doc2vec不只是考虑到了词语的语义信息,并且还将文本上下文中的语序信息进行了保留,所以准确的判断出采用doc2vec进行计算文本的相似度,并在此相似度的基础上再计算考生得分的方法,其效果明显更好。二是因为基于doc2vec算法的评分方法能够有效的通过段向量对文本的语义和语序进行较好的理解,对于段落级的文本处理表现很出色,而TextRank算法的评分方法则将关键词来代表整个段落的语义表示出来,并没从更深层次对句子语义及语序进行理解和分析。
4 结语
本文采用的基于doc2vec算法的主观题自动评分方法,不仅提高了评分结果的准确性,且可以实现批量试题评分,在一定程度上提高了教师的工作效率,避免了在评分时受到的人的主观因素的影响,节省了教师大量的批阅时间及人工成本,达到了公平公正,为后期的主观题自动评分研究提供了一定的参考价值。但是由于本文构建的数据集较小,不能够完全证明本文所研究的评分方法的有效性及普适性,因此后期将会扩大数据集的广度及科目的广泛度,作为未来的研究方向。