Ce référentiel contient le logiciel développé pour l'article,
Autoformation coopérative pour la compréhension en lecture automatique, Luo H., Li S.-W., Gao M., Yu S., Glass J., NAACL 2022.
Essayez notre démo en direct avec des passages de longueur moyenne (version longue du document à venir).
Nous exécutons ce logiciel en utilisant les packages suivants,
Les modèles pré-entraînés sont disponibles via ce lien Google Drive. Veuillez télécharger les modèles et les déplacer dans le répertoire model_file/
si votre machine ne peut pas télécharger les modèles depuis le hub Huggingface.
model_file/ext_sqv2.pt
: Modèle de réponse aux grandes questions ELECTRA pré-entraîné sur SQuAD v2.0.model_file/ques_gen_squad.pt
: Modèle de génération de questions BART pré-entraîné sur SQuAD v2.0.model_file/electra-tokenize.pt
: tokenizer Electra-large fourni par Huggingface.model_file/bart-tokenizer.pt
: tokeniseur BART-large fourni par Huggingface. Générez des paires question-réponse sur les exemples de passages SQuAD que nous fournissons sur data/squad/doc_data_0.json
en exécutant la commande suivante :
python RGX _doc.py
--dataset_name squad
--data_split 0
--output_dir tmp/ RGX
--version_2_with_negative
Les données générées seront stockées sous data_gen/squad
, y compris RGX _0.json
et qa_train_corpus_0.json
. Nous fournissons l'option $DATA_SPLIT
pour la génération de données distribuées, par exemple avec Slurm. Si vous ne générez que des paires QA avec un seul processus, utilisez simplement --data_split 0
.
Toutes les données sont stockées dans les répertoires data/
et data_gen/
.
data/{$DATASET_NAME}/doc_data_{$DATA_SPLIT}.json
: documents non étiquetés de l'ensemble de données cible.data_gen/{$DATASET_NAME}/ RGX _{$DATA_SPLIT}.json
: données d'assurance qualité générées alignées avec chaque document de l'ensemble de données correspondant.data_gen/{$DATASET_NAME}/qa_train_corpus_{$DATA_SPLIT}.json
: ensemble de formation QA généré de l'ensemble de données donné. Les exemples de formation suivent le format de données SQuAD et sont mélangés de manière aléatoire. doc_data_{$DATA_SPLIT}.json
est une liste de dictionnaires comme [
{"context": INPUT_DOC_TXT__0},
{"context": INPUT_DOC_TXT__1},
...,
{"context": INPUT_DOC_TXT__N},
]
qa_train_corpus_{$DATA_SPLIT}.json
, est une liste de dictionnaires comme [
{
"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
est une liste de mappages document-QA, [
[
$DOCUMENT_i,
$ANS2ITEM_LIST_i,
$GEN_QA_LIST_i
],
...
]
$DOCUMENT_i
a le même format que le fichier d'entrée. Le $ANS2ITEM_LIST_i
correspond aux métadonnées de toutes les réponses reconnues et questions générées. Notez qu’une réponse peut comporter plusieurs questions et que les questions peuvent être correctes ou non. La sortie finale du modèle est $GEN_QA_LIST_i
, qui est une liste de dictionnaires de paires QA générées basées sur le document d'entrée,
[
{
"question": GEN_QUESTION_TXT_0,
"answers": {
"text": [ ANSWER_TXT ],
"answer_start": [ ANSWER_ST_CHAR ]
}
}
]
data/
et data_gen/
, bash new_dataset.sh $NEW_DATASET_NAME
Déplacez le fichier d'entrée contenant les documents cibles sous data/$NEW_DATASET_NAME/doc_data_0.json
. Le format est décrit dans la section précédente.
Exécutez la commande suivante
python RGX _doc.py
--dataset_name $NEW_DATASET_NAME
--data_split 0
--output_dir tmp/ RGX
--version_2_with_negative
Les fichiers générés seront stockés dans data_gen/{$NEW_DATASET_NAME}/
.
nous suggérons deux approches pour affiner l'assurance qualité avec les paires d'assurance qualité générées.
mix_mode.py
avec python mix_model.py $MIX_RATE $SQUAD_MODEL_PATH $ RGX _MODEL_PATH
Par exemple,
python mix_model.py 0.5 model_ft_file/ext_sq.pt model_ft_file/ext_ RGX .pt
Le modèle de sortie sera stocké sous model_ft_file/ext_mixed.pt
.
Veuillez contacter le premier auteur, Hongyin Luo (hyluo at mit dot edu) si vous avez des questions. Si notre système est appliqué dans votre travail, veuillez citer notre article
@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}
}