RAG基础知识及综述学习

news2024/12/21 22:19:53

RAG基础知识及综述学习

  • 前言
    • 1.RAG 模块
      • 1.1 检索器(Retriever)
      • 1.2 检索融合(Retrieval Fusion)
      • 1.3 生成器(Generator)
    • 2.构建检索器(Retriever)
      • 2.1 分块语料库
      • 2.2 编码文本块
      • 2.3 构建索引
      • 2.4 构建数据存储
    • 3.查询 Retriever
      • 3.1 编码查询和 ANN 搜索
      • 3.2 后处理
    • 4.检索融合
      • 4.1.基于查询的融合
      • 4.2 基于 Logits 的融合
      • 4.3 潜在融合
    • 5.RAG 训练
      • 5.1 不带数据存储更新的 RAG
      • 5.2 训练生成器。
      • 5.3 联合训练retriever 和generator
      • 5.4 具有数据存储更新的 RAG
    • 6.经典NLP任务
    • 7.应用
    • 8.挑战及未来

前言

大型语言模型(LLM)在众多领域内取得了显著成就,这主要归功于它们通过大量参数来存储和处理知识的能力。然而,即便如此,LLM依然面临一些关键挑战,比如产生不准确或虚构的信息(幻觉问题)、难以及时更新内部知识以反映最新信息(知识更新问题),以及缺乏对特定领域的深入理解。

检索增强生成(RAG)作为一种新兴技术,通过引入外部知识库来强化LLM的功能,有效地缓解了上述问题。本文全面介绍了RAG的核心技术,特别是检索组件和如何将检索到的信息与生成过程相结合的策略。此外,我们还提供了实现RAG中教程代码,帮助读者理解和应用这些技术。

对于RAG的训练方式,探讨了两种情境:一种是在静态数据集上进行训练,另一种则允许在训练过程中动态更新数据存储。随后,文中展示了RAG在多个自然语言处理任务及工业应用场景中的实际应用案例。最后,针对RAG的发展前景和面临的挑战进行了讨论,旨在为未来的研究和发展提供方向指引和支持。

通过对RAG技术的深度解析及其潜在影响的探讨,本文希望促进这一领域更加广泛和深入的研究与实践。

1.RAG 模块

RAG(检索增强生成)架构通常由三个核心模块构成:检索器(Retriever)、生成器(Generator),以及检索融合机制(Retrieval Fusion)。这三个组件协同工作,以提升模型在处理复杂查询时的准确性和相关性。

1.1 检索器(Retriever)

检索器模块是RAG架构中的信息获取组件,它主要包括以下三个部分:

  • 编码器(Encoder):负责将输入文本转换为嵌入向量,使得文本可以在高维空间中被表示和比较。
  • 高效索引(Efficient Indexing):支持快速进行近似最近邻搜索,从而能够在大型数据库中迅速定位最相关的条目。
  • 数据存储(Datastore):用于保存外部知识库,这些知识是以键值对的形式组织的,便于检索操作。

检索器面临的挑战在于要在检索效率与检索质量之间找到一个最佳平衡点。一方面,检索效率关注的是系统如何快速地获取相关信息,这涉及到优化编码速度、构建高效的索引结构以及实现批量查询等技术;另一方面,检索质量则侧重于所检索信息的相关性,这需要通过改进块表示学习算法和采用先进的近似最近邻搜索方法来实现。

1.2 检索融合(Retrieval Fusion)

检索融合的目标是利用检索到的信息来强化生成过程。根据融合方式的不同,可以将其分为三类:

  • 基于查询的融合(Query-based Fusion):在输入送入生成器之前,先用检索到的信息对其进行补充或修改。
  • 基于logits的融合(Logits-based Fusion):专注于调整生成器输出的logits,通过结合检索得到的logits,以产生更精准的结果。
  • 潜在融合(Latent Fusion):将检索到的表示直接引入生成器的内部表示层,从而隐式地影响最终输出。

1.3 生成器(Generator)

