从零开始理解 Embedding,掌握向量检索的核心技术
什么是 Embedding
1.1 一句话解释
Embedding(嵌入)= 把文字转换成数字向量
1.2 形象理解
想象你要给每个人建立档案
传统方式(文字)
line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;">
Embedding 方式(向量)
这些数字向量包含了所有信息,而且相似的人向量会更接近。
1.3 核心特点
三个核心特点
-
1. 固定维度:无论文本长短,都转换为固定长度的向量(如 768 维、1536 维) -
2. 语义相似:意思相近的文本,向量也相近 -
3. 可计算:可以用数学方法计算相似度
为什么需要 Embedding
2.1 计算机不懂文字
问题: 计算机如何判断两段文字是否相似?
错误方法:字符串匹配
正确方法:Embedding + 向量相似度
2.2 应用场景
2.3 实际案例对比
场景:在知识库中搜索
用户问题: "如何重置密码?"
知识库中的文档:
-
1. "忘记密码怎么办" -
2. "修改登录凭证的方法" -
3. "公司年会时间安排"
传统关键词搜索:
-
• 搜索 "重置密码" -
• 结果:无匹配 (因为知识库中没有"重置"这个词)
Embedding 语义搜索:
-
• 计算问题的 embedding -
• 与所有文档的 embedding 计算相似度 -
• 结果: -
• 文档1:"忘记密码怎么办" - 相似度 0.89 -
• 文档2:"修改登录凭证的方法" - 相似度 0.76 -
• 文档3:"公司年会时间安排" - 相似度 0.12
Embedding 的工作原理
3.1 从词向量到句子向量
早期:Word2Vec(词向量)
特点:
-
• 只能处理单个词 -
• 相似的词向量相近(apple 和 orange)
现代:Transformer(句子向量)
特点:
-
• 可以处理整个句子/段落 -
• 理解上下文关系 -
• 捕捉语义信息
3.2 Embedding 模型的训练
训练方式举例:
-
1. 对比学习 -
• 正样本对: "天气真好" <-> "今天天气不错"→ 向量要接近 -
• 负样本对: "天气真好" <-> "我喜欢编程"→ 向量要远离 -
2. 问答对训练 -
• 问题: "如何学习 Python?" -
• 答案: "可以从基础语法开始..." -
• 目标:问题和答案的 embedding 要接近
3.3 维度的意义
为什么是 768 维或 1536 维?
每一维可以理解为捕捉某种语义特征:
直观比喻:
-
• 1 维:只能表示"大小"(一条线) -
• 2 维:能表示"长宽"(一个平面) -
• 3 维:能表示"长宽高"(一个空间) -
• 1536 维:能表示 1536 种不同的语义特征(超空间)
向量相似度计算
4.1 三种常见相似度算法
余弦相似度(最常用)
公式:
图示:
优点:
-
• 不受向量长度影响 -
• 只关注方向 -
• 适合文本相似度
欧氏距离
点积(内积)
对比
余弦相似度:文本语义比较、文档检索排序、内容推荐系统
欧氏距离:空间位置测量、聚类分析、异常检测
点积相似度:快速初步筛选、计算资源有限场景
4.2 实际例子
余弦相似度计算:
4.3 相似度阈值设置
常见的 Embedding 模型
5.1 国际主流模型
5.2 国内主流模型
5.3 开源 vs 闭源
5.4 模型性能对比
中文检索任务 Benchmark:
推荐选择:
向量数据库介绍
6.1 为什么需要向量数据库?
问题: 假设你有 100 万个文档的 embedding
暴力搜索:

【声明】内容源于网络

