RAG-索引构建

14 阅读7分钟

一.向量嵌入Embedding

1.什么是Embedding

  • 核心定义:将非结构化的数据(如文本,音频,图片等)映射为低维,稠密,连续的实数向量的过程。

  • 三要素

    • 数据:原始的数据内容

    • 嵌入模型:深度学习模型,将语义转换为数值

    • 输出向量:固定长度的一维数组,向量间的距离代表了语义的相似度

2.Embedding的发展历程

  • 静态 Embedding (Static Embedding)

    • 代表算法:Word2Vec (Skip-gram, CBOW), GloVe。

    • 特点:每个词对应一个固定向量,与上下文无关。

    • 局限性:无法解决一词多义问题(例如“苹果”在不同语境下指水果或公司,其向量是一样的)。

  • 上下文相关 Embedding (Contextual Embedding)

    • 代表算法:BERT, RoBERTa 等 Transformer 架构模型。

    • 特点:同一个词在不同语境下会生成不同的向量。

    • 训练机制:通过大规模预训练(如 BERT 的掩码语言模型 MLM 和下一句预测 NSP)来捕获深层语义。

  • RAG对嵌入技术的新要求

    • 领域自适应能力:通用的嵌入模型在某些专业领域上表现可能不太好,这就要求嵌入模型具有自适应能力。

    • 多模态和细粒度:RAG系统不只是处理文字,还可能包括长文档,富文本,图片等类型的数据。

    • 检索规则与效率:嵌入向量的维度和模型大小直接影响存储成本和检索速度,这就需要嵌入模型能够结合语义相似性和关键词匹配的优点,支持混合检索,例如BGE-M3

3.RAG场景下如何选择Embedding模型

在构建RAG系统时,选择嵌入模型需要综合考虑以下7个点:

  • 最大tokens数:嵌入模型支持的最大tokens数直接决定了前面文本分块的大小,不能超过最大tokens数。

  • 支持语言:确保模型支持业务需要的语言,中文RAG建议选择中英双语或多语言模型(BGE,BCE)。

  • 模型大小:参数量通常越多越好,但是会增加推理延迟和显存占用。

  • 向量维度;高维度下编码信息丰富,但是会增加向量数据库的存储压力和检索时的计算量。

  • 任务:重点关注模型在检索任务下的表现,而非单纯的聚类或分类得分。

  • 得分与机构 (Score & Publisher) :参考 MTEB / C-MTEB 榜单排名,优先选择知名机构(如智源 BGE、OpenAI、网易 BCE 等)发布的模型。

  • 成本 (Cost)

    • API 服务:按量计费,运维零压力。
    • 私有化部署:需考虑显卡硬件成本和运维人力。

4.核心评估表单

  • MTEB (Massive Text Embedding Benchmark) 是目前衡量 Embedding 模型最权威的标准。

  • 对于中文应用,应重点参考 C-MTEB 分支,查看模型在“检索(Retrieval)”子项上的具体排名。

二.多模态嵌入

1.为什么需要多模态?

  • 打破“模态墙”:现实世界的信息包含文字,图像,音频,视频等多种形式,传统的文本Embedding模型只能处理文字,无法理解其他类型的内容。

  • 核心目标:将上述不同类型的数据映射到统一的向量空间中。

  • 跨模态对齐:在统一向量空间中,语义相近的“文字向量”和“图片向量”会非常接近,从而实现“以文搜图”或“以图搜文”的功能。

2.CLIP模型:多模态嵌入的里程碑

由OpenAI发布,为该领域奠定了基础。

  • 双编码架构:包含一个图像编码器和文字编码器,分别处理输入内容。

  • 对比学习:为了能让两个编码器对齐不同模态的语义,CLIP在训练时采用拉近正确的图文对(正例),推远错误的配对(负例),通过海量的训练数据,模型能够自动学会将语义相近的图文在向量空间中拉近。这种大规模的对比学习,赋予了CLIP有效的零样本识别能力。

