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