在人工智能与自然语言处理领域,文本的语义表示——也就是业内常说的 Embedding(文本嵌入向量)——无疑是构建智能应用的基石。无论是搜索引擎、推荐系统、智能客服,还是内容理解与聚类分析,底层的向量化能力都直接决定了最终效果的边界。近期,阿里巴巴通义实验室正式推出了新一代 Qwen3-Embedding 模型。从实际表现来看,该模型在语义建模能力与适配灵活性上带来了诸多令人惊喜的突破。因此,本文将从核心原理到部署实践,从微调优化到工程链路设计,进行全方位解读,希望能为正在探索相关方向的技术团队和开发者提供可落地的参考。
先说说这篇文章能帮你解决哪些问题——
- 深入了解 Qwen3-Embedding 的核心原理、核心优势及典型应用场景;
- 快速上手阿里云 PAI 及百炼平台,完成模型的部署与效果验证;
- 掌握如何通过领域数据集对模型进行微调,并将优化后的结果重新上线;
- 理清 LLM 与轻量级 Embedding 模型在不同场景下的选型逻辑,以及工程链路优化的常见策略。
如果你只想快速了解部署和测试流程,可直接跳至第二、三章;若更关注 LLM 与 Embedding 的对比数据与方案选型,第四、五章将提供更具针对性的分析。
一、Qwen3-Embedding 系列介绍
1. 简介:什么是 Qwen3-Embedding
简单来说,Qwen3-Embedding 是阿里巴巴通义实验室推出的最新一代文本嵌入模型,专门用于将文本转换为高维向量,从而服务于语义搜索、推荐系统、聚类分析、文本匹配等任务。其底层基于 Qwen3 语言模型,融合了 instruction 机制与 MoE(混合专家)架构,打造了一个高效、多任务的文本嵌入解决方案。
核心原理方面,有几点值得重点说明:
- 双塔训练策略:查询(query)和文档(document)分别通过两个独立的塔进行编码,使语义匹配更高效、更灵活。
- 对比学习:先利用超大规模数据进行弱监督对比训练,再叠加高质量数据的监督训练,有效提升模型的泛化能力与鲁棒性。
- 多粒度融合:训练过程中生成多个 checkpoint,将这些 checkpoint 的参数差异视为“任务向量”,在高维空间中寻找最优融合路径,从而进一步推高模型性能。
核心优势体现在以下几个方面:
- 功能多样:在 MTEB 多语言排行榜上,8B 版本的嵌入模型夺得榜首(截至2025年6月5日,得分70.58),重排序模型在各类文本检索场景中同样表现优异。
- 灵活性:模型尺寸从0.6B到8B全覆盖,你可以根据效率与效果需求灵活选择。嵌入与重排序两大模块可无缝搭配使用,且均支持用户自定义指令,以增强特定任务或语言的性能。
- 多语言支持:依托 Qwen3 的多语言底座,该系列支持超过100种语言,包括多种编程语言,跨语言与代码检索能力扎实可靠。
- 成本优化:MoE 架构使得模型仅需激活一小部分参数即可发挥强大性能,训练与部署成本相比同性能模型显著降低。此外,Qwen3-Embedding 支持中间维度裁剪的 MR Loss 训练策略——在训练时对32、64、128等多个中间维度进行联合训练,实际应用时可根据需求选择更低的输出维度,从而大幅降低存储与计算开销,而效果几乎不受影响。
2. 应用场景
Qwen3-Embedding 的语义理解与泛化能力使其应用范围极为广泛。具体可胜任的任务,可参考以下逻辑梳理:
(此处可插入原表,原文未提供具体表格内容,按结构保留描述)
3. Qwen3-Embedding 系列模型列表
以下列出各尺寸模型的基本信息(参考下方表格)。需注意两点:MRL 支持表示嵌入模型是否允许自定义最终嵌入维度;指令感知表示模型是否可根据不同任务定制输入指令。从评估数据来看,使用指令通常能带来1%~5%的效果提升,建议为具体场景创建专门的指令。在多语言场景下,推荐使用英语编写指令,因为训练数据中的指令绝大部分为英文。
4. 资源准备及部署要求
在开始部署之前,请先确认环境配置:
- 框架版本:
transformers >= 4.51.0,vllm >= 0.8.5,版本不匹配会报KeyError: 'qwen3'。 - 资源要求:A10 24G * 1 即可满足。
二、Qwen3-Embedding on PAI
1. 模型部署:如何在 PAI 上部署 Qwen3-Embedding
操作步骤非常直观:进入 PAI 控制台 → 快速开始 → Model Gallery → 搜索 Qwen3-Embedding → 选择你需要的参数规模(例如4B)→ 点击部署。以下为截图演示。


