一种提高问答系统泛化能力的方法与流程

文档序号:24306843发布日期:2021-03-17 00:59阅读:231来源:国知局
一种提高问答系统泛化能力的方法与流程

本发明涉及自然语言处理和机器学习领域,具体是一种提高问答体现泛化能力的方法。



背景技术:

从用户体验角度来看,目前业界现有的业务咨询问答系统,主要有2类问答模式:一类是问答型,即针对用户的每个有效问题,都会给出一个明确的回复或答案;另一类则是搜索型,针对用户问题,返回一个相似的问题列表。

两种问答模型都依赖一个问答库,即问题-答案集合,当系统接收到用户问题时,都需要从问答库中检索出相关的问题列表然后进行排序,搜索型问答系统直接返回若干相关的问题列表,而问答型系统则在此基础之上加了一个判断机制,判断该用户问题是否有准确答案。

由此可见,不论哪一种业务咨询问答系统,都需要针对用户的问题对库中的知识进行检索、排序。检索是所有问答系统中的第一步,排序算法是对检索结果的排序。从某种程度上来说,检索系统的准确率直接决定了整个问答系统的准确率。

给定一个问题集和用户问题,如何筛选出相关问题呢,考虑到时效性,目前应用较多的是倒排索引,通过构建词与问题的索引,来快速筛选出相关的问题列表,然后经过排序算法进行排序返回。

但是这种方法只能在已有知识(问答库)中构建索引,或者说,只能对问答库中已有的分词构建倒排索引,如果用户的问题中含有问答库中不包括的分词,倒排索引是检索不出来的,即仅仅使用倒排索引无法解决各类的口语泛化问题。很明显,倒排索引本身不具有泛化能力。举个例子,假设问答库中有个问题是“水费无法缴纳的原因”,用户问题为“水费为啥不能交”,系统是无法将“无法-不能”、“原因-为啥”、“缴纳-交”来对应起来的。

传统方法是基于规则、模板等人工方式来进行相似词表、相似问题表的构建(如专利cn201810768888.1、cn201911081549.7等),这种方法耗时耗力且不易维护。



技术实现要素:

针对现有技术的缺陷,本发明提高一种提高问答系统泛化能力的方法,通过词向量检索相似词和相似问题生成两种方式来改进问答系统中的检索与排序,本发明提出的方法则不需要人工的介入,完全依赖深度学习技术自动完成,在提高系统泛化能力的同时,极大减少人工成本。

为了解决所述技术问题,本发明采用的技术方案是:通过词嵌入矩阵来获得相似词表;通过相似问题生成来获得相似问题列表;通过词向量、句向量来获得标准差与相似词、标准问题与相似问题的相似度;通过上述结果来改善系统的检索、排序效果。该方案包括以下步骤:

(1)训练词向量。直接使用开源的词向量或者自己训练,这由可获得的行业数据量的多少来决定。如果自己训练的话,首先需要根据行业用户给定的对话语料,首先通过tf-idf技术抽取行业关键词;依据行业关键词,从百度咨询、百度知道、百度百科中爬取大量的行业弱相关知识(因为关键词是自动抽取的,可能与具体行业关联并没有那么紧密,所以依据关键词爬取的知识,并非全部是与行业相关的,如“办理”,金融行业、税务行业都有该业务类型),并依此使用word2vec技术训练词嵌入矩阵。

(2)抽取相似词表。依据词嵌入矩阵,使用高维向量相似度快速索引技术(目前比较成熟的技术由kd树、annoy、faiss等)来构建词向量索引,依此可以快速抽取行业关键词的相似词,然后使用余弦相似度来计算词与词之间的相似度并保存。

(3)获取相似问题生成训练语料。从第一步中,通过行业关键词从百度知道中获得了大量的问答对(使用1000个关键词即可爬取百万左右的问答对,但需要借助代理ip技术),然后使用预训练模型i(使用roberta-large效果较好,也可使用其他预训练模型)获取所有问题的向量表示,同第二步一样,使用高维向量索引技术来进行问题的聚类,依次构建大量的相似问题对。

(4)训练相似问题生成模型。使用基于bert改进的预训练生成模型iiunilm(也可以使用其他预训练生成模型,如mass、ernie-gen等)来进行训练。训练样本为相似问题对,训练目标为文本生成。

(5)获取相似问题表。根据客户给定的行业问答库,以库中的问题为标准问题,使用预训练模型来生成其相似问题列表。并使用余弦相似度来计算句子之间的相似度并保存。

(6)优化倒排索引。在构建倒排索引时,融入前面获得的相似问题和相似词表,依此提高系统的召回率,并在排序过程中考虑标准差与相似词之间、标准问题与相似问题之间的相似度。由此可以极大提高整个系统的泛化能力。

