语言模型基础

语言是概率的,语言模型旨在准确预测语言符号的概率。

规则模型

统计模型

n-grams 语言模型基于马尔可夫假设和离散变量的极大似然估计给出语言符号的概率。n-grams 语言模型是在 n 阶马尔可夫假设下,对语料库中出现的长度为 n 的词序列出现概率的极大似然估计。

神经网络模型

1 循环神经网络(Recurrent Neural Network, RNN),RNN 的结构可以让其在参数量不扩张的情况下实现对历史信息的考虑,但是这样的环路结构给 RNN 的训练带来了挑战。在训练 RNN 时,涉及大量的矩阵联乘操作,容易引发梯度衰减或梯度爆炸问题。

  • 自回归:每次将本轮预测到的词拼接到本轮的输入上,输入给语言模型,完成下一轮预测。错误级联放大、串行计算效率低
  • Teacher Forcing:每轮都仅将输出结果与“标准答案”(Ground Truth)进行拼接作为下一轮的输入。曝光偏差( Teacher Forcing 训练模型的过程和模型在推理过程存在差异。)
  • Scheduled Sampling, Teacher Forcing 的训练过程中循序渐进的使用一小部分模型自己生成的词代替“标准答案”,在训练过程中对推理中无“标准答案”的情况进行预演。

2 Transformer 是一类基于注意力机制(Attention)的模块化构建的神经网络结构。给定一个序列,Transformer 将一定数量的历史状态和当前状态同时输入,然后进行加权相加。对历史状态和当前状态进行“通盘考虑”,然后对未来状态进行预测。自注意力模块由自注意力层(Self-Attention Layer)、残差连接(Residual Connections)和层正则化(Layer Normalization)组成。全连接前馈模块由全连接前馈层,残差连接和层正则化组成。

png

注意力层采用加权平均的思想将前文信息叠加到当前状态上。全连接前馈层占据了 Transformer 近三分之二的参数,掌管着 Transformer 模型的记忆。其可以看作是一种 Key-Value 模式的记忆存储管理模块。全连接前馈层包含两层,两层之间由 ReLU 作为激活函数。层正则化用以加速神经网络训练过程并取得更好的泛化性能。引入残差连接可以有效解决梯度消失问题。在基本的 Transformer 编码模块中包含两个残差连接。第一个残差连接是将自注意力层的输入由一条旁路叠加到自注意力层的输出上,然后输入给层正则化。第二个残差连接是将全连接前馈层的输入由一条旁路引到全连接前馈层的输出上,然后输入给层正则化。

基于Transformer的语言模型:

  • BERT:基于 Transformer 的 Encoder 部分,结合“掩词补全”等任务的 Encoder-Only 语言模型
  • T5:同时应用 Transformer 的 Endcoder 和 Decoder部分,结合“截断补全”、“顺序恢复”等多个有监督和自监督任务来训练 Encoder-Decoder 语言模型
  • GPT-3:同时应用 Transformer 的 Decoder 部分,利用“下一词预测”任务来训练 Decoder-Only 语言模型

语言模型的输出为一个向量,该向量的每一维代表着词典中对应词的概率。在采用自回归范式的文本生成任务中,语言模型将依次生成一组向量并将其解码为文本。将这组向量解码为文本的过程被成为语言模型解码。解码过程显著影响着生成文本的质量。当前,两类主流的解码方法可以总结为(1). 概率最大化方法(贪心搜索、波束搜索); (2).随机采样方法(在预测时增加随机性,Top-K有效的增加生成文本的新颖度、Top-P避免选到概率较小、不符合常理的词,容纳更多的具有相近概率的词,增加文本的丰富度)。

png

png

3 非Transformer模型

状态空间模型(State Space Model,SSM)可以有效处理长文本中存在的长程依赖性(Long-Range Dependencies, LRDs)问题,并且可以有效降低语言模型的计算和内存开销。但随着上下文长度的持续增长,基于 SSM 范式的模型可能会过早出现性能饱和。代表性模型:RWKV 和 Mamba

