news 2026/6/10 11:35:21

2.1 向量基础:Embedding、余弦相似度、欧氏距离、向量检索

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2.1 向量基础:Embedding、余弦相似度、欧氏距离、向量检索

如果说 LLM 是大脑,那向量就是它的「神经信号编码」。人类用文字交流,计算机用数字计算,而Embedding是连接这两个世界的桥梁。不懂向量,就不懂 RAG;不懂 RAG,就没法让 LLM 真正落地到实际业务中。

📑 目录

  • Embedding(文本嵌入):文字变数字的魔法
  • 余弦相似度:衡量「方向一致性」
  • 欧氏距离:衡量「直线距离」
  • 向量检索:从语义匹配到实际查询
  • 什么时候用什么度量

Embedding(文本嵌入):文字变数字的魔法

一句话定义

把任意长度文本转换成固定长度的数字数组(向量)。语义相似的文本,向量在空间中的距离也更近。

本质大白话

Embedding = 文字的 GPS 坐标 想象一个多维空间(比如 1536 维): 「猫」 → [0.12, -0.34, 0.56, ...] ← 附近聚集着「小狗」「萌宠」 「狗」 → [0.15, -0.31, 0.52, ...] ← 跟「猫」很近!(都是宠物) 「汽车」→ [-0.45, 0.78, -0.23, ...] ← 离「猫」「狗」很远 「公交车」→ [-0.42, 0.75, -0.20, ...] ← 跟「汽车」很近!(交通工具) 关键洞察: Embedding 不是简单的编码,而是把语义关系映射到几何空间! 语义近 = 空间距短 | 语义远 = 空间距长

Embedding 模型对比

模型维度语言特点场景
text-embedding-3-small1536多语效果好,付费通用首选
BGE-large-zh1024中英开源免费效果好中文首选
M3E-base768中文轻量快速中文轻量
E5-mistral1024多语多语言强国际化
Cohere embed-v31024多语搜索专用搜索引擎
fromopenaiimportOpenAIimportnumpyasnp client=OpenAI()defget_embedding(text,model="text-embedding-3-small"):response=client.embeddings.create(model=model,input=text)returnresponse.data[0].embedding# 1536维向量# 语义相似的文本,向量接近texts=["今天天气不错","天气很好","Python 编程教程"]embs=[get_embedding(t)fortintexts]defcosine(a,b):returnnp.dot(a,b)/(np.linalg.norm(a)*np.linalg.norm(b))print(f"'今天天气不错' vs '天气很好':{cosine(embs[0],embs[1]):.4f}")# ~0.92print(f"'今天天气不错' vs 'Python':{cosine(embs[0],embs[2]):.4f}")# ~0.15

❌ 常见误区

  • ❌ Embedding 模型越大越好 — text-embedding-3-small 很多场景优于大模型
  • ❌ 同一 Embedding 通用所有任务 — 搜索和分类需要不同的 Embedding
  • ❌ 中文必须专用中文模型 — 多语言模型在中文上已经很出色

余弦相似度:衡量「方向一致性」

一句话定义

计算两个向量夹角的余弦值,范围 [-1, 1]。越接近 1 表示方向一致(语义越相似)。

本质大白话

余弦相似度 = 忽略长度,只看方向 两个人朝同一个方向走: A 走了100米,B 走了1000米 方向一样 → 余弦 ≈ 1.0 A 往东走,B 往西走 方向相反 → 余弦 ≈ -1.0 文本场景:方向相同 = 语义相近(不管文章长短) → 这就是为什么余弦成为文本相似度的默认选择!

cos_sim ( A , B ) = A ⋅ B ∣ ∣ A ∣ ∣ ⋅ ∣ ∣ B ∣ ∣ \text{cos\_sim}(A,B) = \frac{A \cdot B}{||A|| \cdot ||B||}cos_sim(A,B)=∣∣A∣∣∣∣B∣∣AB

importnumpyasnpdefcosine_similarity(a,b):returnnp.dot(a,b)/(np.linalg.norm(a)*np.linalg.norm(b))vec_cat=get_embedding("可爱的小猫")vec_dog=get_embedding("可爱的狗狗")vec_car=get_embedding("一辆汽车")print(f"猫 vs 狗:{cosine_similarity(vec_cat,vec_dog):.4f}")# ~0.85print(f"猫 vs 车:{cosine_similarity(vec_cat,vec_car):.4f}")# ~0.20

❌ 常见误区

  • ❌ 余弦 > 0.9 就意思一样 — 不同模型阈值不同,不要迷信绝对数值
  • ❌ 余弦适用于所有场景 — 图像特征场景可能需要欧氏距离

欧氏距离:衡量「直线距离」

一句话定义

两个向量在多维空间的直线距离。越小越相似。

余弦 vs 欧氏

余弦欧氏
关注点方向实际距离
受长度影响
范围[-1,1][0,+∞)
文本场景默认首选少数
图像场景可能失效常用
importnumpyasnpdefeuclidean(a,b):returnnp.linalg.norm(a-b)# 直观对比short=get_embedding("你好")long_text=get_embedding("你好"*20)print(f"余弦:{cosine_similarity(short,long_text):.4f}")# ~0.95 (方向一样)print(f"欧氏:{euclidean(short,long_text):.4f}")# 可能很大(长度不同)# 结论:文本用余弦,特征考虑欧氏

向量检索:从语义匹配到实际查询

一句话定义

给定查询文本转为向量后,在向量库中找到 Top-K 条最相似记录的过程。RAG 的核心操作。

检索流程

