Dmeta-embedding 是一款跨领域、跨任务、开箱即用的中文 Embedding 模型,适用于搜索、问答、智能客服、LLM+RAG 等各种业务场景,支持使用 Transformers/Sentence-Transformers等工具加载推理。
优势特点如下:
目前模型支持通过 Sentence-Transformers主流框架进行推理,具体用法参考各个框架的示例。
Dmeta-embedding 模型支持通过 sentence-transformers 来加载推理:
pip install -U sentence-transformers# -*- coding: utf-8 -*-
import argparse
import torch
import numpy as np
from openmind import is_torch_npu_available
from sentence_transformers import SentenceTransformer
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument(
"--model_name_or_path",
type=str,
help="Path to model",
default="ChongqingAscend/Dmeta-embedding-zh",
)
args = parser.parse_args()
return args
def main():
device = "npu" if is_torch_npu_available() else "cpu"
#model_path = args.model_name_or_path
args = parse_args()
model_path = args.model_name_or_path
texts1 = ["胡子长得太快怎么办?", "在香港哪里买手表好"]
texts2 = ["胡子长得快怎么办?", "怎样使胡子不浓密!", "香港买手表哪里好", "在杭州手机到哪里买"]
model = SentenceTransformer(model_path).to(device)
embs1 = model.encode(texts1, normalize_embeddings=True)
embs2 = model.encode(texts2, normalize_embeddings=True)
# 计算两两相似度
similarity = embs1 @ embs2.T
print(similarity)
# 获取 texts1[i] 对应的最相似 texts2[j]
for i in range(len(texts1)):
scores = []
for j in range(len(texts2)):
scores.append([texts2[j], similarity[i][j]])
scores = sorted(scores, key=lambda x:x[1], reverse=True)
print(f"查询文本:{texts1[i]}")
for text2, score in scores:
print(f"相似文本:{text2},打分:{score}")
print()
if __name__ == "__main__":
main()
示例输出如下:
查询文本:胡子长得太快怎么办?
相似文本:胡子长得快怎么办?,打分:0.9535336494445801
相似文本:怎样使胡子不浓密!,打分:0.6776421070098877
相似文本:香港买手表哪里好,打分:0.2297907918691635
相似文本:在杭州手机到哪里买,打分:0.11386542022228241
查询文本:在香港哪里买手表好
相似文本:香港买手表哪里好,打分:0.9843372106552124
相似文本:在杭州手机到哪里买,打分:0.45211508870124817
相似文本:胡子长得快怎么办?,打分:0.19985519349575043
相似文本:怎样使胡子不浓密!,打分:0.18558596074581146简单来说,模型优异的泛化能力源于预训练数据的广泛多样性,以及模型优化时针对多任务场景设计了不同的优化目标。
具体而言,技术要点如下:
1)首先是大规模弱标签对比学习。业界经验显示,开箱即用的语言模型在 Embedding 相关任务上表现欠佳,而由于监督数据的标注和获取成本较高,大规模、高质量的弱标签学习便成为一条可行的技术路线。我们通过从互联网上的论坛、新闻、问答社区、百科等半结构化数据中提取弱标签,并利用大模型进行低质数据过滤,最终获得了 10 亿级别弱监督文本对数据。
2)其次是高质量监督学习。我们收集整理了大规模开源标注的语句对数据集,涵盖百科、教育、金融、医疗、法律、新闻、学术等多个领域,共计 3000 万句对样本。同时,我们还挖掘难负样本对,借助对比学习对模型进行更好的优化。
3)最后是检索任务针对性优化。考虑到搜索、问答以及 RAG 等场景是 Embedding 模型落地的重要应用领域,为增强模型的跨领域、跨场景效果性能,我们专门针对检索任务进行了模型优化。其核心在于从问答、检索等数据中挖掘难负样本,并借助稀疏和稠密检索等多种手段,构建百万级难负样本对数据集,从而显著提升了模型的跨领域检索性能。
我们的开源模型基于 Apache-2.0 协议,完全支持免费商用。
Dmeta-embedding 模型采用 Apache-2.0 License,开源模型可进行免费商用私有部署。