付鹏斌,刘 曼,杨惠荣
(北京工业大学 信息学部,北京 100124)
目前,国内外基于深度学习、机器学习的主观题自动评分方法在技术理论上取得了一些成果。Riordan等基于深度学习模型,结合CNN与LSTM构建神经网络,预测考生得分。Yang等提出了一种基于深度自动编码器的短答案评分算法,可以在不明确定义目标答案的情况下构建评分模型。虽然这些方法评分效果较好,但需要依靠大量训练数据,在高考等大型考试中,考题为新题,训练集中无该题对应的教师评分数据,难以进行自动评分,具有一定局限性。
丁振国等人利用《知网》中计算义原相似度方法提出词与词之间的相似度计算方法,并进一步提出了计算参考答案和考生答案文本相似度的算法。但因为其对文本的处理仅采用分词技术,不能对词性以及句法依存做进一步分析,复杂度高且准确度不理想。翟社平等提出了一种多特征融合的句子相似度计算方法,分别对词性、词序以及句长等特征进行提取并融合,以计算句子的相似度,但该方法对于本体库中未涉及的内容,计算精确度不高,且对于主观性强的文本语义分析不准确。
Joshi和Penstein-Rose把依存广泛关系和相关衍生特征应用到分类过程中。通过依存句法分析得到三元组,得到如RELATION_HEAD_MODIFIER形式的特征,这个特征针对性太强,只能用在固定领域。Yessenalina等使用基于情感词典的自动方法来标注情感信息。他们用基于结构化SVM(Yu and Joachims)的两级联合分类模型,其对于由较少情感词汇组成的句子来说,情感倾向分析并不准确。以上方法对于语文古诗文阅读类字数较多且具有较强主观性的答案来说,评分效果并不理想。
该文通过构建语文古诗文语料库、古诗文情感词库及学科情感分析模型,使情感倾向分析更加符合学科特点,并使用依存句法分析,明确了词语在句子中的所属依存关系,以此实现了结合学科情感分析与依存关系的相似度评分算法,使主观题的评分更加合理有效,经实验验证,和教师的实际评分趋势基本一致。
学科情感分析模型的构建,分为语料库、情感词库、情感分析模型的建立,以及古诗文的情感预测。
目前,并没有构建好的古诗文相关语料库可以使用,因此该文收集整理了包含初中、高中课本内全部古诗词和文言文,其中包括:先秦时期《诗经》、《论语》、《孟子》等;两汉《史记》等全部原文、译文;唐宋诗人李白、杜甫、苏轼等所有原文、译文、注释和赏析等,并经学科专家审核,生成了古诗文语料,共计81 927条,并将其与中文维基百科语料进行融合,后通过Jieba工具包对语料进行分词及词性标注,将预处理后的文本通过古诗文过滤词表进行过滤标点、停用词等处理,经过检查、去重后,将其存入古诗文基础语料,预处理后的古诗文部分语料如图1所示。
图1 古诗文部分语料
将古诗文基础语料,通过文本向量化算法Word2vec中的CBOW(continuous bag-of-word)模型来进行词向量的训练,构建了古诗文语料库,其中词语对应的向量维度为192维。相比中文维基百科语料库,其在词语向量的表达上更加符合学科背景,“郭纶”是宋代诗人苏轼的诗作,属于古诗文阅读题中的专有词汇,该词在古诗文语料库中的向量表达及其相似词的排序都是符合学科特点,而维基百科语料库中缺乏“郭纶”一词,因此将古诗文语料库作为整个评分算法中的底层数据支持是可靠的。
Word2vec训练的词向量模型,只是提供两个词语之间空间位置上的相关性,对于语义相似度的计算并不准确,例如“喜欢”,通过模型的wv.most_similar方法找出与其相似度最高的十个词,其中相似度最高的词语是“讨厌”,显然这两个词语义相反。在古诗文阅读题的评分过程中,语义相反的词语是不能进行得分操作的,所以仅仅通过词向量模型进行相似度计算是不准确的,因此该文将古诗文语料中带有情感倾向的词语进行收集和整理,并结合《哈工大同义词词林扩展版》进行情感词库的构建。
为了使古诗文情感词库的构建更加合理,方便后续词库的扩充与维护,该文在构建情感词库时制定了入库规则,词库按照树状的层次结构将所有词语组织起来,将其进行了四个层次的划分。情感词入库如下:
规则1:第一层代表学科类型,为最大类,用两个英文字母表示,该文以语文古诗文阅读题为研究对象,最大类命名为“Sg”(诗歌拼音首字母缩写);
规则2:第二层代表是否为学科专有名词,用两位数字表示,如“喜爱”为通用情感词汇,其第一层用“Sg”表示,第二层用“01”表示,“爱国热情”为学科专有名词,将其第一层用“Sg”表示,第二层用“02”表示,以此类推;
规则3:第三层用来划分词性,用一个大写字母表示,因表达情感的词汇不是只有动词,还有名词、形容词等,如:“郁闷”为形容词,其具有消极的情感表达。将评分中出现的情感词汇进行整理,并将其词性代表的英文字母按顺序往后顺延,并不断扩充;
规则4:第四层作为最底层,是用来划分词语的情感倾向,以两位数字表示,用奇数表示积极词汇,用偶数表示消极词汇。
情感词库构建的具体步骤如下:
(1)预处理后的古诗文语料按照词性进行分类,词性为动词的词语归为一类,去掉重复词语,剩下词语存入情感词库中,每个词占一行。
(2)将情感词库中所有词语进行情感倾向分析,数值大于等于0.6的认定该词为积极词语,相反为消极词语,并将其基于上文介绍的情感词入库规则,进行重新定义和排序。
(3)根据《哈工大同义词词林扩展版》的层次结构,将词林中每一行所有同义词存入同义词列表中,并在列表中查找与词库中相同的词,将其相同词语的全部同义词存入情感词库中相对应词语的后面,词语之间以空格分开。
(4)将词林中每一行的所有反义词语存入反义词列表中,并在列表中查找与词库中相同的词,对情感词库进行检验和补充。
(5)通过人工检验,对情感词库中有歧义的词语,不断补充和调整,逐步完善情感词库。
通过对古诗文主观题及教师评分方法的研究发现,尽管教师评分的主要标准是考生答案中对应的得分点,但语句的通顺性、情感表达的一致性也是重要的评判依据。因此,对答案中包含的情感倾向进行分析是不可或缺的。
SnowNlp情感分析模型常用于购物类评价,其语料库中相关学科词条较少,如“这首诗表达了诗人报国无门的愤恨”,表达的是消极情感,但SnowNlp情感分析模型得出该句表达的情感是积极的。因此,将其用于古诗文阅读题的情感分析是不恰当的。该文以SnowNlp的情感分析模型为基础,设计并构建了学科情感分析模型,用于对古诗文阅读题答案的情感分析与评价,模型结构如图2所示。
图2 情感分析模型
从图2可以看出,整个构建过程主要分为三个模块,分别为:数据模块、预处理模块和训练模块。
数据模块:该文收集了陕西省某重点高中近五年全部考试中的古诗文类阅读题,整理了学生答案与教师评分,将其融入古诗文语料,生成带标注的基础数据。根据学生分数分布规律,基于分数来判定情感分类。判定时以标准答案中的情感词语为基准,高分代表情感更趋向于标准答案情感,低分代表情感与其差别较大,以此确定判决分数,将标注数据集中的学生答案按照判决分数分别存为积极数据集train.positive.txt和消极数据集train.negative.txt,并将其作为模型训练的初始语料。
预处理模块:构建模型初期,使用SnowNlp中的分词和词性标注模块,经过实验对比,发现通过Jieba工具包对古诗文学生答案进行分词和词性标注更加合适,因此在SnowNlp模型中引入Jieba工具包,将其分词和词性标注方式进行更改。
训练模块:将SnowNlp情感分析模型的积极数据集与消极数据集分别替换为train.positive.txt和train.negative.txt,作为其模块中的朴素贝叶斯算法的训练数据。训练过程中,运用网格搜索法,用于搜索满足最高准确率时对应参数值的大小,进行超参数的调整,将以SnowNlp进行分词和词性标注的训练模型保存为GswSen.marshal,以Jieba进行预处理的训练模型保存为GswJieSen.marshal。修改sentiment中的模型路径,将新模型进行替换,模型构建完成。
不同模型的情感分析数值对比如表1所示。可以看出学科情感分析模型对学生答案的情感分析是更准确的(数值在0~1之间,数值越高表示越积极,数值越低表示越消极)。
表1 不同模型的情感分析数值对比
情感与依存关系在古诗文主观题的评分中至关重要,而学生答案与标准答案中的关键词相似度也对评分结果影响较大,因此,该文基于多个维度对古诗文主观题进行相似度综合评分。
在古诗文主观题评分过程中,如何在考生答案中获取得分点十分重要,得分点其实就意味着答案中的得分关键词,且考生答案中的关键词与标准答案中的关键词是否完全一样,相似度是多少,也是教师评分过程中一个重要的评判标准。因此,该文提出了基于关键词提取的词向量相似度计算方法。
2.1.1 关键词提取
传统意义上的关键词提取方法主要有TF-IDF、TextRank、LDA等。通常是通过词频或是提取文档中的主题来进行,但是学生答案属于短文本,且用词比较单一和平均,用已有关键词提取算法显然是不能满足需求的。因此该文根据学科特征,将学生答案和标准答案进行拆分,拆分后的词语,如“表达”、“体现”等不是得分点,且会对评分造成影响的词语,将其通过古诗文过滤词表进行过滤,并按照词性进行关键词的提取。具体算法(WordClass)如下:
算法1:WordClass算法。
输入:学生答案文本A和标准答案文本A
输出:序列Nord和Nord
Step1 初始化:古诗文过滤词表gswfil,古诗文语料库gswmodel;
Step2 基于Jieba将A和A进行分词和词性标注,得到序列Ord(w
,f
)={(w
,f
), (w
,f
),…,(w
1,f
1)}和Ord(w
,f
)={(w
,f
),(w
,f
),…,(w
2,f
2)},其中Ord和Ord分别表示A和A预处理后的序列,w
表示词语,f
表示词语w
对应的词性;Step3 遍历Ord和Ord,分别在gswfil中进行查找,若有相同词语,则将该词语及其词性在对应序列中删除,直到遍历结束;
Step4 将Ord和Ord中词性为“v”(动词),“n”(名词),“a”(形容词)和“i”(成语)开头的词语通过正则表达式查找,并将其提取出来,得到新序列Nord={w
,w
,…,w
1}, Nord={w
,w
,…,w
2}。2.1.2 关键词词向量的相似度计算
该文基于古诗文语料库将提取的关键词表示为词向量,其每一维的值代表一个具有一定的语义和语法上解释的特征,并将其通过相加求和再平均得出句向量,利用Tanimoto系数得出两个句向量之间的相似度,具体算法(VecMate)如下:
算法2:VecMate算法。
输入:学生答案文本A和标准答案文本A
输出:句子相似度Sim(A,A)
Step1 初始化:古诗文语料库gswmodel;
Step2 将A和A通过WordClass算法,得到序列Nord={w
,w
,…,w
1}和Nord={w
,w
,…,w
2};Step3 将Nord和Nord进行遍历,查询词语是否在gswmodel中,若不存在,则将该词语在对应序列中删除,将对应序列的长度减1,得到处理后的Nord及其长度L
和处理后的Nord及其长度L
,若L
、L
其中一个为零或两个都为零,则相似度Sim=0,输出Sim,否则到Step4;Step4 通过gswmodel将Nord和Nord中的词语表示为词向量,通过式1分别计算,其中(192维)表示序列中第i
个词语的词向量,得出句向量和;(1)
Step5 根据Tanimoto系数算法,通过式2计算和的相似度Sim(,)。Sim(,)=(2)
计算机语言学中,情感分析指判定文本所持有情感(或观点、态度)的极性和强度的过程。该文通过对学生答案和标准答案的情感倾向分析,结合古诗文情感词库与学科情感分析模型分别计算两个文本对应的积极情感数值,实现相似度评分计算,具体算法(ActSen)如下:
算法3:ActSen算法。
输入:学生答案文本A和标准答案文本A
输出:句子情感相似度Sensim(A,A)
Step1 初始化:古诗文情感词库gswsen,学科情感分析模型GswJieSen;
Step2 通过WordClass算法,得到序列Nord和Nord;
Step3 对Nord和Nord进行遍历,分别查询词语是否在gswsen中,若存在,将gswsen中含有该词的序列作为列表Yseq中的元素提取出来;若不存在,则将该词语分别存入Nseq和Nseq;得到对应序列长度Lg和Lg,若Yseq的长度大于零,转Step4,否则,转Step5;
Step4 遍历Yseq,获取Yseq中每个序列中下标1对应的元素Num,若Num对2取余不等于零,则将其对应的数量Jsum(初始值为零)加1;
Step5 遍历Nseq和Nseq中的所有词语,查询GswJieSen中是否存在该词语,若存在,则将其通过GswJieSen进行情感分析,若其情感数值大于并等于0.6,则将Jsum加一,若不存在,则将其情感分析数值记为0.5(默认中性词汇),Xsum(初始值为零)加1;
Step6 通过式3计算两个句子的积极情感分析数值(情感相似度)Sensim(Nord,Nord);
Sensim(Nord,Nord)=
(3)
在学生作答过程中,有时会出现对应于相同的宾语,谓语动词的情感完全相反的情况,若不考虑词语的顺序,很有可能会造成误判。如“诗人热爱国家,对贼寇的痛恨”为得分答案,学生作答为“诗人痛恨国家,对贼寇的热爱”,若不考虑词语在句子中的结构信息,两个句子会得到相同的分数,显然不合理,因此,需要对重点词语进行所属关系定位。依存句法分析的主要任务是识别出句子所包含的句法成分以及这些成分之间的关系。该文采用StanfordCoreNLP的依存句法分析进行相似度的计算,先将句子的主谓、动宾关系找到,并将其通过主语和宾语进行定位,以此来确定谓语词的情感倾向,实现相似度计算,具体算法(WordLoc)如下:
算法4:WordLoc算法。
输入:学生答案文本A和标准答案文本A
输出:基于依存关系的句子相似度Depsim(A,A)。
Step1 初始化:古诗文语料库gswmodel,学科情感分析模型GswJieSen,StanfordCoreNLP依存句法分析模型Sparse;
Step2 将答案文本基于正则表达式进行分句,得到序列Sord={ss,ss,…,ss}和Sord={cs,cs,…,cs},其中ss表示学生答案中拆分的句子,cs表示标准答案中拆分的句子;
Step3 遍历Sord和Sord,将ss和cs分别通过Sparse进行依存句法分析,将其对应的句子结构表示Mord(s,v,o)={(s,v,o),(s,v,o),…,(s1,v1,o1)}和Mord(s,v,o)={(s,v,o),(s,v,o),…,(s,v, o)},其中s,v,o分别表示句子的主语、谓语和宾语,若句子结构不完整,则将该词语用占位符x代替;
Step4 遍历Mord(s,v,o),查找Mord(s,v,o)中与o1相同的词语,并将其对应的谓语进行提取,若Mord中无相同词语,则将o1和o2通过gswmodel进行相似度对比,若相似度大于0.8则将o1和o2对应的谓语进行提取,若不满足条件,则视为学生未作答该得分点;
Step5 得到序列Vord(v)={(vi,vi),(vi,vi),…,(v1,v2)},其中vi表示所提取的谓语;
Step6 遍历Vord(v),得到其长度Lv,通过模型GswJieSen将vi1和vi2进行情感分析,两个词语数值相减的绝对值小于等于0.15,则认为其情感表达一致,将Vsum(初始值为零)加1;
Step7 通过式4计算两个句子的相似度Depsim(AA);
(4)
该文通过关键词词向量相似度、学科情感分析模型的相似度以及依存句法分析的相似度,多个维度计算学生答案与标准答案文本之间的加权语义相似度。并将构建的古诗文语料库、古诗文情感词库和学科情感分析模型,用于相似度综合评分算法,符合语文学科背景,具体算法如下:
算法5:结合学科情感模型与依存关系相似度评分算法。
输入:学生答案文本A和标准答案文本A
输出:学生得分Stugrade
Step1 初始化:古诗文语料库gswmodel,古诗文情感词库gswsen,学科情感分析模型gswsenmod,依存句法分析模型Sparse;
Step2 将A和A通过WordClass算法,得到序列Nord(w
,f
)={(w
,f
), (w
,f
),…,(w
1,f
1)和Nord(w
,f
)={(w
,f
),(w
,f
),…,(w
2,f
2)} ,通过VecMate算法得到Vecsim(A,A);Step3 将序列Nord和Nord中词性以“n”和“v”开头的词语通过正则表达式提取出来,分别存入Nseq(n)={n1,n2,…,n}和Vseq(v)={v,v,…,v},(其中i
取值为1,2,i
=1代表学生答案序列,i
=2代表标准答案序列),Nseq(n)为名词序列,Vseq(v)为动词序列;Step4 通过ActSen算法,将Nseq(n)进行情感分析模型的相似度计算,得到Nsensim(A,A),将Vseq(v)进行情感分析模型的相似度计算,得到Vsensim(A,A);
Step5 将答案文本A和A代入,通过WordLoc算法,得到相似度Depsim(A,A);
Step6 通过式5进行加权得到考生答案相似度Stusim(A,A)
(5)
Step7 通过式6得到考生答案分数Stugrade(A,A),其中total表示该题总分数。
Stugrade(A,A)=total×Stusim(A,A)
(6)
由于目前国内没有用于主观题自动评分的数据集,因此,该文采集了陕西省某高中1 348名考生的真实考试数据,其中包括2019届高三年级第二学期语文期末考试和高二年级第二学期的语文期末考试中的诗歌鉴赏题和古文翻译题,其考试形式与高考相同,需要考生将答案写在答题卡上,由教师通过网上阅卷进行评分。基于以上考试共采集学生答案和教师得分,共1 348条作为实验数据,并进行人工整理,构建实验测试数据集,验证基于学科情感分析与依存关系的相似度评分算法的可靠性。
第一组实验:将Word2vec相似度算法、BERT相似度算法、基于BERT与GswJieSen的评分算法与该评分算法进行实验对比,如图3所示。
图3 不同相似度评分算法之间的实验对比
其中,BERT是Google于2018年发布的基于双向Transformer结构的语言预训练模型。从图3可以看出,基于BERT与GswJieSen的评分算法与该评分算法趋势相同,评分差值为零所对应的答案数量是最多的。在不加入情感模型的相似度算法中,Word2vec相似度算法、BERT相似度算法在相似度评分中与教师分差主要集中在2~3分数段内,评分效果较差。对应于不同的文本向量化算法,结合学科情感分析模型都对评分准确率有很大的提升。因此,在古诗文主观题评分算法中引入学科情感分析模型是合理且高效的。
第二组实验:该文将SnowNlp情感分析模型、HanLp自然语言处理情感分析模型与该文构建的学科情感分析模型GswJieSen进行评分相似度算法实现,比较它们在评分上的效果。
从表2可以看出,SnowNlp评分算法的准确率相对较低;HanLp的评分准确率与其相差不大;该评分算法在三个模型中三项指标均为最高,将分差在3分即以上的评分结果看作评分失误,不予比较。
表2 不同评分模型的准确率对比 %
从图4可以形象地看出,每个模型对应的差值与个数大体上呈现正态分布。该评分算法对应的分差为0的个数最多,趋势较其他模型更为陡峭,±1,±2,…答案数量依次递减,评分差距在2分及以内的准确率为93.02%,可以看到该评分算法更接近教师的评分。
图4 不同评分模型之间的分差-人数分布图
在1 348条测试数据集中随机抽取330个学生答案,从图5可以看出,大部分分数集中在3~5这个分数段内,该算法的评分与教师评分高低趋势相同,且分差不大。从图6可以更为清晰地看出,该评分算法与教师评分准确率大体分布在85%,结合表2可以看出评分一致的准确率达到51.03%,差一分的准确率达到80.10%,差两分的准确率达到93.02%等。通过式7计算平均评分准确率。
(7)
图5 教师评分与该相似度评分算法评分对比
图6 教师评分与该相似度算法评分准确率
其中,w
表示评分准确率,n
表示实验数据集中的数据总量,m
表示试题满分,t
表示教师评分,s
表示该算法的评分。可以得出该算法在当前实验测试集中的平均准确率为89.42%,实验证明,基于学科情感分析模型与依存关系的相似度评分算法是有效且准确的。根据语文古诗文阅读题的特征,实现了一种基于学科情感分析模型与依存关系的相似度评分算法,将其通过考生考试中真实的答题数据进行实验验证,实验结果表明,该算法与教师评分趋势基本一致,准确率较高。但是,学科之间存在一定的差异性,同一学科的不同题型也存在差异性,提出的算法在不同学科题型的评分准确率上并不高,因此,还需根据不同的学科题型特征对算法进行调整,以此实现适用于不同学科题型的相似度评分算法。