1import onnxruntime as ort
2from transformers import AutoTokenizer
3import numpy as np
4
5# 加载模型
6model_path = "baby2008/Dmeta-embedding-zh-onnx"
7tokenizer = AutoTokenizer.from_pretrained(model_path)
8session = ort.InferenceSession(
9 f"{model_path}/model_int8.onnx",
10 providers=["CPUExecutionProvider"]
11)
12
13# 编码文本
14text = "这是一个测试句子。"
15inputs = tokenizer(
16 text,
17 max_length=512,
18 padding=True,
19 truncation=True,
20 return_tensors="np"
21)
22
23# 推理
24input_ids = inputs["input_ids"].astype(np.int64)
25attention_mask = inputs["attention_mask"].astype(np.int64)
26
27result = session.run(None, {
28 "input_ids": input_ids,
29 "attention_mask": attention_mask
30})
31
32embedding = result[0] # shape: (1, seq_len, 768)
33
34# 获取句子嵌入(平均池化)
35sentence_embedding = embedding.mean(axis=1)
36
37# 归一化
38normalized = sentence_embedding / np.linalg.norm(sentence_embedding)
1def cosine_similarity(a, b):
2 return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
3
4# 编码两个句子
5text1 = "今天天气很好"
6text2 = "阳光明媚"
7
8# ... (获取嵌入)
9
10# 计算相似度
11similarity = cosine_similarity(embedding1, embedding2)
12print(f"Similarity: {similarity:.4f}")
.
├── config.json # 模型配置
├── model_int8.onnx # INT8 量化模型 (98.7 MB)
├── special_tokens_map.json # 特殊 token 映射
├── tokenizer.json # 分词器
├── tokenizer_config.json # 分词器配置
└── vocab.txt # 词汇表