生成器模块是RAG架构中负责文本生成的部分,它可以进一步细分为两个子类型:

  • 默认生成器(Default Generator):通常是预先训练或微调过的大型语言模型,如GPT系列,它们能够独立完成文本生成任务。
  • 检索增强生成器(Retrieval-Augmented Generator, RAGenerator):这是一种经过特殊设计或调整的生成器,旨在通过融合检索模块提供的信息来提高生成内容的质量。

RAG的操作流程大致可以分为以下三个步骤:

在这里插入图片描述

  • 信息检索:首先,基于给定的用户输入,从外部知识库中检索出相关的信息片段。
  • 信息融合:然后,使用一种或多种检索融合技术,将检索到的信息与原始输入或者生成过程中的中间状态相结合。
  • 内容生成:最后,生成器根据融合后的输入和检索结果,预测并生成最终的响应或输出。

2.构建检索器(Retriever)

构建一个高效的检索器(Retriever)对于实现检索增强生成(RAG)系统至关重要。该过程涉及将大型自然语言语料库转化为可搜索的嵌入形式,以便于快速准确地检索相关信息。以下是构建检索器的主要步骤,包括分块语料库、编码文本块以及构建向量数据库

2.1 分块语料库

分块是将文档分割成更小、指将大型文档划分为小文本块,更易于处理的文本片段的过程,这一步骤对于确保检索器的有效性和效率非常重要。

分块技术主要围绕着两个核心原则:语义独立性和计算效率。

  • 语义独立性

核心思想的完整表达:为了确保索引的内容能够在语义上保持独立,每个文本块应当尽可能地包含一个或多个完整的概念或主题。这有助于保证当检索器找到某个特定块时,该块能提供足够的上下文信息以理解其意义,而不必依赖于其他块。
避免歧义:较短的文本片段更容易产生多义性问题。例如,“apple”这个词在不同的上下文中可以指代水果或科技公司。通过合理地分块,可以使每个块提供的上下文更加具体,从而减少歧义的可能性,并提高检索结果的相关性和准确性。

  • 计算效率

资源开销的考虑:现代基于Transformer的模型,如BERT、DPR等,在处理长序列文档时会面临显著的资源挑战。这些模型通常使用自注意力机制,其计算复杂度随着输入长度的增加而迅速增长,导致对硬件资源(如内存和GPU时间)的需求大幅上升。
加速编码过程:将长文档分割成更小的块可以有效降低单次编码所需的资源量,因为较短的文本块使得模型能够更快地进行编码操作,同时减少了内存占用。这对于大规模数据集尤为重要,因为它不仅提高了编码速度,还使得整个系统可以在有限的硬件条件下处理更大的数据量。

因此,分块技术的主要挑战是找到最佳分块大小,以便在文本语义和编码效率之间做出更好的权衡。理想的分块策略应考虑以下几点:

  • 任务需求:不同任务可能需要不同类型的文本块。例如,问答任务倾向于使用较短的文本块以聚焦具体问题,而摘要生成则可能受益于较长的文档段落。
  • 编码器(Encoder )特性:不同的编码器对文本长度有不同的偏好。选择分块大小时,应当考虑所使用的编码模型能够最有效地处理的文本长度。
  • 查询(Query)特点:为了提高检索相关性,分块大小应该与用户查询的长度相匹配,这样可以确保查询和文档块之间的上下文信息量相似。隐式地使块中的上下文信息量与查询中的上下文信息量保持一致,从而提高查询和检索之间的相关性。例如,基于短语构建的检索数据库对于包含长文档的查询可能毫无用处。

分块技术主要分为三类:

  • 固定长度分块:根据预设的长度参数简单地切割文档。
  • 语义分块:基于句子或段落的结束符号进行切割,保留了更多的语义连贯性。
  • 基于内容的分块:根据文档结构特征进行分割,如章节、部分或代码功能块。

2.2 编码文本块

编码过程是将文本块转换为数字向量表示,即嵌入,这些嵌入用于后续的相似性搜索。编码方式主要有两种:

稀疏编码:通过高维向量表示文本,其中大多数元素为零。常见的方法有one-hot编码、词袋模型和TF-IDF等。这类编码简单但无法捕捉深层次的语义信息。
密集编码:生成低维但密集的向量,每个维度代表特定的语义特征。常用的密集编码方法包括BERT及其变体、连体编码器(如DPR)和基于LLM的编码器。

