Dmeta Embedding Zh
模型简介
该模型主要用于句子相似度计算、特征提取和文本检索等任务,在多个中文数据集上表现出色。
模型特点
多任务支持
支持句子相似度计算、文本分类、聚类、检索和重新排序等多种任务。
高性能
在多个中文数据集上表现出色,特别是在医疗问答检索任务中表现优异。
多种相似度度量
支持余弦相似度、欧几里得距离和曼哈顿距离等多种相似度度量方法。
模型能力
句子相似度计算
特征提取
文本分类
聚类
文本检索
重新排序
使用案例
医疗问答
医疗问答检索
用于医疗领域的问答检索系统,帮助用户快速找到相关答案。
在CMedQA数据集上表现出色,平均精度达到88.48%
文本分类
商品评论分类
对电商平台的商品评论进行分类。
在AmazonReviews中文数据集上准确率达到44.93%
句子相似度
句子对匹配
判断两个句子是否表达相同或相似的意思。
在AFQMC数据集上余弦相似度皮尔逊相关系数达到65.61%
🚀 Dmeta-embedding
Dmeta-embedding 是一个跨领域、跨任务、开箱即用的中文嵌入模型,适用于搜索引擎、问答、智能客服、LLM+RAG 等多种场景。它支持使用 Transformers、Sentence-Transformers、Langchain 等工具进行推理。
🚀 快速开始
Dmeta-embedding 模型支持通过 Sentence-Transformers、Langchain、Huggingface Transformers 等框架进行推理。具体使用方法请参考以下示例。
Sentence-Transformers
通过 sentence-transformers 加载并推理 Dmeta-embedding,操作如下:
pip install -U sentence-transformers
from sentence_transformers import SentenceTransformer
texts1 = ["胡子长得太快怎么办?", "在香港哪里买手表好"]
texts2 = ["胡子长得快怎么办?", "怎样使胡子不浓密!", "香港买手表哪里好", "在杭州手机到哪里买"]
model = SentenceTransformer('DMetaSoul/Dmeta-embedding')
embs1 = model.encode(texts1, normalize_embeddings=True)
embs2 = model.encode(texts2, normalize_embeddings=True)
similarity = embs1 @ embs2.T
print(similarity)
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()
输出结果:
查询文本:胡子长得太快怎么办?
相似文本:胡子长得快怎么办?,打分:0.9535336494445801
相似文本:怎样使胡子不浓密!,打分:0.6776421070098877
相似文本:香港买手表哪里好,打分:0.2297907918691635
相似文本:在杭州手机到哪里买,打分:0.11386542022228241
查询文本:在香港哪里买手表好
相似文本:香港买手表哪里好,打分:0.9843372106552124
相似文本:在杭州手机到哪里买,打分:0.45211508870124817
相似文本:胡子长得快怎么办?,打分:0.19985519349575043
相似文本:怎样使胡子不浓密!,打分:0.18558596074581146
Langchain
通过 langchain 加载并推理 Dmeta-embedding,操作如下:
pip install -U langchain
import torch
import numpy as np
from langchain.embeddings import HuggingFaceEmbeddings
model_name = "DMetaSoul/Dmeta-embedding"
model_kwargs = {'device': 'cuda' if torch.cuda.is_available() else 'cpu'}
encode_kwargs = {'normalize_embeddings': True} # set True to compute cosine similarity
model = HuggingFaceEmbeddings(
model_name=model_name,
model_kwargs=model_kwargs,
encode_kwargs=encode_kwargs,
)
texts1 = ["胡子长得太快怎么办?", "在香港哪里买手表好"]
texts2 = ["胡子长得快怎么办?", "怎样使胡子不浓密!", "香港买手表哪里好", "在杭州手机到哪里买"]
embs1 = model.embed_documents(texts1)
embs2 = model.embed_documents(texts2)
embs1, embs2 = np.array(embs1), np.array(embs2)
similarity = embs1 @ embs2.T
print(similarity)
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()
HuggingFace Transformers
通过 HuggingFace Transformers 加载并推理 Dmeta-embedding,操作如下:
pip install -U transformers
import torch
from transformers import AutoTokenizer, AutoModel
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0] #First element of model_output contains all token embeddings
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
def cls_pooling(model_output):
return model_output[0][:, 0]
texts1 = ["胡子长得太快怎么办?", "在香港哪里买手表好"]
texts2 = ["胡子长得快怎么办?", "怎样使胡子不浓密!", "香港买手表哪里好", "在杭州手机到哪里买"]
tokenizer = AutoTokenizer.from_pretrained('DMetaSoul/Dmeta-embedding')
model = AutoModel.from_pretrained('DMetaSoul/Dmeta-embedding')
model.eval()
with torch.no_grad():
inputs1 = tokenizer(texts1, padding=True, truncation=True, return_tensors='pt')
inputs2 = tokenizer(texts2, padding=True, truncation=True, return_tensors='pt')
model_output1 = model(**inputs1)
model_output2 = model(**inputs2)
embs1, embs2 = cls_pooling(model_output1), cls_pooling(model_output2)
embs1 = torch.nn.functional.normalize(embs1, p=2, dim=1).numpy()
embs2 = torch.nn.functional.normalize(embs2, p=2, dim=1).numpy()
similarity = embs1 @ embs2.T
print(similarity)
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()
✨ 主要特性
- 出色的跨领域和场景泛化性能:目前在 MTEB 中文排行榜 上排名第二(截至 2024.01.25)。
- 低推理成本:模型参数大小仅为 400MB,可大幅降低推理成本。
- 长文本处理能力:上下文窗口长度可达 1024,更适合长文本检索、RAG 等场景。
📚 详细文档
评估
Dmeta-embedding 模型在 MTEB 中文排行榜 上的开源模型中排名第一(截至 2024.01.25,百川模型未开源,排名第一)。具体评估数据和代码请参考 MTEB 官方仓库。
MTEB 中文评估: 中文排行榜数据集 由北京智源人工智能研究院(BAAI)收集,包含 6 个经典任务和 35 个中文数据集,涵盖分类、检索、重排序、句子对分类、语义文本相似度(STS)等任务,是目前最全面的 Embedding 模型能力评估的权威基准。
模型 | 厂商 | 嵌入维度 | 平均得分 | 检索 | STS | 句子对分类 | 分类 | 重排序 | 聚类 |
---|---|---|---|---|---|---|---|---|---|
Dmeta-embedding | 本团队 | 768 | 67.51 | 70.41 | 64.09 | 88.92 | 70 | 67.17 | 50.96 |
gte-large-zh | 阿里巴巴达摩院 | 1024 | 66.72 | 72.49 | 57.82 | 84.41 | 71.34 | 67.4 | 53.07 |
BAAI/bge-large-zh-v1.5 | 北京智源人工智能研究院 | 1024 | 64.53 | 70.46 | 56.25 | 81.6 | 69.13 | 65.84 | 48.99 |
BAAI/bge-base-zh-v1.5 | 北京智源人工智能研究院 | 768 | 63.13 | 69.49 | 53.72 | 79.75 | 68.07 | 65.39 | 47.53 |
text-embedding-ada-002(OpenAI) | OpenAI | 1536 | 53.02 | 52.0 | 43.35 | 69.56 | 64.31 | 54.28 | 45.68 |
text2vec-base | 个人 | 768 | 47.63 | 38.79 | 43.41 | 67.41 | 62.19 | 49.45 | 37.66 |
text2vec-large | 个人 | 1024 | 47.36 | 41.94 | 44.97 | 70.86 | 60.66 | 49.16 | 30.02 |
常见问题解答
1. 为什么该模型具有如此出色的泛化性能,能够开箱即用于多种任务场景?
模型出色的泛化能力得益于预训练数据的多样性,以及在预训练模型时针对多任务场景设计的不同优化目标。具体而言,主要技术特点如下: 1. **大规模弱标签对比学习**:行业经验表明,开箱即用的语言模型在 Embedding 相关任务上表现不佳。然而,由于监督数据标注和获取成本较高,大规模、高质量的弱标签学习成为一种可选的技术路线。通过从互联网上的论坛、新闻、问答社区、百科全书等半结构化数据中提取弱标签,并使用大模型进行低质量过滤,获得了十亿级的弱监督文本对数据。 2. **高质量监督学习**:收集并整理了大规模的开源标注句子对数据集,涵盖百科、教育、金融、医疗、法律、新闻、学术等领域,共计 3000 万对句子样本。同时,挖掘难负样本对,并使用对比学习更好地优化模型。 3. **检索任务优化**:考虑到搜索、问答、RAG 等场景是 Embedding 模型的重要应用场景,为了增强模型的跨领域和跨场景性能,专门针对检索任务对模型进行了优化。核心在于从问答、检索等数据中挖掘难负样本,使用稀疏和密集检索等方法构建了百万级的难负样本对数据集,显著提高了模型的跨领域检索性能。2. 该模型能否用于商业用途?
我们的模型基于 Apache-2.0 许可证,完全支持免费商业使用。3. 如何复现 MTEB 评估结果?
我们在模型仓库中提供了 mteb_eval.py 脚本,你可以直接运行该脚本来复现评估结果。4. 后续有哪些计划?
我们将继续努力,为社区提供性能出色、推理轻量级且能开箱即用于多种场景的 Embedding 模型。同时,我们将逐步将 Embedding 集成到现有技术生态系统中,与社区共同成长!📄 许可证
Dmeta-embedding 采用 Apache-2.0 许可证,发布的模型可免费用于商业目的。
Jina Embeddings V3
Jina Embeddings V3 是一个多语言句子嵌入模型,支持超过100种语言,专注于句子相似度和特征提取任务。
文本嵌入
Transformers 支持多种语言