点击部署后,你可以在 PAI 控制台 → 模型部署 → 模型在线服务(EAS)中查看正在创建的服务,通常需要几分钟到十几分钟。点击服务名称可进入概览界面,查看容器状态与日志。


部署成功后,在 EAS 列表中即可看到运行中的服务。点击名称可查看基本信息、资源信息、环境信息、服务功能配置及接入信息等。

2. 模型推理:如何调用 Qwen3-Embedding
获取调用信息:进入 PAI 控制台 → 模型部署 → EAS → 找到服务,点击调用信息。
在线调试: 调试时需注意,PAI-EAS 的在线调试服务默认提供的 URL 会返回 {"detail":"Not Found"},需要在 URL 后手动添加 v1/embeddings 才能正常调用。以下是一个 Body 示例:
{
"input": [
"It 's a lovely film with lovely performances.",
"A warm , funny , engaging film."
],
"model": "Qwen3-Embedding-4B"
}
Python 调用: 编写一个 Python 脚本,url 和 token 从 EAS 服务的调用信息中获取。
import requests
url = '修改为您自己的服务地址...v1/embeddings'
token = '修改为您自己的token'
request_body = {
"input": [
"It 's a lovely film with lovely performances.",
"A warm , funny , engaging film."
],
"model": "Qwen3-Embedding-4B"
}
headers = {"Authorization": token}
resp = requests.post(url=url, headers=headers, json=request_body)
print(resp.content.decode())
保存为 emb.py 并执行:
vim emb.py python3.8 emb.py
3. 模型微调:定制你的专属 Embedding 模型
进入 PAI 控制台 → 快速开始 → Model Gallery → 搜索 Qwen3-Embedding → 选择规模(如4B)→ 点击训练。你可以使用默认数据集,也可以上传自己的数据。训练完成后,模型将输出到你配置的路径。
点击训练后,在 PAI 控制台 → 模型开发与训练 → 分布式训练(DLC)中可查看训练任务,等待时间取决于数据集大小与模型规模。点击任务名称可查看状态或日志。
训练完成后,日志中会显示最终的 checkpoint-1705(SFT 后的权重)。之后你可以直接部署或继续训练:在任务管理中找到该训练任务,点击右上角的部署或再训练按钮即可。
4. 微调后的模型部署
部署微调后的模型时,需要在服务配置的 JSON 编辑中修改 path 字段,指向你微调完成后的 checkpoint 目录地址。部署成功后,推理调用方法与前面第2小节相同。
5. 应用场景:电影评论搜索
结合上述部署的模型,生成50条电影评论的向量,然后利用余弦相似度进行搜索。以下是一个完整脚本,关键点在于配置信息中的 url 和 token 需替换为你自己的,并且注意 URL 后要添加 v1/embeddings。
import requests
import numpy as np
import json
from sklearn.metrics.pairwise import cosine_similarity
# ========== 1. 配置信息 ==========
url = '请输入您自己的服务的 URL'
token = '请输入您自己的服务的 Token'
# ========== 2. 已有电影评论列表(你可以替换为你自己的数据)==========
reviews = [
"The cinematography was breathtaking and the story deeply moving.",
"A dull plot with no character development, very disappointing.",
# ... 完整列表见原文
]
# ========== 3. 获取向量表示(若已有 embeddings.json 可跳过)==========
def get_embedding(text):
headers = {"Authorization": token}
payload = {
"input": [text],
"model": "Qwen3-Embedding-4B"
}
response = requests.post(url, headers=headers, json=payload)
return response.json()['data'][0]['embedding']
def generate_embeddings(reviews, filename='embeddings.json'):
embeddings = []
for i, review in enumerate(reviews):
print(f"Generating embedding for review {i+1}/{len(reviews)}")
emb = get_embedding(review)
embeddings.append(emb)
with open(filename, 'w') as f:
json.dump({'reviews': reviews, 'embeddings': embeddings}, f)
print(f"Embeddings sa ved to {filename}")
# ========== 4. 加载向量 ==========
def load_embeddings(filename='embeddings.json'):
with open(filename, 'r') as f:
data = json.load(f)
return data['reviews'], np.array(data['embeddings'])
# ========== 5. 查询最相似的评论 ==========
def find_similar_reviews(query, reviews_list, embeddings_matrix, top_k=3):
query_emb = np.array(get_embedding(query)).reshape(1, -1)
similarities = cosine_similarity(query_emb, embeddings_matrix)[0]
indices = np.argsort(similarities)[::-1][:top_k]
results = [(reviews_list[i], similarities[i]) for i in indices]
return results
# ========== 6. 主程序入口 ==========
if __name__ == '__main__':
# 第一次运行时取消注释,生成并保存向量
# generate_embeddings(reviews)
reviews_list, embeddings_matrix = load_embeddings()
user_query = input("请输入你想查找相似评论的句子:")
similar_reviews = find_similar_reviews(user_query, reviews_list, embeddings_matrix)
print("\n最相似的评论如下:")
for i, (review, score) in enumerate(similar_reviews):
print(f"{i+1}. [相似度: {score:.4f}] {review}")
6. 注意事项
- 调用时,URL 后面必须补上
v1/embeddings,否则会返回 404 错误。 - 部署微调后的模型时,请确保原服务配置中的 path 字段已修改为 checkpoint 目录地址。
三、Qwen3-Embedding on 百炼
在百炼平台中,向量模型暂未开放体验功能,因此直接通过 API 进行调用。
1. 通用文本向量调用
DashScope 方式:
curl --location 'https://dashscope.aliyuncs.com.../text-embedding' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "text-embedding-v4",
"input": {
"texts": ["买的东西质量真的好不枉我等了这么久啊,喜欢,以后还来这里买"]
},
"parameters": {
"dimension": 1024
}
}'
OpenAI 兼容方式:
curl --location 'https://dashscope.aliyuncs.com/...embeddings' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "text-embedding-v4",
"input": "买的东西质量真的好不枉我等了这么久啊,喜欢,以后还来这里买",
"dimension": "1024",
"encoding_format": "float"
}'
2. 应用场景:精准推荐
核心思路:
- 利用向量相似度(如余弦相似度)筛选出最相关的商品。
- 将筛选后的商品描述输入 Qwen 模型,生成自然语言的推荐理由。
- 最终输出融合了向量匹配与语义理解能力,推荐结果更精准、更生动。
以下是一个完整的代码示例:
import dashscope
from http import HTTPStatus
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
dashscope.api_key = "sk-xxxx"
product_descriptions = [
"棉质宽松衬衫,适合春季通勤,透气舒适,简约百搭",
"高腰牛仔裤,修身剪裁,适合日常穿搭,耐磨耐脏",
# ... 完整列表见原文
]
user_query = "设计简约的通勤服装,透气舒适"
inputs = product_descriptions + [user_query]
DASHSCOPE_MAX_BATCH_SIZE = 10
embeddings = []
for i in range(0, len(inputs), DASHSCOPE_MAX_BATCH_SIZE):
batch = inputs[i:i + DASHSCOPE_MAX_BATCH_SIZE]
resp = dashscope.TextEmbedding.call(
model="text-embedding-v4",
input=batch,
dimension=1024
)
if resp.status_code == HTTPStatus.OK:
for emb in resp.output["embeddings"]:
embeddings.append(emb["embedding"])
else:
print(f"Error: {resp.status_code}, {resp.message}")
exit(1)
if not embeddings:
print("Error: No embeddings generated. Aborting.")
exit(1)
# 保存向量和文本到文件
with open("embeddings_output.txt", "w", encoding="utf-8") as f:
f.write(f"# 向量维度: 1024\n")
f.write(f"# 文本数量: {len(inputs)}\n")
f.write("# 格式: | | \n\n")
for idx, (text, vector) in enumerate(zip(inputs, embeddings)):
vector_str = ",".join(map(str, vector))
f.write(f"{idx} | {text} | {vector_str}\n")
query_vector = np.array([embeddings[-1]])
product_vectors = np.array(embeddings[:-1])
similarities = cosine_similarity(query_vector, product_vectors).flatten()
with open("similarity_results.txt", "w", encoding="utf-8") as f:
f.write(f"# 用户查询: {user_query}\n")
f.write(f"# 相似度计算结果:\n")
for idx, (desc, score) in enumerate(zip(product_descriptions, similarities)):
f.write(f"{idx} | {desc} | {score:.6f}\n")
product_ranking = list(zip(product_descriptions, similarities))
product_ranking.sort(key=lambda x: x[1], reverse=True)
print("=== 推荐结果 ===")
for desc, score in product_ranking:
print(f"商品描述: {desc} | 相似度: {score:.4f}")
从相似度结果来看,商品1最符合查询条件。之后可利用 Qwen 模型为每个商品生成推荐理由:
system_prompt = "你是一位专业的商品推荐专家..."
user_prompt = f"""
用户查询:{user_query}
匹配商品描述:
1. {matched_products[0]}
2. {matched_products[1]}
3. {matched_products[2]}
请为每个商品生成推荐理由。
"""
response = dashscope.Generation.call(
model="qwen-plus",
prompt=f"{system_prompt}\n\n{user_prompt}",
)
四、LLM vs 轻量 Embedding 对比实验
声明: 以下测试结果仅作为类似场景的参考,实际场景需结合自身链路进行具体测试。
实验场景: 电影评论搜索。
测试环境:
- 完整 LLM:Qwen3-32B(生成 Embedding),硬件 H20 96G * 1。
- 轻量 Embedding:Qwen3-Embedding-4B,硬件 A10 24G * 1。
- ECS(可选):需与部署模型位于同一地域、同一 VPC。
模型部署 参照第二章第1节在 PAI 上部署 Qwen3-32B。
对比实验
实验方案:
- 基础性能测试:选取20条真实电影评论,对比 Qwen3-Embedding-4B 与 Qwen3-32B 的表现。
- 成本估算:基于百炼官网单价或 PAI 卡资源进行估算。
测试维度: 平均响应时间、批处理耗时(3条)、并发平均延迟、长文本响应时间(约1000字)、并发请求延迟(5个)、Token 平均消耗、语义搜索测试、日均调用成本(1万次)。
样本及单价:
- 20条电影评论样本(见实验脚本)。
- 百炼平台单价:Qwen3-Embedding 0.0005元/千 Tokens;Qwen-32B 输入 0.002元/千 Tokens,非思考模式输出 0.008元/千 Tokens,思考模式输出 0.02元/千 Tokens。
实验脚本(完整代码见原文,此处保留关键结构)
实验结果分析:
从性能数据来看,轻量级 Embedding 在延迟与成本方面优势显著:平均响应时间不到0.1秒,日调用成本仅为 LLM 的1/5到1/4。在语义理解方面,Embedding 模型输出的向量可直接用于相似度计算,能够正确识别高相关性影评,表现稳定可靠。
实验总结: Qwen3-Embedding 系列在低延迟(平均 < 0.1s)与低成本(成本仅为 LLM 的1/5-1/4)方面表现优异。如果搜索链路上对重排要求不高,可以跳过 LLM 直接返回初筛结果,整体延迟可控制在0.1秒以内,成本降低约70%。当然,实际场景还需结合 Embedding 与 LLM 的请求量、使用的卡资源以及链路中的其他环节进行更精细的估算。
一些常见的工程链路优化技巧
- 缓存高频 Embedding:对于查询词、固定模板、高频用户输入,可使用 Redis 缓存 Embedding 结果,并定期更新(如每天),减少实时计算,提升响应速度。
- 自动降级:当服务超载、请求排队积压或 LLM 响应超时时,自动降级到 Embedding + 分类器的方案,避免服务不可用,同时有效控制成本波动。
五、总结
Qwen3-Embedding 是一款功能强大且灵活高效的文本嵌入模型,在语义理解与多场景适配方面表现优异。无论是电商推荐、内容理解,还是企业级语义搜索,你都可以借助它快速构建高效的 AI 应用。通过阿里云 PAI 平台的一键部署、微调与推理能力,或通过百炼平台的 API 调用,开发者能够轻松将其集成到现有系统中,提升产品的智能化水平。未来,随着模型的持续迭代,Qwen3-Embedding 有望成为语义理解领域的关键基础设施之一。