测试时训练(Test-Time Training,TTT)。范式提供了一种有效的解决方案。TTT 利用模型本身的参数来存储隐藏状态、记忆上文;并在每一步推理中,对模型参数进行梯度更新,已实现上文的不断循环流入。与 Transformer 相比,基于 TTT 范式的模型具有线性时间复杂度,这对于处理长序列数据至关重要。TTT 在长上下文建模任务中展现出卓越的性能,特别是在需要处理超长上下文的应用场景中。

语言模型的采样

在不同场景中,我们对于随机性的要求可能不一样。比如在开放文本生成中,我们更倾向于生成更具创造力的文本,所以我们需要采样具有更强的随机性。而在代码生成中,我们希望生成的代码更为保守,所以我们需要较弱的随机性。引入 Temperature 机制可以对解码随机性进行调节。Temperature 机制通过对 Softmax函数中的自变量进行尺度变换,然后利用 Softmax 函数的非线性实现对分布的控制。

语言模型的评测

内在评测中,测试文本通常由与预训练中所用的文本独立同分布的文本构成,不依赖于具体任务。最为常用的内部评测指标是困惑度(Perplexity)。其度量了语言模型对测试文本感到“困惑”的程度。

外在评测中,测试文本通常包括该任务上的问题和对应的标准答案,其依赖于具体任务。通过外在评测,我们可以评判语言模型处理特定任务的能力。外在评测方法通常可以分为基于统计指标(BLEU(BiLingual Evaluation Understudy)和 ROUGE(Recall-Oriented Understudy for Gisting Evaluation)是应用最为广泛的两种统计指标)的评测方法和基于语言模型(基于上下文词嵌入(Contex- tual Embeddings)的评测方法, 基于生成模型的评测方法)的评测方法两类。

大语言模型架构

大语言模型的扩展法则(Scaling Laws)

  • Kaplan-McCandlish 扩展法则

模型规模的增长速度应该略快于数据规模的增长速度。例如,总计算预算增加了 10 倍,模型规模应扩大约 5.37 倍,而数据规模应扩大约 1.86 倍,以实现模型的最佳性能。

  • Chinchilla 扩展法则

理想的数据集大小应当是模型规模的20 倍。例如,对于一个 7B(70 亿参数)的模型,最理想的训练数据集大小应为140B(1400 亿)个 Token。

大语言模型发展的一个新方向:不再单纯追求模型规模的增加,而是优化模型规模与数据规模的比例

大语言模型能力随模型规模涌现:

png

Encoder-only架构

png

Encoder-only 架构中的双向注意力机制允许模型在预测每个 Token 时都充分考虑序列中的前后文信息,捕捉丰富的语义和依赖关系。因此,Encoder-only 架构的模型特别适合于自然语言理解(Natural Language Understanding, NLU)任务,如情感分析或文本分类等判别任务。然而,由于缺少解码器组件,Encoder-only 架构的模型无法直接生成所需目标序列,因此在自然语言生成任务(Natural Language Generation, NLG)上可能表现不如专门设计的生成模型。

Encoder-Decoder架构

为了弥补 Encoder-only 架构在文本生成任务上的短板,Encoder-Decoder 架构在其基础上引入了一个解码器(Decoder),并采用交叉注意力机制来实现编码器与解码器之间的有效交互。其中分词器和输出文本只在训练阶段存在,而实现 “自回归”的红色虚线只在推理阶段存在。

png

Encoder-Decode 架构在 Encoder-only 架构的基础上添加了解码器,使模型能够基于编码器输出的上下文表示逐步生成输出序列。这种编码器和解码器的结合,使得模型可以有效地处理复杂的输入条件,并生成相关且连贯的高质量内容。因此,Encoder-Decoder 架构的模型非常适合于处理各种复杂的有条件生成任务,例如机器翻译、文本摘要和问答系统等需要同时理解输入并生成相应输出的场景。但新添加解码器也同样带来了模型规模以及计算量庞大的问题。

Decoder-only架构

为了有效缩减模型的规模以及降低整体的计算复杂度,Decoder-only 架构摒弃了 Encoder-Decoder 架构中的编码器部分以及与编码器交互的交叉注意力模块。

png