2.3 构建索引

构建索引是为了加速向量数据库中的相似性搜索。这涉及到选择合适的相似性度量、降维技术和高级ANN索引方法:

  • 相似性度量:用于计算查询和文档块之间的相似度,常见的有余弦相似度、欧几里得距离等。
  • 降维技术:如PCA、LSH和PQ,旨在减少嵌入的维度以提高搜索速度,同时尽量保持语义信息。
  • 高级ANN索引:包括IVFPQ、HNSW和基于树的索引(如Annoy),它们通过不同的算法结构来优化ANN搜索的速度和精度。

2.4 构建数据存储

最后一步是设置键值对存储,用以保存嵌入作为键,对应的文本或其他元数据作为值。选择合适的数据存储解决方案(如LMDB或RocksDB)对于支持大规模数据的高效检索和持久化非常重要。对于特定应用,如问答系统,可以设计专门的键值对结构,以增强检索结果的质量和实用性。

3.查询 Retriever

本节解释如何查询预构建的检索器,它基本上包括三个步骤:编码查询、ANN 搜索和后处理。

3.1 编码查询和 ANN 搜索

在检索增强生成(RAG)模型中,查询阶段的处理流程是确保查询能够有效地与预先构建的嵌入空间中的数据进行匹配。以下是这一过程的详细解释:

查询编码
为了保证查询和索引中的向量处于相同的嵌入空间,检索器使用一个与创建索引时相同的编码器来对查询进行编码。这通常是一个预训练的语言模型或特定设计的神经网络,它将文本转换成固定维度的向量表示。

ANN 搜索 (近似最近邻搜索)
ANN搜索的目标是在大型嵌入空间中快速找到与查询最相似的数据点。由于直接计算所有可能的距离组合过于耗时,因此采用了近似算法,这些算法能够在可接受的误差范围内极大地加速搜索过程。

IVFPQ (倒排文件+乘积量化) 示例

IVFPQ 是一种常用的ANN算法,它通过以下步骤工作:

  • 聚类:首先,所有嵌入被划分为多个集群。每个集群都有自己的中心嵌入。
  • 粗略搜索:当一个查询到来时,其嵌入会被用来与各个集群的中心比较,选出几个最有可能包含相似项的候选集群。
  • 细化搜索:在选定的候选集群内,利用乘积量化技术进一步缩小范围。乘积量化是一种压缩技术,它可以减少存储需求,并加快距离计算速度。
  • 合并与排序:最后,从所有候选集群中收集到的结果会被合并,并按照与查询的相似度重新排序,以确定最终的前k个最近邻。

从 datastore 中检索值

一旦找到了前k个最近邻的唯一标识符(例如ID),下一步就是用这些标识符去访问实际的数据store,从中取出对应的文档、段落或其他形式的数据作为检索结果。这个datastore可以是数据库、文件系统或者任何其他持久化存储机制。

整个过程中,关键是要保持查询编码器和索引构建时使用的编码器一致,这样可以确保查询能准确地映射到正确的嵌入空间,从而提高检索效率和准确性。此外,选择合适的ANN算法和参数对于平衡搜索的速度和质量也至关重要。

3.2 后处理

后处理在检索增强生成(RAG)模型中扮演着至关重要的角色,它是在初始检索步骤之后对检索结果进行优化、增强或调整的一组技术。这些技术的目标是确保检索到的信息尽可能符合特定任务的需求,从而提升最终输出的质量。以下是几种典型的后处理技术,特别是重新排名:

重新排名

重新排名是对初步检索到的候选集进行二次评估和排序的过程,目的是使排序更加贴合特定任务的目标。由于最初的检索通常基于与任务无关的度量标准(如欧几里得距离、余弦相似度等),这可能会导致检索到的结果虽然在数学上最接近查询,但在语义或任务相关性上并非最优。

