🚀 doc2query/all-with_prefix-t5-base-v1
このモデルは、T5に基づくdoc2queryモデル(docT5queryとも呼ばれます)です。
このモデルは、以下の用途に使用できます。
- 文書拡張:段落から20 - 40個のクエリを生成し、それらをElasticsearch、OpenSearch、またはLuceneなどの標準的なBM25インデックスにインデックス化します。生成されたクエリには同義語が含まれるため、語彙検索の語彙ギャップを埋めるのに役立ちます。さらに、重要な単語には高い重みを与え、段落内であまり出現しない単語でも重み付けが行われます。BEIR論文では、BM25+docT5queryが強力な検索エンジンであることを示しています。BEIRリポジトリには、PyseriniでdocT5queryを使用する例があります。
- ドメイン固有のトレーニングデータ生成:埋め込みモデルを学習するためのトレーニングデータを生成するのに使用できます。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()
は非決定的です。実行するたびに異なるクエリを生成します。
🔧 技術詳細
トレーニング
このモデルは、google/t5-v1_1-baseを575kのトレーニングステップでファインチューニングしたものです。トレーニングスクリプトについては、このリポジトリの train_script.py
を参照してください。
入力テキストは384ワードピースに切り捨てられ、出力テキストは最大64ワードピースまで生成されます。
このモデルは、多数のデータセットのコレクションでトレーニングされています。正確なデータセット名と重みについては、このリポジトリの data_config.json
を参照してください。ほとんどのデータセットは、https://huggingface.co/sentence-transformers で入手できます。
データセットには、以下のものが含まれます。
- Reddit の(タイトル、本文)ペア
- StackExchangeとYahoo Answers! の(タイトル、本文)ペアおよび(タイトル、回答)ペア
- Amazonレビューの(タイトル、レビュー)ペア
- MS MARCO、NQ、およびGooAQ の(クエリ、段落)ペア
- QuoraとWikiAnswers の(質問、重複質問)ペア
- S2ORC の(タイトル、概要)ペア
プレフィックス
このモデルは プレフィックス付き でトレーニングされています。特定のインデックスでテキストを始めることで、受け取りたい出力テキストのタイプを定義できます。プレフィックスによって、出力が異なります。
例えば、上記のPythonに関するテキストは、以下の出力を生成します。
プレフィックス |
出力 |
answer2question |
Why should I use python in my business? ; What is the difference between Python and.NET? ; what is the python design philosophy? |
review2title |
Python a powerful and useful language ; A new and improved programming language ; Object-oriented, practical and accessibl |
abstract2title |
Python: A Software Development Platform ; A Research Guide for Python X: Conceptual Approach to Programming ; Python : Language and Approach |
text2query |
is python a low level language? ; what is the primary idea of python? ; is python a programming language? |
利用可能なすべてのプレフィックスは以下の通りです。
- text2reddit
- question2title
- answer2question
- abstract2title
- review2title
- news2title
- text2query
- question2question
異なるプレフィックスのデータセットと重みについては、このリポジトリの data_config.json
を参照してください。
📄 ライセンス
このプロジェクトは、Apache 2.0ライセンスの下でライセンスされています。