Decoder-only 架构进一步删除了 Encoder-Decoder 架构中的编码器部分,从而降低了模型本身的计算复杂度。这一架构的模型使用掩码(Mask)操作确保在每个时间步生成当前 Token 时只能访问先前的 Token,并通过自回归生成机制,从起始 Token 开始逐步生成文本。大规模预训练数据的加持使得 Decoder-only 架构的模型能够生成高质量、连贯的文本,在自动故事生成、新闻文章生成此类不依赖于特定的输入文本的无条件文本生成任务中表现出色。然而,在模型规模有限的情况下(例如 GPT-1 以及 GPT-2 等模型),由于缺乏编码器提供的双向上下文信息,Decoder-only 架构的模型在理解复杂输入数据时存在一定局限性,表现可能不如 Encoder-Decoder 架构。

Prompt工程

Prompt 是指用于指导生成式人工智能模型执行特定任务的输入指令,这些指令通常以自然语言文本的形式出现。Prompt 的核心目的是清晰地描述模型应该执行的任务,以引导模型生成特定的文本、图像、音频等内容。

良好设计的 Prompt 通常由任务说明、上下文、问题、输出格式四个基本元素组成:

  • 任务说明

向模型明确提出具体的任务要求。任务说明应当清晰、直接,并尽可能详细地描述期望模型完成的任务。

  • 上下文

向模型提供的任务相关背景信息,用以增强其对任务的理解以及提供解决任务的思路。上下文可以包括特定的知识前提、目标受众的背景、相关任务的示例,或任何有助于模型更好地理解任务的信息。

  • 问题

向模型描述用户的具体问题或需要处理的信息。这部分应直接涉及用户的查询或任务,为模型提供一个明确的起点。问题可以是显式的提问,也可以是隐式的陈述句,用以表达用户的潜在疑问。

  • 输出格式

期望模型给出的回答的展示形式。这包括输出的格式,以及任何特定的细节要求,如简洁性或详细程度。例如,可以指示模型以 JSON 格式输出结果。

Prompt 分词向量化:语言模型无法直接理解文本。在 Prompt 进入大模型之前,需要将它拆分成一个 Token 的序列,其中 Token 是承载语义的最小单元,标识具体某个词,并且每个 Token 由 Token ID 唯一标识。将文本转化为 Token 的过程称之为分词(Tokenization)

模型分词器对比表:

png

上下文学习(In-Context Learning,ICL)

一种通过构造特定的 Prompt,来使得语言模型理解并学习下游任务的范式,这些特定的 Prompt 中可以包含演示示例,任务说明等元素。上下文学习实现的关键在于如何设计有效的 Prompt,以引导模型理解任务的上下文和目标。通常,这些 Prompt 会包含任务说明以及一系列的示例,模型能够从这些上下文信息中学习任务的逻辑和规则,从而在没有额外训练的情况下,生成符合任务要求的输出。基于以上优点,上下文学习被广泛应用于解决垂域任务,数据增强,智能代理等应用中。

png

演示示例选择主要依靠相似性、多样性,选择方法有直接检索、聚类检索、迭代检索

思维链提示(Chain-of-Thought,CoT)

通过模拟人类解决复杂问题时的思考过程,引导大语言模型在生成答案的过程中引入一系列的中间推理步骤。这种方法不仅能够显著提升模型在推理任务上的表现,而且还能够揭示模型在处理复杂问题时的内部逻辑和推理路径。CoT 方法的核心是构造合适的Prompt 以触发大语言模型一步一步生成推理路径,并生成最终答案。

CoT扩展方法:按部就班(CoT、Zero-Shot CoT、Auto-CoT)、三思后行(ToT(思维树(Tree of Thoughts, ToT)、思维图(Graph of Thoughts, GoT))、GoT)和集思广益(Self-Consistency)

png

参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)

下游任务适配方法

1 上下文学习(In-context learning)

上下文学习的核心思想是将不同类型的任务都转化为生成任务,通过设计 Prompt 来驱动大语言模型完成这些下游任务。小样本上下文学习(Few-shot in-context learning)将数据集中的样本-标签对转化为自然语言指令(Instruction)和样例(Demonstrations),并拼接上需要测试的样本一同输入给大语言模型,将模型输出作为最终预测结果。

1)上下文学习的性能和微调依旧存在差距,并且 Prompt 设计需要花费大量的人力成本,不同 Prompt 的最终任务性能有较大差异。

2)上下文学习虽然完全不需要训练,但在推理阶段的代价会随 Prompt 中样例的增多快速增加。

