大模型时代下的知识库问答实践:如何借助语义检索更快更准确地召回上下文

科技   2024-06-18 08:15   浙江  

朗新研究     您身边的业务专家



前言


在知识库应用领域,从大规模数据中尽量准确地找到或提取所需的答案一直是一个难点:传统的信息检索一般使用“基于倒排索引的关键词匹配+查询结果聚类”的方式,然而结果聚类只是交互上的一种优化方式,并没有解决根本问题;知识图谱的出现,使得基于图数据结构的精确查询和推理成为可能,然而知识图谱构建的成本往往较高,难以覆盖全业务。

进入深度学习时代,基于语义向量的搜索得到了广泛应用,与此同时,检索结合高层的NLP任务(如阅读理解)提取答案成为一种常见的解决方案,然而传统阅读理解等专有模型由于模型规模和技术等原因,不论是答案抽取还是生成能力,都有较大的局限性。

进入大模型时代,基于chat模型强大的上下文理解、指令遵循等能力,结合大模型的世界知识,知识问答能力达到一个新的高度,然而直接的大模型问答也存在输入长度限制、知识无法动态更新和幻觉等难题。

鉴于上述原因,当前知识问答的主流实现范式是所谓的检索增强生成,即RAG。相比于传统的检索或者QA技术,RAG综合利用了信息检索的知识召回能力和大模型的内容生成能力,可以生成更准确和可信的答案,其中信息检索和内容生成决定了RAG应用系统的能力水平。本篇介绍信息检索中关键的语义检索技术在RAG中的应用,有关内容生成的论述将在下篇进行介绍。


技术挑战


语义检索一直以来都是一个比较困难的问题,这是因为用户的查询语句和知识库中的文档之间,不论是数据形式、语义表达还是信息特征的蕴含量,都存在很大的鸿沟,这极大地影响了检索召回的准确率和召回率。此外,语义匹配是计算密集型任务,工程上面临性能等问题。

(一) 语义差异

用户问题和文档之间存在语义差异性,对召回数据的相关性和完整性(即准确率和召回率)有很大影响:

1、用户查询意图模糊性

通常,用户提问具有形式随意性或模糊性,例如“电费怎么算”或“怎么选充电桩位置”等,问句包含的语义信息有限,直接用于检索,往往效果不佳。此外在多轮问答里经常出现主语实体不清的问题,例如它有哪些特性,这里的“它”需要结合对话历史和上下文才能识别。

2、文档类型多样化

知识库数据除了少数QA数据集外,更多的是文档数据,实现时同时面临两种形态的匹配场景:Q-Q(问句-问题)和Q-D(问句-文档/答案):

Ø Q-Q匹配需要解决相似度空间里的度量问题。即度量指标的大小(如余弦相似度、Inner Product)在表征相似度值时应该具备实际区分意义,能够尽量准确地区分相似距离的远近,例如相似度值0.8的句子对之间相似度较高,而相似度值0.3的句子对之间应该是具有很大差异的。

Ø Q-D匹配还面临对称性问题。简单来说,对称性一般指用于匹配的两段文本之间的表达形式和长度是否类似。如下表1所示,“用户查询”与“问题”的表述都是句子,这就是对称性匹配;而“用户查询”与“答案”的表述类似就是非对称性匹配。通常来说,非对称性匹配需要更深层次的上下文语义理解,实现难度更大。

表1  用户查询与对应的QA数据集示例

3、文档长度

长文档匹配要解决两个问题:编码模型的长度限制、上节所说的非对称性匹配难度增大的问题。

(二) 性能和精度的矛盾

完整和准确的上下文是最终答案生成环节的基本前提,这就需要在检索阶段尽可能精确地召回所需的文本信息,具体体现在对召回文本的相似度排序上:

精确地排序可以有效地过滤掉无关的噪声数据,也可以根据需要用于精细的上下文组合场景。然而精确的语义相似度计算复杂度高,对于大规模文档集的精确语义对比计算,在工程上往往是不现实的,因此需要综合考虑性能和准确性的要求,选择合适的算法和策略。 


解决思路


语义检索的实现是系统性工程,包括用户查询处理、文档数据处理、语义向量化、相似检索等多个步骤,各个环节的处理策略都将对检索结果产生重要的影响,如下图1所示。

图1  语义检索一般流程和关键环节

