大模型介绍 - 嵌入模型

认识嵌入模型
1. 什么是嵌入模型?
大语言模型是生成式模型。它理解输入并生成新的文本(回答问题、写文章)。它内部实际上也使用嵌入技术来理解输入,但最终目标是 “创造”。
而嵌入模型(Embedding Model)是表示型模型。它的目标不是生成文本,而是为输入的文本创建一个最佳的、富含语义的数值表示(向量)。
由于计算机天生擅长处理数字,而不理解文字、图片的含义。嵌入(Embedding)的核心思想就是将人类世界的符号(如单词、句子、产品、用户、图片)转换为计算机能够理解的数值形式(即向量,本质上是一个数字列表),并且要求这种转换能够保留原始符号的语义和关系。

嵌入(Embedding)的核心思想,就是将人类世界的符号(如单词、句子、产品、用户、图片)转换为计算机能够理解的数值形式(向量,本质是一个数字列表),并且让这种转换精准保留原始符号的语义和关系。
以三维向量为例(实际应用中是数百至数千维):
- “开心” 对应的向量:
[0.1, -0.5, 0.2] - “愉悦” 对应的向量:
[0.1, -0.5, 0.25] - “生气” 对应的向量:
[0.7, 0.3, -0.9]
可以看到:
- “开心” 与 “愉悦” 的向量数值高度接近 → 代表二者语义相似、情感相近
- “开心 / 愉悦” 与 “生气” 的向量数值差异巨大 → 代表二者语义无关、情感对立
这正是嵌入模型的本质:用数字的 “远近”,来度量语义的 “亲疏”,让计算机能通过数学计算理解人类语言的含义与关系。
度量语义?我们具体是如何进行度量的?

度量语义相似度的两种方式
1. 欧式距离:直观但有局限
欧式距离计算的是向量之间的直线空间距离,距离越短代表相似度越高。但它有一个明显问题:会受到向量长度(文本长度、词汇多少)的干扰。比如 “愉快”(2 字)和一篇围绕 “开心” 的作文(1000 字),即便语义高度相近,因为文本长度差异导致向量长度不同,欧式距离会被拉远,无法准确反映语义的相似性。
2. 余弦相似度:专注语义方向,更适合文本场景
余弦相似度只关注向量之间的方向差异,忽略长度影响。在语义世界里:
- 方向:代表文本的核心含义、情感倾向
- 长度:仅代表文本的字数、词汇量多少
它能精准捕捉 “开心” 和 “愉悦” 这类语义相近的内容,即便文本长度差异巨大,也能通过方向的接近程度判断语义相似;而 “开心” 与 “生气” 这类语义对立的内容,方向差异会被清晰放大,完美解决了欧式距离受长度干扰的问题。
✅ 核心结论
- 维度越高,嵌入模型能捕捉的语义复杂度越强
- 嵌入匹配是基于语义相似度,而非 MySQL 那样的精确字符匹配,更贴近人类理解语言的方式
我们可以把它想象成一个翻译过程,把人类语言 “翻译” 成计算机的 “数学语言”。
结论:既然是 “数学语言”,那么我们可以用数学的方式来比较向量,从而达到【度量语义】的目的!适用场景:Owen-embedding-3B 等。
2. 嵌入模型应用场景
根据嵌入的特性,由此延伸出了许多嵌入模型在 AI 应用的使用场景:
语义搜索(Semantic Search)
传统搜索:依赖将查询和文档匹配 “苹果”,只能找到包含 “苹果” 这个词的文档。【类似 MySQL 的精确匹配】
语义搜索:将查询和文档都转换为向量,通过计算向量间的相似度来找到相关内容,即使文档中没有查询的确切词汇也能被检索到。如下图所示,即使知识库中并未直接出现 “笔记本电脑无法充电” 这个词组,语义搜索也能通过向量相似度精准地找到该文档。

检索增强生成(Retrieval-Augmented Generation, RAG)
这是当前大语言模型应用的核心模式。当用户向 LLM 提问时,系统首先使用嵌入模型在知识库(公司内部文档)中进行语义搜索,找到最相关的内容,然后将这些内容和问题一起交给 LLM 来生成答案。这极大地提高了答案的准确性和时效性。【RAG】
例如:一家公司的内部客服机器人接到员工提问:“我们今年新增加的带薪育儿假政策具体是怎样的?” 系统会首先使用嵌入模型在公司的具体条款,然后将这些【条款】和【问题】一起提交给 LLM,搜索到,找到关于 “今年育儿假规定” 的具体条款,然后将这些【条款更新备忘录】等资料中进行语义检索,LLM 便能生成一个准确、具体的摘要回答,而非仅凭其内部训练数据可能产生的过时或泛泛的答案。

