Langchain学习(2):了解嵌入模型
嵌入模型(Embedding Model)是目前几乎所有智能AI应用背后最核心的“理解引擎”之一。它把人类能读懂的文字、图片、音频、代码……统统转换成一串固定长度的数字向量(也叫“数字指纹”),这些向量放在一个高维空间里,。
嵌入模型:AI真正“读懂”世界的语义基石
嵌入模型(Embedding Model)是目前几乎所有智能AI应用背后最核心的“理解引擎”之一。
它把人类能读懂的文字、图片、音频、代码……统统转换成一串固定长度的数字向量(也叫“数字指纹”),这些向量放在一个高维空间里,语义越相似,两个向量在空间里就靠得越近。
直观例子
- “猫”和“狗” → 向量非常接近(都带有“宠物”“毛茸茸”“会叫”等隐含属性)
- “煮咖啡”和“咖啡制作步骤” → 即使字面完全不同,向量也会指向同一个区域
- 经典“国王类比”奇迹:
- vec(国王) − vec(男人) + vec(女人) ≈ vec(女王)
- → 模型居然学会了“统治者角色 + 性别”的组合逻辑,这在2013年的word2vec时代就让人惊掉下巴,现在依然是教学必备案例。
通俗比喻:
如果把大语言模型(LLM)比作“会说话的诗人”,那嵌入模型就是“最懂人心的翻译官”——它自己不写诗,但它让AI第一次真正“看懂”你在说什么,而不是只认字符。
为什么嵌入模型突然变得这么重要?
| 人类直觉理解 | 传统计算机的困境 | 嵌入模型带来的改变 |
|---|---|---|
| “手机”和“智能手机”差不多 | 只认字符串,毫无关联 | 向量空间里距离很近,余弦相似度高 |
| “报销流程” ≈ “费用申请指南” | 关键词匹配大概率漏掉 | 语义匹配,即使零重叠词也能召回 |
| “今天适合穿什么”上下文相关 | 传统搜索只看字面,容易跑偏 | 理解“天气+场合+季节”的整体意图 |
核心数学工具:余弦相似度(cosine similarity)
值越接近1 → 语义越相似
值接近0 → 基本无关
(比欧氏距离更常用,因为它忽略向量长度,只看方向)
嵌入模型是怎么学会这些的?
-
最基础思路 — 统计共现(word2vec时代)
-
出现在相似上下文的词,含义也相似 → “我喜欢吃苹果”和“我喜欢吃香蕉” → apple和banana向量会靠近。
-
现代主流训练方式
-
对比学习(Contrastive Learning)
-
拉近“正样本对”(同一件事的不同表述、图文对齐),推远“负样本”(无关内容)。
-
代表:Sentence-BERT、SimCSE、E5系列、bge系列。
-
掩码语言建模 + 指令微调(像BERT进化版)
-
预测被盖住的词,顺便学会长距离上下文。
-
多模态对齐(CLIP开创,至今主流)
-
让“一只猫的照片”和“这是一只可爱的猫”落在同一个向量空间。
-
-
现在最先进的小trick
-
Matryoshka Representation Learning(俄罗斯套娃表示学习)
-
一个模型可以输出1024维、512维、256维……甚至32维向量,精度和速度随意切换,超级适合省存储和省流量。
-
Instruction-aware(指令感知)
-
你可以告诉模型:“请按检索任务生成embedding”或“请按分类任务生成”,效果能提升一点点。
-
四大应用场景
-
RAG(Retrieval-Augmented Generation) — 当前最火用法
用户问“公司年假怎么休?” → embedding → 向量数据库秒找最相关的政策文档 → 喂给LLM生成答案 → 极大减少LLM幻觉、可实时更新知识、无需反复微调。
-
语义搜索 & 企业知识库
搜“降温了穿什么好看” → 返回“秋冬叠穿技巧”“保暖又时尚的穿搭”,而不是字面含“降”“温”的无关文章。
-
个性化推荐 & 用户画像
把用户点击、观看、收藏行为转向量 → 找“兴趣最近似的用户群” → 推荐真正戳心的内容(短视频、电商、音乐都靠它)。
-
数据洞察 & 可视化
用t-SNE或UMAP把高维向量压到2D/3D → 一眼看到用户评论的正负情感聚类、话题分布、异常点。
快速上手:云API vs 本地调用
1. 云服务
阿里云百炼 text-embedding-v4
from langchain_community.embeddings import DashScopeEmbeddings
import os
os.environ["DASHSCOPE_API_KEY"] = "你的key" # 配了环境变量的可以不写
embed = DashScopeEmbeddings(model="text-embedding-v4")
vec = embed.embed_query("今天适合穿什么衣服?")
print(f"向量维度:{len(vec)},前5个:{vec[:5]}")
2. 本地/开源部署
ollama pull qwen3-embedding:0.6b # 或 4b / 8b
from langchain_ollama import OllamaEmbeddings
model = OllamaEmbeddings(model="qwen3-embedding:4b")
vec = model.embed_query("明天会下雨吗?需要带伞吗?")
print(f"本地向量维度:{len(vec)}")
更多推荐


所有评论(0)