现有的重新排名方法包括但不限于:

  • 基于模型的重新排名:使用额外的机器学习模型(如深度神经网络)来评估每个候选文档与查询之间的相关性,并根据该模型的评分对候选集进行重新排序。这种方法可以更准确地捕捉到查询和文档之间的复杂关系。
  • 上下文感知重新排名:在对话系统或需要考虑上下文的任务中,可以将当前查询以及之前的交互历史作为输入,以更好地理解查询背景并据此调整候选排序。
  • 多模态重新排名:对于涉及多种数据类型的任务(例如同时包含文本和图像的数据),可以设计专门的多模态模型来进行重新排名,确保不同模态之间的信息能够被有效整合。
  • 融合策略:结合多个不同的信号或模型预测,通过加权平均或其他组合方式来决定最终的排序。这种方式可以提高系统的鲁棒性和泛化能力。
  • 反馈驱动的重新排名:利用用户反馈或者在线学习机制不断调整重新排名算法,使得系统能够随着时间的推移逐渐优化其性能。
  • 领域特定的重新排名:针对特定应用领域(如医学文献检索、法律文件分析等),可以定制化设计重新排名规则,以满足该领域的特殊需求。
  • 多样性促进:在某些情况下,可能希望检索结果不仅限于最高分数的项目,而是要涵盖更多样化的视角或信息源。因此,可以在重新排名过程中引入多样性指标,以避免结果过于集中于某一类内容。
  • 时间敏感性重新排名:对于时效性强的内容(如新闻报道),可以优先展示最近更新的信息,即使它们的初始评分不是最高的。

总之,重新排名是提高检索质量的重要环节,它允许系统根据具体任务的要求灵活调整检索结果,从而提供更加精准、有用的信息给用户。

4.检索融合

检索融合是指如何利用检索到的知识来提高生成器的性能。 基本上,检索融合有三种类型:基于查询的融合、基于 logits 的融合和潜在融合。

4.1.基于查询的融合

最简单、最直接的融合技术是基于查询的融合,它将检索到的信息与输入查询集成以生成响应。 根据拼接信息的类型,基于查询的融合可以进一步分为两个子类,即文本拼接和特征拼接。

文本连接涉及与原始文本执行基于查询的融合,使其特别适合 GPT-4 等现代 LLM。 这些模型充当交互能力有限的黑盒系统,通常仅向用户提供 API 访问。

4.2 基于 Logits 的融合

基于 logits 的融合是指将检索到的知识合并到输出层中。 基本上,检索到的知识将被输入到同一个模型中,以获得用于增强或校准预测的 logits。 因此,基于 Logits 的融合可以分为两个分支,即基于集成的融合和基于校准的融合。

4.3 潜在融合

潜在融合研究将检索到的知识合并到生成器的隐藏状态中,以实现更好的生成。 基于引入方法,潜在融合可以进一步分为两类:基于注意力和加权加法。

5.RAG 训练

本节介绍 RAG 训练,可分为两大类:不带数据存储更新的 RAG 和带数据存储更新的 RAG。 前者是指仅更新 RAG 每个模块中的可训练参数,并且数据存储中的知识在训练阶段保持不变。 后者是指数据存储中的知识将被更新,然后 RAG 中每个模块的参数将以与前一种情况类似的方式更新。

5.1 不带数据存储更新的 RAG

在没有数据存储更新的情况下训练 RAG 的目标是根据现有的知识数据存储更新存储在生成器短期内存中的知识。有三种训练情况,即训练 retriever、训练生成器以及联合训练 retriever 和 generator。

考虑到没有数据存储更新的情况,训练检索器通常是指训练检索器编码器并重新构建索引。 由于稀疏编码通常依赖于没有参数的统计方法,因此训练编码器仅适用于密集编码方法。 不同的训练方法可能有不同的目标,例如改进语义表示、加速编码过程或学习特定于领域的表示。 前两个目标通常是通过用更强大或更小的编码器(如 DistilBERT)替换原始编码器来实现的)或 TinyBERT。 最后一个要求使用对比学习在特定领域的语料库上训练原始编码器。 训练 retriever 编码器后,在 vector 数据库中用作 key 的 embedding 也将发生变化。 因此,所有索引都应该使用新的嵌入重新构建。 此外,如果编码器保持不变,则可以使用新的 ANN 搜索算法或重新调整超参数来更新索引。 猎犬经过训练后,可以直接整合到 RAG 中,而无需更新生成器。