2 指令微调(Instruction Tuning)

指令微调旨在对模型进行任务指令的学习,使其能更好地理解和执行各种自然语言处理任务的指令。指令微调需首先构建指令数据集,然后在该数据集上进行监督微调。指令微调能有效帮助大语言模型理解新领域的数据知识,提高大语言模型在下游任务上的性能。但是,监督微调需要较大的计算资源。

指令数据通常包含指令(任务描述)、示例(可选)、问题和回答。样例:

png

参数高效微调(Parameter-Eff icient Fine-Tuning, PEFT)

参数高效微调的优势:计算效率高、存储效率高、适应性强

1 参数附加方法(Additional Parameters Methods)

  • 加在输入

Prompt-tuning优势:内存效率高、多任务能力、缩放特性

png

  • 加在模型

Prefix-tuning优势:参数效率、任务适应性、保持预训练知识

png

Adapter-tuning:

png

AdapterFusion:

png

  • 加在输出

Proxy-tuning:

png

2 参数选择方法(Parameter Selection Methods)

基于规则的方法根据人类专家的经验,确定哪些参数应该被更新。基于规则的方法中最具代表性的方法是 BitFit 。该方法仅在小模型(如 BERT、RoBERT 等)上进行验证性能,在更大模型上的性能表现如何尚且未知。

基于学习的方在模型训练过程中自动地选择可训练的参数子集。其中,最为典型方法是 Child-tuning 。其通过梯度掩码矩阵策略实现仅对选中的择子网络进行梯度更新,而屏蔽子网络梯度以外的梯度,从而实现对微调参数的选择,达到参数高效微调的目的。

基于选择的方法能够显著减少微调过程中所需要更新的参数,降低计算成本和内存需求。对于资源受限的环境或者需要快速适应新任务的场景尤其适用。然而,这些方法也面临挑战,比如,如何选择最佳参数子集,以及如何平衡参数更新的数量和模型性能之间的关系。

3 低秩适配方法(Low-Rank Adaptation Methods)

低维固有维度假设表明:过参数化模型的固有维度是很低的;换言之,存在可以与全参数更新媲美的低维的参数更新。基于这一假设,低秩适配方法(Low-rank Adaptation Methods)通过低秩矩阵来近似原始权重权更新矩阵,并仅微调低秩矩阵,以大幅降低模型参数量。

最经典的低秩适配方法 LoRA :

png

  • LoRA 仅微调部分低秩参数,因此具有很高的参数效率,同时不会增加推理延迟
  • 低秩矩阵还可以扩展为低秩张量,或与 Kronecker 分解结合使用,以进一步提高参数效率
  • 在训练后可以将 LoRA 参数与模型参数分离,所以 LoRA 还具有可插拔性
  • 当我们有多个任务的 LoRA 插件时,可以将这些插件组合在一起,以获得良好的跨任务泛化性能

LoRA的变体及主要优化点:

  • ReLoRA打破低秩瓶颈
  • AdaLoRA动态秩分配
  • DoRA训练过程优化
  • LoRAHub基于 LoRA 插件的任务泛化

png

目前最流行的 PEFT 框架是由 Hugging Face 开发的开源库 HF-PEFT 2,它旨在提供最先进的参数高效微调方法。HF-PEFT 框架的设计哲学是高效和灵活性。HF-PEFT 集成了多种先进的微调技术,如 LoRA、Apdater-tuning、Prompt-tuning 和IA3 等。HF-PEFT 支持与 Hugging Face 的其他工具如 Transformers、Diffusers 和Accelerate 无缝集成,并且支持从单机到分布式环境的多样化训练和推理场景。HF-PEFT 特别适用于大模型,能够在消费级硬件上实现高性能,并且可以与模型量化技术兼容,进一步减少了模型的内存需求。HF-PEFT 支持多种架构模型,包括Transformer 和 Diffusion,并且允许用户手动配置,在自己的模型上启用 PEFT。

表格数据查询:

png

表格数据分析:

png

模型编辑

大模型普遍存在的问题:

  • 偏见:模型生成的内容中包含刻板印象和社会偏见等不公正的观点
  • 毒性:模型生成的内容中包含有害成分
  • 知识错误:模型提供的信息与事实不符

