发明内容
为解决以上现有技术存在的问题,本发明提出了一种基于BERT和独立循环神经网络的问句分类方法,该方法包括:实时获取待分类的问句数据,将待分类的问句数据输入到训练好的问句分类模型中,得到分类后的数据;问句分类模型包括BERT模型和基于注意力机制的独立循环神经网络IndRNN模型;对问句分类模型进行训练的过程包括:
S1:获取社区问答问句原始数据集,对社区问答问句原始数据集进行预处理,得到训练集、验证集和测试集;
S2:将训练集中的数据输入到BERT模型中提取特征,得到含有语义特征的序列向量;
S3:将含有语义特征的序列向量输入到基于注意力机制的IndRNN模型中,得到独立循环神经网络的隐藏状态;
S4:将独立循环神经网络的隐藏状态进行叠加,在进行叠加过程中采用注意力机制捕获上下文的相关信息,得到神经网络输出结果;
S5:将神经网络的输出结果输入到softmax层,得到分类结果;
S6:根据分类结果计算基于注意力机制的IndRNN模型的损失函数;
S7:采用Adam算法对损失函数进行优化,对基于注意力机制的IndRNN模型反向传播训练,不断修改、更新各层神经元的参数值以及连接权重;
S8:将验证集中的数据输入到问句分类模型中,确定模型参数的最佳值,使误差值达到最小,完成问句分类模型的训练;
S9:将测试集中的数据输入到训练好的问句分类模型中,得到预测结果。
优选的,对社区问答句原始数据集进行预处理的过程包括:对数据集进行清洗,去除数据集中重复和残缺的问答语句;将清洗后的数据集按70%:15%:15%的比例划分为训练集、验证集和测试集。
优选的,得到含有语义特征的序列向量的过程包括:
S21:将训练集中的数据划分为标签和内容,再将划分后的数据进行分词处理,得到分词文本序列;
S22:对分词文本序列进行全词掩码处理,对处理好后序列的头部添加一个特殊标记[CLS],每个句子采用标记[SEP]分隔;
S23:将标记后的序列向量输入到双向Transformer编码器中提取特征向量;
S24:采用多头注意力机制对提取的特征向量进行拼接,得到含有语义特征的序列向量。
进一步的,采用多头注意力机制对提取的特征向量进行拼接的公式为:
MultiHead(Q,K,V)=Concat(head1,...,headn)WO
优选的,得到循环神经网络隐藏状态的过程为:
S31:神经元cell获取语义特征的序列向量xt和一个神经元输出的循环神经网络隐藏状态ht-1;
S32:将参数矩阵u和上一个神经元的输出h
t-1进行点乘
运算,将参数矩阵w与语义特征的序列向量x
t相乘,将上述点乘
运算结果与乘法运算结果相加,并加上偏置项b,得到待激活序列向量;
S33:将待激活序列向量传给激活函数σ得到循环神经网络隐藏状态ht;
S34:输出循环神经网络的隐藏状态ht并将其传给下一个神经元cell;
计算独立循环神经网络隐藏状态的公式为:
优选的,得到隐藏状态的过程包括:
S41:将独立循环神经网络的隐藏状态进行双向叠加:
其中,
和
表示前向和后向IndRNN隐藏状态;T
i表示i位置单词经过BERT层输出的向量;n表示单词个数;h
i表示当前隐藏层状态;
S42:根据当前隐藏层状态hi和单词上下文向量uw计算当前单词注意力权重ai,计算公式为:
ui=tanh(Wshi+bs)
其中hi为当前隐藏层状态;ui为hi的隐藏表示;Ws为权重矩阵;bs为偏置项;uw表示词级上下文向量,随机生成,作为模型的训练参数;n表示单词数量;ai表示问题文本中第i个单词的权重。
S43:据注意力权重向量ai和当前隐藏状态hi计算得到注意力向量Si,计算公式为:
S44:将向量Si输入到softmax层,得到预测结果。
进一步的,预测结果的表达式为:
pi=softmax(wsSi+bs)
优选的,损失函数为:
优选的,采用Adam算法对损失函数进行优化的过程包括:从训练集中采集m个样本{xm},样本对应的目标为实际标签的概率y;计算目标y对应的梯度g;根据对应的梯度g对参数进行更新和修正。
进一步的,进行更新和修正的内容包括:
更新有偏一阶矩估计:s←ρ1s+(1-ρ1)g
更新有偏二阶矩估计:r←ρ2r+(1-ρ2)g2
应用更新:θ←θ+Δθ
本发明有益效果:
(1)本发明利用BERT模型,得到的向量序列能捕捉更多的内在信息,相对RNN更加高效、能捕捉更长距离的依赖,提高预测精度。
(2)由于循环神经网络(RNN)处理时间序列问题时有梯度爆炸和梯度消失问题,本发明使用合适优化参数的独立循环神经网络(IndRNN)对文本序列处理,能达到很好的预测效果。与传统模型相比具有更好的自适应性。
(3)使用注意力机制衡量对应时间段的数据预测的结果,具有更好的预测效果。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的一种问句分类方法的实施例,如图3所示,包括:首先将处理后的数据输入到BERT模型中,通过Transformer的自注意力机制,将词与词之间的关联程度转为权重系数矩阵,将不同的Attention结果拼接起来,得到Embedding词向量。将Embedding词向量输入到IndRNN神经网络中,在IndRNN中,每个神经元只接收来自当前时刻的输入和它本身在上一时刻的隐藏状态信息,下一层中的每个神经元独立地处理前一层中所有神经元的输出,降低了构建深度网络结构的难度,增强了对更长序列的建模能力。经过注意力机制衡量序列中每个词的重要性,最后通过softmax层进行预测。
一种问句分类方法的优选实施例,其方法包括:实时获取待分类的问句数据,将待分类的问句数据输入到训练好的问句分类模型中,得到分类后的数据;问句分类模型包括BERT模型和基于注意力机制的独立循环神经网络IndRNN模型。
如图1所示,首先问句经过预处理输入BERT模型生成序列向量;其次将序列向量输入到IndRNN模型,同时IndRNN模型中融合注意力机制,更好地关联上下文获取语义信息;最终经过归一化处理输出训练结果。
如图2所示,对问句分类模型进行训练的过程包括:
S1:获取社区问句原始数据集,对社区问句原始数据集进行预处理,得到训练集、验证集和测试集;
S2:将训练集中的数据输入到BERT模型中提取特征,得到含有语义特征的序列向量;
S3:将含有语义特征的序列向量输入到基于注意力机制的IndRNN模型中,得到独立循环神经网络的隐藏状态;
S4:将独立循环神经网络的隐藏状态进行叠加,在进行叠加过程中采用注意力机制捕获上下文的相关信息,得到神经网络输出结果;
S5:将神经网络的输出结果输入到softmax层,得到分类结果;
S6:根据分类结果计算基于注意力机制的IndRNN模型的损失函数;
S6:采用Adam算法对损失函数进行优化,对基于注意力机制的IndRNN模型反向传播训练,不断修改、更新各层神经元的参数值以及连接权重;
S7:将验证集中的数据输入到问句分类模型中,确定模型参数的最佳值,使误差值达到最小,完成问句分类模型的训练;
S8:将测试集中的数据输入到训练好的问句分类模型中,得到预测结果。
社区问答问句原始数据集来自百度公开数据集,该数据采集自百度知道,大约包含了100万条各个类别的数据,总共选取教育、健康、生活、娱乐、游戏、体育、商业、文化、汽车、电子10个类别各两万条总共20万条数据;数据集进行清洗,去除数据集中重复和残缺的问答语句;将清洗后的数据集按照70%:15%:15%分为训练集、验证集和测试集。
得到含有语义特征的序列向量的过程包括:将训练集中的数据划分为标签和内容两个部分,将划分好的数据输入到BERT模型中;首先通过分词处理得到分词文本序列;然后对分词序列的部分词进行全词掩码Mask处理,再为序列的开头添加一个特殊标记[CLS],句子间用标记[SEP]分隔;将序列向量输入到双向Transformer进行特征提取,最后得到含有丰富语义特征的序列向量。
采用注意力机制对数据进行处理,其公式为:
其中,Attention(·)表示注意力机制;Q表示查询向量,K表示键向量、V表示值向量;Softmax(·)表示归一化函数,T为矩阵转置的标识,dk表示一个query和key向量的维度。
将多头注意力机制得到的不同Attention结果拼接起来得到最终输出序列向量:
MultiHead(Q,K,V)=Concat(head1,...,headn)WO
headi=Attention(QWi Q,KWi k,VWi V)
其中,MultiHead(·)表示多头注意力head数;Q表示查询向量,K表示键向量、V表示值向量;Concat(·)表示拼接不同的注意力;headi表示不同的注意力;WO表示MultiHead线性变换的参数。
将BERT层作为embedding层输入到IndRNN模型;IndRNN模型t时刻的输出表达式为:
其中,t表示时刻,x
t表示t时刻的输入,即上述的BERT模型的输出序列向量;W表示隐藏层之间的权重,σ表示神经元的激活函数;u表示输入层和隐藏层之间的权重;b表示偏置值;
表示矩阵元素积;h
t-1表示t-1时刻(即前一个时刻)的隐藏层输出,即在t时刻每个隐藏层神经元只接受此刻的输出以及t-1时刻自身的状态作为输入。
当需要构建多层循环神经网络时,新的隐藏层输出为:
其中,h
t表示t时刻的前一层隐藏层输出;h′
t-1表示新的隐藏层在t-1时刻的输出;h′
t表示新的隐藏层输出;w′表示新的隐藏层之间的权重,σ表示神经元的激活函数;u′是前一个隐藏层和当前隐藏层之间的权重;b′表示当前层的偏置值;
表示矩阵元素积。
在问句分类任务中,最终目标是根据问句文本内容来预测对应问句文本的类别,即根据问句文本词向量x1到xn预测分类的值。
通过将独立循环神经网络的隐藏状态进行叠加,并在此过程利用注意力机制来捕获上下文相关信息。
首先将独立循环神经网络的隐藏状态进行双向叠加:
其中,
和
表示前向和后向IndRNN隐藏状态;T
i表示i位置单词经过BERT层输出的向量;n表示问句中的单词个数;h
i表示当前隐藏层状态;
其次,并非所有的单词对句子表达都有同等的贡献,因此引入注意力机制来衡量单词的重要性,其计算公式为:
ui=tanh(Wshi+bs)
其中hi为当前隐藏层状态;ui为hi的隐藏表示;Ws为权重矩阵;bs为偏置项;uw表示词级上下文向量,随机生成,作为模型的训练参数;n表示单词数量;ai表示问题文本中第i个单词的权重。
根据注意力权重向量ai和当前隐藏层状态hi计算得到注意力向量Si,其计算公式为:
注意力向量Si通过softmax层输入,得到的预测结果为:
pi=softmax(wsSi+bs)
其中,pi表示预测分类结果,softmax(·)表示对数据进行归一化处理,ws表示权重矩阵,Si表示注意力层输出向量,bs表示偏移量。
计算真实状态y和预测状态pi之间的交叉熵,其表达式为:
其中,x表示样本,y表示实际标签的概率,pi表示预测概率,n表示样本总数量。
网络经过正向传播和反向传播,不断修改、更新各层神经元的参数值以及连接权重,验证集用于确定参数的最佳值,使误差值达到最小,直到满足迭代停止条件,得到训练好的模型。
采用Adam算法最小化损失函数优化模型。Adam是一种可以替代传统随机梯度下降过程的一阶优化算法,它能基于训练数据迭代地更新神经网络权重。Adam通过计算梯度的一阶矩估计和二阶矩估计为不同的参数设计独立的自适应性学习率。主要计算过程为:从训练集中采集m个样本{xm},样本对应的目标为实际标签的概率y;计算目标y对应的梯度g;根据对应的梯度g对参数进行更新和修正。
进行更新和修正的内容包括:
更新有偏一阶矩估计:s←ρ1s+(1-ρ1)g
更新有偏二阶矩估计:r←ρ2r+(1-ρ2)g2
应用更新:θ←θ+Δθ
其中,s表示偏一阶矩估计,ρ
1表示矩估计的指数衰减速率,r表示偏二阶矩估计,ρ
2表示矩估计的指数衰减速率,
表示修正的一阶矩偏差,
表示t时刻指数衰减速率,
表示修正的二阶矩偏差,
表示t时刻指数衰减速率,θ表示参数向量,Δθ表示计算得到的偏差值,∈表示步长,δ表示小常数。
在进行更新和修正过程中,将步长∈默认为0.001;矩估计的指数衰减速率ρ1和ρ2默认为0.9和0.999;数值稳定的常数δ默认为10-8;初始化一阶和二阶矩变量s=0和r=0,初始化时间步t=0。
对预测的结果进行评价,评价指标为精确率、召回率和F1值。
精确率是指正确分类的正例个数占分类为正例的实例个数的比例。精确率的表达式为:
其中,TP表示实例为正确分为该类的样本数目;FP表示实例不是该分类,但是预测为该类的数量。采用宏平均的度量标准,先对每一个类计算精确率,然后对所有类的精确率求算术平均值:
其中,macro_p表示宏平均精确率,n表示分类类别,pi表示第i类的精确率。
召回率是指正确分类的正例个数占实际正例个数的比例。召回率recall的表达式为:
其中,FN表示实例是该分类,但是被预测为其他类别的数量。采用宏平均的度量标准,先对每一个类计算召回率,然后对所有类别的召回率求算术平均值:
其中,macro_r表示宏平均召回率,n表示分类类别,ri表示第i类的召回率。
F1能够对precision和recall进行整体的评价,其表达式为:
采取宏平均的度量标准:
其中,macro_F1表示整体评价指标,是基于精确率和召回率计算得出。
以上所举实施例,对本发明的目的、技术方案和优点进行了进一步的详细说明,所应理解的是,以上所举实施例仅为本发明的优选实施方式而已,并不用以限制本发明,凡在本发明的精神和原则之内对本发明所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。