5.2 训练生成器。

训练生成器涉及更新其参数或检索融合模块中的参数。 由于生成器通常是 LLM,因此训练 LLM 是一个耗费资源和时间的过程。 幸运的是,有几种参数高效的微调技术,例如 LoRA被提出来解决 LLM 的微调问题。 虽然检索融合模块中的参数比生成器中的要少,但只微调这些参数可能会遇到一些训练问题,比如低收敛和过拟合。 如果有足够强大的资源,联合调整生成器和检索融合模块中的参数是训练生成器和检索融合模块的更好方法。

5.3 联合训练retriever 和generator

除了独立训练 retriever 和 generator 之外,联合训练 retriever 和 generator 可能是另一个不错的选择,可以在下游任务上获得更好的性能。 这种情况的关键是保证在正向过程中从 input 到 output 的可区分性。 通常,复杂的索引在微调阶段不是合适的选择。 现有工作通常利用复杂的索引来预先选择一小部分最近邻作为候选者,然后选择最终的顶部 k最近的邻。 联合训练是一种端到端的优化,可以使检索器和生成器之间更好地协调,并提高对生成器的上下文理解。

5.4 具有数据存储更新的 RAG

涉及两个阶段:更新知识数据库,然后训练检索器和生成器。 更新知识数据库有三种情况,即使用可训练嵌入进行更新、使用新值更新和使用新语料库进行更新。 在第一种情况下,值通常是可训练的嵌入,并且使用 RAG 中的参数同时/异步更新. 最后两种情况通常是指使用最新信息更新知识数据库。 以问答语料为例,更新新值是指更新现有问题的答案,而更新新语料库是指添加新的问答对。 要更新现有键的值,需要首先查询现有键值对,然后执行就地更新。 对于新语料库,数据存储首先需要执行插入操作,然后重新构建或更新新键的索引。 更新数据存储后,训练检索器和生成器类似于没有数据存储更新的 RAG。 但是,此训练步骤并不总是必要的步骤,这有利于 LLM 的上下文学习功能。

6.经典NLP任务

在自然语言处理(NLP)领域,RAG技术代表了一种结合信息检索和生成模型的方法,以增强各种NLP任务的性能。以下是对于不同经典NLP任务以及RAG技术如何应用其中的一些补充说明:

6.1. 语言建模
除了基本的语言建模外,RAG可以被用于创建条件语言模型,这些模型可以根据特定上下文或外部知识库生成文本。这使得模型能够根据最新的或者特定领域的信息进行预测,从而提高生成内容的相关性和准确性。

6.2. 机器翻译
RAG在机器翻译中的应用可以通过引入双语词典、平行语料库或者其他形式的对齐数据来提升翻译质量。通过检索相关的翻译实例,RAG可以使翻译更加准确,并且更好地处理多义词和文化特有的表达方式。

6.3. 文本摘要
对于文本摘要任务,RAG可以帮助识别最相关的文档片段,以确保摘要包含最重要的信息点。此外,它还可以利用来自其他来源的知识来丰富摘要的内容,提供更广泛的信息视角。

6.4. 问答
RAG非常适合于构建开放域的QA系统,因为它能够有效地整合互联网上的广泛信息。对于封闭域问题,RAG也可以通过预先索引的专业文献快速找到答案,从而提高回答的速度和精度。

6.5. 信息提取
在信息提取中,RAG有助于识别和链接实体到权威知识源,如维基百科条目或其他专业数据库。这不仅提升了提取结果的质量,也增加了系统的可解释性,因为用户可以看到信息的具体出处。

6.6. 文本分类
对于情感分析等文本分类任务,RAG可以利用情感词典、评论数据库等资源,帮助模型更准确地理解文本的情感倾向。同时,它还可以考虑时间因素,例如当前事件对公众情绪的影响。

