🚀 doc2query/msmarco-portuguese-mt5-base-v1
このモデルは、mT5に基づくdoc2queryモデル(docT5queryとも呼ばれます)です。
このモデルは、以下の用途に使用できます。
- ドキュメント拡張:段落ごとに20 - 40個のクエリを生成し、段落と生成されたクエリをElasticsearch、OpenSearch、Luceneなどの標準的なBM25インデックスにインデックス化します。生成されたクエリには同義語が含まれているため、語彙検索の語彙ギャップを埋めるのに役立ちます。さらに、重要な単語には高い重みを与え、段落内であまり出現しない単語でも重み付けを行います。BEIRの論文では、BM25 + docT5queryが強力な検索エンジンであることを示しています。BEIRリポジトリには、PyseriniでdocT5queryを使用する例があります。
- ドメイン固有のトレーニングデータ生成:埋め込みモデルを学習するためのトレーニングデータを生成するために使用できます。GPL論文 / SBERT.netのGPL例には、与えられたラベルなしのテキストコレクションに対して(クエリ、テキスト)のペアを生成するためのモデルの使用例があります。これらのペアは、強力な密埋め込みモデルをトレーニングするために使用できます。
🚀 クイックスタート
このモデルは、ドキュメントの拡張やドメイン固有のトレーニングデータ生成に使用できます。以下の使用例を参考に、モデルを使い始めましょう。
💻 使用例
基本的な使用法
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import torch
model_name = 'doc2query/msmarco-portuguese-mt5-base-v1'
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
text = "Python é uma linguagem de programação de alto nível, interpretada de script, imperativa, orientada a objetos, funcional, de tipagem dinâmica e forte. Foi lançada por Guido van Rossum em 1991. Atualmente, possui um modelo de desenvolvimento comunitário, aberto e gerenciado pela organização sem fins lucrativos Python Software Foundation. Apesar de várias partes da linguagem possuírem padrões e especificações formais, a linguagem, como um todo, não é formalmente especificada. O padrão de facto é a implementação CPython."
def create_queries(para):
input_ids = tokenizer.encode(para, return_tensors='pt')
with torch.no_grad():
sampling_outputs = model.generate(
input_ids=input_ids,
max_length=64,
do_sample=True,
top_p=0.95,
top_k=10,
num_return_sequences=5
)
beam_outputs = model.generate(
input_ids=input_ids,
max_length=64,
num_beams=5,
no_repeat_ngram_size=2,
num_return_sequences=5,
early_stopping=True
)
print("Paragraph:")
print(para)
print("\nBeam Outputs:")
for i in range(len(beam_outputs)):
query = tokenizer.decode(beam_outputs[i], skip_special_tokens=True)
print(f'{i + 1}: {query}')
print("\nSampling Outputs:")
for i in range(len(sampling_outputs)):
query = tokenizer.decode(sampling_outputs[i], skip_special_tokens=True)
print(f'{i + 1}: {query}')
create_queries(text)
高度な使用法
⚠️ 重要注意
model.generate()
はtop_k/top_nサンプリングの場合、非決定的です。実行するたびに異なるクエリを生成します。
🔧 技術詳細
このモデルは、google/mt5-baseを66kのトレーニングステップ(MS MARCOの500kのトレーニングペアに対して4エポック)でファインチューニングしたものです。トレーニングスクリプトについては、このリポジトリの train_script.py
を参照してください。
入力テキストは320語彙片に切り捨てられ、出力テキストは最大64語彙片まで生成されます。
このモデルは、mMARCOデータセットの(クエリ、パッセージ)ペアでトレーニングされています。
📄 ライセンス
このモデルは、Apache-2.0ライセンスの下で提供されています。