解决这些问题的常用方法:

  • 回炉重造(重新预训练):用清洗过的数据重新进行预训练,但成本过高,舍本逐末。
  • 继续教育(微调):利用高效微调技术向大语言模型注入新知识,但因为新知识相关样本有限,容易诱发过拟合和灾难性遗忘,得不偿失。
  • 模型编辑:通过增加或修改模型参数,快速有效地改变模型行为和输出。(针对特定的知识进行探讨,从而纠正在该知识点上的错误认知)

模型编辑的目标:修正大语言模型使其输出期望结果,同时不影响其他无关输出。

png

模型编辑性质关系图:

png

模型编辑相关数据集:

png

ROME 模型编辑方法

png

模型编辑的价值:

  • 精准模型更新
  • 保护被遗忘权(数据合规)
  • 提升模型安全(去除毒性、减弱偏见)

模型编辑方法分类图:

png

知识缓存法:

png

附加参数法: png

元学习法: png

元学习指的是模型“学习如何学习”(Learning to Learn)的过程。基于元学习的模型编辑方法,旨在让模型“学习如何编辑”(Learning to Edit),核心思想是使模型从一系列编辑任务中提取通用的知识,并将其应用于未见过的编辑任务。

元知识是模型在进行编辑前可以利用的知识,包括优化器参数、超网络等多种形式。元知识的训练过程被称为元训练,其目标是获得一个较好的元知识 ω,使得后续的每次编辑只需少量样本即可快速收敛。

定位编辑法:

修改大语言模型的局部参数,在保持模型整体结构和性能的同时,能够对特定知识点进行精准的更新和编辑。与其他方法相比,定位编辑法可同时保持较高的准确性、泛化性和局部性,且适用于各类模型。

模型编辑方法比较: png

附加参数法:T-Patcher

png

定位编辑法:ROME(Rank-One Model Editing)

ROME 通过因果跟踪实验和阻断实验发现知识存储于模型中间层的全连接前馈层。

因果跟踪实验包含三个步骤:正常推理、干扰推理和恢复推理。其中,正常推理旨在保存模型在未受干扰情况下的内部状态,用于后续恢复推理中内部状态的恢复;干扰推理旨在干扰模型的所有内部状态,作为控制变量的基准线;恢复推理则将每个内部状态的恢复作为变量,通过对比内部状态恢复前后的输出差异,精确评估每个模块与知识回忆的相关性。

因果跟踪实验的步骤

1 正常推理:将 q 输入语言模型,让模型预测出 o。在此过程中,保存模型内部的所有模块的正常输出,用于后续恢复操作。

2 干扰推理:向 s 部分的嵌入层输出添加噪声,破坏其向量表示。在这种破坏输入的情况下,让模型进行推理,在内部形成被干扰的混乱状态。

3 恢复推理:在干扰状态下,对于输入问题的每一个 Token q(i),将 q(i) 在每一层的输出向量分别独立地恢复为未受噪声干扰的“干净”状态,并进行推理。在每次恢复时,仅恢复一个特定位置的输出向量,其余内部输出仍保持干扰状态。之后,记录模型在恢复前后对答案的预测概率增量,该增量被称为模块的因果效应,用来评估每个模块对答案的贡献。

知识存储机制

ROME 认为在大语言模型中,知识存储于模型的中间层,其关键参数位于全连接前馈层,而且特定中间层的全连接前馈层在处理主体的末尾 Token 时发生作用。ROME 结合知识定位实验中的结论,推测知识以键值映射的形式等价地存储在任何一个中间层的全连接前馈层中,并对大语言模型中的知识存储机制做出以下假设:

首先,起始的 Transformer 层中的注意力层收集主体 s 的信息,将其汇入至主体的最后一个 Token 的向量表示中。

接着,位于中间层的全连接前馈层对这个编码主体的向量表示进行查询,将查询到的相关信息融入残差流(Residual Stream)中。

最后,末尾的注意力层捕获并整理隐藏状态中的信息,以生成最终的输出。

检索增加生成(Retrieval-Augmented Generation,RAG)

