--- license: apache-2.0 base_model: Dmeta-embedding-zh tags: - onnx - embedding - chinese - bert - quantized - int8 language: - zh - en --- # 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 | ## 安装依赖 ```bash pip install onnxruntime transformers numpy ``` ## 使用方法 ### Python ```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) ``` ### 相似度计算 ```python 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 ## 参考资料 - [Original Model](https://huggingface.co/Dmeta-embedding-zh) - [ONNX Runtime](https://onnxruntime.ai/) - [Transformers](https://huggingface.co/docs/transformers)