用户提问:「如何优化 MySQL 查询性能?」 ↓ [Embedding 模型] ↓ 查询向量: [0.21, -0.15, 0.33, ...] ↓ ┌────────────────────────────────┐ │ 向量数据库 │ │ doc1 [0.20,-0.14,0.35,...] → 0.012 ★1 │ │ doc2 [0.55, 0.72,-0.11,...] → 0.892 │ │ doc3 [0.22,-0.13,0.31,...] → 0.025 ★2 │ │ doc4 [-0.81,0.33, 0.55,...] → 1.203 │ └────────────────────────────────┘ ↓ 返回 Top-K (doc1, doc3) 作为 LLM 上下文
fromtypingimportListimportnumpyasnpclassVectorRetriever:def__init__(self,embedding_func):self.embed_fn=embedding_func self.vectors=[]self.documents=[]defadd_document(self,text,metadata=None):vec=self.embed_fn(text)self.vectors.append(vec)self.documents.append({"text":text,"metadata":metadataor{}})defsearch(self,query,top_k=5)->List[dict]:q_vec=self.embed_fn(query)scores=[]forvinself.vectors:scores.append(np.dot(q_vec,v)/(np.linalg.norm(q_vec)*np.linalg.norm(v)))top_idx=np.argsort(scores)[::-1][:top_k]return[{"doc":self.documents[i],"score":scores[i]}foriintop_idx]# 使用retriever=VectorRetriever(get_embedding)retriever.add_document("MySQL 索引优化策略:...")retriever.add_document("Redis 缓存使用指南:...")results=retriever.search("数据库太慢了怎么办",top_k=3)

❌ 常见误区

  • ❌ 向量检索 = 完美语义搜索 — 找不到精确关键词匹配(型号编号、专有名词)
  • ❌ Top-K 越大越好 — K 太大引入噪音,K 太小漏信息。一般 3-10 合理
  • ❌ 只要向量就够了 — 生产环境通常需要混合检索(详见 2.2)

什么时候用什么度量?

场景推荐原因
文本语义检索余弦忽略长度,关注方向
图像特征比对欧氏特征幅度有意义
归一化后的向量两者等效归一化后余弦=欧氏
异常检测欧氏远离聚类中心的点易识别
推荐系统余弦关注偏好方向而非强度

📊 本节知识地图

┌────────────────────────────────────────────────────┐ │ 向量基础 — RAG 的地基 │ │ │ │ ┌────────────┐ ┌──────────────────────────┐ │ │ │ Embedding │──→ │ 相似度计算 │ │ │ │ 文本→向量 │ │ 余弦 ★ / 欧氏 ☆ │ │ │ └────────────┘ └──────────┬───────────────┘ │ │ │ │ │ ↓ │ │ ┌──────────────────┐ │ │ │ 向量检索 │ │ │ │ Top-K 返回 │ │ │ └────────┬─────────┘ │ │ ↓ │ │ ┌──────────────────┐ │ │ │ 2.2 RAG体系 │ ← 下节详解 │ │ └──────────────────┘ │ │ │ │ 一句话: │ │ Embedding转数字 → 相似度找最相关 → 检索返回 │ └────────────────────────────────────────────────────┘

🔗 关联推荐

  • 📖1.1 模型本源→ Token 是 Embedding 的输入单元
  • 📖1.3 交互基础→ 检索结果是 Context 的重要来源
  • 🔜2.2 RAG 体系→ 向量检索是 RAG 的第一步
  • 🔜2.3 向量数据库→ 向量存在哪里?怎么选型?
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 4:57:40

2026年6月花生油实力厂家盘点 纯正好油家用商用集合

随着健康饮食观念的普及,花生油作为中式烹饪的“黄金搭档”,其品质好坏直接关系到全家人的饮食健康。面对市面上琳琅满目的品牌,消费者往往陷入选择困难:是追求大品牌背书,还是关注原料产地与工艺?是单纯看…

作者头像 李华
网站建设 2026/6/8 1:36:20

Colmap vs OpenMVG实战:用手机照片重建跑鞋和恐龙,谁更快更准?

Colmap与OpenMVG实战测评:手机拍摄小物件3D重建全流程解析当你想用手机为心爱的跑鞋或收藏的恐龙模型建立3D数字档案时,Colmap和OpenMVG这两个开源工具该如何选择?本文将通过实测对比,从安装配置到最终模型生成,为你拆…

作者头像 李华
网站建设 2026/6/8 11:18:13

现代化桌面应用开发:ASP.NET Core与Electron的架构融合实践

现代化桌面应用开发:ASP.NET Core与Electron的架构融合实践 【免费下载链接】Electron.NET :electron: Build cross platform desktop apps with ASP.NET Core (Razor Pages, MVC, Blazor). 项目地址: https://gitcode.com/gh_mirrors/el/Electron.NET 在当今…

作者头像 李华
网站建设 2026/6/8 19:47:09

今日金价查询

今日金价查询 最近有朋友问我:想买金饰、想卖旧金、或者单纯想知道今天黄金多少钱一克,有没有一个网站能一次查全? 我一般会直接告诉他:打开 金价查询 这不是什么需要注册、下载 App 的平台,用手机或电脑浏览器打开…

作者头像 李华
网站建设 2026/6/8 20:06:24

喜报!炼石中标某大湾区高水平大学数据加密项目

近日,炼石中标某大湾区高水平大学数据加密项目。**项目围绕高校教学、科研与管理系统中的敏感数据保护需求,以免改造数据安全架构为核心技术路径,在不改变现有业务系统架构、不影响教学科研系统稳定运行的前提下,实现核心数据的全…

作者头像 李华