检索增强生成(RAG)旨在通过检索和整合外部知识来增强大语言模型生成文本的准确性和丰富性,其是一个集成了外部知识库(Corpus )、信息检索器(Retriever)、生成器(Generator,即大语言模型)等多个功能模块的系统。RAG 利用信息检索、深度学习等多种技术为大语言模型在生成过程中引入最新的、特定领域的知识,从而克服传统大语言模型的局限性,提供更加精准和可靠的生成内容。

RAG主要解决大模型的幻觉问题:

  • 训练数据(知识过时、知识边界、知识偏差等问题)导致的幻觉
  • 模型自身(知识长尾、曝光偏差、对齐不当、解码偏差等问题)导致的幻觉

RAG 基本架构:

png

检索增强生成架构

png

无微调架构(如In-Context RALM)是所有 RAG 架构中形式最简单的。该架构中,检索器和语言模型经过分别独立的预训练后参数不再更新,直接组合使用。这种架构对计算资源需求较低,方便实现且易于部署,适合于对部署速度和灵活性有较高要求的场景。

检索器微调架构(如REPLUG LSR)中,大语言模型的参数保持不变,仅用其输出指导检索器的微调。这种架构下的检索器能更好地适应大语言模型的需求,从而提高 RAG 的表现。

仅微调语言模型(如RETRO)指的是检索器作为一个预先训练好的组件其参数保持不变,大语言模型根据检索器提供的上下文信息,对自身参数进行微调。

检索器和语言模型协同微调的架构(如Atlas)中,检索器和语言模型的参数更新同步进行。这种微调的方式使得检索器能够在检索的同时学习如何更有效地支持语言模型的需求,而语言模型则可以更好地适应并利用检索到的信息,以进一步提升 RAG 的性能。

知识检索

png

知识库构建主要涉及数据采集及预处理与知识库增强两个步骤。

数据采集与预处理为构建知识库提供“原材料”。在构建文本型知识库的数据采集过程中,来自不同渠道的数据被整合、转换为统一的文档对象。这些文档对象不仅包含原始的文本信息,还携带有关文档的元信息(Metadata)。元信息可以用于后续的检索和过滤。

在构建文本型知识库时,数据预处理主要包括数据清洗和文本分块两个过程。数据清洗旨在清除文本中的干扰元素,如特殊字符、异常编码和无用的 HTML 标签,以及删除重复或高度相似的冗余文档,从而提高数据的清晰度和可用性。文本分块是将长文本分割成较小文本块的过程,例如把一篇长文章分为多个短段落。对长文本进行分块有两个好处:一是为了适应检索模型的上下文窗口长度限制,避免超出其处理能力;二是通过分块可以减少长文本中的不相关内容,降低噪音,从而提高检索的效率和准确性。

知识库增强是通过改进和丰富知识库的内容和结构,以提升其质量和实用性。 这一过程通常涉及查询生成与标题生成等多个步骤,以此为文档建立语义“锚点”,方便检索时准确定位到相应文本。

1 查询生成

利用大语言模型生成与文档内容紧密相关的伪查询。这些伪查询从查询的角度来表达文档的语义,可以作为相关文档的“键”,供检索时与用户查询进行匹配。通过这种方式,可以增强文档与用户查询的匹配度。

2 标题生成

利用大语言模型为没有标题的文档生成合适的标题。这些生成的标题提供了文档的关键词和上下文信息,能来用来帮助快速理解文档内容,并在检索时更准确地定位到与用户提问相关的信息。对于那些原始文档中缺乏标题的情况,通过语言模型生成标题显得尤为重要。

查询语义增强旨在通过同义改写和多视角分解等方法来扩展、丰富用户查询的语义,以提高检索的准确性和全面性。

1 同义改写

通过将原始查询改写成相同语义下不同的表达方式,来解决用户查询单一的表达形式可能无法全面覆盖到知识库中多样化表达的知识。改写工作可以调用大语言模型完成。 2 多视角分解

采用分而治之的方法来处理复杂查询,将复杂查询分解为来自不同视角的子查询,以检索到查询相关的不同角度的信息。

查询内容增强旨在通过生成与原始查询相关的背景信息和上下文,从而丰富查询内容,提高检索的准确性和全面性。与传统的仅依赖于检索的方式相比,查询内容增强方法通过引入大语言模型生成的辅助文档,为原始查询提供更多维度的信息支持。

1 生成背景文档

在原始查询的基础上,利用大语言模型生成与查询内容相关的背景文档。

