如何构建一个问答机器人(FAQ问答机器人)
如何构建⼀个问答机器⼈(FAQ问答机器⼈)
开篇
下⾯的主要内容摘⾃腾讯知⽂的算法负责⼈的演讲,主要描述了腾讯知⽂问答系统的主要框架。
问答类型
第⼀种类型,任务驱动型。这种类型通常是⽤户希望去完成⼀些任务,⽐如查天⽓、查汇率等。
寒潮第⼆种类型,解决⽤户信息获取类的问题。这种类型也是我们这次分享的重点,我们将主要在这点展开。这也是⽬前业界落地最多的⼀种问答系统类型。
先天八卦 后天八卦第三种类型,通⽤闲聊型。⽐如微软的⼩冰、苹果的 Siri 都⽀持通⽤闲聊,通⽤闲聊的加⼊会使对话系统更富于⼈性化,也可以加⼊个性化信息、⽤户画像信息,包括前⾯教授们提到的情感信息。
问答领域的数据
第⼀种,基于标准的、结构化的知识,⽐如说 FAQ 和 KG。FAQ 是常见问题解答,KG 是组织好的知识图谱,这两种都是⽐较结构化的数据类型。
第⼆种,数据以⾮结构化的形式存在,⽐如说表格、⽂档。
第三种,多模态、跨媒体问答,⽐如说 VQA,或可能存在视频、⾳频问答的语料库。
土特产店名>2021元旦祝福语朋友圈
ps:就我的实习经验来说,在企业⾥往往是使⽤第⼀种数据去构建问答机器⼈的,同时,由于绝⼤多数的企业是没有能⼒构建KG的,所以⼤部分就FAQ的机器⼈。
通⽤的FAQ框架
由于图⽚⽐较模糊,所以就不放图了。
世界童话故事
⾸先是问题处理模块,这⼀模块的⼯作包括查询、问询改写,错词纠正,同义词替换。第⼆步是召回,即在 FAQ ⾥召回⽂档,最主要的⽬标是召回要快,召回率要很⾼,准确性可以⽐较低,可以召回不那么相关的信息。之后,我们会做⼀个匹配。
ps: 和搜索框架的区别
问答系统追求的是top-1的准确度,最主要的是匹配
快速召回的⽅案
第⼀种,基于词汇计数(Lexical term counting)的⽅法。⼤家都很熟悉这类⽅法,它基于字⾯匹配,好处在于很简单,对长尾的词有很好的鲁棒性,只要在标准问⾥有出现过,做匹配的时候⼀定可以召回。但是它的缺点很明显,它基于符号,没有语义层⾯的理解,所以很难处理字⾯不同语义相近的表述。
第⼆种,基于语⾔模型,主要思想是⽤概率的⽅法来判断知识库⾥⾯的 FAQ 和⽤户问询在哪⼀种在概率上更为接近。它的实战表现更好⼀些,但是它对语⾔模型参数的优化⾮常敏感,所以要做很多平滑实验。
第三种,基于向量化的⽅法。我把⽤户的问询投射到这样的向量空间⾥去,把知识库的 FAQ 也投射到这样的向量空间⾥去,在向量空间⾥⽤距离的⽅法去做度量。⽬前存在很多种投射⽅案,⽐如基于矩阵的分解,可以把向量拿出来,还可以基于⼀些其他⽅法做向量化,向量空间算距离的时候也有很多种⽅法,⽐如⽤平均求和来算这两个点之间的距离。
WMD 是 2015 年的⼯作,它⽤了⼀些更加新的⽅法来算这种距离,这样的⽅法⽐简单的平均化求距离要更好⼀些。但存在⼀个问题,这种⽅法对多义性的解决不太好。
深度匹配的⽅案
这⾥可以参考我以往的博客
深度⽂本匹配的基本⽅法
深度⽂本匹配模型(⼀):k-nrm
深度⽂本匹配模型(⼆):Conv-knrm模型复现
皮影制作现在有很多深度匹配的⽅式,最多的是监督匹配,在这当中有两类⽐较多的⽅法,⼀类是 Siamese ⽹络,⼀类是基于交互矩阵的⽹络。
像 CNN 的 ARC-1 就是 Siamese ⽹络典型的例⼦,Siamese ⽹络⽐较直观,它的想法很简单,把两个输⼊⽤同样的编码器做⼀个表达,把表达做出来以后,可以⽤⼀个模块来做相似度的计算,它的特点是共享⽹络结构和参数。
基于交互矩阵的⽹络的不同之处在于,除了最终表达相关性度量时,中间某些词可能会有更强的交互,特别是在⽂档很长的时候。这⼀类型的⽹络和 Siamese ⽹络相⽐,在两个问句很短的时候打成平⼿,但是如果问题很长,包含了很多的内容,⾥⾯有⼀些关键信息,这⼀⽹络就会有更好的表现,当我们做好表达以后,会看这个表达⾥⾯每⼀个⼩的词组之间交互的情况。
业界⼼得
⾸先,要重视 Baseline,这⼀点⾮常重要。不要把 Baseline 搞得太复杂,因为要通过 Baseline 理解数据和问题。
第⼆,尽快地构建 pipeline。我们的 pipeline 是⼀整套系统,包括数据处理、模型训练、模型加载、模型预测、模型评价,特别要注意评价指标和整个流程的打通,只有建⽴ pipeline 才有迭代的基础,如果没有 pipeline,就没办法迭代,没办法评价模型,也没办法更新框架。
第三,没有免费的午餐,没有倚天屠龙⼑,不存在⼀种可以解决所有问题的算法,算法⼀定有其适⽤的数据和场景。有了基准和评价标准,我们才可以尝试更多模型,才能知道模型在哪种条件下更加合适,做到扬长避短。
最后,要有领域相关的数据。领域相关的数据不只是指训练数据,也包括该领域的专家经验和知识,与该领域相关的框架和模型。就我们的经验来讲,领域数据的优化,⽐如清洗领域数据,或者构建领域词典、词表,这些⽅法带来的提升⽐较显著,甚⾄⽐模型带来的提升更加显著,所以要重视领域数据的⼯作。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。