🚀 DiSCo:用于对话搜索中高效稀疏检索的大语言模型知识蒸馏
DiSCo模型是对原始SPLADE++ (CoCondenser - EnsembleDistil)模型进行对话搜索适配后的成果。它保留了原始的文档编码器,并在QReCC(一个专为多轮对话搜索设计的数据集)上对查询编码器进行微调。通过从人工改写中进行知识蒸馏的方式进行训练,使模型能够更好地捕捉对话查询的语义信息。更多详细内容请参考原论文:
- DiSCo SPLADE - SIGIR 2025全文:https://arxiv.org/abs/2410.14609
⚠️ 重要提示
这是查询编码器。在进行推理时,你还需要对应的文档编码器,该文档编码器与原始的SPLADE++检查点保持一致。SPLADE可以使用非对称架构:为查询和文档表示使用单独的模型。
🚀 快速开始
本模型是对原始 SPLADE++ (CoCondenser-EnsembleDistil) 模型进行对话搜索适配后的版本。它保留了原始的文档编码器,并在专为多轮对话搜索设计的 QReCC 数据集上对查询编码器进行微调。
训练通过从人工改写中进行知识蒸馏来完成,使模型能更好地捕捉对话查询的语义。更多详细信息,请参阅原论文:
- DiSCo SPLADE - SIGIR 2025 完整论文:https://arxiv.org/abs/2410.14609
✨ 主要特性
📦 安装指南
暂未提及安装相关内容,跳过此章节。
💻 使用示例
基础用法
请参考 DiSCo 的 GitHub 仓库以获取完整的使用说明 [github]。
以下是一个对对话进行编码的示例脚本:
输入格式是对话历史的扁平化版本。
q_n [SEP] a_{n - 1} [SEP] q_{n - 1} [SEP] ... [SEP] a_0 [SEP] q_0
from transformers import AutoTokenizer, AutoModelForMaskedLM
import torch.nn.functional as F
import torch
model = AutoModelForMaskedLM.from_pretrained("slupart/splade-disco-human")
tokenizer = AutoTokenizer.from_pretrained("slupart/splade-disco-human")
model.eval()
conv = [
("what's the weather like today?", "it's sunny."),
("should I wear sunscreen?", "yes, UV index is high."),
("do I need sunglasses?", "definitely."),
("where can I buy sunglasses?", "try the optician nearby."),
("how much do they cost?", None)
]
parts = [conv[-1][0]] + [x for q, a in reversed(conv[:-1]) for x in (a, q) if x]
text = " [SEP] ".join(parts)
inputs = tokenizer(text, return_tensors="pt")
with torch.no_grad():
logits = model(**inputs).logits
sparse = F.relu(logits).max(1).values.squeeze(0)
scores = [(tokenizer.convert_ids_to_tokens([i.item()])[0], sparse[i].item())
for i in torch.nonzero(sparse).squeeze(1)]
for token, score in sorted(scores, key=lambda x: -x[1]):
print(f"Token: {token:15} | Score: {score:.4f}")
📚 详细文档
暂未提及详细文档相关内容,跳过此章节。
🔧 技术细节
暂未提及技术细节相关内容,跳过此章节。
📄 许可证
本模型使用的许可证为 CC BY-NC-SA 4.0。
📖 引用
如果您使用了我们的检查点,请引用我们的工作:
@article{lupart2024disco,
title={DiSCo Meets LLMs: A Unified Approach for Sparse Retrieval and Contextual Distillation in Conversational Search},
author={Lupart, Simon and Aliannejadi, Mohammad and Kanoulas, Evangelos},
journal={arXiv preprint arXiv:2410.14609},
year={2024}
}