本发明的有益效果:本发明提出了一种可以自动提高系统泛化能力、提高系统召回能力的方法,通过使用相似词和相似问题自动生成技术,从词和句子两个粒度来改善问答系统中的检索与排序,提高系统召回率,增强系统泛化能力,尽可能避免人工参与,极大的提高了系统的易用性。

附图说明

图1为现有搜索问答系统的架构图;

图2为相似词表获取的流程图;

图3为相似问题表获取的流程图;

图4为实施例1搜索问答系统的流程图。

具体实施方式

下面结合附图和具体实施例对本发明作进一步的说明。

实施例1

本实施例立足于智能问答/检索系统,提供一种提高系统泛化能力的方法,从相似词生成和相似问题生成两个方面,来优化倒排索引和排序算法,有效提高整个问答系统泛化能力。本方法以服务方式对外提供功能,也可以使用于搭载智能对话系统的任何设备之上,如微信公众号、智能机器人、虚拟机器人等。

现有对话/搜索问答系统的架构图如图1所示,其主要有检索和排序2部分组成。在行业客户给定问答对/知识库的情况下,通常情况下,我们需要构建倒排索引以用来对用户query进行检索,以返回与用户query相关的问题列表,然后对用户的问题列表来进行排序,并将排序的结果返回用户/前台显示。但是这种方法并不具备语义泛化能力。因此,本实施例基于深度学习技术,主要对该系统中的检索(索引构建)和排序来进行优化,以提高整个系统的泛化能力。

本方法首先通过词嵌入矩阵来获得相似词表,如图2所示,具体步骤为:

1)行业关键词抽取。使用客户提供的行业知识来统计词频;使用多行业语料来统计逆文档词频;使用tf-idf来进行关键词权重排序,进行行业关键词抽取。注意,逆文档词频涉及的行业语料越多越好。

2)训练词向量矩阵。使用上一步抽取的关键词作为种子,从百度知道、百度咨询、百度百科等搜索平台上爬取相关行业知识。百度作为中国最大的搜索引擎,其知识量覆盖范围足够广。当然,通过关键词抽取的知识,并非全部是行业知识,这并不影响词向量的训练。使用word2vec技术来进行词向量的训练,但是,如果统计的行业知识在5g以内,建议使用开源的训练好的词向量(如腾讯开源词向量等)。

3)获取行业关键词的相似词表。根据词向量矩阵,使用高维向量索引技术(如kd树、annoy、faiss等)来构建向量索引,并依次遍历行业关键词表,抽取前十最相似的词。注意,由于抽取相似词时,大部分相似词包含关键词,以腾讯词向量为例,如“减免”的相似词有:

减免优惠减免政策免除免交直接减免免缴减免部分费用减免免征

为此,我们一次性抽取100个相似词,并去除包含标准词的词,其结果如下:

免收抵免税务优惠税率优惠征收免税优惠税收优惠税免税

可见相似词的语义基本上都与“减免”有关。

另外,为避免相似词中出现一些与标准词差距较大的词,我们同时需要保存标注词与相似词的相似度:

免收-0.7265抵免-0.7184税务优惠-0.6753……

相似词与标准词之间的相似度,可以理解为相似词对标准词的贡献度。如果用户query中包括标准词,则对该标准词的贡献度为1;如果用户query中包括相似词,则对该标准词的贡献度为其相似度值。如此即可构建好行业关键词的相似词表。

如图3相似问题表获取系统图所示,该方法基于预训练模型,使用文本生成技术来进行相似问题生成,其具体步骤如下:

1)行业相关问题爬取。用户query大部分都比较口语化,而问答库中的问题更偏向书面语,因此需要搜集大量的口语化行业相关问题。百度知道是最大的中文问答社区,里面的问题大都是口语化的,因此本实施例从百度知道中爬取大量的行业相关问题。依次遍历行业关键词(上一步已获取),爬取每个关键词的相关问题(以税务行业相似问题为例,使用2000左右关键词,即可爬取200+万相关问题)。

2)相似问题对生成。首先使用预训练模型i来进行句向量的抽取,句向量可采用第一个token(cls)的输出为表征,也可使用所有token向量和的平均。(本发明通过实验对比当前比较先进的预训练模型,如bert、roberta、xlnet、albert等,建议使用roberta-large模型来进行句向量的抽取,其语义化效果相对较好)。使用高维向量索引(如kd树、annoy索引等均可)来构建句向量索引,然后依次遍历所有行业相关问题,从句向量索引中抽取前k个最相似的问题(k可依据行业问题集的大小来自定义,太大会导致相似问题有偏差,太小一般会导致训练集的缩小,本发明所有问题集在200+万,建议k=4)。

图4所示为使用句向量索引抽取的相似问题,图中similar_questions中第一个总是与标准问题是一致的,其他相似问题基本上与标准问题具有一定的语义相关性。

训练集由相似问题对和非相似问题对等比例构成,非相似问题对可随机选择。样例如下:

农产品免税发票怎么开免税农产品怎么开发票1

农产品免税发票怎么开代开增值税专票需要带什么资料0

