AI 基础入门 · 第13课
Embedding:把文字变成向量——让机器能算"意思像不像"
人和人交流靠"意思",机器只懂数字。怎么让机器知道"iPhone"和"苹果手机"意思相近、和"西红柿"意思差很远?答案就是 Embedding(嵌入向量)——把每段文字变成一串数字,意思越近数字越近。这一课讲透:文本怎么变向量、余弦相似度怎么算"像不像"、向量数据库(FAISS/Milvus/pgvector)是干嘛的、以及它和 RAG 检索的关系。
① 小白第一课怎么学(4 步走,约 50 分钟)
Embedding 是 RAG(检索增强生成)的地基,搞懂它你就明白为什么 RAG 能"搜到相关资料"。
1建立直觉(10 分钟)
读②③:文字→向量→比距离,意思近的向量就近。
2搞懂余弦相似度(15 分钟)
读④:两个向量夹角越小越相似。
3认识向量数据库(15 分钟)
读⑤:FAISS/Milvus/pgvector 都是存向量、找近邻的。
4刷题自测(10 分钟)
做⑦⑩,错题回⑥看易错点。
本课小目标学完你要能:① 说清 Embedding 在做什么(文本→向量);② 用余弦相似度判断两段话像不像;③ 列举 FAISS/Milvus/pgvector 是干嘛的;④ 说清 Embedding 在 RAG 里站哪一环。
② 一图看懂:文字是怎么变成"意思坐标"的
读法:每段文字过一遍嵌入模型,变成一串数字(向量)。意思相近的文字,向量在高维空间里靠得近;意思差得远的,离得远。向量数据库就是把这些点存起来,问"哪些点离我最近"。
③ 本质直觉:Embedding 就是"意思坐标"
一句话定义:Embedding(嵌入)是把任意一段文字(或图片/音频)映射成一串固定长度的浮点数(比如 1024 维向量),让"意思"变成可以算距离的几何坐标。
类比:地图坐标。北京和天津在地图上离得近,和广州离得远。Embedding 就是给每段文字发一个"意思坐标"——"iPhone"和"苹果手机"在意思地图上紧挨着,和"西红柿"隔得十万八千里。
为什么不用关键词匹配?因为关键词匹配是"字面上像不像",不是"意思像不像"。用户搜"怎么把手机亮度调暗",你的文档写的是"屏幕背光调节"——字面没一个词一样,但意思完全对得上。Embedding 就是来解决这个问题的。
关键性质:意思相近 → 向量距离近;意思相反 → 距离远。而且这种"意思"是模型从海量文本里自学出来的,不需要人标注。
和分词器的区别:第11课的 tokenizer 把文字变成离散编号(查字典);Embedding 把文字变成连续向量(算意思)。前者是给模型读,后者是给检索算相似度。
一句话总结Embedding 把"意思"变成几何坐标,向量数据库负责在几百万个坐标里快速找到离你最近的那几个——这就是语义检索。
④ 完整体系:余弦相似度、向量维度、主流嵌入模型
怎么算"像不像":余弦相似度
| 相似度范围 | 含义 | 例子 |
| ≈ 1.0 | 意思几乎一样 | "手机" vs "智能手机" |
| 0.5 ~ 0.8 | 相关但不完全等同 | "手机" vs "充电器" |
| ≈ 0 | 不相关 | "手机" vs "西红柿" |
| < 0 | 方向相反(少见) | "喜欢" vs "讨厌" |
余弦相似度公式cos(θ) = (A·B) / (|A| × |B|) —— 两个向量夹角的余弦,越接近 1 越像
主流嵌入模型速查
| 模型 | 出品方 | 向量维度 | 特点 |
| bge-m3 | 智源 BAAI | 1024 | 开源中文首选,多语言、长文本友好 |
| text-embedding-3-small | OpenAI | 1536 | 闭源 API,效果稳,按 token 计费 |
| text-embedding-3-large | OpenAI | 3072 | 更大更准,更贵 |
| m3e / bge-large-zh | 开源社区 | 768 / 1024 | 中文场景常用,可本地跑 |
| Cohere embed | Cohere | 1024 | 商用 API,多语言 |
向量数据库一句话
| 方案 | 一句话定位 |
| FAISS | Facebook 开源的向量检索库,适合本地/嵌入到应用,不是独立服务 |
| Milvus | 分布式向量数据库,亿级向量规模,生产级 |
| pgvector | PostgreSQL 插件,把向量存在关系库里,小团队最省事 |
向量维度不是越大越好维度大 → 表达能力强,但存储和检索成本线性上升。bge-m3 的 1024 维在中文场景已经够用,别盲目上 3072。
⑤ 用法场景与典型例题:Embedding 在 RAG 里站哪
场景 1:客服机器人"搜到相关文档"
用户问"怎么退款",系统要从几百篇帮助文档里找出最相关的几篇。
离线时把每篇文档切块、过 bge-m3 变成向量存进 pgvector;在线时把用户问题也变成向量,在库里找余弦相似度最高的 Top-5 片段,塞进提示词让大模型回答。这就是 RAG 的检索环节。
场景 2:"搜类似的商品"
电商里"买了这个的人还买了"。
把商品标题+描述变成向量,用户浏览某商品时,在商品向量库里找最近邻,就是"相似推荐"。
场景 3:为什么不能直接用大模型回答
大模型知识有截止日期,也不知道你公司的内部文档。
RAG 的思路是:先检索(Embedding 找相关片段),再把片段和问题一起喂给大模型,让它"看着资料回答"。Embedding 是检索这一步的核心。
RAG 全链路一句话文档切块 → Embedding 存向量库 → 用户问题 Embedding → 向量库找最近 Top-K → 拼进提示词 → 大模型生成答案。Embedding 贯穿"存"和"找"两头。
⑥ 高频错误诊断(4 条)
错误 1:把 Embedding 和分词器搞混分词器输出离散 token id(给模型读);Embedding 输出连续浮点数向量(给检索算距离)。两者用途完全不同。
错误 2:以为向量维度越高越准就盲目上 3072维度翻倍,存储和检索成本也翻倍。中文场景 bge-m3 的 1024 维已经很好,先在自己的数据上评测再决定。
错误 3:用同一个 Embedding 模型存文档和查问题时中途换模型这是对的——但千万别中途换模型!不同模型的向量空间不通用,换了模型所有已存向量都要重新算。
错误 4:以为余弦相似度 0.9 以上才算相关不同模型分数分布不同。0.7 可能已经很相关,0.9 以上可能是重复片段。要在自己数据上定阈值,别套通用数字。
⑦ 考点真题演练(4 题)
考点分布
| 考法 | 出题形式 | 应对 |
| Embedding 是什么 | 问文字变成什么 | 连续浮点数向量 |
| 余弦相似度 | 问越接近几越像 | 越接近 1 越像 |
| 向量数据库 | 问 pgvector 是什么 | Postgres 插件 |
| RAG 关系 | 问 Embedding 站哪环 | 检索环节 |
真题基础1. Embedding 把一段文本变成什么?
真题中档2. 两段文本的余弦相似度越接近多少,说明意思越相近?
真题中档3. 关于向量数据库,下面哪个说法正确?
真题拔高4. 在 RAG 流程中,Embedding 主要负责哪一步?
⑧ 必背知识点卡
Embedding:文本→连续浮点数向量,意思近则向量近 不是 token id
余弦相似度:越接近 1 越像,0 为不相关 夹角余弦
bge-m3:开源中文首选,1024 维 本地可跑
text-embedding-3:OpenAI 闭源 API,1536/3072 维 按 token 计费
FAISS:Facebook 开源向量检索库 嵌入式,不是服务
Milvus:分布式向量数据库,亿级规模 生产级
pgvector:Postgres 插件,小团队最省事 别中途换模型
⑨ 应用输出:3 行代码算两段话像不像
实战场景:验证"手机亮度"和"屏幕背光"到底相不相似。
①
用 sentence-transformers 加载 bge-m3:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("BAAI/bge-m3")
e1 = model.encode("怎么把手机亮度调暗")
e2 = model.encode("屏幕背光怎么调节")
from sklearn.metrics.pairwise import cosine_similarity
print(cosine_similarity([e1],[e2])) # 通常 0.7+,明显相关
② 对比一组不相关的:把 e2 换成"今天吃什么",相似度会掉到 0.2 以下。
③ 注意:存进向量库的文档向量和查询向量必须用同一个模型算,否则空间不对齐。
口述全链路"文档切块 → 过 bge-m3 变成 1024 维向量 → 存 pgvector;用户问题也变成向量 → 算余弦相似度找 Top-K 最近邻 → 把这些片段拼进提示词 → 大模型看着资料回答。"
⑩ 分层练习 16 题(基础 6 + 中档 5 + 拔高 5)
▍基础 6 题
基础1Embedding 的输出是什么类型?
一串固定长度的浮点数向量(如 1024 维),不是离散编号。
基础2余弦相似度越接近几,两段话越像?
越接近 1 越像;0 表示不相关;-1 表示方向相反。
基础3bge-m3 是哪个机构出的?
智源 BAAI,开源中文嵌入模型,1024 维。
基础4pgvector 是什么?
PostgreSQL 的向量检索插件,把向量存在关系库里,小团队最省事。
基础5FAISS 是什么?
Facebook 开源的向量检索库,嵌入式使用,不是独立服务。
基础6Embedding 和分词器的输出有什么不同?
分词器输出离散 token id(给模型读);Embedding 输出连续浮点数向量(给检索算距离)。
▍中档 5 题
中档7为什么说 Embedding 解决的是"语义匹配"而不是"关键词匹配"?
关键词匹配看字面有没有重合的词;Embedding 看意思是否相近。"手机亮度"和"屏幕背光"字面不重合但意思相关,Embedding 能把它们聚到一起。
中档8向量维度大好还是小好?
维度大表达力强但存储/检索成本高。中文场景 bge-m3 的 1024 维够用,要在自己数据上评测,别盲目上 3072。
中档9为什么中途不能换 Embedding 模型?
不同模型的向量空间不通用,换了模型所有已存向量都要重新计算,否则查询和文档不在一个空间里,相似度全错。
中档10Milvus 和 FAISS 的定位差别?
FAISS 是嵌入到应用里的检索库;Milvus 是独立部署的分布式向量数据库,支持亿级向量和高可用。
中档11RAG 里 Embedding 在哪两步用到?
① 离线建库:把文档切块后 Embedding 存进向量库;② 在线查询:把用户问题 Embedding 后去库里找最近邻。
▍拔高 5 题
拔高12余弦相似度为什么只看方向不看长度?
公式里除以了两个向量的模长 |A|×|B|,所以只看夹角(方向)。长句子和短句子只要意思一样,方向接近,相似度就高。
拔高13Embedding 向量为什么能"自学"出意思?
嵌入模型在海量语料上训练,把"经常出现在相似上下文里"的词/句子映射到相近方向,意思关系是从共现模式里学出来的,不是人工标注的。
拔高14为什么 RAG 检索回来的片段有时不相关?
粗排靠 Embedding,它只保证"大致相关",可能把字面沾边但答非所问的片段带回来。这就是下一课要讲的 Rerank(重排)存在的意义。
拔高15text-embedding-3-large 比 small 贵在哪?
维度从 1536 升到 3072,表达更细、检索更准,但存储和计费都翻倍。大多数业务 small 加 Rerank 就够。
拔高16除了文本,Embedding 还能用于什么?
图片、音频、视频片段都能 Embedding。跨模态检索(以图搜文、以文搜图)就是把不同模态映射到同一个向量空间再算距离。
⑪ 记忆口诀 + 7 天复习计划
三句口诀
① 文字变向量,意思近则向量近。
② 余弦相似度越近 1 越像,0 不相关。
③ FAISS 嵌入式、Milvus 分布式、pgvector 是 Postgres 插件;RAG 检索全靠它。
| 天 | 任务 | 自检 |
| 第 1 天 | 读②③,画"文本→向量→找近邻"图 | 说清 Embedding 作用 |
| 第 2 天 | 背知识点卡 + 基础 1-6 | 基础全对 |
| 第 3 天 | 读④相似度和模型表,做中档 7-11 | 区分三个向量库 |
| 第 4 天 | 做拔高 12-16 | 理解为什么不能换模型 |
| 第 5 天 | 做⑦真题 4 题 + 跑一遍 cosine 例子 | 数字对得上 |
| 第 6-7 天 | 合上书口述三句口诀 | 不看资料全说对 |
📌 知识链路
前置知识(先学)
·
第1课 · AI 是什么:先建立大模型和"语义"的全局观,再看 Embedding 怎么把意思变成数字。
本节位置
本页站在 RAG 流水线的"检索"环节——把文档和问题都变成向量,才能在海量资料里快速找到意思相关的片段。它是大模型之外的另一条技术线。