license: cc-by-nc-4.0
language:
- 阿拉伯语
- 孟加拉语
- 中文
- 英语
- 芬兰语
- 法语
- 德语
- 印地语
- 印尼语
- 意大利语
- 日语
- 韩语
- 波斯语
- 葡萄牙语
- 俄语
- 西班牙语
- 斯瓦希里语
- 泰卢固语
- 泰语
- 约鲁巴语
pipeline_tag: 句子相似度
library_name: transformers
tags:
- 句子转换器
DRAMA-large (0.3B):基于大语言模型增强的小型稠密检索模型
DRAMA-large (0.3B) 是一个基于剪枝后大语言模型架构构建的稠密检索模型。该模型通过对大语言模型进行剪枝,并针对高效且可泛化的多语言文本检索任务进行微调而得到。通过利用大语言模型进行高质量数据增强,尽管其非嵌入参数规模仅为0.3B,DRAMA-large在英语和多语言检索任务中均展现出强劲性能。
drama-large
的默认嵌入维度为1024,由于采用了套娃表示学习(Matryoshka Representation Learning),其维度可灵活截断至512或256等不同尺寸。
详情请参阅我们的论文。
使用方式
以下示例展示如何使用drama-base
编码来自MIRACL数据集的查询和文档,支持Transformers和Sentence Transformers两种方式:
Transformers
import torch
from transformers import AutoTokenizer, AutoModel
queries = [
'地球大气中氧气占比多少?',
'意大利首都是哪里?',
]
documents = [
"过去6亿年间大气含氧量持续波动,在石炭纪达到35%的峰值,远高于现今21%的水平。",
"罗马是欧洲国家意大利的首都及罗马广域市首府,也是意大利政治、经济、文化和交通中心,坐落于台伯河下游平原,建城之初建于七座山丘之上,故有'七丘之城'之称。按城市人口统计,罗马是意大利人口最多的城市,也是欧盟第三大城市。",
]
model_name = "facebook/drama-large"
device = "cuda" if torch.cuda.is_available() else "cpu"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name, trust_remote_code=True).to(device)
query_embs = model.encode_queries(tokenizer, queries)
doc_embs = model.encode_documents(tokenizer, documents)
scores = query_embs @ doc_embs.T
print(scores.tolist())
设置trust_remote_code
将启用我们定制的drama_modeling.py
,包含两个特性:
- 使用双向注意力机制而非单向注意力
- 自动为查询文本添加
"Query: "
前缀(文档不添加前缀)
DRAMA模型采用套娃表示学习(MRL)训练,支持灵活维度调整。查询和文档均可编码为更小维度(如256):
query_embs = model.encode_queries(tokenizer, queries, dim=256)
doc_embs = model.encode_documents(tokenizer, documents, dim=256)
scores = query_embs @ doc_embs.T
print(scores.tolist())
Sentence Transformers
from sentence_transformers import SentenceTransformer
queries = [
'地球大气中氧气占比多少?',
'意大利首都是哪里?',
]
documents = [
"过去6亿年间大气含氧量持续波动,在石炭纪达到35%的峰值,远高于现今21%的水平。",
"罗马是欧洲国家意大利的首都及罗马广域市首府,也是意大利政治、经济、文化和交通中心,坐落于台伯河下游平原,建城之初建于七座山丘之上,故有'七丘之城'之称。按城市人口统计,罗马是意大利人口最多的城市,也是欧盟第三大城市。",
]
model = SentenceTransformer("facebook/drama-large", trust_remote_code=True)
query_embs = model.encode(queries, prompt_name="query")
doc_embs = model.encode(documents)
scores = model.similarity(query_embs, doc_embs)
print(scores.tolist())
trust_remote_code
将启用使用双向注意力的定制drama_modeling.py
- 查询编码需使用
prompt_name="query"
选择配置文件中的"query"提示词,或手动指定prompt="Query: "
支持通过套娃表示学习调整维度:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("facebook/drama-large", truncate_dim=256, trust_remote_code=True)
query_embs = model.encode(queries, prompt_name="query")
doc_embs = model.encode(documents)
scores = model.similarity(query_embs, doc_embs)
print(scores.tolist())
评估结果
模型已在BEIR、MIRACL、MLDR及MTEB的多语言检索任务上进行评估,在英语和多语言检索任务中均表现优异。
本页发布的drama-large
对应图中265M非嵌入参数的DRAMA-0.3B版本。
支持语言
DRAMA-large基于Llama3.2-1B(原始模型为Llama3.1-8B剪枝得到)初始化。在剪枝和检索器训练过程中,训练数据涵盖以下20种语言(按字母排序):
阿拉伯语、孟加拉语、中文、英语、芬兰语、法语、德语、印地语、印尼语、意大利语、日语、韩语、波斯语、葡萄牙语、俄语、西班牙语、斯瓦希里语、泰卢固语、泰语、约鲁巴语
其他语言性能可能有所降低。
引用
若论文或模型对您有帮助,请引用:
@article{drama,
title={{Drama}: 基于大语言模型增强的小型稠密检索模型},
author={马雪光、林维多利亚、Barlas Oguz、林吉米、文涛易、陈希伦},
journal={arXiv:2502.18460},
year={2025}
}