1.RAG(检索增强生成)

文章介绍了如何利用大语言模型LLM增强功能,通过检索和生成技术,结合文本和图像的多模态信息。方法包括索引知识库、使用嵌入机处理文本片段、多模态嵌入搜索和多模态LLM生成文本或图像摘要,以提供更丰富的答案合成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 本质
    • 将用户输入的信息补充到大语言模型LLM中。LLM 可以使用这些信息来增强其生成的回答或响应。
    • 先检索,后生成
  • 传统RAG
    • 实现过程
      • 对知识库进行索引。使用加载器获取知识并将其转换为单个文档,然后使用分割器将其转换为小块或片段。
      • 将这些片段传递给嵌入机,嵌入机将它们转换为可以用于语义搜索的向量。并将这些嵌入向量与其文本片段一起保存在向量数据库中。
      • 用户提出问题并将问题通过相同的嵌入机发送到向量数据库中,检索并确定最匹配的片段。
      • 将最匹配的片段、自定义的system prompt和用户提出的问题一起格式化,交由LLM处理,最终得到针对具体语境的答案。
    • 缺点
      • 许多文档包含多种内容类型,不仅仅是文本,还包括表格和图像。
      • 文本拆分可能会破坏表格,从而损坏检索中的数据
      • 嵌入表可能会给语义相似性搜索带来挑战
      • 图像中捕获的信息通常会丢失
  • 多模态RAG
    • Option 1:
      • 使用多模态嵌入(如 CLIP)嵌入图像和文本
      • 使用相似性搜索检索两者
      • 将原始图像和文本块传递给多模态 LLM 以进行答案合成
    • Option 2:
      • 嵌入和检索文本
      • 将文本块传递给 LLM 以进行答案合成
    • Option 3:
      • 嵌入和检索引用原始图像的图像摘要
      • 将原始图像和文本块传递给多模态 LLM 以进行答案合成
### 检索增强生成 RAG 技术原理 检索增强生成RAG)是一种融合了检索技术和生成模型的方法,旨在通过结合外部知识库中的信息来改进自然语言处理任务的效果。具体而言,在面对特定查询时,系统会先利用检索模块从大量文档或其他形式的数据集中提取最相关的片段或条目;随后这些被选中的资料作为附加输入提供给生成组件,帮助其构建更加精准且富含背景支持的回答。 #### 工作流程概述 1. **检索阶段**:当接收到用户提出的请求后,RAG架构内的搜索引擎负责查找与之匹配度最高的若干候选答案来源。此过程可能涉及全文搜索、关键词定位或是更复杂的语义相似度计算等方式[^3]。 2. **生成阶段**:紧接着上述操作所得的结果会被传递至预训练的语言模型那里。此时后者不仅要理解原始问题本身所表达的意思,还需充分吸收由前者所提供的额外素材,并据此产出既贴合事实又具备良好流畅性的最终回复[^2]。 为了确保整个系统的高效运作以及输出质量,还需要特别关注以下几个方面: - 对于检索部分来说,采用先进的算法设计至关重要。这包括但不限于考虑如何衡量不同文本间的关联程度、怎样快速锁定目标范围等问题。实践中往往倾向于运用诸如BM25、TF-IDF这样的经典方案或者是基于深度学习框架下的新兴手段如BERT等来进行优化配置[^4]。 - 针对生成环节,则强调要让模型学会有效整合多源异构的知识表示形式——即能够把来自结构化表格记录、半结构性网页内容乃至纯叙述性描述等各种类型的有用资讯无缝衔接到一起,从而实现高质量的对话交互体验[^1]。 ```python from transformers import RagTokenizer, RagRetriever, RagSequenceForGeneration tokenizer = RagTokenizer.from_pretrained("facebook/rag-token-nq") retriever = RagRetriever.from_pretrained("facebook/rag-token-nq", index_name="exact", use_dummy_dataset=True) model = RagSequenceForGeneration.from_pretrained("facebook/rag-token-nq") input_dict = tokenizer.prepare_seq2seq_batch( "What is the capital of France?", return_tensors="pt" ) outputs = model.generate(input_ids=input_dict["input_ids"], context_input_ids=retriever(contexts=["Paris"])) print(tokenizer.batch_decode(outputs, skip_special_tokens=True)) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值