6.7. 对话系统
在对话系统中,RAG可以用来增强对话的历史上下文理解和响应生成。通过检索相似的对话历史记录,系统可以生成更为自然和符合情境的回答,特别是在面向任务的对话场景中,可以显著改善用户体验。

7.应用

7.1 基于 LLM 的 Autonomous Agent

基于大型语言模型(LLM)的自主代理是能够独立执行任务的智能软件系统,它们利用了LLM的强大功能来进行复杂的决策和问题解决,而不需要持续的人类干预。这些代理使用LLM作为其“大脑”或控制器,并通过多模态感知、工具利用率和外部存储器来扩展能力。

外部存储器中的信息检索

在RAG框架中,代理可以访问一个外部长期记忆库,这为代理提供了整合外部知识的能力。当面临查询或任务时,代理可以通过RAG技术从这个长期记忆库中检索相关信息,并将这些信息集成到LLM的生成过程中。这样做不仅增强了代理的理解能力和决策能力,还使它能够提供更准确和上下文相关的结果。随着新信息的不断学习和适应,代理可以在长时间内变得更加有效。

实时信息检索与工具利用

除了从自身的长期记忆中检索信息外,基于LLM的代理还可以利用工具在Web上搜索最新信息。这对于需要最新增加的知识的任务特别有用,例如新闻摘要、市场分析或者响应快速变化的情况。一旦代理获取了最新的网络信息,它可以再次使用RAG技术将这些数据融入其生成过程。通过结合LLM的自然语言理解和来自网络的实时数据,代理可以产生既与上下文相关又反映最新发展的回答,从而提高其提供准确和及时信息的能力,在动态环境中表现得更加出色。

7.2 框架:Langchain 和 LLaMAindex

为了加强RAG的实际实施,像Langchain和LLaMAindex这样的框架扮演了重要角色,它们促进了外部数据与语言生成过程的无缝整合。

Langchain

Langchain作为一个框架,旨在增强语言模型的功能,方法是将它们与外部知识源和数据库相结合。它充当中间件的角色,促进语言模型与各种数据检索系统的交互,使得模型能够在生成响应时更明智地利用上下文和特定知识。对于那些需要访问最新或详细信息的任务,这种集成至关重要,因为这些信息可能并未包含在模型最初的训练数据中。

LLaMAindex

LLaMAindex是一个专注于组织和索引大量数据的数据框架,以提升语言模型的检索能力。它支持高效的查询机制,允许语言模型迅速访问结构化存储库中的相关信息。LLaMAindex设计成高度可扩展,可以处理多种类型的数据,从文本文档到结构化数据库。它的索引能力适用于广泛的应用程序,从简单的事实检索到复杂的分析任务,成为增强语言模型信息检索阶段的重要工具。

8.挑战及未来

尽管检索增强生成(RAG)模型在自然语言处理(NLP)领域取得了显著的成就,但其发展过程中仍面临一些挑战,并为未来的研究指明了方向。以下是这些挑战的具体分析:

8.1 检索质量

提高检索质量是确保RAG系统有效性的关键,这涉及到四个主要的设计因素:

  • 选择最佳键:确定用于vector数据库的最佳键需要根据具体任务进行主观决策和人工努力。一个有效的策略是将每个任务视为一个问答(QA)问题,从而更好地选择输入。
  • 嵌入模型的选择:一旦确定了键,选择适当的嵌入模型(如BERT、RoBERTa等)以将文本转换为矢量表示至关重要。调整或微调这些模型以适应特定类型的数据或查询可以大幅提高检索质量。
  • 相似性度量的设计:设计有效的相似性度量对于衡量查询与检索信息的相关性非常重要。经典的相似性度量包括余弦相似度或欧几里得距离,而更复杂的度量(如最优传输距离)则提供了针对具体任务的改进。
  • 近似最近邻搜索:使用高级ANN算法(例如乘积量化或HNSW)来决定哪些知识应作为最近邻返回时,必须在检索效率和质量之间找到平衡。

8.2 RAG效率

