Embedding Model(嵌入模型)完整讲解:句子转向量全过程

Embedding Model(嵌入模型)完整讲解:句子转向量全过程

一、核心作用

Embedding 模型的唯一任务:把人类可读的文本(句子、段落、词语)映射成一段固定长度的浮点数字数组,也就是向量(vector)

  • 语义相近的句子 → 向量在高维空间距离很近
  • 语义完全无关的句子 → 向量距离很远 这是向量数据库、RAG 检索的底层基础。

二、完整转化流程(一句话拆解)

输入句子:MacBook本地运行Chroma向量库

  1. 分词(Tokenize) 模型把句子拆成最小单元(token),如单词 / 子词: MacBook / 本地 / 运行 / Chroma / 向量库
  2. Token 编码 每个 token 查表转为唯一数字 ID;
  3. 多层 Transformer 编码计算 模型根据上下文理解整句语义,融合每个词的语境信息;
  4. 输出句向量(Pooling 池化) 把整段文本所有 token 的隐藏层输出聚合,压缩成单一固定维度向量 例:all-MiniLM 输出 384 维、text-embedding-ada-002 输出 1536 维 最终输出示例(384 维简化示意): [0.021, -0.134, 0.078, ... , 0.092]

三、为什么要把句子变成向量?

  1. 机器无法直接读懂文字 计算机只能计算数字,不能判断两段文字 "意思像不像";
  2. 用数学衡量语义相似度 拿到两个句子的向量后,用余弦相似度 / L2 距离算出 0~1 之间的分数: 分数越接近 1 = 语义高度匹配;
  3. 实现语义检索(解决传统关键词缺陷) 句子 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

  1. 将这句话送入 Embedding 模型 → 生成一条向量;
  2. 再输入同义句:The logic is simple, but configuring it takes extra work;
  3. 两个句子字面单词几乎无重合,但向量余弦相似度极高;
  4. Chroma 这类向量库通过对比向量数值,就能识别二者表达同一个含义,完成语义检索。

六、关键特性

  1. 维度固定:同一模型输出向量长度永远一致,才能做距离计算;
  2. 语义压缩:几百个数字就能承载整段文字的核心含义;
  3. 无人类可读性:向量只是一串小数,人无法看懂,仅用于数学计算;
  4. 上下文感知 :多义词会根据句子生成不同向量,区分歧义 例:苹果电脑 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维