ONNX 模型库
返回模型

说明文档

<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 仓库 - 必读内容!包含详细文档、性能基准测试、跨语言验证测试和实现示例。
  • 📓 转换笔记本 - 从 FlagEmbedding 到 ONNX 的完整分步转换过程。

⚠️ 请访问 GitHub 仓库,了解本模型的工作原理、性能对比以及多种编程语言的详细使用示例。

✅ 验证结果

本 ONNX 转换已经过全面测试,与原始 BAAI/bge-m3 模型产生100% 相同的结果。所有三种嵌入类型(稠密、稀疏和 ColBERT)均保持精确准确性。

模型详情

模型描述

BGE-M3 ONNX 是 BAAI/bge-m3 模型的转换版本,针对跨平台部署(C#、Java、Python)进行了优化。 此转换支持原始模型 ONNX 版本不支持的所有三种嵌入类型(稠密、稀疏和 ColBERT 向量)。

模型来源

用途

直接使用

本 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

feature-extraction
↓ 0 ♥ 0

创建时间: 2025-08-28 10:31:45+00:00

更新时间: 2025-08-28 11:43:13+00:00

在 Hugging Face 上查看

文件 (5)

.gitattributes
README.md
bge_m3_model.onnx ONNX
bge_m3_model.onnx_data
bge_m3_tokenizer.onnx ONNX