在知识库应用领域,从大规模数据中尽量准确地找到或提取所需的答案一直是一个难点:传统的信息检索一般使用“基于倒排索引的关键词匹配+查询结果聚类”的方式,然而结果聚类只是交互上的一种优化方式,并没有解决根本问题;知识图谱的出现,使得基于图数据结构的精确查询和推理成为可能,然而知识图谱构建的成本往往较高,难以覆盖全业务。进入深度学习时代,基于语义向量的搜索得到了广泛应用,与此同时,检索结合高层的NLP任务(如阅读理解)提取答案成为一种常见的解决方案,然而传统阅读理解等专有模型由于模型规模和技术等原因,不论是答案抽取还是生成能力,都有较大的局限性。进入大模型时代,基于chat模型强大的上下文理解、指令遵循等能力,结合大模型的世界知识,知识问答能力达到一个新的高度,然而直接的大模型问答也存在输入长度限制、知识无法动态更新和幻觉等难题。鉴于上述原因,当前知识问答的主流实现范式是所谓的检索增强生成,即RAG。相比于传统的检索或者QA技术,RAG综合利用了信息检索的知识召回能力和大模型的内容生成能力,可以生成更准确和可信的答案,其中信息检索和内容生成决定了RAG应用系统的能力水平。本篇介绍信息检索中关键的语义检索技术在RAG中的应用,有关内容生成的论述将在下篇进行介绍。语义检索一直以来都是一个比较困难的问题,这是因为用户的查询语句和知识库中的文档之间,不论是数据形式、语义表达还是信息特征的蕴含量,都存在很大的鸿沟,这极大地影响了检索召回的准确率和召回率。此外,语义匹配是计算密集型任务,工程上面临性能等问题。用户问题和文档之间存在语义差异性,对召回数据的相关性和完整性(即准确率和召回率)有很大影响:通常,用户提问具有形式随意性或模糊性,例如“电费怎么算”或“怎么选充电桩位置”等,问句包含的语义信息有限,直接用于检索,往往效果不佳。此外在多轮问答里经常出现主语实体不清的问题,例如它有哪些特性,这里的“它”需要结合对话历史和上下文才能识别。知识库数据除了少数QA数据集外,更多的是文档数据,实现时同时面临两种形态的匹配场景:Q-Q(问句-问题)和Q-D(问句-文档/答案):Ø Q-Q匹配需要解决相似度空间里的度量问题。即度量指标的大小(如余弦相似度、Inner Product)在表征相似度值时应该具备实际区分意义,能够尽量准确地区分相似距离的远近,例如相似度值0.8的句子对之间相似度较高,而相似度值0.3的句子对之间应该是具有很大差异的。Ø Q-D匹配还面临对称性问题。简单来说,对称性一般指用于匹配的两段文本之间的表达形式和长度是否类似。如下表1所示,“用户查询”与“问题”的表述都是句子,这就是对称性匹配;而“用户查询”与“答案”的表述类似就是非对称性匹配。通常来说,非对称性匹配需要更深层次的上下文语义理解,实现难度更大。长文档匹配要解决两个问题:编码模型的长度限制、上节所说的非对称性匹配难度增大的问题。完整和准确的上下文是最终答案生成环节的基本前提,这就需要在检索阶段尽可能精确地召回所需的文本信息,具体体现在对召回文本的相似度排序上:精确地排序可以有效地过滤掉无关的噪声数据,也可以根据需要用于精细的上下文组合场景。然而精确的语义相似度计算复杂度高,对于大规模文档集的精确语义对比计算,在工程上往往是不现实的,因此需要综合考虑性能和准确性的要求,选择合适的算法和策略。 语义检索的实现是系统性工程,包括用户查询处理、文档数据处理、语义向量化、相似检索等多个步骤,各个环节的处理策略都将对检索结果产生重要的影响,如下图1所示。用户查询处理:针对问句意图过于笼统等问题,采用查询增强或改写等方式,获取更完整的意图特征,从而可以召回更相关和完整的上下文信息。文档数据处理:针对长文本,通过切片处理等方式解决长度问题,同时注意兼顾切片信息的完整性。语义向量化:模型层面上需要支持对称和非对称性,同时需要兼顾性能等要求。检索策略:算法等层面上需要兼顾召回信息的完整性和相关性,同时需要兼顾性能要求。本章基于电力知识库问答的实践经验,结合技术原理分析,介绍检索技术的实现方法和策略。针对用户查询语句进行改写,往往有利于更好地理解用户的真实查询意图。具体实践时可以结合当前查询问句和问答历史等信息,从多个角度实现查询改写。多轮知识问答中,问句中的实体识别是个常见的问题。例如问句“它有什么特点”的“它”的具体指代,在NLP里属于指代消解任务。工程实现时有两种选择:专有指代消解模型和通用大模型。经过本文对比验证,不考虑微调的情况下,较大的模型具有更好的指代消解能力,例如千问14B相比7B或者6B的模型,可以更好地识别出问句中的主语,但在较复杂上下文中,依然存在不足。因此对于较复杂的场景,本文建议通过微调提高大模型的指代消解能力,或者干脆训练传统的指代消解专有模型。查询增强的目标是丰富用户的查询意图特征,从而可以召回更完整和相关度更高的信息。大模型在这方面具有优势,本质上就是利用大模型丰富的世界知识和优秀的任务分解能力,实现查询增强(如下表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)。本文提供了一些常用的分块实现,包括基于固定长度、基于句子扩展、基于语义分割等,每种方法各有适用场景(如下表3)。图3 阿里的口语文档分段模型
(图片引用自https://arxiv.org/pdf/2107.09278.pdf)Ø 语义一致性:更小的分块包含的信息更纯粹,检索时更易于捕捉到文本中的细微语义差异,这对于QA问答这类需要精确匹配的任务很重要;缺点是容易导致上下文关联信息被截断。Ø 语境完整性:较大的分块保留更多的上下文信息,可以提供更全面的语境信息,这有利于保留文本块的整体意义;缺点是包含信息更多,检索时容易带来噪声影响。因此,在确定分块大小时,需要权衡准确度和完整性,根据实际的查询需求和数据特点进行多次实验和调优,以找到最佳的分块大小。下图4是微软提供的评测结果。图4 不同的分块大小对召回的影响
(图片引用自https://techcommunity.microsoft.com/t5/azure-ai-services-blog/azure-cognitive-search-outperforming-vector-search-with-hybrid/ba-p/3929167)重叠(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)、非对称性比较等技术的引入,使得语义向量在各个任务中发挥越来越重要的作用。对于知识问答任务来说,合适的语义向量模型一般具备以下特征:这种架构的实现方式是:用于比较的两份文本分别独立编码,然后进行交互计算。相比于交叉编码器架构(下面章节将进行介绍),该架构编码阶段没有充分的特征融合,精度上有所损失;其优点是文本之间可以独立生成向量编码,这在工业应用上是一个很大的优势,因为它允许预先对文档集进行向量化和索引,这样问答查询时只需要进行相似度计算,大大提高了检索效率。早期的语义向量模型训练(如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)本文采用了一些灵活的检索策略,从多个维度提升召回信息的准确率和完整率。信息召回的实现方式很多,包括全文检索、语义检索、基于知识图谱的搜索、基于数据库的查询等。本文实现了语义检索+全文检索的双路召回策略(如下图8):语义检索通过语义可以有更高的召回率;全文检索基于关键词匹配的特性可以满足精确匹配的需要(例如人名、产品编码、缩写、术语等)以及一些低频词(无法有效地进行向量化)的召回需求。为了同时满足检索性能和召回排序的精确性,本文采用先粗召回再精确重排的两阶段方式,具体实现如下(重排效果示例如下表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)文本块粒度的选择往往面临一种困境:过大导致噪声信息太多,影响准确性;过小则影响召回的完整性。一般来说对称检索比非对称检索任务更简单,能达到的准确性上限更高,基于此,本文采用两阶段策略:先检索小块数据,再找到与之对应的大块数据作为召回结果。具体实现有多种方式,以下是本文提供的一种策略:(1)预处理阶段:文本以句子作为分块粒度;存储时除了保存分块信息外,还保存句子的位置信息。(2)检索阶段:先采用对称检索召回相似句子,然后采用滑窗方式找到该句子前后位置的句子,并进行拼接,一直迭代该过程,直到满足最大块长度限制。除此以外,还有其他实现,例如先按大小块切片存储(大块长度远大于小块),两者建立引用关系,检索时查询小块,但提交给大模型时使用小块数据对应的大块数据。各种实现都有其优缺点,本文提供多种实现,允许用户根据场景自主选择。检索实现方案通常无法脱离具体场景和数据,即使只是针对电力知识库,实现时也需要根据数据特点和场景需求,多次实验对比以找出最优策略。为了应对这种不确定性,本文在实现时在各个可变环节都做了相应的接口抽象,实现可配置化,并内置多种实现方式,以期使系统能够灵活地适配不同的场景需求。受限于篇幅和经验的限制,本文没有覆盖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 capabilitieshttps://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 SEGMENTATIONhttps://arxiv.org/pdf/2107.09278.pdf[5] Dense Text Retrieval based on Pretrained Language Models: A Surveyhttps://arxiv.org/pdf/2211.14876.pdf[6] C-Pack: Packaged Resources To Advance General Chinese Embeddinghttps://arxiv.org/pdf/2309.07597.pdf
注:文章仅代表作者观点,欢迎转发和评论。转发、转载、转帖等须注明“稿件来源:朗新研究院”,违者朗新研究院将依法追究责任,谢谢!