RAG-01-之向量化基本概念

为什么文本需要向量化

在大语言模型(LLM)的检索增强生成(RAG)系统中,向量化(Embedding) 是核心技术之一,它通过将文本转换为多维向量空间中的数值表示,解决了语义理解和高效检索的关键问题。

关键词匹配无法满足精准搜索的需求,使用语义检索

  1. 语义检索 vs 关键词匹配
    传统检索(如 BM25)依赖关键词匹配,无法理解语义(如 "AI" 和 "Artificial Intelligence" 可能被视为不同)。
    向量检索:通过计算相似度,直接找到语义相关的内容(即使表述不同)。
    示例场景:
    用户问题:"如何训练神经网络?"
    知识库文档:"神经网络训练的最佳实践"
    → 向量检索可准确匹配,关键词检索可能失败。
  2. 上下文感知的知识召回
    RAG 需要从知识库中检索与用户问题最相关的文档片段,向量化能捕捉长文本的上下文信息。
    示例:
    问题:"Python 的 GIL 是什么?"
    向量检索可定位到:"全局解释器锁(Global Interpreter Lock, GIL)是 Python 解释器的一个特性..."

工程优化:高效检索与存储

  1. 向量数据库的高效检索
    传统数据库:在百万级文档中搜索文本效率极低。
    向量数据库(如 Faiss、Chroma、Pinecone):利用 ANN(近似最近邻)算法,将检索时间从 O (n) 降至 O (log n)。

为什么要切片?切片有什么要求?

我们知道RAG的流程, 文档解析,切片,embeding ,embeding结果入向量库。那么为什么要切片

在做RAG(检索增强生成)时,切片的大小和切片片段具有独立语义含义是很重要的,但说向量检索解锁不全这种说法不太准确。

如果切片过大,包含的信息过多,可能会导致语义不够聚焦,在检索时难以精准匹配到与问题相关的内容,影响检索的准确性和召回率。而如果切片过小,可能会丢失一些关键的上下文信息,同样不利于准确理解语义和进行有效的检索。
** 切片需要具有较好的语义独立性和完整性**。当切片具有非常独立的语义含义时,能够更准确地将其向量表示与查询向量进行匹配,提高检索的效果,使得模型能够更好地利用检索到的信息来生成回答。

文本经过BGE-M3 embeding后是什么?张量(float)*向量的维度

是的,在大多数情况下,BGE-M3 模型输出的嵌入向量中的每个元素都是 32 位浮点数(float32),即每个元素占 4 字节。不过,最终占用的总字节数取决于嵌入向量的维度,而不是输入字符串的长度。具体分析:单个元素的大小
主流模型(包括 BGE-M3)的嵌入通常使用 float32 格式存储,因此每个元素固定占 4 字节。
向量维度与总大小:嵌入向量的 维度(例如 768、1024 等)决定了总字节数。BGE-M3 的基础版本通常输出 1024 维 的向量,因此总大小为:(1024 \text{(维度)} \times 4 \text{(字节/元素)} = 4096 \text{ 字节(约 4KB)})输入长度的影响

无论输入字符串是 10 个字符还是 500 个字符,模型输出的向量维度通常是固定的(除非使用特殊的池化策略)。因此,字符串长度不直接影响嵌入的总字节数。

相似度匹配的对象是向量而非原始文本?

在向量召回时,正确的做法是将用户输入的 10 个字符进行向量化,然后与 1000 个字符串各自向量化后的结果进行相似度匹配。具体说明如下:
一、核心原理:语义单元的向量化

向量化的基本单位是完整文本

无论文本长度如何(10 个字符或 1000 个字符),向量化模型都会将其作为一个整体,映射到固定维度的向量空间中。例如:
用户输入:"如何安装 Python?"(10 个字符)→ 向量化为一个 1024 维向量
知识库文档 1:"Python 安装教程:首先下载安装包..."(1000 个字符)→ 向量化为另一个 1024 维向量
知识库文档 2:"TensorFlow 快速入门..."(500 个字符)→ 向量化为第三个 1024 维向量

相似度匹配的对象是向量而非原始文本

召回系统会计算用户问题向量与所有知识库文档向量的相似度(如余弦相似度),选择最相似的向量对应的文档。

召回的准确率受哪些影响?

切片的算法

比如一个完整的语义的段落经过不合理的切片会变成多个trunk,当召回的内容就不是完整的。所以切片需要具有较好的语义独立性和完整性。

Embedding算法

参考资料

posted @ 2025-05-17 17:11  向着朝阳  阅读(283)  评论(0)    收藏  举报