該存儲庫包含為本文開發的軟體,
機器閱讀理解的協作自我訓練,羅華,李世文,高明,於書,Glass J.,NAACL 2022。
嘗試我們的帶有中等長度段落的現場演示(長文檔版本即將推出)。
我們使用以下軟體包來運行該軟體,
預訓練模型可透過此 Google Drive 連結取得。如果您的電腦無法從 Huggingface hub 下載模型,請下載模型並將其移至model_file/
目錄下。
model_file/ext_sqv2.pt
:在 SQuAD v2.0 上預先訓練的 ELECTRA-large 問答模型。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-large 分詞器。透過執行以下命令,在我們在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
產生的資料將儲存在data_gen/squad
下,包括RGX _0.json
和qa_train_corpus_0.json
。我們為分散式資料產生提供$DATA_SPLIT
選項,例如使用 Slurm。如果只使用一個行程產生 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
是所有已識別答案和產生問題的元資料。請注意,一個答案可以有多個問題,問題可以是正確的,也可以是錯誤的。模型的最終輸出是$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 微調。
mix_mode.py
腳本對兩個模型的所有權重進行平均 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
。
如有任何問題,請聯絡第一作者羅宏銀(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}
}