说明文档
<img width="1589" height="1180" alt="image" src="https://github.com/user-attachments/assets/c30cf557-4b54-42be-adc6-1c84bb704337" />
BGE-M3 ONNX
完整的 BGE-M3 嵌入模型 已转换为 ONNX 格式,并支持完整的多向量功能。 虽然 Hugging Face 上的原始 BAAI 模型 提供了 ONNX 格式,但它不支持稀疏向量和 ColBERT 向量生成——而本模型支持。
本模型的文件还包含一个 分词器 ONNX 模型,可由 ONNX Runtime 原生推理,通过使用 ONNX Runtime Extensions 实现跨多种编程语言(包括 C#、Java 和 Python)的原生使用。
下方提供了详细信息、示例和源代码链接,帮助您快速入门。
🔗 重要链接
⚠️ 请访问 GitHub 仓库,了解本模型的工作原理、性能对比以及多种编程语言的详细使用示例。
✅ 验证结果
本 ONNX 转换已经过全面测试,与原始 BAAI/bge-m3 模型产生100% 相同的结果。所有三种嵌入类型(稠密、稀疏和 ColBERT)均保持精确准确性。
模型详情
模型描述
BGE-M3 ONNX 是 BAAI/bge-m3 模型的转换版本,针对跨平台部署(C#、Java、Python)进行了优化。 此转换支持原始模型 ONNX 版本不支持的所有三种嵌入类型(稠密、稀疏和 ColBERT 向量)。
- 开发者: BAAI(原始模型),由 Yuniko Software 转换
- 模型类型: 多语言嵌入模型(基于 XLM-RoBERTa)
- 语言: 100+ 种语言
- 许可证: Apache 2.0
- 基础模型: BAAI/bge-m3
模型来源
- 仓库: yuniko-software/bge-m3-onnx
- 原始论文: BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation
用途
直接使用
本 ONNX 模型支持:
- 跨平台部署: 在 C#、Java、Python 和其他语言中使用 BGE-M3 嵌入
- 离线推理: 本地生成嵌入,无需 API 依赖
- GPU 加速: CUDA 支持,性能更佳(示例)
- 多向量输出: 同时生成稠密、稀疏和 ColBERT 嵌入
下游用途
非常适合以下应用:
- 语义搜索与检索
- 文档相似度与聚类
- 跨语言信息检索
- 混合搜索系统(结合稠密和稀疏检索)
如何开始使用本模型
Python 使用
完整示例:https://github.com/yuniko-software/bge-m3-onnx/tree/main/samples/python
from bge_m3_embedder import create_cpu_embedder, create_cuda_embedder
# 创建 CPU 优化的嵌入器
embedder = create_cpu_embedder("bge_m3_tokenizer.onnx", "bge_m3_model.onnx")
# 生成所有三种嵌入类型
result = embedder.encode("Hello world!")
print(f"Dense: {len(result['dense_vecs'])} dimensions")
print(f"Sparse: {len(result['lexical_weights'])} tokens")
print(f"ColBERT: {len(result['colbert_vecs'])} vectors")
# 清理资源
embedder.close()
# CUDA 加速
cuda_embedder = create_cuda_embedder("bge_m3_tokenizer.onnx", "bge_m3_model.onnx", device_id=0)
result = cuda_embedder.encode("Hello world!")
cuda_embedder.close()
# 完整实现:https://github.com/yuniko-software/bge-m3-onnx/tree/main/samples/python
C# 使用
完整示例:https://github.com/yuniko-software/bge-m3-onnx/tree/main/samples/dotnet
using BgeM3.Onnx;
// 创建 CPU 优化的嵌入器
using var embedder = M3EmbedderFactory.CreateCpuOptimized("bge_m3_tokenizer.onnx", "bge_m3_model.onnx");
// 生成所有嵌入类型
var result = embedder.GenerateEmbeddings("Hello world!");
Console.WriteLine($"Dense: {result.DenseEmbedding.Length} dimensions");
Console.WriteLine($"Sparse: {result.SparseWeights.Count} tokens");
Console.WriteLine($"ColBERT: {result.ColBertVectors.Length} vectors");
// CUDA 加速
using var cudaEmbedder = M3EmbedderFactory.CreateCudaOptimized("bge_m3_tokenizer.onnx", "bge_m3_model.onnx", deviceId: 0);
var cudaResult = cudaEmbedder.GenerateEmbeddings("Hello world!");
// 完整实现:https://github.com/yuniko-software/bge-m3-onnx/tree/main/samples/dotnet
Java 使用
完整示例:https://github.com/yuniko-software/bge-m3-onnx/tree/main/samples/java/bge-m3-onnx
import com.yunikosoftware.bgem3onnx.*;
// 创建 CPU 优化的嵌入器
try (M3Embedder embedder = M3EmbedderFactory.createCpuOptimized("bge_m3_tokenizer.onnx", "bge_m3_model.onnx")) {
// 生成所有嵌入类型
M3EmbeddingOutput result = embedder.generateEmbeddings("Hello world!");
System.out.println("Dense: " + result.getDenseEmbedding().length + " dimensions");
System.out.println("Sparse: " + result.getSparseWeights().size() + " tokens");
System.out.println("ColBERT: " + result.getColBertVectors().length + " vectors");
}
// CUDA 加速
try (M3Embedder cudaEmbedder = M3EmbedderFactory.createCudaOptimized("bge_m3_tokenizer.onnx", "bge_m3_model.onnx", 0)) {
M3EmbeddingOutput result = cudaEmbedder.generateEmbeddings("Hello world!");
// 处理 CUDA 结果
}
// 完整实现:https://github.com/yuniko-software/bge-m3-onnx/tree/main/samples/java/bge-m3-onnx
模型文件
bge_m3_tokenizer.onnx- 用于文本预处理的 ONNX 分词器bge_m3_model.onnx- 主 BGE-M3 嵌入模型图bge_m3_model.onnx_data- 外部数据格式的模型权重
联系方式
如有关于此 ONNX 转换的问题,请访问仓库或提交 issue。
yuniko-software/bge-m3-onnx
作者 yuniko-software
创建时间: 2025-08-28 10:31:45+00:00
更新时间: 2025-08-28 11:43:13+00:00
在 Hugging Face 上查看