具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在介绍本公开提供的自动回答方法、装置以及存储介质之前,首先对本公开各个实施例所涉及的可能的应用场景进行介绍。例如,图1是根据一示例性实施例示出的一种客服应用场景的结构示意图。如图1所示,该客服应用场景可以包括:服务器110、终端120。服务器110可以是网络中能对其它机器提供自动回答服务的计算机***。终端120可以是个人电脑,智能手机,平板电脑等终端设备。终端120之上可以运行有自动回答客户端软件。图1中以终端120为智能手机示意。其中,终端120与服务器110之间的通信网络可以是有线或无线网络。终端120可以响应于接收到用户输入问题,将待回答问题发送给服务器110。服务器110可以响应于接收到终端120发送的待回答问题,应用本公开实施例提供的自动回答方法得到该待回答问题对应的答案,将该答案反馈给终端120。
图2是根据本公开一示例性实施例提供的一种自动回答方法的流程图。如图2所示,该方法可以包括:
步骤210,抽取待回答问题的文本特征。
示例地,在抽取待回答问题的文本特征之前,还可以对所述待回答问题进行文本一致性处理。所述文本一致性处理可以包括:不同字体转换为相同字体、同义词转换为相同词语、去除预设特殊符号。
例如,在所述待回答问题为中文的情况下,可以进行中文繁简体转换,进行中文同义词替换。再例如,去除预设特殊符号的规则可以包括:如果待回答问题中包含中文基本汉字(UNICODE编码范围为4E00-9FA5)、英文字母(A-Z、a-z)或者***数字(0-9)其中的任何一种,则采用正则表达式替换基本汉字(UNICODE编码范围为4E00-9FA5)、英文字母(A-Z、a-z)、***数字(0-9)和空白符以外的其他字符,再采用正则表达式替换待回答问题中间的连续多个空白符为1个空格。如果待回答问题中不包含中文基本汉字(UNICODE编码范围为4E00-9FA5)、英文字母(A-Z、a-z)或者***数字(0-9)其中的任何一种,则采用正则表达式替换待回答问题中间的连续多个空白符为1个空格。
步骤220,通过对所述待回答问题的文本特征与问答语料库中问答对的问题的文本特征进行相似度计算,从所述问答语料库中筛选出候选问答对。
需要说明的是,本公开对文本特征进行相似度计算的方法并不进行限制。例如,可以基于待回答问题的一元特征、二元特征以及问答对的问题的一元特征、二元特征进行相似度计算。
步骤230,基于预先完成问答训练的神经网络模型计算所述待回答问题的特征向量,以及,获取基于所述神经网络模型计算出的所述候选问答对的答案的特征向量。
例如,可以采用以下说明的CNN(Convolutional Neural Network,卷积神经网络)网络模型预先进行问答训练:
第一层为输入层,其输入是由(Qi,AiNi)构成的问答对,其中Qi表示第i个问答对的问题,Ai表示第i个问答对的回答,Ni表示第i个问答对的负向回答,输入序列的长度例如为200。
第二层是Embedding(字嵌入)层,其输入是问答语料库中问答对的问题或者回答的语句,输出是一个浮点数二维数组,其中每一行代表一个字向量(如可以预先由word2vec工具训练得到)。其中,采用随机向量替代字向量或者词向量。
第三层是卷积层,例如卷积核大小可以为(2,3,4,5),卷积核数量可以为200。
第四层是池化层P和Relu层R,池化层例如采用的是max pooling,如由上述卷积核的大小和数量可知,池化层将最后输出的4个长度为200的向量首尾相连形成一个1*800的浮点数向量,该向量最终会作为特征向量输出。
第五层是余弦相似度层,有两个神经元Cosine(QA)和Cosine(QN),前者表示的是问题和正确回答的相似度,后者表示问题和负向回答的相似度。
第六层是网络输出层,例如可以采用如下公式计算损失,
其中,为第i个问答对的问题与正确回答之间的相似度,是第i个问答对的问题与负向回答之间的相似度,Smargin是一个固定阈值,网络的训练目标是使得问题与正确回答之间的相似度比问题与负向回答之间的相似度大于Smargin。
网络训练完成后,可以将问答对的答案的特征向量、问答对的原始问题和答案一起存储在缓存服务器中。在接收到待回答问题时,在经过训练的神经网络第一层输入待回答问题,在第四层输出待回答问题的特征向量。再从缓存服务器中获取问答对的答案的特征向量以便进行二者的余弦相似度计算。
另外,为了提高训练准确率,在进行网络训练时,迭代训练的数据的计算方法可以为:根据训练数据的数量和超参数计算每一个Epoch(一次迭代)所包含的数据分段数。针对每一个Epoch,首先打乱训练数据的顺序,然后按照之前计算的分段数对其进行分段,在每一个分段内,为每一个训练条目(包含一个问题和正确回答)增加一个随机的负向回答。其中,增加负向回答的方法为:遍历分段中每一个训练条目,从0(包含0)到训练数据条目数(不包含训练数据条目数)之间随机选择一个数作为负向索引,如果负向索引与当前索引值相同或负向索引的问题与当前问题的相似度大于0.5则重新选择负向索引,直到满足条件为止。
步骤240,通过对所述待回答问题的特征向量与所述候选问答对的答案的特征向量进行余弦相似度计算,从所述候选问答对中筛选出答案。
例如,可以采用如下的余弦相似度计算公式进行计算:
其中,xi与yi分别是向量x与y的第i个元素,向量x和向量y分别为待回答问题的特征向量和候选问答对的答案的特征向量。
例如,可以将余弦相似度最高或者余弦相似度排在预设前几位的答案筛选出来反馈给用户。
可见,由于本实施例提供的自动回答方法可以根据文本特征筛选出候选问答对,避免了语义距离的泛化,再利用预先完成问答训练的神经网络模型计算出的特征向量来衡量待回答问题与候选问答对的语义距离,从而提高了筛选出的答***率。
图3是根据本公开另一示例性实施例提供的一种自动回答方法的流程图。如图3所示,该方法可以包括:
步骤310,将待回答问题的所有一元特征以及二元特征,加入所述待回答问题的特征序列,其中,一个一元特征为一个字符,一个二元特征为一个一元特征与其后继一元特征相拼接得到的字符串。
例如,采用UTF-8编码方式对文本一致性处理后的待回答问题进行分割,一个一元特征即为一个UTF-8字符,将待回答问题分割后得到的所有UTF-8字符加入特征序列。按顺序遍历所有一元特征,除了末尾字符以外,将遍历到的当前一元特征(空格除外)与其后继特征(空格除外)相拼接得到二元特征,加入待回答问题的特征序列。
举例说明,问答语料库中某问答对的问题“你真的很笨”与待回答问题“你好笨”二者经过文本一致性处理后,该问答对的一元特征包括:[你,真,的,很,笨];待回答问题的一元特征包括:[你,很,笨]。该问答对的二元特征包括:[你真,真的,的很,很笨];待回答问题的二元特征包括:[你很,很笨]。
步骤311,计算所述待回答问题与所述问答语料库中问答对的问题的最长公共子序列。
例如,可以遍历问答语料库中所有问答对的问题,计算待回答问题与遍历到的当前问答对的问题的最长公共子序列。
步骤312,将所述最长公共子序列的所有二元特征,加入所述待回答问题的特征序列。
相应地,可以将最长公共子序列的所有二元特征加入对应问答对的问题的特征序列。因此,问答语料库中每个问答对的问题的特征序列包括:该问答对的问题的所有一元特征、二元特征、与所述待回答问题的最长公共子序列的所有二元特征。在本实施例中,所述问答语料库中每个问答对的问题同样可以预先采用UTF-8编码方式对其进行分割。
例如,结合上述问答对的问题“你真的很笨”与待回答问题“你好笨”的例子,其中“很”与“好”同义,因此,二者最长公共子序列为[你很笨]。因此,该问答对的问题的特征序列包括:[你,真,的,很,笨,你真,真的,的很,很笨]以及最长公共子序列[你很笨];待回答问题的特征序列包括:[你,很,笨,你很,很笨]以及最长公共子序列[你很笨]。
步骤320,通过对所述待回答问题进行句法分词确定所述待回答问题的核心词,以及,通过对所述问答对的问题进行句法分词确定所述问答对的问题的核心词。
例如,句法分词可以利用分词工具来实现。分词工具可以对问题进行分词和词性标注,并通过构建句法依存关系得到核心词。
步骤321,基于所述待回答问题的核心词在所述待回答问题的特征序列中出现的频次确定所述待回答问题的特征权重,以及,基于所述问答对的问题的核心词在所述问答对的问题的特征序列中出现的频次确定所述问答对的问题的特征权重。
例如,如果特征序列不含核心词,则特征权重为1。如果待回答问题和问答对的问题的核心词相同,则权重为核心词出现次数(例如,核心词在当前特征重复出现5次,则特征权重为5)。如果待回答问题和问答对问题的核心词不同,则不加权,只按照核心词的褒贬和是否被否定词修饰确定否定系数即可。
步骤322,基于所述待回答问题的核心词的褒贬与核心词是否被否定词修饰确定所述待回答问题的否定系数,以及,基于所述问答对的问题的核心词的褒贬与核心词是否被否定词修饰确定所述问答对的问题的否定系数。
例如,按照核心词的褒贬和是否被否定词修饰确定否定系数,可以按照如下方式根据核心词的褒贬和是否被否定词修饰确定否定系数:
核心词为褒义或中性,且核心词被否定词修饰,则否定系数为1;
核心词为褒义或中性,且核心词未被否定词修饰,则否定系数为-1;
核心词为贬义,且核心词被否定词修饰,则否定系数为-1;
核心词为贬义,且核心词未被否定词修饰,则否定系数为1。
步骤323,利用所述待回答问题的特征权重和否定系数、所述问答对的问题的特征权重和否定系数、计算所述待回答问题与所述问答对的问题的相似度。
例如,可以采用如下的相似度计算公式进行计算:
其中,NA与NB分别为待回答问题与问答对的问题的否定系数,为待回答问题的特征序列中第i个特征ai的特征权重,为问答对的问题的特征序列中第j个特征bj的特征权重,为待回答问题与问答对的问题的共有特征序列,也即最长公共子序列中第k个特征ck的权重。
例如,结合上述问答对的问题“你真的很笨”与待回答问题“你好笨”的例子,二者否定系数均为1,二者相似度为
再例如,问答语料库中某问答对的问题“你真的很笨”与待回答问题“你不笨”二者经过文本一致性处理后,该问答对的问题的特征序列包括:[你,真,的,很,笨,你真,真的,的很,很笨,你笨]以及最长公共子序列[你笨];待回答问题的特征序列包括:[你,不,笨,你不,不笨,你笨]以及最长公共子序列[你笨]。该问答对的问题的否定系数为1,待回答问题的否定系数为-1。二者相似度为
步骤324,将所述问答对按照所述待回答问题与所述问答对的问题的相似度从高到低排序,从所述问答语料库中筛选出排序在前预设位数的问答对作为候选问答对。
例如,可以筛选排名前5的问答对作为候选。
步骤330,基于预先完成问答训练的神经网络模型计算所述待回答问题的特征向量,以及,获取基于所述神经网络模型计算出的所述候选问答对的答案的特征向量。
步骤340,通过对所述待回答问题的特征向量与所述候选问答对的答案的特征向量进行余弦相似度计算,从所述候选问答对中筛选出答案。
由于本实施例提供的自动回答方法将问题自身的一元特征、二元特征加入特征序列,从而二元特征对一元特征进行了约束。又将最长公共子序列的二元特征加入特征序列,从而解决了词位置问题,如“你真的很笨”与“你好笨”其实是相似的意思,但是因为核心词“笨”不对齐导致损失掉一部分二元特征,因此,通过最长公共子序列弥补了损失掉的特征。另外,又为包含核心词的特征加权,确定了否定系数,解决一部分语义问题。如“你真的很笨”与“你不笨”其实是不同的意思,但是由于句子字面很相似,如果仅按照一元特征和二元特征来计算的话相似度会很高,这显然是不正确的,而由于核心词的褒贬不同,从而根据否定系数就可以起到修正相似度的作用。因此,本实施例提供的自动回答方法筛选出的候选问答对更加准确,有效避免了语义距离的泛化,再利用预先完成问答训练的神经网络模型计算出的特征向量来衡量待回答问题与候选问答对的语义距离,从而提高了筛选出的答***率。
图4是根据本公开一示例性实施例提供的一种自动回答装置400的框图。如图4所示,该装置400可以包括:
特征抽取模块410,可以用于抽取待回答问题的文本特征。
候选筛选模块420,可以用于通过对所述待回答问题的文本特征与问答语料库中问答对的问题的文本特征进行相似度计算,从所述问答语料库中筛选出候选问答对。
特征向量计算模块430,可以用于基于预先完成问答训练的神经网络模型计算所述待回答问题的特征向量,以及,获取基于所述神经网络模型计算出的所述候选问答对的答案的特征向量。
答案筛选模块440,可以用于通过对所述待回答问题的特征向量与所述候选问答对的答案的特征向量进行余弦相似度计算,从所述候选问答对中筛选出答案。
可见,由于本实施例提供的自动回答装置可以根据文本特征筛选出候选问答对,避免了语义距离的泛化,再利用预先完成问答训练的神经网络模型计算出的特征向量来衡量待回答问题与候选问答对的语义距离,从而提高了筛选出的答***率。
图5是根据本公开另一示例性实施例提供的一种自动回答装置500的框图。如图5所示,该装置500中的候选筛选模块420可以包括:核心词确定子模块421,用于通过对所述待回答问题进行句法分词确定所述待回答问题的核心词,以及,通过对所述问答对的问题进行句法分词确定所述问答对的问题的核心词;其中,所述问答对的问题的特征序列包括:所述问答对的问题的所有一元特征、二元特征、与所述待回答问题的最长公共子序列的所有二元特征。特征权重确定子模块422,用于基于所述待回答问题的核心词在所述待回答问题的特征序列中出现的频次确定所述待回答问题的特征权重、基于所述问答对的问题的核心词在所述问答对的问题的特征序列中出现的频次确定所述问答对的问题的特征权重。否定系数确定子模块423,用于基于所述待回答问题的核心词的褒贬与是否被否定词修饰确定所述待回答问题的否定系数,以及,基于所述问答对的问题的核心词的褒贬与是否被否定词修饰确定所述问答对的问题的否定系数。相似度计算子模块424,用于利用所述待回答问题的特征权重和否定系数、所述问答对的问题的特征权重和否定系数、计算所述待回答问题与所述问答对的问题的相似度。筛选子模块425,用于将所述问答对按照所述待回答问题与所述问答对的问题的相似度从高到低排序,从所述问答语料库中筛选出排序在前预设位数的问答对作为候选问答对。
可选地,如图5所示,该装置500还可以包括:文本处理模块450,可以用于对所述待回答问题进行文本一致性处理;所述文本一致性处理包括:不同字体转换为相同字体、同义词转换为相同词语、去除预设特殊符号。
由于本实施例提供的自动回答装置将问题自身的一元特征、二元特征加入特征序列,从而二元特征对一元特征进行了约束。又将最长公共子序列的二元特征加入特征序列,从而解决了词位置问题,弥补了损失掉的特征。另外,又为包含核心词的特征加权,确定了否定系数,利用否定系数起到修正相似度的作用,解决一部分语义问题。因此,本实施例提供的自动回答装置筛选出的候选问答对更加准确,有效避免了语义距离的泛化,再利用预先完成问答训练的神经网络模型计算出的特征向量来衡量待回答问题与候选问答对的语义距离,从而提高了筛选出的答***率。
图6是根据一示例性实施例示出的一种电子设备600的框图。如图6所示,该电子设备600可以包括:处理器601,存储器602,多媒体组件603,输入/输出(I/O)接口604,以及通信组件605。
其中,处理器601用于控制该电子设备600的整体操作,以完成上述的自动回答方法中的全部或部分步骤。存储器602用于存储各种类型的数据以支持在该电子设备600的操作,这些数据例如可以包括用于在该电子设备600上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器602可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。多媒体组件303可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器602或通过通信组件605发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口604为处理器601和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件605用于该电子设备600与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near FieldCommunication,简称NFC),2G、3G或4G,或它们中的一种或几种的组合,因此相应的该通信组件605可以包括:Wi-Fi模块,蓝牙模块,NFC模块。
在一示例性实施例中,电子设备600可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的自动回答方法。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,例如包括程序指令的存储器602,上述程序指令可由电子设备600的处理器601执行以完成上述的自动回答方法。
综上所述,本公开根据文本特征筛选出候选问答对,避免了语义距离的泛化,再利用预先完成问答训练的神经网络模型计算出的特征向量来衡量待回答问题与候选问答对的语义距离,从而提高了筛选出的答***率。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。