1代表相似问题对,0代表非相似问题对。

3)相似问题生成模型的训练。现阶段有较多的基于tranformer来进行预训练的文本生成模型(如mass、ernie-gen、unilm等,这几个模型均可使用),本发明采用unilm作为预训练模型ii,来进行相似问题生成模型的训练。模型输入问题对和标签;损失函数有2部分组成,一个是相似问题生成产生的loss,另一个是分类任务产生的loss;

4)获取相似问题表。我们的最终目的是针对问题库中的标准问题来产生相似问题,所以遍历问题库中的标准问题,使用预训练模型产生相似问题集。

本发明采用topk编码策略。设置模型一次生成n个相似问题(n可设置的大一点,本发明n=100),相似问题是逐字生成的,每生成一个字,从前topk个最可能的单词中,进行随机采样(以本发明为例,topk设置为5,即前5个最可能的选项中,按照其概率随机采样100次,将采样结果作为100个相似问题的下一个字。topk设置越大,文本生成结果越丰富,但是其语义相似性和连贯性则较差)。

由于生成的相似问题与标准问题太过接近,因此我们将所有生成的相似问题做了一个过滤操作,即如果相似问题没有产生新词,仅仅是变换(增删查改)了标点、停用词等无意义句子,则过滤掉。另外,相似问题中近似重复出现(如只变换了标点等)的问题也需要去掉。

还是前面的例子“农产品免税发票怎么开”,其产生的有效的相似问题列表示例如下:

农产品免税发票怎样开

怎么开具农产品免税发票

怎样开出农产品免税发票

开农产品免税发票怎么填

农产品免税专用发票如何开

农产品免税发票怎么办

怎么开农产品免税增值税发票

农产品免税发票开哪些

怎么开农产品进口免税发票

农产品零税率发票怎样开

农产品增值税发票怎么开

由于部分相似问题与标准问题之间由偏差,因此我们使用相似度来评估标准问题与相似问题之间的度量。本发明使用前述预训练模型ii产生相似问题句向量,使用余弦来评估问题之间的相似度。相似问题与标准问题之间的相似度,可以理解为相似问题对标准问题的贡献度。如果用户query匹配到标准问题,则对该标准问题的贡献度为1;如果用户query中匹配到相似问题,则对该标准问题的贡献度为其相似度值。

如图4改进的搜索问答系统检索系统图所示,通过上述步骤获取的相似词表和相似问题表,我们优化模型的检索与排序系统。

1)优化倒排索引。在给定行业问答集的情况下,通过相似词和相似问题产生的新词,我们可以极大的扩充倒排索引的容量。

2)优化排序算法。针对倒排索引产生的相关问题列表,使用打分算法(此处可使用任意打分算法,本发明使用自定义权重的tf-idf算法)我们可以获得相关问题的得分。在所有的得分中乘上相似词、相似问题的权重,并经过排序之后,即可得到最终的排序结果。由于针对不同行业产生的相似词、相似问题可能质量有所差异,建议在得分上乘一个权重系数w。最终的得分公式可如下表示:

本实施例所述方法使用大量行业知识训练行业词向量(也可使用开源词向量,开源词向量更具普遍性,但是具体行业的准确率可能稍差),然后针对问答库中的数据使用tf-idf筛选行业关键词,构建相似词表(含权重),并将其添加到倒排索引中,这样当用户query中包括一些相似词(原问题中并没有)时,仍能检索到该问题。

使用相似词表的方式,本质是扩充倒排索引的入口,通过对某一问题中的关键字添加相似词,来提高该问题的召回率。但是这种方式只能在词的粒度上来提高检索的召回率,而且只能产生语料库中的词。因此,我们针对问题集中的任意问题,使用预训练模型来生成其相似问题,在句子粒度上来提高问答系统的检索能力。

另外,使用余弦相似度来计算标准词与相似词之间、标准问句与相似问句之间的相似度,并在最终的排序过程中将最终的问题得分乘上该比重,这样,用户query与标准词、标准问句的匹配可以获得更高的分值,越相近的匹配项,分值越高,有效改善了整个系统的泛化能力,提高了系统的召回率。

nlp技术在业界落地的应用案例相对较少,目前整个行业都还处于探索阶段。业务咨询对话系统作为较为成熟的应用案例之一,在各个行业都有较为成熟的应用,但是行业客户往往只想获得稳定完善、即插即用的咨询系统,并不希望花费较多的人工来提高系统的泛化能力。本实施例提出的一种可以自动提高系统泛化能力、提高系统召回能力的方法,通过使用相似词和相似问题自动生成技术,从词和句子两个粒度来改善问答系统中的检索与排序,提高系统召回率,增强系统泛化能力,尽可能避免人工参与,极大的提高了系统的易用性。

以上描述的仅是本发明的基本原理和优选实施例,本领域技术人员根据本发明做出的改进和替换,属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1