用户查询处理:针对问句意图过于笼统等问题,采用查询增强或改写等方式,获取更完整的意图特征,从而可以召回更相关和完整的上下文信息。

文档数据处理:针对长文本,通过切片处理等方式解决长度问题,同时注意兼顾切片信息的完整性。

语义向量化:模型层面上需要支持对称和非对称性,同时需要兼顾性能等要求。

检索策略:算法等层面上需要兼顾召回信息的完整性和相关性,同时需要兼顾性能要求。


关键技术实现


本章基于电力知识库问答的实践经验,结合技术原理分析,介绍检索技术的实现方法和策略。

(一)查询改写

针对用户查询语句进行改写,往往有利于更好地理解用户的真实查询意图。具体实践时可以结合当前查询问句和问答历史等信息,从多个角度实现查询改写。

1、指代消解

多轮知识问答中,问句中的实体识别是个常见的问题。例如问句“它有什么特点”的“它”的具体指代,在NLP里属于指代消解任务。工程实现时有两种选择:专有指代消解模型和通用大模型。

经过本文对比验证,不考虑微调的情况下,较大的模型具有更好的指代消解能力,例如千问14B相比7B或者6B的模型,可以更好地识别出问句中的主语,但在较复杂上下文中,依然存在不足。

因此对于较复杂的场景,本文建议通过微调提高大模型的指代消解能力,或者干脆训练传统的指代消解专有模型。

2、LLM查询增强

查询增强的目标是丰富用户的查询意图特征,从而可以召回更完整和相关度更高的信息。大模型在这方面具有优势,本质上就是利用大模型丰富的世界知识和优秀的任务分解能力,实现查询增强(如下表2)。

对于行业应用来说,大模型具备更多的行业知识,增强效果更好,因此条件允许的情况下,应尽可能引入行业大模型作为支撑。

表2  查询增强示例

3、HyDE(Hypothetical Document Embeddings)

HyDE是一种逆向检索策略,也可以看作一种新颖的查询增强方式,其主要思路如下:

(1) 针对用户查询,让LLM直接生成假设性回答。相比真实答案,假设性回答内容可能是虚构或者不精确的,但包含了关键语义逻辑信息。

(2) 以这个假设回答作为查询文本,通过语义检索找到与它相似的文本,作为检索结果。

图2  HYDE查询范式