为了维持高效性能,优化检索器效率和检索融合效率至关重要。对于小型数据库,编码阶段可能是瓶颈;而对于大型数据库,则需关注索引搜索和数据获取时间。此外,通过优化检索融合效率(例如采用Fid-light和ReFusion等技术减少计算开销),可以进一步提升整体性能。

8.3 融合策略

探索三种主要的检索融合策略——基于查询、潜在信息和logits的融合的结合使用及其在生成过程中的适时应用,可以进一步提升RAG系统的性能。每种策略都有其独特的优势和局限性,因此混合使用这些方法可以根据具体任务需求灵活调整,以达到更好的效果。

8.4 RAG训练

RAG训练涉及多个方面的问题,包括是否带或不带数据存储更新的共同优化所有参数、对齐检索和生成表示以及决定何时重新训练/微调生成器。提出高效的训练策略,如渐进式学习或迁移学习,可以帮助加速这一过程并提高最终模型的质量。

8.5 跨模态检索

跨模态信息的集成能够极大地丰富NLP任务中的数据表示,进而提高系统性能。多模态数据不仅增加了上下文的丰富性,还提高了系统的稳健性和泛化能力,特别是在需要解释多种输入模式的应用场景中,如自动驾驶汽车、医疗图像诊断等。未来的研究可能会专注于开发新的框架和技术,以便更有效地处理和整合来自不同模态的数据。

总之,虽然RAG模型已经在许多NLP任务中展示了强大的潜力,但在检索质量、效率、融合策略、训练方法以及跨模态集成等方面仍有很大的改进空间。未来的研发工作将继续推动这些领域的进步,使RAG模型更加智能、高效且适用于更多样化的应用场景。

虽然RAG已经取得了一定的成功,但持续的研究和创新对于克服当前挑战、推动技术进步仍然是必要的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2263452.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

移动网络(2,3,4,5G)设备TCP通讯调试方法

背景: 当设备是移动网络设备连接云平台的时候,如果服务器没有收到网络数据,移动物联设备发送不知道有没有有丢失数据的时候,需要一个抓取设备出来的数据和服务器下发的数据的方法。 1.服务器系统是很成熟的,一般是linu…

深入剖析MyBatis的架构原理

架构设计 简要画出 MyBatis 的架构图 >> ​​ Mybatis 的功能架构分为哪三层? API 接口层 提供给外部使用的接口 API,开发人员通过这些本地 API 来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。MyBatis 和数据库的…

android opencv导入进行编译

1、直接新建module进行导入,选择opencv的sdk 导入module模式,选择下载好的sdk,修改module name为OpenCV490。 有报错直接解决报错,没报错直接运行成功。 2、解决错误,同步成功 一般报错是gradle版本问题较多。我的报…

智能座舱进阶-应用框架层-Jetpack主要组件

Jetpack的分类 1. DataBinding:以声明方式将可观察数据绑定到界面元素,通常和ViewModel配合使用。 2. Lifecycle:用于管理Activity和Fragment的生命周期,可帮助开发者生成更易于维护的轻量级代码。 3. LiveData: 在底层数据库更…

设计模式-访问者设计模式

介绍 访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变个元素的类的前提下定义作用于这些元素的新操作。 问题:在一个机构里面有两种员工,1.Teacher 2.Engineer 员…

springmvc的拦截器,全局异常处理和文件上传

