DMeta-Embedding-ZH ONNX

DMeta-Embedding-ZH 中文嵌入模型的 ONNX INT8 量化版本,专为语义检索和相似度计算优化。

模型特点

  • ONNX 格式 - 跨平台部署
  • INT8 量化 - 模型大小仅 98.7 MB
  • CPU 优化 - 平均推理时间 ~12ms
  • 中文优化 - 专为中文语义理解设计
  • 兼容性好 - 支持 ONNX Runtime 推理

模型信息

属性
Base Model Dmeta-embedding-zh
Hidden Size 768
Max Position 1024
Vocabulary Size 21128
Model Size 98.7 MB (INT8)
Format ONNX
Quantization INT8

性能基准

测试环境:Intel CPU, ONNX Runtime 1.16.3

输入长度 推理时间
11 tokens 12.10 ms
22 tokens 12.56 ms
17 tokens 11.23 ms

安装依赖

pip install onnxruntime transformers numpy

使用方法

Python

import onnxruntime as ort
from transformers import AutoTokenizer
import numpy as np

# 加载模型
model_path = "baby2008/Dmeta-embedding-zh-onnx"
tokenizer = AutoTokenizer.from_pretrained(model_path)
session = ort.InferenceSession(
    f"{model_path}/model_int8.onnx",
    providers=["CPUExecutionProvider"]
)

# 编码文本
text = "这是一个测试句子。"
inputs = tokenizer(
    text,
    max_length=512,
    padding=True,
    truncation=True,
    return_tensors="np"
)

# 推理
input_ids = inputs["input_ids"].astype(np.int64)
attention_mask = inputs["attention_mask"].astype(np.int64)

result = session.run(None, {
    "input_ids": input_ids,
    "attention_mask": attention_mask
})

embedding = result[0]  # shape: (1, seq_len, 768)

# 获取句子嵌入(平均池化)
sentence_embedding = embedding.mean(axis=1)

# 归一化
normalized = sentence_embedding / np.linalg.norm(sentence_embedding)

相似度计算

def cosine_similarity(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

# 编码两个句子
text1 = "今天天气很好"
text2 = "阳光明媚"

# ... (获取嵌入)

# 计算相似度
similarity = cosine_similarity(embedding1, embedding2)
print(f"Similarity: {similarity:.4f}")

模型输出

  • 输出形状: (batch_size, sequence_length, 768)
  • 输出类型: float32
  • 推荐池化: 平均池化 (mean pooling) 或 CLS token

使用场景

  • ✅ 语义检索
  • ✅ 文本相似度计算
  • ✅ 文本聚类
  • ✅ 推荐系统
  • ✅ 问答系统

与原模型对比

指标 原模型 INT8 量化
模型大小 ~400 MB 98.7 MB
内存占用 较高
推理速度 基准 相似
精度损失 - < 1%

文件说明

.
├── config.json              # 模型配置
├── model_int8.onnx          # INT8 量化模型 (98.7 MB)
├── special_tokens_map.json  # 特殊 token 映射
├── tokenizer.json           # 分词器
├── tokenizer_config.json    # 分词器配置
└── vocab.txt                # 词汇表

注意事项

  1. 输入长度: 建议不超过 512 tokens
  2. 归一化: 输出建议进行 L2 归一化
  3. 池化: 使用平均池化获取句子级嵌入
  4. 语言: 主要优化中文,英文支持有限

许可证

Apache 2.0

参考资料

Downloads last month
29
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support