2 检索器

旨在找到知识库中与用户查询相关的知识文本。检索器可分为判别式检索器(稀疏检索器(Sparse Retriever)利用离散的、基于词频的文档编码向量进行检索,而稠密检索器则利用神经网络生成的连续的、稠密向量对文档进行检索)和生成式检索器两类。

知识库中通常包含海量的文本,对知识库中文本进行逐一检索缓慢而低效。为提升检索效率,可以引入向量数据库来实现检索中的高效向量存储和查询。向量数据库的核心是设计高效的相似度索引算法。

在向量检索中,常用的索引技术:

  • 基于空间划分的方法:基于树的索引方法、基于哈希的方法、
  • 基于量化方法:基于乘积量化的方法通过将高维向量空间划分为多个子空间,并在每个子空间中进行聚类得到码本和码字,以此作为构建索引的基础
  • 基于图的方法:基于邻近图,将向量检索转化为图的遍历问题

常见的向量数据库:

png

检索器可能检索到与查询相关性不高的文档。这些文档如果直接输入给大语言模型,可能会引发生成质量的下降。为此,在将其输入给大语言模型之前,我们还需要对其进行进一步的精选。精选的主要途径是对检索到的文档进行重新排序,简称重排,然后从中选择出排序靠前的文档。重排方法主要分为两类:基于交叉编码的方法和基于上下文学习的方法。

生成增强

1 何时增强

判断是否需要增强的核心在于判断大语言模型是否具有内部知识。如果我们判断大模型对一个问题具备内部知识,那么我们就可以避免检索增强的过程,不仅降低了计算成本,而且还可以避免错误增强。判断模型是否具有内部知识的方法可以分为两类:

(1)外部观测法,通过 Prompt 直接询问模型是否具备内部知识,或应用统计方法对是否具备内部知识进行估计,这种方法无需感知模型参数;

(2)内部观测法,通过检测模型内部神经元的状态信息来判断模型是否存在内部知识,这种方法需要对模型参数进行侵入式的探测。

2 何处增强

png

在输入端增强的方法直接将检索到的外部知识文本与用户查询拼接到 Prompt中,然后输入给大语言模型。其是当前主流的增强方法。此方式的重点在于 Prompt设计以及检索到的外部知识的排序。

在中间层增强增强的方法利用注意力机制的灵活性,先将检索到的外部知识转换为向量表示,然后将这些向量插入通过交叉注意力融合到模型的隐藏状态中。

在输出端增强的方法利用检索到的外部知识对大语言模型生成的文本进行校准,是一种后处理的方法。在此类方法中,模型首先在无外部知识的情况下生成一个初步回答,然后再利用检索到的外部知识来验证或校准这一答案。校验过程基于生成文本与检索文本的知识一致性对输出进行矫正。矫正可以通过将初步回答与检索到的信息提供给大模型,让大模型检查并调整生成的回答来完成。

3 多次增强

在实际应用中,用户对大语言模型的提问可能是复杂或模糊的。复杂问题往往涉及多个知识点,需要多跳(multi-hop)的理解;而模糊问题往往指代范围不明,难以一次就理解问题的含义。对于复杂问题和模糊问题,我们难以通过一次检索增强就确保生成正确,多次迭代检索增强在所难免。

处理复杂问题时,常采用分解式增强的方案。该方案将复杂问题分解为多个子问题,子问题间进行迭代检索增强,最终得到正确答案。

处理模糊问题时,常采用渐进式增强的方案。该方案将问题的不断细化,然后分别对细化的问题进行检索增强,力求给出全面的答案,以覆盖用户需要的答案。

4 降本增效

检索出的外部知识通常包含大量原始文本。将其通过 Prompt 输入给大语言模型时,会大幅度增加输入 Token 的数量,从而增加了大语言模型的推理计算成本。 此问题可从去除冗余文本与复用计算结果两个角度进行解决。

当前主流开源RAG系统: LangChain、LlamaIndex

RAG 系统的两个典型应用:智能体(Agent)、垂域多模态模型增强

Agent 框架流程:

png

多模态垂域 RAG 框架:

png

参考

大模型基础,毛玉仁、高云君等 著

版权声明:本文为博主原创文章,转载请注明出处。 旭日酒馆