Embedding Model(嵌入模型)完整讲解:句子转向量全过程
Embedding Model(嵌入模型)完整讲解:句子转向量全过程
一、核心作用
Embedding 模型的唯一任务:把人类可读的文本(句子、段落、词语)映射成一段固定长度的浮点数字数组,也就是向量(vector)。
- 语义相近的句子 → 向量在高维空间距离很近
- 语义完全无关的句子 → 向量距离很远 这是向量数据库、RAG 检索的底层基础。
二、完整转化流程(一句话拆解)
输入句子:MacBook本地运行Chroma向量库
- 分词(Tokenize)模型把句子拆成最小单元(token),如单词 / 子词:
MacBook/本地/运行/Chroma/向量库 - Token 编码每个 token 查表转为唯一数字 ID;
- 多层 Transformer 编码计算模型根据上下文理解整句语义,融合每个词的语境信息;
- 输出句向量(Pooling 池化)把整段文本所有 token 的隐藏层输出聚合,压缩成单一固定维度向量例:all-MiniLM 输出 384 维、text-embedding-ada-002 输出 1536 维 最终输出示例(384 维简化示意):
[0.021, -0.134, 0.078, ... , 0.092]
三、为什么要把句子变成向量?
- 机器无法直接读懂文字计算机只能计算数字,不能判断两段文字 “意思像不像”;
- 用数学衡量语义相似度拿到两个句子的向量后,用余弦相似度 / L2 距离算出 0~1 之间的分数: 分数越接近 1 = 语义高度匹配;
- 实现语义检索(解决传统关键词缺陷)句子 A:轻薄笔记本电脑推荐 句子 B:平价便携手提办公本 字面无重复关键词,但 Embedding 生成的向量距离极近,向量数据库可以精准匹配;传统倒排索引会直接漏掉。
四、常见 Embedding 模型分类
1. 开源本地离线模型(Chroma 默认)
- all-MiniLM-L6-v2:轻量、384 维,CPU 就能跑,适合本地 RAG
- bge-small/bge-base:中文语义效果更强,国内 RAG 主流
- mxbai-embed-large:高精度,长文本理解优秀 特点:完全离线,不上传数据,适合 Mac 本地私有知识库
2. 云端 API 嵌入模型
- OpenAI text-embedding-3-small/large
- 阿里通义、腾讯混元、智谱 AI 嵌入接口 特点:精度高,无需本地显卡,调用接口付费,数据会上传服务商
3. 多模态 Embedding(CLIP)
不只转文本,图片、文字统一转为同空间向量,支持以文搜图、以图搜文。
五、结合你之前的句子联动理解
straightforward, there's a bit of an overhead in setting this
- 将这句话送入 Embedding 模型 → 生成一条向量;
- 再输入同义句:The logic is simple, but configuring it takes extra work;
- 两个句子字面单词几乎无重合,但向量余弦相似度极高;
- Chroma 这类向量库通过对比向量数值,就能识别二者表达同一个含义,完成语义检索。
六、关键特性
- 维度固定:同一模型输出向量长度永远一致,才能做距离计算;
- 语义压缩:几百个数字就能承载整段文字的核心含义;
- 无人类可读性:向量只是一串小数,人无法看懂,仅用于数学计算;
- 上下文感知:多义词会根据句子生成不同向量,区分歧义 例:
苹果电脑vs苹果水果,模型输出完全不同的向量。
七、极简 Python 示例(Chroma 内置 Embedding)
python
运行
import chromadb from chromadb.utils.embedding_functions import SentenceTransformerEmbeddingFunction # 加载本地嵌入模型 emb_fn = SentenceTransformerEmbeddingFunction(model_name="all-MiniLM-L6-v2") # 句子转向量 sentence = "embedding model把句子转化成向量" vec = emb_fn([sentence]) # vec 就是句子对应的浮点向量数组 print(len(vec[0])) # 输出384,该模型固定384维