拦截器: 拦截不符合规则的,放行符合规则的。 等价于过滤器。 拦截器只拦截controller层API接口。 如何定义拦截器。 定义一个类并实现拦截器接口 public class MyInterceptor implements HandlerInterceptor {public boolean preHandle(HttpServletRequest reque…

宿舍管理系统(源码+数据库+报告)

356基于SpringBoot的宿舍管理系统,系统包含两种角色:管理员、用户,系统分为前台和后台两大模块 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:Vue 后端技术:SpringBo…

基于 HC_SR04的超声波测距数码管显示(智能小车超声波避障部分)

超声波测距模块HC-SR04 1、产品特色 ①典型工作用电压:5V ②超小静态工作电流:小于 5mA ③感应角度(R3 电阻越大,增益越高,探测角度越大): R3 电阻为 392,不大于 15 度 R3 电阻为 472, 不大于 30 度 ④探测距离(R3 电阻可调节增益,即调节探测…

(OCPP服务器)SteVe编译搭建全过程

注意:建议使用3.6.0,我升级到3.7.1,并没有多什么新功能,反而电表的实时数据只能看到累计电能了,我回退了就正常,数据库是兼容的,java版本换位java11,其他不变就好 背景:…

搭建Tomcat(四)---Servlet容器

目录 引入 Servlet容器 一、优化MyTomcat ①先将MyTomcat的main函数搬过来: ②将getClass()函数搬过来 ③创建容器 ④连接ServletConfigMapping和MyTomcat 连接: ⑤完整的ServletConfigMapping和MyTomcat方法: a.ServletConfigMappin…

Iris简单实现Go web服务器

package mainimport ("github.com/kataras/iris" )func main() {app : iris.New() // 实例一个iris对象//配置路由app.Get("/", func(ctx iris.Context) {ctx.WriteString("Hello Iris")})app.Get("/aa", func(ctx iris.Context) {ct…

MySql 中的解决某列中多个字段查询是否存在指定某个值, FIND_IN_SET 用法。

简言:今天公司数据库里面有个列是多个数据拼接而成的比如:**“,131113,749932833,749932825,749932826,749932827,749932828,749932829,”**想要通过sql 查找749932833值的列,很多同学第一想到的就是like 模糊匹配,模糊匹配不能保…

Git实用指南(精简版)

目录 读者须知 Git是什么 Git的原理 文件在Git中的几种状态 快速上手 结尾 读者须知 本文章适合从未接触过git,或者需要深度学习Git的用户进行阅读. 文末有详细的文档,读者可以前往Github下载阅读!!三克油 Git是什么 简单来说,Git是一个代码备份工具,你可以使用指令对…

jmeter 接口性能测试 学习笔记

目录 说明工具准备工具配置jmeter 界面汉化配置汉化步骤汉化结果图 案例1:测试接口接口准备线程组添加线程组配置线程组值线程数(Number of Threads)Ramp-Up 时间(Ramp-Up Period)循环次数(Loop Count&…

小红书关键词搜索采集 | AI改写 | 无水印下载 | 多维表格 | 采集同步飞书

小红书关键词搜索采集 | AI改写 | 无水印下载 | 多维表格 | 采集同步飞书 一、下载影刀: https://www.winrobot360.com/share/activity?inviteUserUuid595634970300317698 二、加入应用市场 https://www.yingdao.com/share/accede/?inviteKeyb2d3f22a-fd6c-4a…

Unbuntu下怎么生成SSL自签证书?

环境: WSL2 Unbuntu 22.04 问题描述: Unbuntu下怎么生成SSL自签证书? 解决方案: 生成自签名SSL证书可以使用OpenSSL工具,这是一个广泛使用的命令行工具,用于创建和管理SSL/TLS证书。以下是生成自签名…

通过阿里云 Milvus 与 PAI 搭建高效的检索增强对话系统

背景介绍 阿里云向量检索服务Milvus版(简称阿里云Milvus)是一款云上全托管服务,确保了了与开源Milvus的100%兼容性,并支持无缝迁移。在开源版本的基础上增强了可扩展性,能提供大规模 AI 向量数据的相似性检索服务。相…

打靶记录22——Tomato

靶机: https://download.vulnhub.com/tomato/Tomato.ova 难度: 低 目标: 获得 Root 权限 Flag 攻击方法: 主机发现端口扫描信息收集路径爬取源码分析文件包含写入日志 /var/log/auth.log内核漏洞枚举 les.sh本地提权 主机…

三维引擎cesium学习经验

三维引擎cesium学习经验: 1、初始化viewer对象 2、对entity的操作:添加,隐藏,修改,去除,居中显示 3、去除掉entity的双击事件 4、获取当前视角高度 5、获取经纬度在屏幕上的位置 6、获取三维场景屏幕中心点…

【蓝桥杯】43699-四平方和

四平方和 题目描述 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去,就正好可以表示为 4 个数的平方和。 比如: 502021222 712121222; 对于一个给定的正整数,可…