这是一个从answerdotai/ModernBERT-base在MS-MARCO数据集上微调的PyLate模型,用于句子相似度计算和文档检索。
下载量 88
发布时间 : 1/3/2025
模型介绍
内容详情
替代品
模型简介
该模型将句子和段落映射为128维密集向量序列,使用MaxSim算子进行语义文本相似度计算,适用于信息检索和重排序任务。
模型特点
高效检索
利用Voyager HNSW索引实现快速文档检索
多向量表示
生成128维密集向量序列而非单一向量,保留更多语义信息
蒸馏训练
使用蒸馏损失函数进行训练,提升模型性能
模型能力
语义相似度计算
文档检索
查询重排序
特征提取
使用案例
信息检索
文档搜索
在文档集合中检索与查询最相关的文档
在MS-MARCO等标准检索数据集上表现良好
搜索结果重排序
对初步检索结果进行精细化排序
可提升检索系统的准确率和相关性
基础模型: answerdotai/ModernBERT-base
数据集:
- lightonai/ms-marco-en-bge
语言: - en
库名称: PyLate
管道标签: 句子相似度
标签: - ColBERT
- PyLate
- sentence-transformers
- 句子相似度
- 特征提取
- 训练器生成
- 数据集大小:808728
- 损失函数:蒸馏
基于answerdotai/ModernBERT-base的PyLate模型
这是一个从answerdotai/ModernBERT-base在train数据集上微调的PyLate模型。它将句子和段落映射为128维密集向量序列,可使用MaxSim算子进行语义文本相似度计算。
模型详情
模型描述
- 模型类型: PyLate模型
- 基础模型: answerdotai/ModernBERT-base
- 文档长度: 180个token
- 查询长度: 32个token
- 输出维度: 128个token
- 相似度函数: MaxSim
- 训练数据集:
- 语言: en
模型来源
- 文档: PyLate文档
- 代码库: GitHub上的PyLate
- Hugging Face: Hugging Face上的PyLate模型
完整模型架构
ColBERT(
(0): Transformer({'max_seq_length': 179, 'do_lower_case': False}) with Transformer model: ModernBertModel
(1): Dense({'in_features': 768, 'out_features': 128, 'bias': False, 'activation_function': 'torch.nn.modules.linear.Identity'})
)
使用方法
首先安装PyLate库:
pip install -U pylate
检索
PyLate提供了简洁的接口来使用ColBERT模型索引和检索文档。该索引利用Voyager HNSW索引高效处理文档嵌入并实现快速检索。
文档索引
首先加载ColBERT模型并初始化Voyager索引,然后编码和索引文档:
from pylate import indexes, models, retrieve
# 步骤1: 加载ColBERT模型
model = models.ColBERT(
model_name_or_path=pylate_model_id,
)
# 步骤2: 初始化Voyager索引
index = indexes.Voyager(
index_folder="pylate-index",
index_name="index",
override=True, # 这将覆盖现有索引(如果有)
)
# 步骤3: 编码文档
documents_ids = ["1", "2", "3"]
documents = ["文档1文本", "文档2文本", "文档3文本"]
documents_embeddings = model.encode(
documents,
batch_size=32,
is_query=False, # 确保设置为False表示这些是文档而非查询
show_progress_bar=True,
)
# 步骤4: 通过提供嵌入和对应ID将文档嵌入添加到索引
index.add_documents(
documents_ids=documents_ids,
documents_embeddings=documents_embeddings,
)
注意您不必每次都重新创建索引和编码文档。一旦创建了索引并添加了文档,您可以通过加载来重复使用索引:
# 要加载索引,只需用正确的文件夹/名称实例化而不覆盖它
index = indexes.Voyager(
index_folder="pylate-index",
index_name="index",
)
检索查询的top-k文档
文档索引后,您可以检索给定查询集的最相关top-k文档。为此,使用您要搜索的索引初始化ColBERT检索器,编码查询然后检索top-k文档以获取最匹配的ID和相关分数:
# 步骤1: 初始化ColBERT检索器
retriever = retrieve.ColBERT(index=index)
# 步骤2: 编码查询
queries_embeddings = model.encode(
["查询文档3", "查询文档1"],
batch_size=32,
is_query=True, # 确保设置为True表示这些是查询
show_progress_bar=True,
)
# 步骤3: 检索top-k文档
scores = retriever.retrieve(
queries_embeddings=queries_embeddings,
k=10, # 为每个查询检索前10个匹配项
)
重排序
如果您只想使用ColBERT模型在第一阶段检索管道上执行重排序而不构建索引,可以简单地使用rank函数并传递要重排序的查询和文档:
from pylate import rank, models
queries = [
"查询A",
"查询B",
]
documents = [
["文档A", "文档B"],
["文档1", "文档C", "文档B"],
]
documents_ids = [
[1, 2],
[1, 3, 2],
]
model = models.ColBERT(
model_name_or_path=pylate_model_id,
)
queries_embeddings = model.encode(
queries,
is_query=True,
)
documents_embeddings = model.encode(
documents,
is_query=False,
)
reranked_documents = rank.rerank(
documents_ids=documents_ids,
queries_embeddings=queries_embeddings,
documents_embeddings=documents_embeddings,
)
训练详情
训练数据集
train
- 数据集: train at 11e6ffa
- 大小: 808,728个训练样本
- 列:
query_id
,document_ids
, 和scores
- 基于前1000个样本的近似统计:
query_id document_ids scores 类型 string list list 详情 - 最小: 5个token
- 平均: 5.59个token
- 最大: 6个token
- 大小: 32个元素
- 大小: 32个元素
- 样本:
query_id document_ids scores 121352
['2259784', '4923159', '40211', '1545154', '8527175', ...]
[0.2343463897705078, 0.639204204082489, 0.3806908428668976, 0.5623092651367188, 0.8051995635032654, ...]
634306
['7723525', '1874779', '379307', '2738583', '7599583', ...]
[0.7124203443527222, 0.7379189729690552, 0.5786551237106323, 0.6142299175262451, 0.6755089163780212, ...]
920825
['5976297', '2866112', '3560294', '3285659', '4706740', ...]
[0.6462352871894836, 0.7880821228027344, 0.791019856929779, 0.7709633111953735, 0.8284491300582886, ...]
- 损失函数:
pylate.losses.distillation.Distillation
评估结果
多向量检索模型的nDCG@10分数
模型 | SciFact | NFCorpus | FiQA | TREC-Covid |
---|---|---|---|---|
BERT | 71.5 | 34.2 | 35.0 | 69.9 |
ModernBERT-Base (论文中) | 73.0 | 35.2 | 38.0 | 80.5 |
ModernBERT-Base (本仓库) | 73.88 | 34.96 | 39.47 | 79.36 |
训练超参数
非默认超参数
per_device_train_batch_size
: 16learning_rate
: 8e-05num_train_epochs
: 1warmup_ratio
: 0.05bf16
: True
所有超参数
点击展开
overwrite_output_dir
: Falsedo_predict
: Falseeval_strategy
: noprediction_loss_only
: Trueper_device_train_batch_size
: 16per_device_eval_batch_size
: 8per_gpu_train_batch_size
: Noneper_gpu_eval_batch_size
: Nonegradient_accumulation_steps
: 1eval_accumulation_steps
: Nonetorch_empty_cache_steps
: Nonelearning_rate
: 8e-05weight_decay
: 0.0adam_beta1
: 0.9adam_beta2
: 0.999adam_epsilon
: 1e-08max_grad_norm
: 1.0num_train_epochs
: 1max_steps
: -1lr_scheduler_type
: linearlr_scheduler_kwargs
: {}warmup_ratio
: 0.05warmup_steps
: 0log_level
: passivelog_level_replica
: warninglog_on_each_node
: Truelogging_nan_inf_filter
: Truesave_safetensors
: Truesave_on_each_node
: Falsesave_only_model
: Falserestore_callback_states_from_checkpoint
: Falseno_cuda
: Falseuse_cpu
: Falseuse_mps_device
: Falseseed
: 42data_seed
: Nonejit_mode_eval
: Falseuse_ipex
: Falsebf16
: Truefp16
: Falsefp16_opt_level
: O1half_precision_backend
: autobf16_full_eval
: Falsefp16_full_eval
: Falsetf32
: Nonelocal_rank
: 0ddp_backend
: Nonetpu_num_cores
: Nonetpu_metrics_debug
: Falsedebug
: []dataloader_drop_last
: Truedataloader_num_workers
: 0dataloader_prefetch_factor
: Nonepast_index
: -1disable_tqdm
: Falseremove_unused_columns
: Truelabel_names
: Noneload_best_model_at_end
: Falseignore_data_skip
: Falsefsdp
: []fsdp_min_num_params
: 0fsdp_config
: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}fsdp_transformer_layer_cls_to_wrap
: Noneaccelerator_config
: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}deepspeed
: Nonelabel_smoothing_factor
: 0.0optim
: adamw_torchoptim_args
: Noneadafactor
: Falsegroup_by_length
: Falselength_column_name
: lengthddp_find_unused_parameters
: None- `ddp_bucket_cap_mb
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是一个化学语言模型,旨在实现完全由机器驱动的超快聚合物信息学。
文本嵌入
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
AIbase是一个专注于MCP服务的平台,为AI开发者提供高质量的模型上下文协议服务,助力AI应用开发。
简体中文