2. 嵌入模型
# 2.1 基本概念
嵌入模型(Embedding Model)是为了将高维、离散的数据(如文本、图像、音频等)转换为低维、连续的向量表示,使模型能够更有效地处理和理解数据的语义和特征。当前市面的嵌入模型各式各样,应该选择合适的模型进行充分的测试来开展业务。
# 2.2 常用嵌入模型
# 2.2.1 OpenAI 嵌入模型
OpenAI 提供了多个高质量的嵌入模型,适用于不同的应用场景。
# 2.2.1.1 text-embedding-3-large
- 维度:3072(可调整)
- 最大输入:8191 tokens
- 特点:最新最强的嵌入模型,性能优异
- 适用场景:对精度要求极高的应用
from openai import OpenAI
client = OpenAI()
response = client.embeddings.create(
input="你的文本内容",
model="text-embedding-3-large"
)
embeddings = response.data[0].embedding
print(f"向量维度: {len(embeddings)}")
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 2.2.1.2 text-embedding-3-small
- 维度:1536(可调整)
- 最大输入:8191 tokens
- 特点:性能与成本的平衡选择
# 2.2.1.3 text-embedding-ada-002
- 维度:1536
- 最大输入:8191 tokens
- 特点:经典稳定的嵌入模型
- 适用场景:成熟的生产环境
# 2.2.2 国产嵌入模型
# 2.2.2.1 百川嵌入模型
- Baichuan-Text-Embedding:支持中英文,适合中文场景
- 维度:1024
- 特点:针对中文优化,理解能力强
# 百川嵌入模型调用示例
import requests
import json
api_key = "your-api-key"
url = "https://api.baichuan-ai.com/v1/embeddings"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
data = {
"model": "Baichuan-Text-Embedding",
"input": "你的文本内容"
}
response = requests.post(url, headers=headers, json=data)
result = response.json()
embedding = result["data"][0]["embedding"]
print(f"向量维度: {len(embedding)}")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 2.2.2.2 通义千问嵌入模型
特点: 阿里巴巴的通义千问大模型提供了文本嵌入能力,其 text-embedding-v1 和 text-embedding-v2 模型在中文和多语言任务上表现稳健。
类型: 商用 API。
# 阿里云通义千问嵌入模型
import dashscope
dashscope.api_key = 'your-api-key'
response = dashscope.TextEmbedding.call(
model='text-embedding-v1',
input='你的文本内容'
)
if response.status_code == 200:
embedding = response['output']['embeddings'][0]['embedding']
print(f"向量维度: {len(embedding)}")
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 2.2.2.3 智谱 GLM 嵌入模型
特点: 智谱AI的embedding-2模型是其GLM大模型生态的一部分,为用户提供了高质量的文本表示能力。
类型: 商用 API。
# 智谱AI嵌入模型调用示例
import zhipuai
zhipuai.api_key = "your-api-key"
response = zhipuai.model_api.invoke(
model="embedding-2",
prompt="你的文本内容"
)
if response['success']:
embedding = response['data']['embedding']
print(f"向量维度: {len(embedding)}")
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 2.2.2.4 其他嵌入模型
- 讯飞星火: 讯飞星火大模型提供的嵌入能力,支持中文场景
- 字节跳动豆包: 字节跳动推出的嵌入模型,与豆包大模型配套使用
- 商汤科技日日新: 商汤科技的日日新大模型系列包含嵌入能力,支持多语言和长文本处理。
- 腾讯混元: 腾讯混元大模型提供的嵌入能力,支持中文场景,在腾讯生态内的应用中表现优秀。
# 2.2.4 多模态嵌入模型
# 2.2.4.1 CLIP (Contrastive Language-Image Pre-training)
import torch
import clip
from PIL import Image
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)
# 文本嵌入
text = clip.tokenize(["a diagram", "a dog", "a cat"]).to(device)
text_features = model.encode_text(text)
# 图像嵌入
image = preprocess(Image.open("photo.jpg")).unsqueeze(0).to(device)
image_features = model.encode_image(image)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 2.2.4.2 OpenAI DALL-E 嵌入
- 支持图像和文本的联合嵌入
- 适用于图文检索和生成任务
# 2.3 如何选择嵌入模型
- 不要迷信任何一个最优和最好的模型,测试结果才是硬道理
- 避免"模型越大越好"的误区
- 注意模型执行的语言,测试时需覆盖所有目标语言,避免某些语言表现显著拉低整体效果
- 商业化部署的合规性(开源模型注意许可证(如Apache 2.0、MIT),商用API需审核数据隐私条款)
编辑 (opens new window)
上次更新: 2025/09/18, 08:16:15