HuggingFace镜像/Dmeta-embedding-zh
模型介绍文件和版本分析
下载使用量0

Dmeta-embedding 是一款跨领域、跨任务、开箱即用的中文 Embedding 模型,适用于搜索、问答、智能客服、LLM+RAG 等各种业务场景,支持使用 Transformers/Sentence-Transformers等工具加载推理。

优势特点如下:

  • 多任务、场景泛化性能优异,目前已取得 [MTEB]中文榜单第二成绩(2024.01.25)
  • 模型参数大小仅 400MB,对比参数量超过 GB 级模型,可以极大降低推理成本
  • 支持上下文窗口长度达到 1024,对于长文本检索、RAG 等场景更适配

使用方法

目前模型支持通过 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. 为何模型多任务、场景泛化能力优异,可开箱即用适配诸多应用场景?

简单来说,模型优异的泛化能力源于预训练数据的广泛多样性,以及模型优化时针对多任务场景设计了不同的优化目标。

具体而言,技术要点如下:

1)首先是大规模弱标签对比学习。业界经验显示,开箱即用的语言模型在 Embedding 相关任务上表现欠佳,而由于监督数据的标注和获取成本较高,大规模、高质量的弱标签学习便成为一条可行的技术路线。我们通过从互联网上的论坛、新闻、问答社区、百科等半结构化数据中提取弱标签,并利用大模型进行低质数据过滤,最终获得了 10 亿级别弱监督文本对数据。

2)其次是高质量监督学习。我们收集整理了大规模开源标注的语句对数据集,涵盖百科、教育、金融、医疗、法律、新闻、学术等多个领域,共计 3000 万句对样本。同时,我们还挖掘难负样本对,借助对比学习对模型进行更好的优化。

3)最后是检索任务针对性优化。考虑到搜索、问答以及 RAG 等场景是 Embedding 模型落地的重要应用领域,为增强模型的跨领域、跨场景效果性能,我们专门针对检索任务进行了模型优化。其核心在于从问答、检索等数据中挖掘难负样本,并借助稀疏和稠密检索等多种手段,构建百万级难负样本对数据集,从而显著提升了模型的跨领域检索性能。

2. 模型可以商用吗?

我们的开源模型基于 Apache-2.0 协议,完全支持免费商用。

许可证

Dmeta-embedding 模型采用 Apache-2.0 License,开源模型可进行免费商用私有部署。