搜索引擎进行信息检索的优化策略方法(浅谈智能搜索和对话式OS中存在的标准问句)

优采云 发布时间: 2021-10-12 00:12

  搜索引擎进行信息检索的优化策略方法(浅谈智能搜索和对话式OS中存在的标准问句)

  在《智能搜索与会话操作系统简谈》中提到,人机对话系统常见的三种场景:chatbot、QA、VPA。本文所涉及的解析方法文章主要适用于QA系统中的封闭域问答,即:将用户提问解析为图书馆中的标准问题。

  这里提到的七种方法都是我亲自阅读文献后总结出来的。它们并不都是可以商业化的成熟和稳定的做法。目的只是提出想法以供参考。

  0. 基于规则的方法

  基于规则的方法通常用于没有训练数据的情况。因为它与以下基于统计的方法有很大的不同,所以记录为第零方法。

  一个基于规则的解析系统通常由两部分组成:一是“规则库”,解析规则通常是CFG上下文无关文法;另一个是“词库”,记录了一些标准词的常用同义词。

  整个分析就是一个上下文无关的语法约简过程。首先进行自动分词,然后根据“同义词库”将用户问句中的词缩减为标准词,然后将缩减后的问题句与“规则库”中的解析规则进行比较。一旦比对成功,即成功将用户问题归结为解析规则对应的标准问题。

  比如词库中有两条记录:“失败:上不去,上不去,不成功,错误”“登录:登录,登录”,规则库中有这样一条规则:“账号登录失败:[帐户][登录失败]”。

  有一个用户问题,例如“为什么我无法登录我的帐户”。首先假设分词正确,分词结果为“我|账号|如何|登录|不上去了|了”;然后进行减法,减法的结果是“我的账号登录失败怎么办”;然后按照规则“账号登录失败:[账号][登录][失败]』比较,发现比较成功。此用户问题成功还原为标准问题“账号登录失败”。我们提供相应的标准答案到系统中的“账户登录失败”完成交互过程。

  这样可以在一定程度上解决问题,但缺点也特别严重。首先,“规则库”和“词库”需要人工构建,需要大量且长期的人力资源投入。因为语言的表达理论上是无限的,能想到的规则和同义词总是有限的;并且随着语言的发展或业务的变化,整个规则库和词库的维护也需要持续的人力资源。投资。

  其次,编写规则库需要丰富的经验,对人员素质要求极高。因为解析规则的抽象程度相当高,在这么高的抽象程度下,即使作者有更丰富的经验(没有经验会更糟),不同的解析规则之间也难免有冲突,也就是, 相同的用户问题会与多个标准问题句的解析规则进行比较成功。在这种情况下,标准问题选择/评分问题需要另一个系统来解决。

  1.基于检索模型的方法

  换个角度来说,我们可以把根据用户的问题找到标准问题的过程看成是输入Query获取Document的搜索过程。

  我们可以尝试使用传统搜索引擎使用的检索模型来分析用户问题。“基于搜索引擎(第1部分)”提到BM25是目前最好的检索模型。我们以BM25模型为例进行分析。

  BM25模型的计算公式如下:

  

  BM25模型的计算公式综合了IDF因子、文档词频、文档长度因子、查询词频四个方面的考虑,并使用了3个自由调整因子(k1、k2 and b)进行加权各种因素。调整组合。

  其中,N表示文档总数,n表示对应词出现的文档数,f指对应词在文档中的词频,qf是对应词在查询语句中的词频, dl 是文档长度。

  BM25 模型有三种使用方法。标准问题、标准问题和标准答案,以及历史上与标准问题正确匹配的用户问题集作为Document,通过公式计算标准问题和用户问题的相似度。然后利用相似度进行排序,取出得分最高的标准题作为分析结果。

  这个思路我没有做过实验,但是我推测这种方法虽然节省了大量的人力,但是它在这个封闭域QA系统中的表现应该不如之前基于检索模型的基于规则的方法。该方法将在开放域中表现更好。

  此外,基于传统检索模型的方法有一个固有的缺陷,即检索模型只能处理Query和Document有重叠词的情况,而传统检索模型无法处理词的语义相关性。前面的方法通过人工构建的词库在一定程度上解决了语义相关性的问题。

  2.基于检索模型+LDA/SMT的方法

  如上所述,完全基于检索模型的方法无法处理单词的语义相关性。

  为了在一定程度上解决这个问题,我们可以使用LDA/SMT等方法,通过语料库挖掘单词之间的同义关系,自动构建一个同义度高于阈值、大小合适的同义表。单词。在代入搜索模型公式进行计算的过程中,如果在文档中发现关键词的同义词,可以在乘以一定的权重后纳入关键词的词频计算中关于同义词的程度。

  《浅谈智能搜索和对话式操作系统》中有对 LDA/SMT 的介绍。

  简单的说,LDA 可以合理地将词分类为不同的隐含主题;并通过计算两个文章主题向量θ的KL散度(相对熵),两个文章相似度。SMT 模型来自 Microsoft。其目的是将翻译模型引入到传统的检索模型中,提高检索模型处理语义相关词对的能力。该模型也被百度用于提高搜索引擎返回结果的质量。

  3.基于词嵌入+DNN的方法

  词嵌入将词表示为分布式表示,即低维向量空间中的词向量。分布式表示下的词可以使用余弦距离来计算词之间的语义相关性。对应one-hot Representation,one-hot Representation下的词向量维数与词表维数相同,不同词的词向量是正交的。传统的词集模型(SOW)和词袋模型(BOW)使用one-hot表示。

  我们可以使用深度学习的方法来得到单词 Distributed Representation 的词向量。比如通过训练一个普通的神经概率语言模型,可以得到这个词的词向量,或者参考word2vec中的方法来训练CBOW或者Skip-gram模型。《A Brief Talk on Intelligent Search and Conversational OS》中提到了神经概率语言模型、CBOW和Skip-gram的介绍。

  借助百度的图片,使用DNN进行建模的思路如下:

  

  我们需要使用一批用户问题-标准问题对的正例和反例作为训练语料。借助上述方法,同时将正例和反例进行词嵌入,然后发送到DNN,采用Pairwise排名损失方法。对正例和反例之间的语义差异进行建模。

  4.基于词嵌入+CNN的方法

  之前的基于DNN的方法在一定程度上可以解决词的语义相关性问题,但是没有很好地处理句子中的短距离依赖,比如无法区分“A to B”和“乙”。到 A”。

  根据百度的评测结果,CNN在处理短距离依赖方面有更好的表现。

  这张图来自李航博士的ARC-1 in Convolutional Neural Network Architectures for Matching Natural Language Sentences:

  

  ARC-1

  基本思想是对问题中的每个词做词嵌入,得到每个词对应的定长词向量。我们将问题表示为二维矩阵,每一行代表问题。对应词in对应的词向量。对这个二维矩阵进行多次卷积池化(卷积核的宽度与词向量的维数相同,高度多为2-5) . 最后得到一个一维特征向量,我们使用CNN同时处理用户问题和标准问题,得到用户问题和库中标准问题对应的特征向量,那么这两个向量就是拼接在一起发送到多层感知器,

  另外指出,直接将两个特征向量拼接成MLP会丢失边界信息,所以我们同时将特征向量a、特征向量b和aTb送入MLP计算相似度。

  5.基于词嵌入+CNN的方法(ARC-2)

  ARC-2的结构也来源于上述Hang Li博士的论文:

  

  ARC-2

  ARC-2 相对于 ARC-1 的改进在于 ARC-2 尝试让两个句子进行交互,然后才能获得像 ARC-1 的结果那样的高级抽象表示,而不是先通过 CNN 结构获得各自的高级抽象. 表达。

  在 ARC-1 模型中,特征图只是一个列向量,或者一个一维矩阵。几个列向量组合起来形成ARC-1*敏*感*词*中的外观(二维)。2中,一个feature map变成一个二维矩阵,几个二维矩阵堆叠在一起,形成ARC-2*敏*感*词*中的外观(三维)。

  后续的卷积池化过程与CV中CNN的卷积池化过程类似。与前面的方法类似,在进行一维卷积时,涉及到两个词向量的连接,也可以使用前面提到的方法来避免边界信息的丢失。

  6.基于LSTM+CNN的方法(ARC-2)

  也有人提出,在ARC-2结构中,直接使用传统词嵌入方法得到的词向量构成句子作为输入并不是最好的解决方案。最好的解决方案是使用通过 LSTM 的隐藏状态。

  我们可以使用LSTM结构来训练一个RNN语言模型,如下图(以普通RNN为例):

  

  从图中可以发现,当输出为“e”时,隐藏层向量中的第三个分量最大,当输出为“l”时,第一个分量最大,当输出为“ o”,第二个分量最大。我们可以将RNN的隐藏状态作为Distributed Representation的词向量,作为CNN的输入(ARC-2),经过测试可以得到更好的结果。

  番外中文分词

  一个可信度高的分词结果是后续分析步骤的基本前提。

  在《论自然语言处理基础(二)》中,我介绍了一些经典的分词方法,但都是前期研究的成果。CRF方法是目前公认的最好的分词算法。

  CRF方法的思路很简单,就是把分词问题看成一个序列标注问题,把句子中的每个词都标注为词素:

  CRF分词的过程是对词素进行标记,然后B和E之间的词,以及词S,构成分词。网上有很多开放的基于CRF的分词工具。

  分析优化

  至少有四个视角可以在现有模型的基础上进一步提高分析质量,包括:问题归一化、用户状态、强化学习和多轮对话。

  问题规范化

  问题规范化的目的是对用户输入有更好的容错能力。

  简单的如:简繁体归一化、全角和半角归一化、标点处理、大小写归一化。比较复杂的是中文错别字的更正。错别字自动更正技术的应用非常广泛,对于提高系统的用户体验可以起到很大的作用。可以说性价比极高。

  纠正拼写错误的常用方法是训练嘈杂的通道模型。

  用户状态

  我们可以从用户状态中提取特征,并在训练和分析过程中将它们作为附加信息作为神经网络的输入。

  可以考虑的用户状态至少包括:

  强化学习

  其次,可以采用强化学习的方法,设计合理的奖励机制,让分析系统在与环境交互的过程中自主更新策略。

  与普通的监督学习方法相比,强化学习有两个明显的优势:一是强化学习策略更新所需的数据主要来自与环境的交互/采样,而不是昂贵的人工标注数据;另一种是强化学习,由此产生的策略基于奖励机制进行迭代更新,并且会有一些创新的方法,而不仅仅是模仿人类提供的“标准”方法。

  QA问题解析虽然不像游戏那样有“策略\创新玩法”的概念,但是在数据分析和优化上还是可以帮助节省大量的人工标注成本。

  应用强化学习方法的核心问题之一是奖励机制的设计。要在 QA 的背景下设计奖励机制,至少可以考虑以下几个方面:

  多轮对话

  多轮对话技术可以进一步提高与用户对话的连续性。

  我倾向于将多轮对话分为两个场景,“封闭域”和“开放域”。不同的场景应该有不同的实现思路。

  封闭域场景下多轮对话的特点是:系统能解决的问题是有限集,多轮对话的目的是引导用户解决我们可以解决的问题。

  开放域场景下多轮对话的特点是:系统需要解决的问题是一个无限集,多轮对话的目的是根据上下文更准确地理解用户的需求。

  在这种指导思想下,闭域多轮对话的核心思想应该是“补槽”,而开放域多轮对话的核心思想是“上下文替换”和“主题补全” .

  《浅谈智能搜索与对话OS》介绍了百度利用槽位填充技术做NLU,利用“上下文替换”和“主题补全”提升其DuerOS对话能力。

  而且,槽位填充、上下文替换、主体补全的技术基础都是“序列标注”。下面是百度的两张PPT:

  

  填满插槽

  

  上下文替换和正文完成

  根据百度的PPT,使用双向LSTM+CRF进行序列标注是一种商业上可行的方法。

  手动访问

  选择合适的时间进行人工访问也是提高 QA 系统整体性能的方法之一。核心问题是平衡用户体验和投入成本。手动访问越早,用户体验越好,但成本越高。

  下面简单介绍一下蚂蚁金服的小马如何回答:如果系统连续3次为用户提供相同的回答,则显示手动访问按钮;如果用户连续询问两个客服问题(如“我要说明书”、“你的客服电话”多少),则显示手动访问按钮。

  答案优化

  QA 系统的另一个重要部分是答题库。

  回答输入

  答案录入的优化至少可以从三个角度考虑:

  答案形式的多样性很容易理解。例如,小马答疑支持文字、链接、图片、视频等多种答题形式。

  以上分析优化已经涉及到个性化问题(考虑到用户状态的分析优化),上述分析思路也可以应用到回答录入中。我们可以处理不同的注册时长、不同的支付金额、不同的进入路径等,用户提供不同的个性化答案。

  对用户帮助的回答看似抽象,但也很容易理解。通俗的讲,我个人用“地图级”、“导航级”、“汽车级”给QA系统的答案打分:

  根据文章原创的人机对话系统场景分类,提供“汽车级”答案的QA系统可以称为VPA。

  答案更新

  对于答案库的优化,在答案全部录入的前提下(答案足够丰富,可以为不同用户提供个性化的答案),至少有两个优化点:

  上面分析优化中强化学习方法的奖励机制的设计思路,也可以用来发现答案库中的问题,因为大多数时候很难明确区分用户的负面反馈是否是为了分析系统或答案本身。

  除了从用户的负面反馈中发现问题外,对于以上两个优化点,我们也应该有一些预防机制,提前避免这些问题。

  比如第一点“答案库中的标准答案是错误的”,如果不是输入人员的素质,最大的可能来自于答案的及时性,也就是我们为用户提供了过期的答案。针对这个问题,我们可以在输入答案时添加“临时”标签,表示该答案具有很强的时效性,需要及时更新。

  至于第二点,“答案库中缺少一些问题的答案”,最大的可能来自突发事件和业务变化。例如,系统服务宕机,安装了新版本的系统,或者组织了一些运营活动。针对这些可能引起用户疑惑的变化,我们应该提前准备一些常见问题,并将它们输入到答案库中。

  另外,当我们输入一个新的问题及其标准答案时,需要注意新输入的问题与原有分析系统的适应性,避免新输入的问题难以被分析系统解决的情况。 . 可以采用的方法是,比如在输入新题的同时,主动输入一些不同的提问方式作为初始训练语料(网易七语云客服的做法)。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线