J
jinaai
3.7M
911
Ms Marco MiniLM L6 V2
Apache-2.0
基于MS Marco段落排序任务训练的交叉编码器模型,用于信息检索中的查询-段落相关性评分
文本嵌入 英语
M
cross-encoder
2.5M
86
Opensearch Neural Sparse Encoding Doc V2 Distill
Apache-2.0
基于蒸馏技术的稀疏检索模型,专为OpenSearch优化,支持免推理文档编码,在搜索相关性和效率上优于V1版本
文本嵌入
Transformers 英语

O
opensearch-project
1.8M
7
Sapbert From PubMedBERT Fulltext
Apache-2.0
基于PubMedBERT的生物医学实体表征模型,通过自对齐预训练优化语义关系捕捉
文本嵌入 英语
S
cambridgeltl
1.7M
49
Gte Large
MIT
GTE-Large 是一个强大的句子转换器模型,专注于句子相似度和文本嵌入任务,在多个基准测试中表现出色。
文本嵌入 英语
G
thenlper
1.5M
278
Gte Base En V1.5
Apache-2.0
GTE-base-en-v1.5 是一个英文句子转换器模型,专注于句子相似度任务,在多个文本嵌入基准测试中表现优异。
文本嵌入
Transformers 支持多种语言

G
Alibaba-NLP
1.5M
63
Gte Multilingual Base
Apache-2.0
GTE Multilingual Base 是一个多语言的句子嵌入模型,支持超过50种语言,适用于句子相似度计算等任务。
文本嵌入
Transformers 支持多种语言

G
Alibaba-NLP
1.2M
246
Polybert
polyBERT是一个化学语言模型,旨在实现完全由机器驱动的超快聚合物信息学。它将PSMILES字符串映射为600维密集指纹,以数值形式表示聚合物化学结构。
文本嵌入
Transformers

P
kuelumbus
1.0M
5
Bert Base Turkish Cased Mean Nli Stsb Tr
Apache-2.0
基于土耳其语BERT的句子嵌入模型,专为语义相似度任务优化
文本嵌入
Transformers 其他

B
emrecan
1.0M
40
GIST Small Embedding V0
MIT
基于BAAI/bge-small-en-v1.5模型微调的文本嵌入模型,通过MEDI数据集与MTEB分类任务数据集训练,优化了检索任务的查询编码能力。
文本嵌入
Safetensors 英语
G
avsolatorio
945.68k
29
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers 支持多种语言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers 英语

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98