推荐系统(Recommendation systems)
将用户(根据其历史行为、偏好)和物品(商品、电影、新闻)都转换为向量。喜欢相似物品的用户,其向量会接近;相似的物品,其向量也会接近。通过计算用户和物品向量的相似度,就可以进行精准推荐。
例如:一个流媒体平台将用户 A(喜欢观看《盗梦空间》和《黑镜》)和所有电影都表示为向量。系统发现用户 A 的向量与用户 B(同样喜欢《盗梦空间》和《黑镜》)的向量很接近,而用户 B 还喜欢《星际穿越》。于是当用户 A 从未看过《星际穿越》时,系统通过计算用户向量与电影向量的相似度,系统会将这部电影推荐给用户 A。

异常检测(Anomaly Detection)
正常数据的向量通常会聚集在一起。如果一个新数据的向量远离大多数向量的聚集区,它就可能是一个异常点(如垃圾邮件、欺诈交易)。
例如:一个信用交易反欺诈系统,通过学习海量正常交易的记录(如金额、地点、时间、商户类型等),将向量的向量形成 “正常交易聚类”。当发生一笔新的消费发生地的高频时间转换,系统则会将某标记为潜在的 “欺诈交易” 并进行警报。(例如,一笔发生在通常消费地之外的高额交易)。

3. 主流的嵌入模型
text-embedding-3-large(OpenAI):OpenAI 最强大的英语和非英语任务嵌入模型。默认维度 3072,可降维到 1024 等;输入长度支持 8192。text-embedding-3-small(输入长度:支持 8192)Owen-embedding-3B(输入长度:支持 8192;支持 100 + 种语言;上下文长度 32k;嵌入维度:最大 4096,支持用户定义的输出维度,范围从 32 到 4096。推理需要一定的 GPU 计算资源(例如,度至少需要 16GB 以上显存的 GPU 才能高效运行)。gemini-embedding-001(Google):支持 100 + 种语言;默认维度 3072,可选降维版本:1536 维或 768 维;输入令牌长度支持为 2048。
其他参考:
- Hugging Face 的 MTEB 评测:https://huggingface.co/spaces/mteb/leaderboard
- Hugging Face 的 MTEB(Massive Multilingual Text Embedding Benchmark)评测,是业界比较公认的标准。

4. 嵌入模型接入方式
嵌入模型接入和使用方式根据模型类型(开源或闭源)有根本性的不同。下图清晰地展示了两种典型的接入流程:

这是 API 接入最简单的方式,无需管理任何设施,只需要向模型提供商的服务发送一个 HTTP 请求即可。
4.1 API 接入
适用模型:text-embedding-3-large,gemini-embedding-001 等。
步骤:
- 注册账号并获取 API Key:在对应的服务平台(如 OpenAI Platform, Google AI Studio, Vertex AI)上注册账号,获取用于身份验证的 API Key。
- 安装 SDK 或构造 HTTP 请求:使用官方提供的 SDK(如
openai,google-generativeai),或者直接构造 HTTP 请求。 - 调用 API 处理响应:发送文本,接收返回的 JSON 格式的向量数据。
示例:发送 HTTP 请求
curl https://api.openai.com/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"input": "This is a test sentence.",
"model": "text-embedding-3-small"
}'
响应包含嵌入向量(浮点数列表)以及一些其他元数据:
{
"object": "list",
"data": [
{
"object": "embedding",
"index": 0,
"embedding": [
-0.0069316246,
-0.005332426,
-0.009326429,
-0.042475605,
0.020436291,
...
]
}
],
"model": "text-embedding-3-small",
"usage": {
"prompt_tokens": 5,
"total_tokens": 5
}
}
示例:接入 SDK(以 OpenAI Python SDK 为例)安装库:
pip install openai
代码块:
# 使用 OpenAI Python SDK
from openai import OpenAI
# 1. 设置 API Key
client = OpenAI(api_key="your-api-key")
# 2. 准备输入文本
text = "这是一段需要转为向量的文本。"
# 3. 调用 API
response = client.embeddings.create(
input=text,
model="text-embedding-3-small",
dimensions=1024 # 可选:指定输出维度,例如从 3072 降维到 1024
)
# 4. 获取向量
embedding = response.data[0].embedding
print(embedding) # [0.023, 0.487, -0.129, ..., 0.325]
4.2 本地部署(开源资源)
适用模型:Owen-embedding-3B 等。步骤:
- 环境准备:准备一台有足够 GPU 显存的服务器(对于 Owen-embedding-3B,需要至少 16GB 显存)。
- 模型下载:从 HuggingFace 等模型仓库下载模型权重和配置文件。
- 加载:使用
transformers等的库来加载模型到 GPU,并进行推理。
这部分有兴趣的可以自己后面进行研究。对于大多数初创项目或原型验证,从 API 方式开始是最佳选择。当应用规模化、面临数据合规要求时,再考虑迁移到本地开源模型。
在实际应用部署,将向量用嵌入模型获取结果后,直接存入向量数据库(如 Milvus 的 Milvus, Pinecone 等),以统一的检索。为了便于接入不同的嵌入模型,很多项目会使用 LangChain 这样的框架,它们提供了统一的嵌入模型接口。

更多推荐
所有评论(0)