语言: 英文
数据集:
- sentence-transformers/reddit-title-body
- sentence-transformers/embedding-training-data
示例输入:
- 文本: "Python是一种解释型、高级通用编程语言。Python的设计哲学强调代码可读性,显著特点是使用显著的空白符。其语言结构和面向对象方法旨在帮助程序员为小型和大型项目编写清晰、逻辑性强的代码。"
许可证: apache-2.0
doc2query/all-t5-base-v1
这是一个基于T5的doc2query模型(也称为docT5query)。
用途包括:
- 文档扩展:为段落生成20-40个查询,并将段落与生成的查询一同索引到Elasticsearch、OpenSearch或Lucene等标准BM25索引中。生成的查询通过包含同义词帮助缩小词汇搜索的语义鸿沟,同时重新加权词汇,使重要词汇即使出现频率低也能获得更高权重。我们在BEIR论文中证明,BM25+docT5query是强大的搜索引擎组合。BEIR代码库中提供了与Pyserini集成的使用示例。
- 领域特定训练数据生成:可用于生成训练数据以学习嵌入模型。SBERT.net展示了如何利用该模型为未标注文本集合生成(查询,文本)配对,这些配对可进一步用于训练高效的稠密嵌入模型。
使用方法
from transformers import T5Tokenizer, T5ForConditionalGeneration
model_name = 'doc2query/all-t5-base-v1'
tokenizer = T5Tokenizer.from_pretrained(model_name)
model = T5ForConditionalGeneration.from_pretrained(model_name)
text = "Python是一种解释型、高级通用编程语言..."
input_ids = tokenizer.encode(text, max_length=384, truncation=True, return_tensors='pt')
outputs = model.generate(
input_ids=input_ids,
max_length=64,
do_sample=True,
top_p=0.95,
num_return_sequences=5)
print("原文:")
print(text)
print("\n生成查询:")
for i in range(len(outputs)):
query = tokenizer.decode(outputs[i], skip_special_tokens=True)
print(f'{i + 1}: {query}')
注意:model.generate()
具有非确定性,每次运行会产生不同查询。
训练过程
本模型对google/t5-v1_1-base进行了57万步微调。训练脚本参见本仓库的train_script.py
。
输入文本被截断为384个词片段,输出文本最多生成64个词片段。
训练数据涵盖多领域数据集,具体数据集名称及权重参见本仓库的data_config.json
,大部分数据集可在https://huggingface.co/sentence-transformers获取,包括但不限于:
- Reddit的(标题,正文)配对
- StackExchange和Yahoo Answers!的(标题,正文)及(标题,答案)配对
- 亚马逊评论的(标题,评论)配对
- MS MARCO、NQ和GooAQ的(查询,段落)配对
- Quora和WikiAnswers的(问题,重复问题)配对
- S2ORC的(标题,摘要)配对
前缀说明
本模型未使用前缀训练。与doc2query/all-with_prefix-t5-base-v1不同,用户无法指定转换类型(如答案转问题、评论转标题等),可能导致输出结果存在混合类型。