从零理解RAG与向量化:非结构化数据嵌入、检索及多模态搜索全解析
目录
1. 嵌入(Embedding) vs 向量化(Vectorization)
一、RAG技术概述
检索增强生成(Retrieval-Augmented Generation, RAG) 是一种为大语言模型(LLM)提供外部知识的技术范式。它通过将公司内部文档、知识库等非结构化数据向量化并存入数据库,在用户提问时检索最相关的信息片段,连同问题一起提交给LLM,从而:
-
减少幻觉:模型基于提供的真实资料回答,而非依赖自身记忆。
-
知识可更新:知识库独立更新,无需重新训练模型。
-
来源可追溯:答案可关联回原始文档。
核心流程分为两个阶段:
-
索引阶段(离线):文档加载 → 分块 → 向量化 → 存入向量数据库。
-
查询阶段(在线):用户问题 → 向量化 → 相似度检索 → 增强提示 → LLM生成答案。
二、文本向量化:从文字到高维向量
1. 什么是向量、维度、固定维度?
-
向量:一组有序的数字列表,例如
[0.5, -1.2, 3.8],代表文本在语义空间中的坐标。 -
维度:向量中数字的个数,如2维对应平面坐标,384维则是高维空间。维度越高,表达能力越强。
-
固定维度:同一个嵌入模型对所有输入文本(无论长短)输出的向量长度都相同。例如,
all-MiniLM-L6-v2总是输出384维向量,与输入是“你好”还是长篇小说无关。
关键点:向量维度是模型的固有属性,与文本长度无关。一个5个字的句子不会变成5维向量,而是变成384维或768维等固定高维向量。
2. 文本分块(Chunking)
由于嵌入模型有输入长度限制(上下文窗口,如512、8192个Token),长文档需要先切分成小块。
-
分块依据:
-
固定长度切分(简单但可能切断句子)
-
递归分隔符切分(优先按段落、句子、标点)
-
语义分块(使用NLP模型识别边界)
-
-
重叠(Overlap):相邻块之间保留部分重叠(如128个Token),避免边界处的语义丢失。
短文本(如50字)不超过模型限制,则不需要分块,直接向量化。
3. 嵌入过程(Embedding)
嵌入模型(如BERT、BGE、text-embedding-ada-002)是一个经过训练的神经网络,其工作流程:
-
分词:将文本切分成Token(子词单元)。
-
查表:每个Token映射为初始向量(从嵌入矩阵中取出)。
-
上下文编码:通过Transformer层,融合句子中所有Token的上下文信息。
-
池化:将所有Token的向量聚合成一个固定长度的句向量(常用平均池化)。
示例:
输入 "你好" → 分词 → 查表得到初始向量 → 上下文编码 → 池化 → 输出 [0.123, -0.456, ..., 0.789](共384个数字)。
三、向量数据库:存储与检索
1. 索引阶段(入库)
-
将每个文本块通过嵌入模型转化为向量。
-
构建近似最近邻(ANN)索引(如HNSW、IVF),以加速后续检索。
-
存储向量、原始文本块及元数据(来源、时间等)。
2. 查询阶段(检索)
-
用户问题通过同一个嵌入模型转化为查询向量。
-
使用ANN算法快速找到最相似的K个向量。
-
返回对应的原始文本块及相似度得分。
3. 相似度计算方法
| 方法 | 公式 | 特点 | 适用场景 |
|---|---|---|---|
| 余弦相似度 | cos(θ) = (A·B)/(||A||·||B||) |
只关心方向,不关心长度 | 文本语义相似度 |
| 欧几里得距离 | √Σ(A_i - B_i)² |
关心绝对位置 | 数值特征匹配 |
| 点积 | A·B |
受方向和长度影响 | 推荐系统 |
4. 近似最近邻(ANN)算法
-
IVF:聚类分组,先找最近簇,再暴力搜索簇内向量。
-
HNSW:多层图结构,类似“高速路”导航,精度高、速度快,但内存占用大。
-
PQ:向量压缩,内存占用极小,精度略有下降。
-
LSH:哈希映射到桶内,速度快。
精确KNN vs ANN:ANN以微小精度损失(召回率从100%降至97%)换取百万倍速度提升,是工业界标配。
5. 检索后处理
-
混合检索:结合向量语义搜索 + 关键词搜索(BM25),使用RRF融合结果。
-
重排序:用Cross-Encoder模型对候选结果精细打分,提升首位准确率。
-
MMR:保证结果多样性的同时维持相关性。
四、非结构化数据的向量化(图片、音频、视频)
1. 图片向量化
-
预处理:统一缩放、裁剪(如224×224)、归一化像素值。
-
模型:CNN(ResNet)或CLIP等视觉模型。
-
输出:固定维度向量(如512、1024维)。
-
元数据:拍摄时间、尺寸等单独存储用于过滤,不参与向量化。
-
分块:单张图片通常不需要分块;但PDF等图文混合内容需要提取图文后分块。
2. 音频向量化
-
预处理:转为单声道、16kHz采样率。
-
特征提取:转为梅尔频谱图(Mel-spectrogram)或提取MFCC特征。
-
模型:CNN、Transformer或专用音频模型(CLAP、CLMR)。
-
输出:固定维度向量(768~3072维)。
-
分块:需要,因为模型对音频时长有限制,长音频按时间片段切分。
3. 视频向量化
视频同时包含视觉流、听觉流和文本流(字幕),处理策略有两种:
-
多管道并行:分别对视频帧(抽帧)用图像模型向量化,对音频用音频模型向量化,最后融合向量。
-
端到端多模态模型:使用VideoCLIP、Marengo等模型直接输入视频帧+音频,输出统一向量。
分块:绝对需要。长视频按时间或场景切分成视频片段(如10秒一段),每个片段再分别向量化。
五、多模态嵌入与视频搜索流程
多模态嵌入是指将不同模态(图、文、音、视频)映射到同一个向量空间,使得“猫的图片”与“猫的文字”距离很近,支持跨模态检索(以文搜图、以图搜视频)。
视频搜索(Video-to-Video)完整流程
索引阶段:
-
原始视频库 → 按固定时长(如10秒)分块,相邻块有重叠。
-
对每个视频块:
-
抽取关键帧(如每秒1帧)
-
提取音轨并转为频谱图
-
通过ASR将语音转文本
-
通过OCR识别画面中的文字
-
-
将这些多模态数据输入多模态嵌入模型(如Marengo、CLIP变体),输出一个固定维度的向量。
-
向量 + 元数据(时间戳、视频ID等)存入向量数据库。
查询阶段:
-
用户上传查询视频 → 执行完全相同的分块、特征提取和嵌入。
-
得到查询向量后,在数据库中进行ANN相似度搜索。
-
返回最相似的Top-K视频片段,并可定位到原始视频中的具体位置。
六、关键概念澄清
1. 嵌入(Embedding) vs 向量化(Vectorization)
-
向量化:泛指将任何数据转换成数值向量的过程。
-
嵌入:特指通过学习得到的低维、稠密、语义丰富的向量表示。嵌入是向量化的一种特殊形式,日常可互换使用,但学术语境中“嵌入”强调语义结构。
2. 结构化数据 vs 非结构化数据
| 结构化数据 | 非结构化数据 | |
|---|---|---|
| 格式 | 固定行列,强模式 | 自由格式,无固定模式 |
| 例子 | Excel表格、SQL表 | PDF、图片、音频、视频 |
| 处理 | 直接用SQL | 需要NLP/CV/ASR等提取特征 |
3. 为什么长文本不会变成高维向量?
错:文本长度与向量维度无关。无论输入1个字还是1万字,同一个嵌入模型输出维度固定(如384维)。1万字会被先分块成多个小块,每块分别生成384维向量,最后通过均值池化等方法聚合成一个384维向量代表整个文档。
七、总结
今天的学习覆盖了从RAG基础到多模态向量化的完整知识体系:
-
RAG 通过外部知识检索增强LLM,是减少幻觉的有效手段。
-
向量化 的核心是嵌入模型,它将文本/图片/音频/视频映射到固定维度的语义空间。
-
向量数据库 利用ANN索引实现毫秒级相似度检索,并支持混合搜索、重排序等优化。
-
多模态嵌入 打通了不同数据类型的语义隔阂,使得以视频搜视频、以文搜图成为可能。
这些技术共同构成了现代AI应用(如智能问答、推荐系统、多模态搜索)的基石。
八、网站速查
🧠 核心技术框架
-
LangChain 框架:
-
📘 官方文档: docs.langchain.com - 最权威的入门指南、概念解析与教程。
-
🔧 API 参考: reference.langchain.com - 详细的类、方法和函数参考手册。
-
✍️ 官方博客: blog.langchain.com - 获取最新特性、使用案例和行业动态。
-
📦 GitHub 仓库: github.com/langchain-ai/langchain - 开源代码、示例和社区贡献。
-
🗄️ 向量数据库
-
Chroma: trychroma.com - 轻量级、内存式,适合快速原型验证。
-
FAISS: github.com/facebookresearch/faiss - Meta 开源的高效向量检索引擎,适合本地高性能部署。
-
Milvus: milvus.io - 开源、分布式、云原生,支持大规模高并发场景。
-
Pinecone: pinecone.io - 全托管的云服务,简化运维,适合快速上线。
-
Qdrant: qdrant.tech - 高性能、开源的向量数据库,提供丰富的过滤选项。
🤖 嵌入模型
-
OpenAI: platform.openai.com/docs/guides/embeddings -
text-embedding-3-*系列,提供强大的商业模型。 -
Sentence-Transformers: sbert.net - 开源 Python 库,提供大量优质多语言模型。
-
BGE (BAAI): huggingface.co/BAAI/bge-large-zh - 中文语义向量表现优异的开源模型。
-
Jina AI: jina.ai/embeddings - 支持高达 8192 token 上下文窗口的长文本嵌入模型。
🌉 多模态模型
-
CLIP (OpenAI): github.com/openai/CLIP - 实现图文对齐的经典模型,支持以文搜图等。
-
Marengo (Twelve Labs): twelvelabs.io - 先进的视频理解模型,支持文搜视频、视频搜视频等任意模态检索。
🌐 中文学习社区与教程
-
阿里云开发者社区: developer.aliyun.com - 大量高质量的中文技术实践文章。
-
百度开发者社区: developer.baidu.com - 提供丰富的 RAG、LangChain 等实战教程。
-
博客园 (Cnblogs.com): cnblogs.com - 开发者个人博客,常有深入的技术笔记和案例分享。
-
GitCode (CSDN): blog.gitcode.com - CSDN 旗下的技术社区,提供系统化的技术指南。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)