🚀 doc2query/all-with_prefix-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-with_prefix-t5-base-v1'
tokenizer = T5Tokenizer.from_pretrained(model_name)
model = T5ForConditionalGeneration.from_pretrained(model_name)
prefix = "answer2question"
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."
text = prefix+": "+text
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()
是非確定性的,每次運行時會產生不同的查詢結果。
📦 安裝指南
本部分文檔未提及安裝步驟,若有需要,請參考相關依賴庫(如 transformers
)的官方安裝說明。
💻 使用示例
基礎用法
上述代碼示例展示瞭如何使用該模型生成查詢。以下是代碼的基本流程:
- 導入所需的
T5Tokenizer
和 T5ForConditionalGeneration
。
- 加載預訓練的模型和分詞器。
- 定義前綴和輸入文本。
- 對輸入文本進行編碼。
- 使用模型生成查詢。
- 解碼並打印生成的查詢。
高級用法
你可以根據不同的前綴生成不同類型的輸出,具體前綴和輸出類型如下:
前綴 |
輸出類型 |
answer2question |
從答案生成問題 |
review2title |
從評論生成標題 |
abstract2title |
從摘要生成標題 |
text2query |
從文本生成查詢 |
📚 詳細文檔
訓練信息
此模型在 google/t5-v1_1-base 的基礎上進行了 575k 個訓練步驟的微調。訓練腳本可在本倉庫的 train_script.py
中找到。
輸入文本被截斷為 384 個詞塊,輸出文本最多生成 64 個詞塊。
該模型在大量數據集上進行訓練,確切的數據集名稱和權重可在本倉庫的 data_config.json
中找到。大多數數據集可在 https://huggingface.co/sentence-transformers 上獲取。
數據集包括但不限於:
- 來自 Reddit 的(標題,正文)對。
- 來自 StackExchange 和 Yahoo Answers! 的(標題,正文)對和(標題,答案)對。
- 來自亞馬遜評論的(標題,評論)對。
- 來自 MS MARCO、NQ 和 GooAQ 的(查詢,段落)對。
- 來自 Quora 和 WikiAnswers 的(問題,重複問題)對。
- 來自 S2ORC 的(標題,摘要)對。
前綴說明
該模型在訓練時 使用了前綴:你需要在文本開頭添加特定的索引,以定義你希望接收的輸出文本類型。根據前綴的不同,輸出也會不同。
例如,上述關於 Python 的文本根據不同前綴會產生以下輸出:
前綴 |
輸出 |
answer2question |
為什麼我應該在我的業務中使用 Python?;Python 和 .NET 有什麼區別?;Python 的設計理念是什麼? |
review2title |
Python:一種強大且有用的語言;一種新的、改進的編程語言;面向對象、實用且易訪問 |
abstract2title |
Python:軟件開發平臺;Python X 研究指南:編程的概念方法;Python:語言與方法 |
text2query |
Python 是一種低級語言嗎?;Python 的主要思想是什麼?;Python 是一種編程語言嗎? |
所有可用的前綴如下:
- text2reddit
- question2title
- answer2question
- abstract2title
- review2title
- news2title
- text2query
- question2question
不同前綴的數據集和權重可在本倉庫的 data_config.json
中找到。
📄 許可證
本項目採用 Apache-2.0 許可證。