一种基于分布式表示模型困惑度的人机对话方法与系统
技术领域
本发明涉及自然语言处理领域,特别涉及一种基于分布式表示模型困惑度的人机对话方法与系统。
背景技术
人机对话技术是人工智能领域的一个重要研究方向,从手机智能助手,到闲聊陪护型机器人,再到各种面向场景的任务型对话系统平台和智能家居,人机对话系统渐渐融入人类社会的日常运行中,极大促进了将来人机共融社会的发展。
现阶段任务型对话系统已经取得了长足进步,但是仍存在局限性。即对于用户的文本输入,系统只能针对某些特定的输入完成相关任务,即只能处理域内的问题。当输入问句为域外时,系统会错误的将其分入到域内的某一类中,从而产生错误触发。这种问题的存在,导致其问答系统有较大的不可靠性。很难为用户带来较好的用户体验。因此,判断用户输入是否在系统服务领域内以及准确理解用户输入的意图是任务型对话系统训练的重要基础。伴随基于机器学习的自然语言处理技术的发展,基于机器学习方法训练自动对话系统成为主流。
对于用户输入意图分类,由于句子长度较短,而使用传统的基于词袋的向量空间模型常常会遇到“数据稀疏”与“维度灾难”问题;用户输入领域外(Out-of-Domain)分类任务,通常会遇到域外数据标注缺失问题,为机器学习分类带来一些困难。
发明内容
为解决上述技术问题,本发明采用一种基于分布式表示模型困惑度的人机对话方法与系统,其方法步骤包括:
S1:获取文本数据;
S2:通过问答数据集训练Sequence to Sequence模型;
S3:使用BERT算法对文本数据进行处理,得到BERT模型,并利用BERT模型对所有文本数据进行测试,将测试得到的数据进行处理得到每个文本的模型困惑度特征向量;
S4:结合BERT模型和bert-as-service库把文本数据转换为768维句向量;
S5:利用768维句向量训练t-SNE模型,得到2维向量数据,并结合模型困惑度特征向量得到3维向量;
S6:利用3维句向量训练单分类One-ClassSVM模型,通过单分类One-ClassSVM模型判别输入数据属于域内还是域外;
S7:利用768维句向量数据结合逻辑回归分类算法训练逻辑回归文本分类模型,通过逻辑回归文本分类模型完成领域分类;
S8:输入文本数据,判断输入的数据为域内还是域外;若为域内,利用训练的Sequence toSequence模型对输入的数据做出相应的回答;若为域外,则提供给用户网络上的相关回答。
优选的,所述训练t-SNE模型训练包括:选取高维空间的数据点xi和xj;以xi为中心点建立高斯分布,根据高斯分布确定高维度条件概率Pj|i;;把高维度空间数据点xi和xj映射到低维空间中,得到yi和yj,并确定低维度的条件概率qj|i;更改Pj|i的定义方式,得到Pj|i的最新表达式;使用自由度为1的t分布重新定义qj|i的表达式;利用得到的新的条件概率Pj|i和qj|i以及联合概率的Kullback-Leibler散度,计算代价函数C;对得到的代价函数C进行梯度变化,将代价函数变为最小化代价函数,即最小化代价函数为t-SNE模型;
优选的,对输入的数据进行域内或者域外的判别包括:选取形成的3维数据的任一一个点,形成半径为R的最小球面,使得形成的3维数据均在这个球面内;输入新的数据,利用Lagrange乘子法求解得到新的数据点;判断得到的数据点是否在球面内,若在球面内,则判定新输入的数据在域内;若在球面外,则判定新输入的数据在域外。
优选的,逻辑回归文本分类模型的训练包括:基于整个文本数据,样本类别数以及样本特征数构建回归方程曲线;通过Sigmoid函数确定回归方程曲线的范围;求取每个本类别数在整个文本数据的概率;利用得到的概率构建最大似然函数L(W);将最大似然函数L(W)转换为代价函数J(W);采用梯度下降法求解代价函数的最小值,并不断更新权重W,最终得到逻辑回归文本分类模型。
一种基于分布式表示模型困惑度的人机对话系统,所述系统包括:前端和Flask后端;前端和Flask后端;所述前端包括树莓派免驱麦克风、耳机、显示器;所述Flask后端包括数据转换模块、数据处理模块、数据问答模块、数据输出模块;其中:
所述数据转换模块用于将麦克风获取的音频数据转换为文本数据,并将输出的文本数据输入给数据处理模块;
所述数据处理模块包括Sequence toSequence模型训练模块、BERT模型训练模块、向量转化模块、t-SNE模型训练模块、单分类One-Class SVM模型训练模块、逻辑回归文本分类模型训练模块;
所述SequencetoSequence模型训练模块用于将网络上开源的问答数据集训练SequencetoSequence模型;
所述BERT模型训练模块用于对数据转换模块输出的文本数据进行处理,得到BERT模型,并对所有的文本数据进行测试,得到每个文本的模型困惑度特征向量;
所述向量转化模块用于将训练的BERT模型结合bert-as-service库,把文本数据转化为768维句向量,并将768维句向量发送给t-SNE模型训练模块和逻辑回归文本分类模型训练模块;
所述t-SNE模型训练模块用于处理768维句向量,用768维句向量训练t-SNE模型,其中t-SNE模型为2维向量模型,结合t-SNE模型与模型困惑度特征向量得到3维向量数据,并将3维向量数据发送给单分类One-Class SVM模型训练模块;
所述单分类One-Class SVM模型训练模块接收t-SNE模型的发送的3维向量数据,用3维向量数据训练One-Class SVM模型,这个模型用于判断输入的数据为域内还是域外;
所述逻辑回归文本分类模型训练模块用于对向量转换模块发送的文本数据进行领域内的分类;
所述数据问答模块用于输入的文本数据进行问答;若输入的文本数据为域内,利用训练好的Sequence to Sequence模型对输入数据进行相应的回答;若输入的文本数据为域外,提供给用户网络上的相关回答,并将回答的问题发送给数据输出模块;
所述数据输出模块用于对输入的文本数据的回答的输出;若为域内回答,则通过耳机以音频形式输出;若为域外回答,则在显示器上显示网络上的相关回答。
本发明通过训练出逻辑回归文本分类模型,实现了系统领域内分类,从而判别用户输入是否在解决能力范围内,避免了问答系统对不知情的问题乱回答的现象。
附图说明
图1是本发明的流程图;
图2是本发明的系统实现人机对话的流程图。
具体实施方式
本发明为一种基于分布式表示模型困惑度的人机对话方法与系统,如图1所示,所述方法步骤包括:
S1:获取文本数据;
S2:通过问答数据集训练Sequence to Sequence模型;
S3:使用BERT算法对文本数据进行处理,得到BERT模型,并利用BERT模型对所有文本数据进行测试,将测试得到的数据进行处理得到每个文本的模型困惑度特征向量;
S4:结合BERT模型和bert-as-service库把文本数据转换为768维句向量;
S5:利用768维句向量训练t-SNE模型,得到2维向量数据,并结合模型困惑度特征向量得到3维向量;
S6:利用3维句向量训练单分类One-Class SVM模型,通过单分类One-Class SVM模型判别输入数据属于域内还是域外;
S7:利用768维句向量数据结合逻辑回归分类算法训练逻辑回归文本分类模型,通过逻辑回归文本分类模型完成领域分类;
S8:输入文本数据,判断输入的数据为域内还是域外;若为域内,利用训练的Sequence to Sequence模型对输入的数据做出相应的回答;若为域外,则提供给用户网络上的相关回答。
获取的文本数据包括:利用网络上的开源问答数据集得到文本数据;或者利用麦克风方式收集音频数据,然后将音频信号转换为文本数据;用户输入文字方式得到文本数据。
步骤1中所述的收集数据的过程中,从网络中找寻开源的带有句子类别的数据集进行训练。对数据进行预处理,要求每一个文本只对应其中一个类别。即存在xi→yi关系。其中xi为文本句子,yi为对应的所属类别。
所述Sequence to Sequence模型为就是一种Encoder-Decoder模型,通过输入文本数据,和对应的回答来训练的,用于自动回答问题。
选定交叉验证的训练集与测试集的比例折数,折数K为10,即训练集与测试集的比例为9∶1。将训练集用于模型训练,测试集用于模型检验。
在使用训练集训练完BERT模型后,保存此模型,并将整个数据集作为测试集进行测试,在softmax层输出,即得到每个样本被分为每个类别的概率:
P(y=k|i)是样本i属于类别k的概率,条件概率P(y=k|i)的总和为1,即
K为总类别个数,该模型就是求得样本i属于不同类别的概率,取其中概率最大的类别作为所属类别。
利用此数据,对每个样本求解模型困惑度特征,建立模型困惑度模型:
H(i)为样本i对应的模型困惑度特征值,n表示整个文本数据的数量,其中每一个样本对应一个模型困惑度特征,即生成一个(n,1)的矩阵。
在结合BERT模型和bert-as-service库对整个文本数据集进行转换,将所有文本语句转换为768维句向量,即为一个(n,768)的矩阵。
将整个向量矩阵输入到t-SNE降维算法中,将768维句向量降为2维句向量,即生成(n,2)的矩阵,并保存t-SNE模型。
训练t-SNE模型包括考虑高维空间中的两个数据点xi和xj;建立以xi为中心点的高斯分布,若xj越靠近xi,则高维度空间条件概率Pj|i越大;反之,若两者相距较远,则Pj|i越小;因此,定义Pj|i的表达式为:
其中,i,j表示空间中两个不同的点的编号,Pj|i表示高维度空间中点xi确定的情况下选取点xj的条件概率,σi表示以xi为中心点的高斯分布的方差,k表示样本个数;由于只需要不同点之间的相似度,所以设定Pj|i=0。
当把数据映射到低维空间后,高维数据点之间的相似性也应该在低维空间的数据点上体现出来;以条件概率的形式描述;若高维数据点xi和xj在低维空间的映射点分别为yi和yj,类似的,低维空间中的条件概率用qj|i表示,并将所有高斯分布的方差均设定为所以有:
qj|i表示低维度空间中点yi确定的情况下选取点yj的条件概率。
为了使得在高维和低维空间构造联合概率分布P和q,使得对任意i,j,均有Pi|j=Pj|i,qi|j=qj|i,更改Pj|i的定义方式:
使用t分布处理低维空间的数据,相对于高维空间中相距较近的点,为了满足Pi|j=qi|j,Pj|i=qj|i,则有将低维空间中的两点距离减小;而对于高维空间中相距较远的点,为了满足Pi|j=qi|j,Pj|i=qj|i,则有将低维空间中的两点距离变大。即同一簇内的点(距离较近)聚合的更紧密,不同簇之间的点(距离较远)更加疏远;使用自由度为1的t分布重新定义qi|j,重新定义后的qi|j的表达式为:
再利用KL散度公式写出如下代价函数:
其中KL(P|Q)表示样本P和样本Q之间的概率分布差异;KL是衡量相同事件空间里的两个概率分布的差异情况。
梯度变为:
最小化代价函数即为训练t-SNE。
t-SNE模型为2维数据,将模型困惑度特征的矩阵和t-SNE降维算法得到的矩阵相结合,形成新的3维矩阵向量。
利用3维数据向量训练单分类器One-Class SVM,即把训练数据都当作为域内数据,也是把与域内相同类别的数据划分为域内数据。
训练单分类One-Class SVM模型包括:训练出一个最小的超球面(超球面是指三维以上的空间中的球面,对应的二维空间中就是曲线,三维空间中就是球面),使得同一类别的文本数据全在这个超球面内;识别一个新的数据点,如果这个数据点落在超球面内,就属于这个类别,否则不是。
中心点为a,半径为R的最小球面为:
使得这个球面满足:
(xi-a)T(xi-a)≤R2+ξi,ξi≥0
ξi是松弛变量,其作用是对每个数据点超球面可以是不一样的,根据松弛变量来控制,如果松弛变量的值一样,那超球面就相同,C表示调节数据点的松弛空间大小,如果C很大,那么在cost function中,由松弛变量带来的cost就大,在训练时会把松弛变量调小,这样得出来结果就会显示紧密,不会出现比较稀疏的点;反之如果C比较小,那会给离群点较大的弹性,使得它们可以不被包围在超球面中。
利用Lagrange乘子法求计算新的数据点,Lagrange乘子法的公式为:
得到是否新数据点z是否属于这个类的判定条件
其中,αi和αj表示拉格朗日乘子,xi表示最小球面内部的点,xj表示最小球面内部的另一个点。
在利用768维的数据训练域内逻辑回归文本分类模型。对其领域内问题进行精确划分,并保存逻辑回归文本分类模型。
训练逻辑回归文本分类模型包括:现有n个样本{X1,X2,X3,...,Xn},每个样本对应着一个类标签yi,同时每个样本Xi有m个属性{xi1,xi2,xi3,...,xim},因此通过简单的回归方法得到如下曲线:
z=f(X)=w0+w1xi1+w2xi2+…+wmxim
其中,z表示逻辑回归曲线,w0,w1,...,wm表示权重。
通过Sigmoid函数,把z的值设定在(0,1)之间,即得到每个样本的后检验概率,其Sigmoid函数如下:
检验z的概率为:
更进一步的,概率公式表达式为:
构建最大似然函数为:
进一步我们把最大似然函数L(W)转换为代价函数J(W)为:
再通过梯度下降法求解代价函数的最小值,并不断更新权重W,最终得到可以用来分类的逻辑回归文本分类模型。
如图2所示,一种基于分布式表示模型困惑度的人机对话系统,所述系统包括:前端和Flask后端;所述前端包括树莓派免驱麦克风、耳机、显示器;所述Flask后端包括数据转换模块、数据处理模块、数据问答模块、数据输出模块;其中:
所述数据转换模块用于将麦克风获取的音频数据转换为文本数据,并将输出的文本数据输入给数据处理模块;
所述数据处理模块包括Sequence to Sequence模型训练模块、BERT模型训练模块、向量转化模块、t-SNE模型训练模块、单分类One-Class SVM模型训练模块、逻辑回归文本分类模型训练模块;
所述Sequence to Sequence模型训练模块用于将网络上开源的问答数据集训练Sequence to Sequence模型;
所述BERT模型训练模块用于对数据转换模块输出的文本数据进行处理,得到BERT模型,并对所有的文本数据进行测试,得到每个文本的模型困惑度特征向量;
所述向量转化模块用于将训练的BERT模型结合bert-as-service库,把文本数据转化为768维句向量,并将768维句向量发送给t-SNE模型训练模块和逻辑回归文本分类模型训练模块;
所述t-SNE模型训练模块用于处理768维句向量,用768维句向量训练t-SNE模型,其中t-SNE模型为2维向量模型,结合t-SNE模型与模型困惑度特征向量得到3维向量数据,并将3维向量数据发送给单分类One-Class SVM模型训练模块;
所述单分类One-Class SVM模型训练模块接收t-SNE模型的发送的3维向量数据,用3维向量数据训练One-Class SVM模型,这个模型用于判断输入的数据为域内还是域外;
所述逻辑回归文本分类模型训练模块用于对向量转换模块发送的文本数据进行领域内的分类;
所述数据问答模块用于输入的文本数据进行问答;若输入的文本数据为域内,利用训练好的Sequence to Sequence模型对输入数据进行相应的回答;若输入的文本数据为域外,提供给用户网络上的相关回答,并将回答的问题发送给数据输出模块;
所述数据输出模块用于对输入的文本数据的回答的输出;若为域内回答,则通过耳机以音频形式输出;若为域外回答,则在显示器上显示网络上的相关回答。
所述t-SNE模型训练模块中的数据处理过程包括:
选取高维空间的数据点xi和xj;以xi为中心点建立高斯分布,根据高斯分布确定高维度条件概率Pj|i;
把高维度空间数据点xi和xj映射到低维空间中,得到yi和yj,并确定低维度的条件概率qj|i;
更改Pj|i的定义方式,得到Pj|i的最新表达式;使用自由度为1的t分布重新定义qj|i的表达式;
利用得到的新的条件概率Pj|i和qj|i以及联合概率的Kullback-Leibler散度,计算代价函数C;
对得到的代价函数C进行梯度变化,将代价函数变为最小化代价函数,即最小化代价函数为t-SNE模型。
所述单分类One-Class SVM模型训练模块的判别文本数据为域内或者是域外的过程为:
选取3维数据的任一一个点,形成半径为R的最小球面,使得3维数据均在这个球面内;
输入新的数据,利用Lagrange乘子法求解得到新的数据点;
判断得到的数据点是否在球面内,若在球面内,则判定新输入的数据在域内;若在球面外,则判定新输入的数据在域外。
所述逻辑回归文本分类模型训练模块的训练过程包括:
基于整个文本数据、样本类别数以及样本特征数构建回归方程曲线;通过Sigmoid函数确定回归方程曲线的范围;求取每个本类别数在整个文本数据的概率;利用得到的概率构建最大似然函数L(W);将最大似然函数L(W)转换为代价函数J(W);采用梯度下降法求解代价函数的最小值,并不断更新权重W,最终得到逻辑回归文本分类模型。
本系统的实施例可以参考方法中的实施例。
以上所举实施例,对本发明的目的、技术方案和优点进行了进一步的详细说明,所应理解的是,以上所举实施例仅为本发明的优选实施方式而已,并不用以限制本发明,凡在本发明的精神和原则之内对本发明所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。