🚀 doc2query/all-t5-base-v1
這是一個基於T5的doc2query模型(也稱為docT5query)。它可以解決文本搜索中的詞彙鴻溝問題,還能生成訓練數據以學習嵌入模型,為不同規模的項目提供強大支持。
🚀 快速開始
本模型可用於以下兩個主要場景:
- 文檔擴展:為段落生成20 - 40個查詢,並將段落和生成的查詢索引到標準的BM25索引(如Elasticsearch、OpenSearch或Lucene)中。生成的查詢有助於縮小詞彙搜索的詞彙鴻溝,因為生成的查詢包含同義詞。此外,它還會重新加權單詞,即使重要單詞在段落中很少出現,也會賦予更高的權重。在我們的BEIR論文中,我們證明了BM25 + docT5query是一個強大的搜索引擎。在BEIR倉庫中,我們有一個如何將docT5query與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 is an interpreted, high-level and general-purpose programming language. Python's design philosophy emphasizes code readability with its notable use of significant whitespace. Its language constructs and object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects."
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("Text:")
print(text)
print("\nGenerated Queries:")
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的基礎上進行了570k個訓練步驟的微調。關於訓練腳本,請參閱此倉庫中的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不同,你無法指定要進行的轉換類型(如答案轉問題、評論轉標題等),這可能會導致輸出值的混合。
📄 許可證
本項目採用Apache-2.0許可證。