3.现代多模态模型:bge-visualized-m3

由北京智源研究院研发,其核心特性可总结为“M3”。

  • 多语言 (Multi-Linguality) :支持 100 多种语言,可实现跨语言的图文检索。

  • 多功能 (Multi-Functionality) :同时支持稠密检索、多向量检索和稀疏检索。

  • 多粒度 (Multi-Granularity) :能处理从短句到长达 8192 token 的文档。

三.向量数据库

在RAG流程中,向量数据库是存储“知识记忆”的核心仓库,它负责高效管理由Embedding模型生成的向量,并实现在海量数据中的快速检索。

1.向量数据库的主要功能

  • 高效存储:专门用于存储由非结构化数据(文本,图像等)经Embedding模型转化的高维向量。

  • 相似度检索:不同于传统数据库的关键词匹配,向量数据库支持语义匹配,即通过计算向量之间的距离(如余弦值)来查找含义最相近的内容。

  • 低延迟搜索:这是向量数据最重要的功能。通过索引算法(HNSW,IVF),在百万数据中实现毫秒级的检索响应。

2.向量数据库 VS 传统数据库

对于高维且数据量庞大的生成向量集合,传统数据库在进行相似度计算时,计算成本和时间延迟是无法接受的,向量数据库就是为了解决这一痛点。

传统数据库向量数据库
存储对象结构化数据高维向量
查询方式关键字精确匹配相似度搜索
索引机制b树,哈希IVF,HNSW
使用场景业务系统,金融大模型应用,RAG
一致性强一致性最终一致性

向量数据库和传统数据库是互补的关系,构建AI应用时,通常使用传统数据库存储业务元结构结构化信息,使用向量数据库来存储和检索Embedding模型生成的海量高维向量数据

3.向量数据库选择

  • 新手入门/小型项目:从 ChromaDB 或 FAISS 开始是最佳选择。它们与 LangChain/LlamaIndex 紧密集成,几行代码就能运行,且能满足基本的存储和检索需求。
  • 生产环境/大规模应用:当数据量超过百万级,或需要高并发、实时更新、复杂元数据过滤时,应考虑更专业的解决方案,如 MilvusWeaviate 或云服务 Pinecone

四.索引优化

在 RAG 系统中,简单的向量索引在面对复杂查询或长文档时,往往会出现“检索不准”或“上下文丢失”的问题。索引优化就是通过改进数据的组织结构,让检索变得更聪明、更高效。

1.上下文扩展

在RAG系统中,使用小块文本进行检索可以获得精准度更高的答案,但是内容可能不太丰富;使用大块文本则可以获得上下文更丰富的答案,但是大块意味着有更多的噪声,又降低了精准度。为了解决这个矛盾,LlamaIndex提出了句子窗口索引

句子窗口索引的思想可以总结为:为检索精准性而使用小块,为上下文丰富而检索大块,具体流程如下:

  • 索引阶段:构建索引时,文本被分成单独的句子,每个句子作为单独的节点存储在向量数据库,同时,每个句子的内容和其上下文窗口大小的内容(前N个句子和后N个句子)存储在元数据中。

  • 检索阶段:用户发起查询时,系统在单一句子节点上进行相似度搜索。

  • 后处理阶段:检索到目标后,返回一个该节点元数据中的完整上下文窗口内容,并替换该目标节点的单一句子内容。

  • 生成阶段:将丰富过后的节点传递给LLM,用于生成最终答案。

2.结构化索引

随着知识库的不断扩展,top-k相似度检索可能会变得很慢。为了解决这个问题,一个有效的方法是结构化索引,在构造索引文本块时,为其附加如文件名创建日期标题作者等结构化的元数据,可以有助于定位和筛选信息。这种先过滤,再搜索的策略,能够很大提高RAG在面对大规模知识库时的检索效率和准确性。

参考文章 DataWhale All-in-RAG | 大模型应用开发实战一:RAG技术全栈指南

引用代码 github.com/datawhalech…