(图片引用自https://arxiv.org/pdf/2212.10496)

从原理上来看,这种方式本质上是将原先的query-doc非对称检索转换为query-query对称检索,拉近了查询到文档之间的语义空间,从而规避了非对称检索的复杂性,降低难度。

其中假设性回答的内容经过向量化压缩后,可以筛除非核心语义的信息,也有利于下一步的相似比对。这种方式实践容易且在一些场景下表现效果不错,本文将其作为一种可选的查询增强方案。

(二)文档数据分块

文本分块是常用的文档处理策略,主要是为了应对以下情景:

(1)出于性能、成本的原因,语义向量模型通常限制了输入文本的长度;

(2)分块策略对于检索效果有重要影响,并且和场景、数据关系紧密,没有一种固定的策略可以适应所有情况。

分块策略主要包含以下因素:方法、大小和重叠(overlap)。

1、分块方法

本文提供了一些常用的分块实现,包括基于固定长度、基于句子扩展、基于语义分割等,每种方法各有适用场景(如下表3)。

表3  分块方式

图3  阿里的口语文档分段模型

(图片引用自https://arxiv.org/pdf/2107.09278.pdf)


2、分块大小

分块大小的选择对检索的主要影响如下:

Ø 语义一致性:更小的分块包含的信息更纯粹,检索时更易于捕捉到文本中的细微语义差异,这对于QA问答这类需要精确匹配的任务很重要;缺点是容易导致上下文关联信息被截断。

Ø 语境完整性:较大的分块保留更多的上下文信息,可以提供更全面的语境信息,这有利于保留文本块的整体意义;缺点是包含信息更多,检索时容易带来噪声影响。

因此,在确定分块大小时,需要权衡准确度和完整性,根据实际的查询需求和数据特点进行多次实验和调优,以找到最佳的分块大小。下图4是微软提供的评测结果。

图4  不同的分块大小对召回的影响

(图片引用自https://techcommunity.microsoft.com/t5/azure-ai-services-blog/azure-cognitive-search-outperforming-vector-search-with-hybrid/ba-p/3929167)


3、分块重叠

重叠(Overlap)即在相邻的分块中引入重叠部分,这样可以确保语义相关的信息在不同的块之间得到保留,能够更好地维持文本的连贯性和原有语境,减少信息被截断的影响。

重叠大小也是分块策略的重要参数:越大的重叠会保留更多的信息,但冗余会带来性能浪费,过小的重叠对检索质量的提升效果不明显。

下图5是微软提供的评测结果:可以看到当Overlap超过一定值后,就没有办法再带来明显的性能提升。

图5  不同的Overlap大小对召回的影响

(图片引用自https://techcommunity.microsoft.com/t5/azure-ai-services-blog/azure-cognitive-search-outperforming-vector-search-with-hybrid/ba-p/3929167)



(三)语义向量化

语义向量化(即embedding)是语义检索的基础。技术上,它经历了早期的词向量(如word2vec/GloVe等),到预训练大模型时代的句向量(如BERT),再到专门针对句子相似判定目标训练的模型(如Sentence BERT)。

近几年发展更为迅速,包括对比学习、多任务向量(instructor)、非对称性比较等技术的引入,使得语义向量在各个任务中发挥越来越重要的作用。对于知识问答任务来说,合适的语义向量模型一般具备以下特征:

1、双编码器架构

这种架构的实现方式是:用于比较的两份文本分别独立编码,然后进行交互计算。相比于交叉编码器架构(下面章节将进行介绍),该架构编码阶段没有充分的特征融合,精度上有所损失;其优点是文本之间可以独立生成向量编码,这在工业应用上是一个很大的优势,因为它允许预先对文档集进行向量化和索引,这样问答查询时只需要进行相似度计算,大大提高了检索效率。

2、非对称性

早期的语义向量模型训练(如SBERT)一般基于NLI (自然语言推理)类型的数据集,采用的是对称的句子对,因此在非对称检索任务上表现不佳。近些年推出的向量模型(如M3E、BGE等)都同时采用对称和非对称语料集,实现上也结合了对比学习、Instructor等更多先进的思想,因此可以更好地支持多样化的语义检索需求。

选型上,本文选择智源研究院开源的BGE作为默认的向量化模型,它采用三阶段方式,分别为训练、通用目标微调和特定任务微调,并引入Instructor技术,可支持为检索、分类、聚类等不同的任务生成不同的向量,是当前开源中的SOTA模型。

图6  SBERT推理架构

(图片引用自https://arxiv.org/abs/1908.10084)


图7  当前文文本向量评测榜单(C-MTEB部分截图)

(图片引用自https://arxiv.org/pdf/2309.07597.pdf)


(四)检索策略

本文采用了一些灵活的检索策略,从多个维度提升召回信息的准确率和完整率。

1、多路召回

信息召回的实现方式很多,包括全文检索、语义检索、基于知识图谱的搜索、基于数据库的查询等。本文实现了语义检索+全文检索的双路召回策略(如下图8):语义检索通过语义可以有更高的召回率;全文检索基于关键词匹配的特性可以满足精确匹配的需要(例如人名、产品编码、缩写、术语等)以及一些低频词(无法有效地进行向量化)的召回需求。

图8  双路召回

2、近似召回+重排

为了同时满足检索性能和召回排序的精确性,本文采用先粗召回再精确重排的两阶段方式,具体实现如下(重排效果示例如下表5所示):

 1)首先基于语义向量的方式,采用HNSW这类近似但高效的最近邻检索算法,从整个文档集中(假定大小是M)召回相似的TOP-N(N<<M)候选文本,这些文本和查询问句是相似的,但它们之间的排序权重可能是不准确的。

2)接着采用重排模型(本文采用BGE-Rerank)对候选文本进行精确排序,也可以进一步剔除掉相似度较低的部分文本。由于只需要在TOPN中进行重排,因此所需的计算开销是可以接受的。

那么为什么不直接采用重排模型进行召回呢?这是因为重排模型采用交叉编码器架构(如图10),有别于前面介绍的双编码器,它在编码阶段就对输入的句子对进行拼接然后联合编码,从而可以充分地融合句子之间的特征,实现更精确的排序,然而缺点也很明显,它无法输出单独的语义向量,因此无法采用预生成向量的方式实现高效的检索。

图9  双编码器架构

(图片引用自https://arxiv.org/pdf/2211.14876)

图10  交叉编码器架构

(图片引用自https://arxiv.org/pdf/2211.14876)

 查询示例:

表4  重排效果示例

3、大小文本块组合检索

文本块粒度的选择往往面临一种困境:过大导致噪声信息太多,影响准确性;过小则影响召回的完整性。

一般来说对称检索比非对称检索任务更简单,能达到的准确性上限更高,基于此,本文采用两阶段策略:先检索小块数据,再找到与之对应的大块数据作为召回结果。具体实现有多种方式,以下是本文提供的一种策略:

(1)预处理阶段:文本以句子作为分块粒度;存储时除了保存分块信息外,还保存句子的位置信息。

(2)检索阶段:先采用对称检索召回相似句子,然后采用滑窗方式找到该句子前后位置的句子,并进行拼接,一直迭代该过程,直到满足最大块长度限制。

除此以外,还有其他实现,例如先按大小块切片存储(大块长度远大于小块),两者建立引用关系,检索时查询小块,但提交给大模型时使用小块数据对应的大块数据。

各种实现都有其优缺点,本文提供多种实现,允许用户根据场景自主选择。

图11  按句索引,保存pos_idx位置信息


总结


检索实现方案通常无法脱离具体场景和数据,即使只是针对电力知识库,实现时也需要根据数据特点和场景需求,多次实验对比以找出最优策略。为了应对这种不确定性,本文在实现时在各个可变环节都做了相应的接口抽象,实现可配置化,并内置多种实现方式,以期使系统能够灵活地适配不同的场景需求。受限于篇幅和经验的限制,本文没有覆盖RAG实现的所有方面,如预摘要、知识图谱增强、长跨度文本等。

此外基于上述实践,本文认为,虽然由于大模型的冲击,学术领域各类NLP中间层任务似乎不再受到关注,然而工程上受限于大模型的能力和性能,传统NLP任务依旧具有强大的生命力,仍然是不可缺少的。系统下一步的优化方向考虑基于电力行业语料,微调语义向量和Rerank模型,进一步提高行业知识检索的质量。


【参考文献】

[1]Sentence Embeddings using Siamese BERT-Networks https://arxiv.org/abs/1908.10084
[2]Azure Cognitive Search: Outperforming vector search with hybrid retrieval and ranking capabilities
https://techcommunity.microsoft.com/t5/azure-ai-services-blog/azure-cognitive-search-outperforming-vector-search-with-hybrid/ba-p/3929167
[3]Precise Zero-Shot Dense Retrieval without Relevance Labels https://arxiv.org/pdf/2212.10496 
[4] SEQUENCE MODEL WITH SELF-ADAPTIVE SLIDING WINDOW FOR EFFICIENT SPOKEN DOCUMENT SEGMENTATION
https://arxiv.org/pdf/2107.09278.pdf
[5] Dense Text Retrieval based on Pretrained Language Models: A Survey
https://arxiv.org/pdf/2211.14876.pdf
[6] C-Pack: Packaged Resources To Advance General Chinese Embedding
https://arxiv.org/pdf/2309.07597.pdf

审阅:章胜

作者:黄映挺
部门:朗新科技集团技术研发中心





END


注:文章仅代表作者观点,欢迎转发和评论。转发、转载、转帖等须注明稿件来源:朗新研究院违者朗新研究院将依法追究责任,谢谢!






【概念热词】聚焦领域新趋势

数字化转型 综合能源服务 | 能源大数据 | 电力市场化 | 营商环境 | 乡村振兴 | 充电聚合 | 泛在物联网 | 新型电力系统 | 双碳战略 | AI与电力能源 | 绿证绿电 | 虚拟电厂 | 电力现货市场 | 报告解读 

【技术热词】探索技术创新与应用
电力大数据 | 产品技术 | 新技术应用实践 | 微服务技术实践 | 区块链技术 | 电力企业中台 | 移动应用实践

【业务热词】筑牢业务发展根基
营销趋势 | 网格化服务 | 客户标签 | 客户服务 | 营销服务运营 | 安全管理 | 渠道管理与运营 | 海外扩展 | 体验设计 | 充电桩运营 | 电动汽车充电 精益管理 | 电力营业厅 | 数字化供电所 | 负荷管理 


朗新研究院
展现朗新研究观点,包括不限于能源电力领域的深度观察,创新业务解决方案,行业热点评论、优秀产品及应用案例等。
 最新文章