このリポジトリには、論文用に開発されたソフトウェアが含まれています。
機械読解のための共同自己トレーニング、Luo H.、Li S.-W.、Gao M.、Yu S.、Glass J.、NAACL 2022。
中程度の長さのパッセージを使用したライブ デモをお試しください (長いドキュメント バージョンは近日公開予定です)。
このソフトウェアは次のパッケージを使用して実行します。
事前トレーニングされたモデルは、この Google ドライブ リンクから入手できます。マシンが Huggingface ハブからモデルをダウンロードできない場合は、モデルをダウンロードして、 model_file/
ディレクトリの下に移動してください。
model_file/ext_sqv2.pt
: SQuAD v2.0 上の事前トレーニング済み ELECTRA 大規模質問応答モデル。model_file/ques_gen_squad.pt
: SQuAD v2.0 での事前トレーニング済みの BART 大質問生成モデル。model_file/electra-tokenize.pt
: Huggingface によって提供される Electra-large トークナイザー。model_file/bart-tokenizer.pt
: Huggingface によって提供される BART ラージ トークナイザー。次のコマンドを実行して、 data/squad/doc_data_0.json
で提供されるサンプル SQuAD パッセージに関する質問と回答のペアを生成します。
python RGX _doc.py
--dataset_name squad
--data_split 0
--output_dir tmp/ RGX
--version_2_with_negative
生成されたデータは、 RGX _0.json
およびqa_train_corpus_0.json
を含む、 data_gen/squad
の下に保存されます。 Slurm などで分散データを生成するための$DATA_SPLIT
オプションを提供します。 1 つのプロセスで QA ペアのみを生成する場合は、単に--data_split 0
を使用します。
すべてのデータはdata/
ディレクトリとdata_gen/
ディレクトリに保存されます。
data/{$DATASET_NAME}/doc_data_{$DATA_SPLIT}.json
: ターゲット データセットのラベルのないドキュメント。data_gen/{$DATASET_NAME}/ RGX _{$DATA_SPLIT}.json
: 対応するデータセットから各ドキュメントに合わせて生成された QA データ。data_gen/{$DATASET_NAME}/qa_train_corpus_{$DATA_SPLIT}.json
: 指定されたデータセットの生成された QA トレーニング セット。トレーニング例は SQuAD データ形式に従い、ランダムにシャッフルされます。 doc_data_{$DATA_SPLIT}.json
は、次のような辞書のリストです。 [
{"context": INPUT_DOC_TXT__0},
{"context": INPUT_DOC_TXT__1},
...,
{"context": INPUT_DOC_TXT__N},
]
qa_train_corpus_{$DATA_SPLIT}.json
、次のような辞書のリストです。 [
{
"context": INPUT_DOC_TXT_0,
"question": GEN_QUESTION_TXT_0,
"answers": {
"text": [ ANSWER_TXT ], # only one answer per question
"answer_start": [ ANSWER_ST_CHAR ]
# index of the starting character of the answer txt
}
},
{
...
},
]
RGX _{$DATA_SPLIT}.json
は、ドキュメントと QA のマッピングのリストです。 [
[
$DOCUMENT_i,
$ANS2ITEM_LIST_i,
$GEN_QA_LIST_i
],
...
]
$DOCUMENT_i
入力ファイルと同じ形式です。 $ANS2ITEM_LIST_i
は、認識されたすべての回答と生成された質問のメタデータです。 1 つの回答に複数の質問が含まれる場合があり、質問は正解か不正解になる可能性があることに注意してください。モデルの最終出力は$GEN_QA_LIST_i
で、これは入力ドキュメントに基づいて生成された QA ペアの辞書のリストです。
[
{
"question": GEN_QUESTION_TXT_0,
"answers": {
"text": [ ANSWER_TXT ],
"answer_start": [ ANSWER_ST_CHAR ]
}
}
]
data/
およびdata_gen/
ディレクトリの下に手動でディレクトリを作成します。 bash new_dataset.sh $NEW_DATASET_NAME
ターゲットドキュメントを含む入力ファイルをdata/$NEW_DATASET_NAME/doc_data_0.json
として移動します。形式については前のセクションで説明しています。
次のコマンドを実行します
python RGX _doc.py
--dataset_name $NEW_DATASET_NAME
--data_split 0
--output_dir tmp/ RGX
--version_2_with_negative
生成されたファイルはdata_gen/{$NEW_DATASET_NAME}/
に保存されます。
生成された QA ペアを使用して QA を微調整するための 2 つのアプローチを提案します。
mix_mode.py
スクリプトを使用して 2 つのモデルのすべての重みを平均します。 python mix_model.py $MIX_RATE $SQUAD_MODEL_PATH $ RGX _MODEL_PATH
例えば、
python mix_model.py 0.5 model_ft_file/ext_sq.pt model_ft_file/ext_ RGX .pt
出力モデルはmodel_ft_file/ext_mixed.pt
として保存されます。
ご質問がある場合は、筆頭著者のHongyin Luo (hyluo at mit dot edu) までお問い合わせください。私たちのシステムがあなたの仕事に適用されている場合は、私たちの論文を引用してください
@article{luo2021cooperative,
title={Cooperative self-training machine reading comprehension},
author={Luo, Hongyin and Li, Shang-Wen and Mingye Gao, and Yu, Seunghak and Glass, James},
journal={arXiv preprint arXiv:2103.07449},
year={2021}
}