← 算法与AI总览 首页 / 算法与AI / AI 基础入门 / 第13课 · Embedding
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) bge-m3 / text-embedding-3 输出一串数字(向量) 向量(1024 维) [0.12, -0.34, 0.78, ...] 每维是一个"意思坐标" 存进向量库 FAISS / Milvus / pgvector 向量空间:意思近的点靠在一起 "iPhone 15" "苹果手机" "智能手机" "西红柿" "马铃薯" ← 左边一坨都是"手机",右边一坨都是"蔬菜",中间隔着很远 →
读法:每段文字过一遍嵌入模型,变成一串数字(向量)。意思相近的文字,向量在高维空间里靠得近;意思差得远的,离得远。向量数据库就是把这些点存起来,问"哪些点离我最近"。

③ 本质直觉:Embedding 就是"意思坐标"

一句话定义:Embedding(嵌入)是把任意一段文字(或图片/音频)映射成一串固定长度的浮点数(比如 1024 维向量),让"意思"变成可以算距离的几何坐标。

类比:地图坐标。北京和天津在地图上离得近,和广州离得远。Embedding 就是给每段文字发一个"意思坐标"——"iPhone"和"苹果手机"在意思地图上紧挨着,和"西红柿"隔得十万八千里。

为什么不用关键词匹配?因为关键词匹配是"字面上像不像",不是"意思像不像"。用户搜"怎么把手机亮度调暗",你的文档写的是"屏幕背光调节"——字面没一个词一样,但意思完全对得上。Embedding 就是来解决这个问题的。

关键性质:意思相近 → 向量距离近;意思相反 → 距离远。而且这种"意思"是模型从海量文本里自学出来的,不需要人标注。

和分词器的区别:第11课的 tokenizer 把文字变成离散编号(查字典);Embedding 把文字变成连续向量(算意思)。前者是给模型读,后者是给检索算相似度。

关键词匹配:字面上像不像 "手机" vs "屏幕背光" → 0 个词重合 Embedding:意思上像不像 两段话意思近 → 向量距离近 向量数据库:找最近邻 给我离这个点最近的 Top-K 这就是 RAG 检索的底层
一句话总结Embedding 把"意思"变成几何坐标,向量数据库负责在几百万个坐标里快速找到离你最近的那几个——这就是语义检索。

④ 完整体系:余弦相似度、向量维度、主流嵌入模型

怎么算"像不像":余弦相似度

相似度范围含义例子
≈ 1.0意思几乎一样"手机" vs "智能手机"
0.5 ~ 0.8相关但不完全等同"手机" vs "充电器"
≈ 0不相关"手机" vs "西红柿"
< 0方向相反(少见)"喜欢" vs "讨厌"
余弦相似度公式cos(θ) = (A·B) / (|A| × |B|) —— 两个向量夹角的余弦,越接近 1 越像

主流嵌入模型速查

模型出品方向量维度特点
bge-m3智源 BAAI1024开源中文首选,多语言、长文本友好
text-embedding-3-smallOpenAI1536闭源 API,效果稳,按 token 计费
text-embedding-3-largeOpenAI3072更大更准,更贵
m3e / bge-large-zh开源社区768 / 1024中文场景常用,可本地跑
Cohere embedCohere1024商用 API,多语言

向量数据库一句话

方案一句话定位
FAISSFacebook 开源的向量检索库,适合本地/嵌入到应用,不是独立服务
Milvus分布式向量数据库,亿级向量规模,生产级
pgvectorPostgreSQL 插件,把向量存在关系库里,小团队最省事
向量维度不是越大越好维度大 → 表达能力强,但存储和检索成本线性上升。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 流水线的"检索"环节——把文档和问题都变成向量,才能在海量资料里快速找到意思相关的片段。它是大模型之外的另一条技术线。
下一步(学完去) · 第14课 · 重排 Rerank:Embedding 粗排回来的候选还要精排一遍,下一课讲为什么。
· RAG 系统详解:把 Embedding、向量库、Rerank 串成完整的检索增强生成流水线。
← 第12课 · 采样参数 算法与AI总览