当前位置: 首页 > news >正文

检索模型与RAG

文章目录

  • 检索模型与RAG
    • 检索模型
      • 全文检索与布尔检索
      • TFIDF和BM25
    • 大模型应用RAG
    • 提示词工程

检索模型与RAG

检索模型

  1. 布尔模型(Boolean Model)
    1. 基本思想: 使用布尔逻辑算符(and,or,not)来连接检索查询中的关键词,从而筛选出匹配的文档
    2. 特点:检索结果是二元的,即文档要么匹配查询,要么不匹配。没有考虑文档和查询之间的相关性,只关注关键词的存在与否
  2. 向量空间模型(Vector Space Model)
    1. 基本思想: 将文档和查询表示为向量,其中的向量的维度是词汇表中的词汇,每个维度上的值表示对应词汇在文档或查询中的权重
    2. 特点:考虑了文档和查询之间的相关性,通过计算向量之间的相似度来排序检索结果。常用的相似度计算方法包括余弦相似度
  3. 概率检索模型(Probabilistic Model)
    1. 基本思想:假设检索过程涉及到概率模型,其中文档和查询之间存在概率分布。
    2. 特点: 考虑了文档和查询之间的概率关系,能够更灵活地处理相关性 。典型的概率检索模型包括Okapi BM25

全文检索与布尔检索

全文索引(Full-Text Indexing) 是一种数据结构,它 记录了文档集合中所有词项的位置信息,目的是为了支 持高效的 全文检索。可以把它想象成一本书的索引, 但这个索引不是按章节或主题分类,而是包含了书中出 现的每一个有意义的词,并指明了这些词在哪些页码 (文档)的什么位置出现。

布尔检索 是一种 信息检索模型,它基于布尔逻辑 (AND, OR, NOT)来处理用户查询并返回结果。纯粹 的布尔检索模型不会对返回的文档进行相关性排序。所 有匹配查询的文档都被视为同样相关

稀疏检索模型(Sparse Retrieval)

  • 核心定义 :基于关键词匹配的传统检索方法,文档和查询被表示为高维稀疏向量(大部分元素为0),通过词频统计评估相关性。

  • 主流算法 :TF-IDF(词频-逆文档频率)、BM25(优化的关键词匹配算法)。

  • 特点 :

    • 优点:计算速度快、易于实现、大规模文档集上性能稳定。

    • 缺点:仅依赖字面匹配,无法捕捉语义关系(如“苹果”与“水果”的关联)。

  • 用途 :适用于需要快速响应的场景,如搜索引擎的初步召回阶段,或对计算资源有限的应用。

稠密检索模型(Dense Retrieval)

  • 优点:能理解语义关系,处理同义词、近义词,提高检索准确性和召回率。
  • 缺点:计算复杂度高,对硬件资源要求高。
  • 用途 :适用于需要精准语义匹配的场景,如智能问答系统、个性化推荐、RAG(检索增强生成)等。

全文检索 是基础框架,稀疏检索和稠密检索是其具体实现方式:

  • 稀疏检索是全文检索的传统实现(基于关键词);
  • 稠密检索是全文检索的现代升级(基于语义)。
  • 混合检索 (结合稀疏与稠密)是当前主流趋势,兼顾效率与准确性(如RAG系统中常采用“稀疏召回+稠密精排”的架构)。

反向索引(也称为 倒排索引)是全文检索最核心、最 基础的数据结构。它的名称“反向”或“倒排”源于它与传 统数据库“正向索引”的对比。

  • 正向索引:传统数据库通常维护一个从“文档ID(或 记录ID)”到“文档内容”的映射。当你查找特定内容 时,需要遍历文档,检查其内容是否匹配。
  • 反向索引:恰好相反,它维护一个从“词项”到“包含 该词项的文档列表”的映射。当你查找某个词时,可 以直接从这个列表中找到所有相关的文档

TFIDF和BM25

TF-IDF(Term Frequency-Inverse Document Frequency)和BM25(Best Matching 25)都是基于词频(TF)的方法。

在这里插入图片描述

bm25 是tfidf 的优化版本,主要是优化了tfidf 对长文档打分权重过高

bm25 中,在IDF 的计算中,使用了饱和函数,避免在极端情况(词项出现评率极低/极高的情况)下 IDF值 过于极端

在权重计算情况下,加了一个文档长度规划,优化了长文档中的评分过高的情况

绝大数情况下,搜索引擎中,都使用的bm25 打分算法
在这里插入图片描述

k1 取值 [1.2, 2.0] :默认值为1.2 控制词频(TF)增长的饱和速度,平衡高频词的影响。

b 取值 [0, 1] :默认值为0.75 控制文档长度对得分的影响程度,平衡长文档和短文档的权重。

大模型应用RAG

在这里插入图片描述

在RAG(检索增强生成)系统中, 文本分块(Chunking) 是将原始长文本分割成更小、更易于处理的文本片段的过程,这些片段被称为 Chunk 。以下是对其的详细介绍:

