模型名称: sentence-transformers/multi-qa-mpnet-base-dot-v1(sentence-transformers/multi-qa-mpnet-base-dot-v1)
模型链接: https://huggingface.co/sentence-transformers/multi-qa-mpnet-base-dot-v1
模型描述: sentence-transformers 发布的多语言 QA 句向量模型,基于 Microsoft MPNet-base 微调。将文本映射为 768 维句向量,支持文本语义相似度、语义检索、FAQ 问答匹配等任务。基于 dot 点积计算相似度(multi-qa-mpnet-base-dot-v1)。
模型架构: MPNetModel(mpnet),Transformer encoder,12 层,hidden_size 768,12 注意力头,CLS 池化 + L2 归一化
参数规模: ~110M,fp32 权重约 420MB
适配引擎: torch_npu(昇腾 NPU 推理引擎)
适配硬件: 昇腾 Ascend 910(CANN 8.5.1 + torch_npu 2.9.0)
| 依赖项 | 版本要求 | 说明 |
|---|---|---|
| Python | >= 3.10 | 推荐 3.11 |
| torch | 2.9.0 | CPU 版 |
| torch_npu | 2.9.0.post1 | 昇腾 NPU 适配层(随 CANN 安装) |
| transformers | 4.57.6 | HuggingFace 库 |
| CANN | 8.5.1 | 昇腾计算架构 |
| 昇腾驱动 | 25.5.5 | npu-smi 版本 |
安装命令:
# 已内置 Python 环境(本项目已安装,列出供参考)
pip install torch==2.9.0 transformers==4.57.6
# torch_npu 需从 CANN 安装包配套安装(源码包:https://gitee.com/ascend/pytorch)
# 安装后验证 NPU 可用:
npu-smi info# 1. 检查 NPU 设备(应显示 Ascend910,状态 OK)
npu-smi info
# 2. 下载模型权重(huggingface.co 不可达时使用 hf-mirror 镜像)
export HF_ENDPOINT=https://hf-mirror.com
python -c "from huggingface_hub import snapshot_download; snapshot_download('sentence-transformers/multi-qa-mpnet-base-dot-v1', local_dir='./multi-qa-mpnet-base-dot-v1')"# 方式一:默认示例(query 与候选文档相似度)
python inference.py
# 方式二:单条文本编码
python inference.py --text "How big is London"
# 方式三:文本相似度计算
python inference.py --text "London has 9 million people" --compare "How big is London"
# 方式四:批量编码(每行一条)
python inference.py --input_file test_texts.txt
# 指定设备和模型路径
python inference.py --text "How big is London" --device npu:0 --model_path /path/to/model| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--text | str | None | 待编码文本 |
--compare | str | None | 与 --text 计算相似度的文本 |
--input_file | str | None | 批量编码文件(每行一条) |
--model_path | str | ./multi-qa-mpnet-base-dot-v1 | 模型本地路径 |
--device | str | 自动检测 | 推理设备:npu:0 / cpu |
本工程推理脚本通过 torch_npu 昇腾推理引擎调用 NPU 设备(import torch_npu 注册 npu 后端)。模型权重加载至 NPU,所有算子经 CANN 昇腾加速执行,无 CUDA 依赖。
句向量生成: 文本经 tokenizer 编码 → MPNetModel 编码 → 取 last_hidden_state[:, 0](CLS token)→ L2 归一化 → 768 维句向量。与 sentence-transformers 默认 CLS 池化一致。
以下输出为在昇腾 Ascend 910(CANN 8.5.1 + torch_npu 2.9.0)上实测获得。
命令:
python inference.py输出:
[INFO] 推理设备: npu:0
[INFO] 加载模型: ./multi-qa-mpnet-base-dot-v1
[INFO] 模型加载完成 (device=npu:0, dtype=torch.bfloat16)
[INFO] 默认示例:query 与候选文档的相似度
[结果] 句向量 shape: (768,)
sim(query, 'London has 9 million people') = 0.6769
sim(query, 'What is the capital of France') = 0.2863
[耗时] 0.21s结果说明: query "How big is London" 与相关文档 "London has 9 million people" 相似度 0.68(语义相关),与不相关文档 "What is the capital of France" 相似度 0.29(语义不相关),模型正确区分语义相关性。
命令:
python inference.py --text "London has 9 million people" --compare "How big is London"输出:
[INFO] 推理设备: npu:0
[结果] 句向量 shape: (768,)
[结果] text: London has 9 million people
[结果] compare: How big is London
[结果] 相似度 (dot): 0.6769
[耗时] 0.18s结果说明: 两条语义相关的 QA 文本对的 dot 相似度为 0.68,符合预期(多语言 QA 检索场景)。



inference.py 通过 torch_npu 引擎调用 NPU。-dot-v1)。