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

RAG_混合检索

混合检索(Hybrid Search)是一种结合了 稀疏向量(Sparse Vectors) 和 密集向量(Dense Vectors) 优势的先进搜索技术。旨在同时利用稀疏向量的关键词精确匹配能力和密集向量的语义理解能力,以克服单一向量检索的局限性,从而在各种搜索场景下提供更准确、更鲁棒的检索结果。

在本节中,我们将首先分析这两种核心向量的特性,然后讨论它们如何融合,最后通过milvus实现混合检索。

一、稀疏向量 vs 密集向量

为了更好地理解混合检索,首先需要厘清两种向量的本质区别。

1.1 稀疏向量

稀疏向量,也常被称为“词法向量”,是基于词频统计的传统信息检索方法的数学表示。它通常是一个维度极高(与词汇表大小相当)但绝大多数元素为零的向量。它采用精准的“词袋”匹配模型,将文档视为一堆词的集合,不考虑其顺序和语法,其中向量的每一个维度都直接对应一个具体的词,非零值则代表该词在文档中的重要性(权重)。这类向量的经典权重计算方法是 TF-IDF。在信息检索领域,BM25 则是基于这种稀疏表示的成功且应用广泛的排序算法之一,其核心公式如下:

Score(Q,D)=∑i=1nIDF(qi)⋅f(qi,D)⋅(k1+1)f(qi,D)+k1⋅(1−b+b⋅|D|avgdl)

其中:

  • IDF(qi): 查询词 qi 的逆文档频率,用于衡量一个词的普遍程度。越常见的词,IDF值越低。
  • f(qi,D): 查询词 qi 在文档 D 中的词频。
  • |D|: 文档 D 的长度。
  • avgdl: 集合中所有文档的平均长度。
  • k1,b: 可调节的超参数。 k1 用于控制词频饱和度(一个词在文档中出现10次和100次,其重要性增长并非线性), b 用于控制文档长度归一化的程度。

这种方法的优点是可解释性极强(每个维度都代表一个确切的词),无需训练,能够实现关键词的精确匹配,对于专业术语和特定名词的检索效果好。主要缺点是无法理解语义,例如它无法识别“汽车”和“轿车”是同义词,存在“词汇鸿沟”。

1.2 密集向量

密集向量,也常被称为“语义向量”,是通过深度学习模型学习到的数据(如文本、图像)的低维、稠密的浮点数表示。这些向量旨在将原始数据映射到一个连续的、充满意义的“语义空间”中来捕捉“语义”或“概念”。在理想的语义空间中,向量之间的距离和方向代表了它们所表示概念之间的关系。一个经典的例子是 vector('国王') - vector('男人') + vector('女人') 的计算结果在向量空间中非常接近 vector('女王'),这表明模型学会了“性别”和“皇室”这两个维度的抽象概念。它的代表包括 Word2Vec、GloVe、以及所有基于 Transformer 的模型(如 BERT、GPT)生成的嵌入(Embeddings)。

其主要优点是能够理解同义词、近义词和上下文关系,泛化能力强,在语义搜索任务中表现卓越。但缺点也同样明显:可解释性差(向量中的每个维度通常没有具体的物理意义),需要大量数据和算力进行模型训练,且对于未登录词(OOV)1的处理相对困难。

1.3 实例对比

稀疏向量表示:

稀疏向量的核心思想是只存储非零值。例如,一个8维的向量 [0, 0, 0, 5, 0, 0, 0, 9],其大部分元素都是零。用稀疏格式表示,可以极大地节约空间。常见的稀疏表示法有两种:

  1. 字典 / 键值对 (Dictionary / Key-Value): 这种方式将非零元素的 索引 (0-based) 作为键, 作为值。上面的向量可以表示为:

    // {索引: 值}
    {"3": 5,"7": 9
    }
  2. 坐标列表 (Coordinate list - COO): 这种方式通常用一个元组 (维度, [索引列表], [值列表]) 来表示。上面的向量可以表示为:

    (8, [3, 7], [5, 9])
    

    这种格式在 SciPy 等科学计算库中非常常见。

假设在一个包含5万个词的词汇表中,“西红柿”在第88位,“炒”在第666位,“蛋”在第999位,它们的BM25权重分别是1.2、0.8、1.5。那么它的稀疏表示(采用字典格式)就是:

// {索引: 权重}
{"88": 1.2,"666": 0.8,"999": 1.5
}

如果采用坐标列表(COO)格式,它会是这样:

(50000, [88, 666, 999], [1.2, 0.8, 1.5])

这两种格式都清晰地记录了文档的关键信息,但它们的局限性也很明显:如果我们搜索“番茄炒鸡蛋”,由于“番茄”和“西红柿”是不同的词条(索引不同),模型将无法理解它们的语义相似性。

http://www.dtcms.com/a/553012.html

相关文章:

  • Pytorch 预训练网络加载与迁移学习基本介绍
  • 企业官网响应式网站作品网站
  • Ubuntu20.04操作系统搭建gitlab详细教程
  • MySQL:with窗口函数说明及使用案例
  • 【C++学习】对象特性--继承
  • 常州外贸网站浦东区建设工程监督网站
  • AI+产业革命:人工智能如何成为新质生产力的“第一加速器”
  • Linux应用开发-6-GPIO系统控制蜂鸣器
  • LeetCode 刷题【140. 单词拆分 II】
  • 网站开发 犯法网站漏洞扫描工具
  • 漏洞修复学习之CVE-2023-38545漏洞复现与修复
  • 逻辑回归特征重要性排序实验报告:不同特征选择方法的排序一致性验证
  • 深入解析MySQL(6)——存储过程、游标与触发器
  • Linux操作系统学习之---线程池
  • 做网站 免费字体wordpress的slider
  • “十五五”规划前瞻:短剧小程序系统开发的技术浪潮与开发新机遇
  • Rust开发之使用 Trait 定义通用行为——实现形状面积计算系统
  • 解决小程序滚动穿透问题
  • 《风格锚点+动态适配:Unity跨设备渲染的核心逻辑》
  • Unity与iOS原生交互开发入门篇 - 调用iOS的Alert
  • 旧物二手回收小程序:引领绿色消费,开启时尚生活新方式
  • LeetCode 3289.数字小镇中的捣蛋鬼:哈希表O(n)空间 / 位运算O(1)空间
  • Cargo深度解析:Rust的构建系统与包管理器
  • 站长之家官网php做的网站如何运行
  • Bayes/BO-CNN-LSTM、CNN-LSTM、LSTM三模型多变量回归预测Matlab
  • # AI时代的人机交互写作:从方法论框架搭建到实践探索
  • 【fixchart】【来学习基于Mermaid语法生成“流程图”】
  • 解决小程序样式隔离styleIsolation
  • 改变世界的编程语言MoonBit:配置系统介绍(下)
  • mip网站推广普通话宣传周活动方案