1. 分块的核心目的

  • 提升检索效率 :大文本直接检索会增加计算成本,分块后可缩小检索范围。
  • 优化上下文相关性 :模型(如LLM)的上下文窗口有限,分块能确保输入的文本片段与查询高度相关。
  • 提高生成质量 :精准的分块可减少无关信息干扰,使生成内容更准确。

2. 常见分块策略

  • 固定长度分块 :按字符数或token数均匀分割(如每200-500token一块),简单但可能破坏语义完整性。
  • 语义分块 :基于文本语义边界(如段落、章节、句子)分割,保留逻辑完整性(常用方法包括NLTK分句、spaCy语义分析等)。
  • 滑动窗口分块 :设置重叠区域(如50token),避免关键信息被分割到不同块中。
  • 层次化分块 :先粗分(如章节),再细分(如段落),支持多粒度检索。

3. 分块大小的影响

  • 过小的块 :可能丢失上下文关联,导致检索结果碎片化。
  • 过大的块 :包含冗余信息,增加模型处理负担,降低检索精度。
  • 经验值 :通常根据嵌入模型(如BERT、Sentence-BERT)的最大输入长度调整,常见范围为256-1024token。

文本嵌入向量数据库相似度计算 是 稠密检索模型(Dense Retrieval)------ 这一块也可以采用全文检索的方案,通常是两者混用, 文本库过大,先通过稀疏检索,然后在采用稠密检索

提示词工程

提示词工程(prompt工程),通过传递给语言模型的指令上下文来增强大模型对知识库内容的检索和问答,实现用户期望模型任务

  • Prompt Engineering(提示工程)是开发和优化Prompt,让大模型输出更加有效的结果。
  • Prompt Engineering 并不设计修改和训练模型,只关注模型的输入和输出

输入内容一般包括

  1. 任务提示:核心任务
  2. 上下文:任务描述 / 背景
  3. 输入数据:输入的自定义文本
  4. 输出格式

上下文学习 (In-context Learning) 是大语言模型的一个关键能力。它指的是模型能够仅根据输入中提供的上下文 信息(比如一些示例)来完成任务,而无需更新模型的参数。例如,你给模型一个“翻译:你好 -> Hello”的例子, 然后给它一个“翻译:再见 ->”的输入,模型就能理解并完成任务。这种学习方式是GPT-3等模型的强大之处。

prompt 注意事项:

  1. 明确表达任务的目的,建议直接提到具体任务的名字。如情感分类、文本翻译等。
  2. 给出正确的少量参考案例,包括输入和输出。增加模型对少样本 或 临界情况的建模能力
http://www.dtcms.com/a/350080.html

相关文章:

  • 【Day 13】189.轮转数组
  • 项目文章|MeRIP-seq助力解析m6A RNA甲基化与康乃馨花衰老的调控机制
  • Day8--HOT100--160. 相交链表,206. 反转链表,234. 回文链表,876. 链表的中间结点
  • 30.throw抛异常
  • 项目前后端分离部署
  • LVM基本操作
  • LeetCode100-189轮转数组
  • 20.15 Hugging Face Whisper-large-v2中文微调实战:LoRA+混合精度单卡训练指南,3倍效率省90%显存
  • 正则表达式学习(基础)
  • AUTOSAR进阶图解==>AUTOSAR_RS_Features
  • 电脑隐私安全防护|快速清理Windows系统/浏览器/应用数据,支持文件粉碎与磁盘级擦除!
  • 从MyJUnit反思Java项目的工程实践(版本控制篇)
  • 数据库迁移幂等性介绍(Idempotence)(Flyway、Liquibase)ALTER、ON DUPLICATE
  • RabbitMQ面试精讲 Day 30:RabbitMQ面试真题解析与答题技巧
  • 深入解析MyBatis Mapper接口工作原理
  • Ubuntu24.04配置yolov5
  • 封装的form表单,校验规则(rules)只在提交时触发,为空时点击提交触发,再次输入内容也不显示校验规则(rules)
  • 机器学习】(12) --随机森林
  • Day27 进程管理(PCB、状态、调度、原语与资源管理)
  • pikachu之Over permission
  • 基于SpringBoot的宠物领养系统的设计与实现(代码+数据库+LW)
  • QML中的Connections
  • Vue 3 defineOptions 完全指南:让组件选项声明更现代化
  • vb6编绎COM DLL(ACTIVEX对象)时兼容性设置
  • bisheng 后端初始化数据(main.py > init_data.py)
  • 25072班8.25日 数据结构作业
  • 04-Maven工具介绍
  • kafka 副本集设置和理解
  • 《Spring Boot 进阶:从零到一打造自定义 @Transactional》 ——支持多数据源、动态传播行为、可插拔回滚策略
  • AI系列 - Claude 与 Qwen 模型自动补全对比:谁更胜一筹?