Este repositorio contiene el software desarrollado para el artículo,
Autoformación cooperativa para la comprensión de la lectura automática, Luo H., Li S.-W., Gao M., Yu S., Glass J., NAACL 2022.
Pruebe nuestra demostración en vivo con pasajes de longitud media (próximamente una versión de documento largo).
Ejecutamos este software utilizando los siguientes paquetes,
Los modelos previamente entrenados están disponibles a través de este enlace de Google Drive. Descargue los modelos y muévalos al directorio model_file/
si su máquina no puede descargar los modelos desde el centro de Huggingface.
model_file/ext_sqv2.pt
: modelo de respuesta a preguntas grandes ELECTRA previamente entrenado en SQuAD v2.0.model_file/ques_gen_squad.pt
: modelo de generación de preguntas grandes de BART previamente entrenado en SQuAD v2.0.model_file/electra-tokenize.pt
: tokenizador Electra-large proporcionado por Huggingface.model_file/bart-tokenizer.pt
: tokenizador grande de BART proporcionado por Huggingface. Genere pares de preguntas y respuestas en los pasajes de ejemplo de SQuAD que proporcionamos en data/squad/doc_data_0.json
ejecutando el siguiente comando:
python RGX _doc.py
--dataset_name squad
--data_split 0
--output_dir tmp/ RGX
--version_2_with_negative
Los datos generados se almacenarán en data_gen/squad
, incluidos RGX _0.json
y qa_train_corpus_0.json
. Proporcionamos la opción $DATA_SPLIT
para la generación de datos distribuidos, por ejemplo, con Slurm. Si solo genera pares de control de calidad con un proceso, simplemente use --data_split 0
.
Todos los datos se almacenan en los directorios data/
y data_gen/
.
data/{$DATASET_NAME}/doc_data_{$DATA_SPLIT}.json
: documentos sin etiquetar del conjunto de datos de destino.data_gen/{$DATASET_NAME}/ RGX _{$DATA_SPLIT}.json
: datos de control de calidad generados alineados con cada documento del conjunto de datos correspondiente.data_gen/{$DATASET_NAME}/qa_train_corpus_{$DATA_SPLIT}.json
: conjunto de entrenamiento de control de calidad generado del conjunto de datos dado. Los ejemplos de entrenamiento siguen el formato de datos SQuAD y se mezclan aleatoriamente. doc_data_{$DATA_SPLIT}.json
es una lista de diccionarios como [
{"context": INPUT_DOC_TXT__0},
{"context": INPUT_DOC_TXT__1},
...,
{"context": INPUT_DOC_TXT__N},
]
qa_train_corpus_{$DATA_SPLIT}.json
, es una lista de diccionarios como [
{
"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
es una lista de asignaciones de control de calidad del documento, [
[
$DOCUMENT_i,
$ANS2ITEM_LIST_i,
$GEN_QA_LIST_i
],
...
]
$DOCUMENT_i
tiene el mismo formato que el archivo de entrada. $ANS2ITEM_LIST_i
son los metadatos de todas las respuestas reconocidas y preguntas generadas. Tenga en cuenta que una respuesta puede tener varias preguntas y las preguntas pueden ser correctas o no. El resultado final del modelo es $GEN_QA_LIST_i
, que es una lista de diccionarios de pares de control de calidad generados en función del documento de entrada.
[
{
"question": GEN_QUESTION_TXT_0,
"answers": {
"text": [ ANSWER_TXT ],
"answer_start": [ ANSWER_ST_CHAR ]
}
}
]
data/
y data_gen/
, bash new_dataset.sh $NEW_DATASET_NAME
Mueva el archivo de entrada que contiene los documentos de destino como data/$NEW_DATASET_NAME/doc_data_0.json
. El formato se describe en la sección anterior.
Ejecute el siguiente comando
python RGX _doc.py
--dataset_name $NEW_DATASET_NAME
--data_split 0
--output_dir tmp/ RGX
--version_2_with_negative
Los archivos generados se almacenarán en data_gen/{$NEW_DATASET_NAME}/
.
Sugerimos dos enfoques para ajustar el control de calidad con los pares de control de calidad generados.
mix_mode.py
con python mix_model.py $MIX_RATE $SQUAD_MODEL_PATH $ RGX _MODEL_PATH
Por ejemplo,
python mix_model.py 0.5 model_ft_file/ext_sq.pt model_ft_file/ext_ RGX .pt
El modelo de salida se almacenará como model_ft_file/ext_mixed.pt
.
Comuníquese con el primer autor, Hongyin Luo (hyluo en mit dot edu) si tiene alguna pregunta. Si nuestro sistema se aplica en su trabajo, por favor cite nuestro artículo.
@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}
}