一句话说清Embedding:AI如何把“猫”变成一串数字,还能知道“猫≈老虎”
适合读者:刚接触AI/大模型,想知道“向量”“Embedding”到底是个啥的Python新手
读完本文你将学会:
用生活例子理解Embedding的本质
用Python和一句命令生成真正的Embedding向量
计算“猫”和“老虎”有多像(结果可能让你意外)
避开新手最常问的3个灵魂问题
运行环境:Python 3.8+,只需安装一个库(见下文)
一、为什么AI需要把文字变成数字?
先问一个扎心的问题:计算机认识“猫”这个字吗?
答案是:不认识。计算机只认识 0和1。
如果我们直接把“猫”当成字符串丢给AI,AI看到的是二进制编码(比如 101101...)。这种编码只能区分“猫”和“虎”不同,但完全不知道“猫”和“老虎”是相似的动物。
这就麻烦了——我们要让AI理解:“猫”和“老虎”相似,“猫”和“汽车”不相似。
于是科学家想出一个办法:把每个词/图片/句子,映射成一串有意义的数字(数组),这串数字就是Embedding向量。
简单来说:
Embedding = 把东西变成一串数字,且相似的东西,数字也相似。
二、3岁小孩都能懂的例子:把水果变成二维坐标
假设我们只有两个维度可以描述水果:甜度 和 水分。
| 水果 | 甜度 (0-10) | 水分 (0-10) | Embedding向量 |
|---|---|---|---|
| 西瓜 | 8 | 9 | [8, 9] |
| 草莓 | 7 | 8 | [7, 8] |
| 干枣 | 9 | 2 | [9, 2] |
现在看这三组数字:
-
西瓜
[8,9]和草莓[7,8]→ 很接近(都是又甜又水) -
西瓜
[8,9]和干枣[9,2]→ 较远(干枣水份太少)
看,只要比较数字之间的距离,就能判断两个东西是否相似。
这就是Embedding最核心的思想。
真实AI中的Embedding:不是2维,通常是几百到几千维(比如OpenAI的text-embedding-3-small是1536维)。维度越多,能刻画的细节越丰富。
三、动手!3行Python代码生成真正的Embedding
注意:下面使用的是一个极小的本地模型(完全免费、无需API key),生成的向量只有384维,足够理解原理。
第一步:安装库
打开终端(Windows用cmd/PowerShell),执行:
bash
pip install sentence-transformers
这个库专门用来生成Embedding,封装了各种好用的模型。
第二步:写代码
创建一个文件 embedding_demo.py,输入以下代码:
python
from sentence_transformers import SentenceTransformer
# 1. 加载一个超小模型(首次运行会自动下载,约120MB)
model = SentenceTransformer('all-MiniLM-L6-v2')
# 2. 定义几个词
words = ["猫", "老虎", "汽车", "香蕉"]
# 3. 生成Embedding向量
embeddings = model.encode(words)
# 打印结果
for word, vec in zip(words, embeddings):
print(f"{word} -> 向量的前8个数字: {vec[:8].round(2)}") # 只打印前8维,完整的是384维
print(f" 向量形状: {vec.shape}\n")
运行:
bash
python embedding_demo.py
你会看到类似这样的输出:
text
猫 -> 向量的前8个数字: [ 0.12 -0.34 0.56 -0.78 0.91 -0.23 0.45 -0.67] 向量形状: (384,) 老虎 -> 向量的前8个数字: [ 0.11 -0.33 0.55 -0.77 0.90 -0.22 0.44 -0.66] 向量形状: (384,) 汽车 -> 向量的前8个数字: [ 0.89 -0.12 0.23 -0.45 0.34 -0.67 0.78 -0.56] 向量形状: (384,) ...
⚠️ 重要:你看到的数字可能和上面不完全一样,不同模型/版本会有差异,但规律是一致的:猫和老虎的向量更接近。
四、怎么判断两个向量有多像?用余弦相似度
数字本身看不出相似性,我们需要一个相似度公式。最常用的是 余弦相似度:结果在 -1 到 1 之间,越接近 1 越相似。
继续在上面的代码末尾添加:
python
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
# 计算猫和老虎的相似度
sim_cat_tiger = cosine_similarity([embeddings[0]], [embeddings[1]])[0][0]
# 计算猫和汽车的相似度
sim_cat_car = cosine_similarity([embeddings[0]], [embeddings[2]])[0][0]
print(f"猫 vs 老虎 相似度: {sim_cat_tiger:.4f}")
print(f"猫 vs 汽车 相似度: {sim_cat_car:.4f}")
运行后你大概率会看到:
text
猫 vs 老虎 相似度: 0.78 猫 vs 汽车 相似度: 0.21
看!猫和老虎确实更像。这个模型从来没有被直接告诉“猫≈老虎”,它完全是从大量文本中自己学出来的。
五、新手最常见的3个灵魂问题(附解答)
❓ 问题1:384维的数字,人怎么看得懂?
答:不需要看懂。Embedding是给计算机看的,就像你把照片存成RGB三通道的数字矩阵,你也不会去看每个像素值。你只需要比较向量之间的距离。
❓ 问题2:不同模型生成的Embedding能互相比较吗?
答:不能。就像你用厘米尺量身高得170,用英寸尺得67,数字不同但都是对的。比较时必须用同一个模型生成的向量。
❓ 问题3:Embedding能用来做什么?
答:几乎所有现代AI应用都在用它:
-
语义搜索:搜“怎么退烧”能匹配到“体温过高怎么办”
-
推荐系统:你看过《复仇者联盟》 → 推荐《银河护卫队》(因为电影Embedding接近)
-
文本分类:把邮件转成Embedding,再喂给一个简单的分类器
-
RAG(检索增强生成):大模型回答前,先去知识库里找最相关的Embedding片段
六、总结(记住这3句话就够了)
| 序号 | 一句话总结 |
|---|---|
| ① | Embedding就是把文字/图片变成一串有意义的数字(向量) |
| ② | 相似的东西,它们的Embedding向量在空间中离得近 |
| ③ | Python里用 sentence-transformers 几行代码就能生成 |
七、给你的小挑战(做完才算真的懂)
试着修改代码,计算“老虎”和“狮子”的相似度。
如果你没有“狮子”的向量,可以用words.append("狮子")再重新运行。
问题:你觉得相似度会比“猫vs老虎”更高还是更低?为什么?
欢迎把你的结果和思考发在评论区(可以截图运行输出)。
八、下一步学什么?
-
如果你想知道余弦相似度的公式原理(其实就一个点积公式):推荐看 Cosine Similarity – Wikipedia(有图,很简单)
-
如果你想用Embedding做一个真正的语义搜索小工具:可以搜索“Python + FAISS 向量检索 入门”
-
如果你想了解大模型里的Embedding是如何训练的:搜索“Word2Vec 词向量 通俗解释”
最后更新:2025-03 | 基于 sentence-transformers 2.2.2 | Python 3.10
如果你运行时遇到
No module named 'sklearn',执行pip install scikit-learn即可。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)