← 返回所有文章

RAG、Embedding 与向量学习问答

文章目录1. normalize_embeddings=True 是什么意思?2. 多维数组怎么归一化?AI 向量不是多维的吗?3. Embedding 模型的目的是什么?4. Embedding 模型怎么知道两句话意义相似?5. 同一句话多次经过向量模型,坐标一致吗?6. 向量模型怎么训练?内部原理是什么?7. “公司于 2002 年成立”和“公司老板什么时间创立的”,向量接近吗?8. AI 足够强、上下文很大时,还需要 RAG 吗?9. 上下文足够大时,还需要切片吗?

范围:第 7 课之后关于向量归一化、Embedding 模型、RAG 与长上下文的提问和答案。

1. normalize_embeddings=True 是什么意思?

向量像一支箭:方向表示语义倾向,长度表示数字整体大小。RAG 检索通常更关心“方向是否接近”,而不是谁的数字更大。

normalize_embeddings=True 会把每个向量缩放为长度 1,使检索主要比较语义方向。

[3, 4] 的长度 = √(3² + 4²) = 5
归一化后 = [3 / 5, 4 / 5] = [0.6, 0.8]

方向不变,长度从 5 变为 1。可以把它理解为:把每段文本的向量统一缩放到一样长,让检索更关注文本意思。

2. 多维数组怎么归一化?AI 向量不是多维的吗?

AI 的 Embedding 向量通常有几百到几千维。规则和二维、三维完全一样:

二维:[x, y],长度 = √(x² + y²)
三维:[x, y, z],长度 = √(x² + y² + z²)
N 维:[v1, v2, ..., vN],长度 = √(v1² + v2² + ... + vN²)

每个数字都除以这个总长度。

import math

v = [3, 4, 0, 12]
length = math.sqrt(sum(x ** 2 for x in v))  # 13
normalized_v = [x / length for x in v]
# [0.231, 0.308, 0.000, 0.923]

3. Embedding 模型的目的是什么?

把人类语言转换成计算机可以比较“意思”的数字向量。

普通聊天模型:输入问题 → 生成自然语言回答
Embedding 模型:输入一段文本 → 输出一长串数字
组件 类比 工作
Embedding 模型 图书馆索引员 判断资料和问题是否相关
向量数据库 图书馆书架与检索系统 保存并找出相关资料
DeepSeek 老师 阅读找到的资料后组织回答
PDF 文本块 → Embedding → 向量数据库
用户问题 → Embedding → 找相近文本块 → DeepSeek 回答

4. Embedding 模型怎么知道两句话意义相似?

它不是天生知道,而是在大量文本关系中训练出来的:

意思相近的句子 → 向量靠近
意思不同的句子 → 向量远离

例如训练样本:

问题:Python 怎么安装?
相近句:如何配置 Python 环境?
不相近句:今天上海天气怎样?

数据可能来自问题与答案、搜索词与点击网页、标题与正文、翻译句对、同义改写、同主题段落和人工相似度标记。它会看上下文,而不只是匹配同义词。

5. 同一句话多次经过向量模型,坐标一致吗?

通常一致。只要模型、模型版本、输入文字、预处理方式和参数都相同,Embedding 通常是确定性计算。

最重要规则:建库时转换文档的模型配置,必须和查询时转换问题的模型配置完全一致。否则像文档在“北京地图”上、问题在“上海地图”上,坐标无法正确比较。

6. 向量模型怎么训练?内部原理是什么?

Embedding 模型通常也是 Transformer,但最后输出句子坐标而非自然语言:

一句话 → Token → Transformer 结合上下文理解 → 汇总成固定长度向量 → 可选归一化

它通过“拉近正确资料,推远错误资料”训练:

相似度(问题, 相关文本) 尽量大
相似度(问题, 不相关文本) 尽量小
模型 最擅长的事
聊天模型,如 DeepSeek 根据上下文生成答案
Embedding 模型 判断两段文字语义是否接近
Reranker 模型 对少量候选资料精细排序

7. “公司于 2002 年成立”和“公司老板什么时间创立的”,向量接近吗?

通常会接近,因为都涉及公司、成立/创立和时间。Embedding 很可能把“公司于 2002 年成立”检索出来。

但问题有歧义。Embedding 只能判断资料可能相关,不能严格保证资料足以回答:

Embedding:这段资料和问题可能相关吗?
DeepSeek:资料真的足够回答吗?

“检索相关”不等于“资料足以回答”。

8. AI 足够强、上下文很大时,还需要 RAG 吗?

先区分:

模型参数几个 T ≠ 一次能输入几个 T Token

资料量小、稳定且能完整放入上下文时,可以直接用“完整材料 + 问题”问模型,不一定需要 RAG。

但 RAG 仍能降低成本与延迟,改善超长资料的注意力问题,提供最新数据、权限过滤和引用来源,也便于新增资料。

小资料、短任务 → 直接长上下文
大规模资料、持续更新、需要权限与引用 → RAG
常见生产方案 → 长上下文 + RAG

9. 上下文足够大时,还需要切片吗?

可以不切片:

完整材料 + 用户问题 → 大模型直接回答

但能放入上下文,不代表每次都值得重读整份资料。大材料每次完整输入会增加成本和延迟,也可能让模型忽略中间的关键信息(Lost in the Middle),并且不利于权限过滤和持续更新。

情况 是否切片 / RAG
一两页文字、一次性分析 不切片,直接给模型
20–100 页、问题不多、可接受成本 可先尝试直接给模型
几百页或很多文件 建议切片 + RAG
经常被问,每次只涉及一小部分 建议 RAG
内容频繁更新、多人权限不同 建议 RAG
必须提供出处 建议 RAG

能整本读,不代表每个问题都值得让模型重读整本。

— 写到这里,继续成长 —看看其他文字 →