实体识别是自然语言处理任务中的一项基础研究,旨在识别非结构化文本中的特定实体名称及其对应的实体类型
[1 ] 。教育领域课程文本的实体识别是指从获取到的学科数据中,将与知识主题相关的概念、公式以及原理等提取出来,进而为知识抽取、实体链接以及智能化教育应用的研发与构建提供支撑,具有较大的研究价值
[2 ] 。
在实体识别任务中,BILSTM-CRF因其在众多公开的数据集上良好的实验效果,成为深度学习技术的代表模型
[3 ⁃4 ] 。随着预训练模型的提出,多数研究者采用BERT结合BILSTM-CRF的方式进行实体识别
[5 ] 。谢腾等
[6 ] 针对传统的实体识别模型采用静态词向量导致无法处理“一词多义”的问题,利用BERT强大的上下文学习能力获取优质的词向量表示信息,在此基础上,将词向量输入至下游的BILSTM-CRF分类任务中进行实体识别,取得较好的准确率。但BERT模型多数以字为单位进行建模,无法感知粗粒度的领域词向量信息,对于实体嵌套词的识别效果并不好
[7 ] 。
针对上述问题,构建LEBERT-CRF实体识别模型,在BERT表示字向量的基础上利用词典适配器将课程领域词典的语义信息动态融入BERT编码器中,有效解决BERT模型以字向量对教育领域课程非结构化文本建模,不能感知粗粒度的领域词汇语义信息缺陷,优化实体识别的词向量表示方法。
1 相关工作
大量的深度神经网络技术应用于实体识别任务
[8 ] ,其中应用最广泛的就是RNN
[9 ] 和长短期记忆网络(long-short term memory RNN,LSTM)。RNN能够很好地学习序列样本的时序信息和相互关系,LSTM的改进形式是在RNN中添加“门结构”以模拟人脑的记忆过程。在LSTM的基础上,其双向形式BiLSTM
[10 ] 、基于注意力机制的BiLSTM
11 ZHOU P, SHI W, TIAN J, et al. Attention⁃based bidirectional long short⁃term memory networks for relation classification[C]//Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics, 2016: 207⁃212.
陆续被提出。教育领域经典的命名实体识别方法是BiLSTM-CRF
[11 ] ,即利用BiLSTM提取深度特征,用条件随机场(conditional random field,CRF)模型进行文本序列 标注。随着预训练模型的提出,研究者将BERT、XLNet等预训练模型与BiLSTM-CRF结合,进一步提升命名实体识别的准确率
[12 ] 。Wei等使用BERT-BiLSTM-CRF模型对教育领域突发事件语料库进行实体识别,准确率达到了91.62%,为政府对教育突发事件的决策提供了帮助
① 。BERT-BiLSTM-CRF模型结构见
图1 。首先,通过BERT编码层获取文本对应的向量表示;其次,使用BiLSTM进行特征提取,获取 文本中的上下文特征;最后使用CRF对序列进行解码和注释,以准确预测实体及其对应的类型。
上述基于神经网络的方法在应用到教育领域非结构化文本的实体识别时,需要先进行中文分词(Chinese word split,CWS)的处理,CWS的准确程度对实体识别模型的性能至关重要
[13 ] 。依据不同的CWS方式将实体识别任务细分为基于字符粒度、基于词粒度的两种方式。通过查找大量文献发现,基于字符粒度的实体识别模型表现通常要比基于词粒度的效果好
[14 ⁃15 ] ,原因是中文句子中词语的边界较为模糊,比较考验分词器的性能,基于词粒度的CWS切分难度较大,容易出现错误传播导致模型性能下降,且其表征字符的语义信息能力不强,因此研究者经常使用基于字符粒度的实体识别方法或者基于 字符粒度的方法进行改进。
也有研究者专注于“字词融合”的方式优化词向量表示
[16 ⁃17 ] ,该种方式在获取字粒度优秀特征表示的 基础上融入了词粒度特征,并且经过多项实验证明要优于单纯以字进行切分的效果
[18 ⁃19 ] 。郭振东等
[20 ] 面向软件工程学科研究高质量的词向量生成方法,在基于字符粒度的向量表示基础上利用“首尾字求和”策略融合粗粒度的词向量表示,应用到分词任务中获得了较好的效果。但是该类方式关注的是文本中的全部特征,不能很好地捕捉句子中重点词汇的特征,对于嵌套语句的实体识别效果较差。因此,如何在字粒度向量的基础上捕获关键词向量的特征信息,是当下研究应重点考虑的问题。
与通用的自然语言文本不同,数据结构文本中包含大量的嵌套词,将其应用于实体识别模型存在边界难以界定的问题,例如“二叉树的先序遍历”一般会被识别为“二叉树”“先序遍历”,不能准确识别“二叉树的先序遍历”。而文本中字、词的语义表达对边界划分至关重要,因此本文基于字词融合的方式构建实体识别模型。
BERT模型在实体识别任务中表现优异,因此本文选择基于BERT模型建模字向量的基础上实现字词融合方法。经过梳理文献,发现针对特定领域有两种基于BERT进行字词融合的方式,分别是模型级别的融合方式、BERT底层特征融合的方式,见
图2 。模型级别的融合方式是使用融合层(比如线性层)将BERT经过12层Transformer输出的字向量表示与词向量融合,接着输入推理层进行实体识别的方式,虽然该种方式能融合字符粒度和词粒度的语义表示信息,但该种方式更多是集中于浅层特征的融合,不能充分发挥BERT自身的序列建模优势,因此本文选择第二种方式,将数据结构课程的专业词汇融入BERT底层特征中,构建面向数据结构文本的实体识别模型。
以往的“字词融合”实体识别任务较为考验分词器的性能,对于文本中的嵌套词有多种分词歧义的情况,例如“二叉树的先序遍历”分词为“二叉树”“先序遍历”,该种情况忽略了“二叉树的先序遍历”作为整体的词义信息,而边界划分的好坏直接影响到实体识别的效果。因此,本文受文献[
21 ]的启发提出一种字词融合的实体识别方法,融合字向量及其周围可能成词的向量表示,并根据词典适配器调整关键词的权重,优化原有字向量的语义表示,提升原有字向量的语义表达能力,降低边界划分错误对实体识别模型的影响。
2 LEBERT-CRF实体识别模型
本文构建了LEBERT-CRF实体识别模型,将领域词向量融合到BERT的底层特征中,提升实体识别模型对嵌套词的识别效果。LEBERT-CRF实体识别模型构建流程见
图3 。首先,将课程文本句子
S = c 1 , c 2 , … , c n 输入BERT模型,在BERT建模字向量的基础上,利用word2vec模型对匹配到的领域词汇
{ d s 1 , d s 2 , … , d s n } 建模,生成课程实体词级别的向量表示信息;其次,使用词典适配器将领域词汇的语义信息嵌入BERT编码器中,获得动态融合字符、词汇特征的词向量表示;最后,考虑标签的依赖性,使用CRF层进行解码,获得预测的标注序列,完成实体识别任务。LEBERT-CRF的核心内容如下。
2.1 字符-领域词汇对序列
在命名实体任务中,BERT模型多数以字向量为训练单位,导致词向量模型难以感知到专业词语整体的语义特征表示,无法生成高质量的领域文本词向量。针对教育领域课程文本的命名实体识别任务,将课程词典特征有效融入模型中,首先对字符系列进行扩充。给定一个课程词典D i c t = d 1 , d 2 , … , d m 和包含n 个字符的句子S e n c = c 1 , c 2 , … , c n ,d i 为领域词典包含的词汇,c i 为以字为单位进行切分的字符序列,通过匹配字符序列与课程词典进而获取句子中可能包含的领域词汇,记为d s i ,以“结构体数组”举例,可能的分词情况有“结构体”“数组”以及“结构体数组”等多种,然后对于匹配到的词汇,将其分配于包含的字符,最后形成c d s 序列,c d s = c 1 , d s 1 , c 2 , d s 2 , … , c n , d s n 。其中c i 表示句子中第i 个字符,d s i 表示分配给第i 个字符的词汇,具体算法实现的伪代码如下。
def sent_to_matched_words_boundaries(sent, lexicon_tree, max_word_num=None):
"""
输入一个句子和词典树, 返回句子中每个字所属的匹配词, 以及该字的词边界
字可能属于以下几种边界:
B-: 词的开始, 0
M-: 词的中间, 1
E-: 词的结尾, 2
S-: 单字词, 3
BM-: 既是某个词的开始, 又是某个词中间, 4
BE-: 既是某个词开始,又是某个词结尾, 5
ME-: 既是某个词的中间,又是某个词结尾, 6
BME-: 词的开始、词的中间和词的结尾, 7
Args:
sent: 输入的句子, 一个字的数组
lexicon_tree: 词典树
max_word_num: 最多匹配的词的数量
Args:
sent_words: 句子中每个字归属的词组
sent_boundaries: 句子中每个字所属的边界类型
"""
sent_length = len(sent)
sent_words = [[] for _ in range(sent_length)]
sent_boundaries = [[] for _ in range(sent_length)] # 每个字符都有一个边界
for idx in range(sent_length):
sub_sent = sent[idx:idx + lexicon_tree.max_depth]
words = lexicon_tree.enumerateMatch(sub_sent)
if len(words) == 0 and len(sent_boundaries[idx]) == 0:
sent_boundaries[idx].append(3) # S-
else:
if len(words) == 1 and len(words[0]) == 1:
if len(sent_words[idx]) == 0:
sent_words[idx].extend(words)
sent_boundaries[idx].append(3) # S-
else:
if max_word_num:
need_num = max_word_num - len(sent_words[idx])
words = words[:need_num]
sent_words[idx].extend(words)
for word in words:
if 0 not in sent_boundaries[idx]:
sent_boundaries[idx].append(0) # S-
start_pos = idx + 1
end_pos = idx + len(word) - 1
for tmp_j in range(start_pos, end_pos):
if 1 not in sent_boundaries[tmp_j]:
sent_boundaries[tmp_j].append(1) # M-
sent_words[tmp_j].append(word)
if 2 not in sent_boundaries[end_pos]:
sent_boundaries[end_pos].append(2) # E-
sent_words[end_pos].append(word)
assert len(sent_words) == len(sent_boundaries)
new_sent_boundaries = []
idx = 0
for boundary in sent_boundaries:
if len(boundary) == 0:
print("Error")
new_sent_boundaries.append(0)
elif len(boundary) == 1:
new_sent_boundaries.append(boundary[0])
elif len(boundary) == 2:
total_num = sum(boundary)
new_sent_boundaries.append(3 + total_num)
elif len(boundary) == 3:
new_sent_boundaries.append(7)
else:
print(boundary)
print("Error")
new_sent_boundaries.append(8)
assert len(sent_words) == len(new_sent_boundaries)
return sent_words, new_sent_boundaries
2.2 词典适配器
如何将句子中每个位置的字符⁃词汇特征有效融入BERT模型中,是需要重点考虑的问题,本文采用 词典适配器注入融合字词表示的特征。将字符⁃领域词汇对向量表示信息作为词典适配器的输入,形式化表示为( h i c , l i d s ) ,h i c 表示BERT中第i 层Transformer输出的字向量,l i d s = l i 1 d , l i 2 d , … , l i n d 表示与之对应的词向量,如公式(1)
其中e d 是使用课程教材生成的训练语料,Word2vec模型通过分句、jieba结合领域词表分词进而生成词嵌入查找表,其中d i j 是d s i 中的第j 个词汇。
通过对词向量进行非线性转换使之与字符向量对齐,如公式(2)
v i j d = W 2 t a n h W 1 l i j d + b 1 + b 2 ,(2)
其中,W 1 和W 2 分别是d c × d w 和d c × d c 的矩阵,b 1 和b 2 表示偏置向量,d c 代表BERT的隐藏层大小,d w 表示词嵌入的维度。
考虑不同的词汇对任务的贡献度不同,采用如下方法处理:首先,将第i 个字符相对应的v i j d 表示为V i = v i 1 d , v i 2 d , … , v i n d ,V i 维度为n , d c ;其次,引入双线性注意力层计算词向量对应的注意力得分a i ,同时对注意力权重和词向量进行加权求和得到z i d ;最后,将加权之后的词典特征z i d 融入字符向量h i c 中,得到h ˜ ,具体的计算方式为
a i = s o f t m a x k i c W a t t n V i T ,(3)
z i d = ∑ j = 1 n a i j v i j d ,(4)
h ˜ = h i c + z i d 。(5)
2.3 LEBERT模型
LEBERT由词典适配层和BERT构成,具体应用的过程见
图4 。将词典适配器连接在BERT的Transformer层之间,将Transformer层输出的字向量与领域词汇的embedding相融合,进而获取高质量的词向量表示。
LEBERT模型的处理过程如下:给定具有n 个字符的句子S = c 1 , c 2 , … , c n ,对其扩展形成字符⁃领域词典的形式c d s = c 1 , d s 1 c 2 , d s 2 , … , c n , d s n ,如3.1节所述。将c 1 , c 2 , … , c n 输入至嵌入层中,获取输出e 1 , e 2 , … , e n ,将其输入Transformer层中,计算方法为
G = L N ( H t - 1 + M H A t t n ( H t - 1 ) ) ,(6)
H t = L N ( G + F F N ( G ) ) ,(7)
其中,H t 表示t 层的输出,L N 表示归一化,M H A t t n 代表多头注意力机制,FFN是两层前馈神经网络,其隐藏激活函数为RELU。
为了在
k 层之后注入词汇信息,经过连续
k 层Transformer后输出字向量表示
H k = { h 1 k , h 2 k , … , h n k } ,然后将
( h i k , l i d s ) 通过词典适配器转换为
h ˜ ,将
h ˜ 继续输入至剩余的
( 12 - k ) 层Transformer中获得最终的输出,具体过程见
图4 。
2.4 模型的训练与解码
模型解码层使用CRF。首先,计算最后一层隐藏层输出H 12 的得分,如公式(8)
对于给定的序列标签y = { y 1 , y 2 , … , y n } ,对其概率进行定义,如公式(9)
p ( y | s ) = e x p ( ∑ i ( O i , y i + T y i - 1 , y i ) ) ∑ y ˜ e x p ( ∑ i ( O i , y ˜ i + T y ˜ i - 1 , y ˜ i ) ) ,(9)
其中,T 代表转移得分矩阵,y ˜ 代表所有的位置标签序列。
对于给定的{ s j , y j } | | j = 1 N ,通过最小化句子级别的负对数似然损失训练模型,如公式(10)
利用维特比算法找出分数最高的标签序列。
3 实验设计与分析
3.1 数据集
为了获取有价值的课程实体,验证实体识别模型的有效性,选取内蒙古师范大学计算机科学技术学院数据结构教学团队主编教材《数据结构(C语言版)》作为数据集来源,该教材于2021年6月由科学出版社正式出版,已经在2019-2021级连续三届学生的教学中使用,共20万字左右。《数据结构(C语言版)》课程文本中具有大量的领域专有名词,且存在较为普遍的嵌套命名实体情况,能够有效验证模型的有效性以及领域适用性。
在数据预处理阶段,需要对教材中的特殊符号、图片、表格、停用词以及C语言代码等内容进行删除,并使用“。”“?”“…”作为分句符号对数据集进行切分,总计3 000条句子,按7∶2∶1的比例切分训练集、测试集和验证集。通过领域专家人工标注的方式在教材中标注实体,共标注424个领域实体,其中“算法”类实体94个,“结构”类实体119个,“名词术语”类实体211个,使用BMES的策略对需要标注的实体进行人工标注,“结构”类实例的词开头标注为B-CON,中间为M-CON,结尾为E-CON,同理,“算法”类和“名词术语”类的实例分别用ALG和PROP替换,部分标注实例见
表1 。
3.2 实验参数设置
实验中涉及的配置信息和参数见表2-3。
3.3 评估指标
实体识别的主要评估标准是P 、R 和F 1,计算公式为
P = T P T P + F P ,(11)
R = T P T P + F N ,(12)
F 1 = 2 × P × R P + R 。(13)
P (precision)表示准确率,即所有被预测为正例的样本中,真正为正例的比例。R (recall)表示召回率,指的是在所有实际为正例的样本中有多少个被预测为正例。F 1综合考虑P 和R 以评估模型的性能。TP 、FP 、FN 分别表示原本实例和预测实例均为正类、原本实例为负类,预测实例为正类、原本实例和预测实例均为负类的样本。
3.4 实验结果分析
3.4.1 超参数实验
超参数实验是在模型开始学习之前设置的,并非经过训练得到。为获取模型的最优性能,通常需要对超参数进行优化。考虑到不同参数值下模型表现各异,本研究设置超参数实验选取最优超参数。
在实体识别模型训练的过程中,学习率(leaning rate)和batch_size是影响模型性能的重要超参数。学习率代表每次权重参数更新的步长,其变化直接影响到模型收敛的状态。batch_size表示每次传给模型训练样本的数量,其值的变化一般会对该模型泛化性能产生影响。
将标注后的数据转化为json格式输入至本研究构建的实验模型中,发现模型运行至第5轮的时候模型损失值会趋向稳定,模型逐渐收敛且验证集的精度最高,所以将轮次设定为5轮,以减少不必要的资源浪费。考虑到不同的batch_size和学习率对模型性能造成的影响,本文将batch_size分别设置为4、8、16、32和64,学习率设置为1e-5,2e-5,3e-5,4e-5,5e-5和1e-4,并且采取不同参数下的
F 1进行对比见
图5 。
由
图5 所示,当batch_size为4、学习率为2e-5时模型的性能最优,
F 1为94.71%。在模型的训练过程中,学习率是一个很重要的有监督参数,学习率过低会造成模型收敛速度慢、无法学习的问题,过高则会导致模型不能收敛,难以找到最优值的位置。通过观察发现在batch_size相同的情况下,在合理的范围内适当地增大学习率能够提升模型的收敛程度,帮助模型找到最优值。
在一定的范围内增加batch_size能够有效减少模型的训练时间,但提升batch_size意味着模型参数的更新次数减少,可能在结束训练之前模型还没有选择到最优的参数,会降低模型的泛化能力,进而影响模型的性能。由
表4 所示,当固定leaning rate为2e-5时,相比于其他的batch_size,batch_size为4模型整体表现是更优的,但其训练时间也最长。同时通过对比batch_size=32、64和batch_size=4、8、16的
F 1值时,发现虽然较大的batch size整体
F 1值不如取较小batch_size的
F 1值,但在
图5 中,发现在固定batch_size的情况下随着学习率的增长其
F 1值呈整体上升的趋势,因此在选择较大的batch_size时候 学习率也应相应地提高,以保证模型收敛的稳定性。
3.4.2 LEBERT模型优化
LEBERT是在BERT对字序列建模的基础上置入了词典适配器,考虑到BERT的不同层对句法特征和语义特征的学习效果不同
[22 ] ,在置入词典适配器学习字词融合的特征偏重也不同,会对模型的下游任务造成一定的影响。为探究BERT的Transformer不同层之后置入词典适配器的实验效果,设定batch_size为4,learning rate为2e-5。
选择在1,3,6,9,12层之后、多层或者所有层之后置入词典适配器,见
表5 。仅从单层的性能而言,词典适配器在第9层的Transformer之后取得最好的模型性能,表明BERT中间层的词典特征融合促进了BERT的字符特征与领域词汇特征之间的交互,接着优先选取准确率高的层进行融合,设置9层、12层融合,1层、9层、12层融合,1层、3层、9层、12层融合以及所有层的融合,发现第9层和第12层融合的效果最好,验证了LEBERT设置中间层或者更深层次之间进行特征融合会有更好的表现,而所有层融合的效果不是很好,原因是融合多层特征会导致模型过拟合。
3.4.3 几种实体识别模型的对比实验结果分析
为验证字词融合方式的LEBERT-CRF实体识别模型性能。首先,通过对比其他经典的以字为切分单位的主流命名实体识别模型BILSTM-CRF、BERT-CRF、BERT-BILSTM-CRF验证本文选择“字词融合”实体识别方式的有效性;其次,选择目前“字词融合”方式表现较好的BERT+Word实体识别模型作为对比模型进行实验结果分析,验证本文模型较主流的字词融合模型表现更好。
融合字词表示模型普遍要比以字向量进行训练的实体识别模型BILSTM-CRF,BERT-CRF以及BERT-BILSTM-CRF准确率高(
表6 ),证明字词融合的语义表示效果优于单纯以字向量进行切分的效果,同时采用BERT自身深层特征融合与模型级字词特征融合效果,设置当前实体识别任务中字词融合准确率较高的模型融合方式BERT+Word作为对比模型,与本文采用的实验模型相比,BERT+Word将BERT12层的Transfomer向量特征表示与句子输入直接转换的词典向量拼接并输出至BILSRM-CRF层进行推理的方式,可以明显看出本文提出的模型效果优于BERT+Word模型。
通过对比BERT+Word和LEBERT-CRF的一些识别实例进行分析,发现本文提出的模型对于嵌套实体词的识别效果较好 (
表7 ),例如
表7 实例1中的“集合结构”一词,BERT+Word模型只能识别“集合”一词,而本文提出的模型则能有效识别“集合结构”,
表8 实例2同理证明LEBERT的中间层和较高层的字词特征融合对于词汇边界的划分效果更好。
4 结论
针对教育领域课程文本中出现的实体嵌套问题,提出一种基于LEBERT-CRF的实体识别模型。在原有基于BERT编码字向量的基础上融合其附近可能成词的向量表示,并根据词典适配器调整关键词的权重,优化原有字向量的语义表示,实验结果表明该模型有效降低分词歧义导致的错误传播问题,能够很好地适应课程文本的实体识别任务。
内蒙古自治区自然科学基金资助项目“利用软件演化历史识别与推荐重构克隆”(2018MS06009)
内蒙古自治区哲学社会科学研究专项资助项目“基于知识图谱的课程知识智能问答系统”(ZSZX21102)
内蒙古自治区自然科学基金联合资助项目“面向编程教育个性化学习的智能教育服务关键技术研究”(2023LHMS06009)