Este repositório contém o software desenvolvido para o artigo,
Autotreinamento cooperativo para compreensão de leitura de máquina, Luo H., Li S.-W., Gao M., Yu S., Glass J., NAACL 2022.
Experimente nossa demonstração ao vivo com passagens de tamanho médio (versão de documento longo em breve).
Executamos este software usando os seguintes pacotes,
Os modelos pré-treinados estão disponíveis neste link do Google Drive. Baixe os modelos e mova-os para o diretório model_file/
se sua máquina não puder baixar os modelos do hub Huggingface.
model_file/ext_sqv2.pt
: Modelo de resposta a perguntas grandes ELECTRA pré-treinado no SQuAD v2.0.model_file/ques_gen_squad.pt
: Modelo de geração de perguntas grandes BART pré-treinado no SQuAD v2.0.model_file/electra-tokenize.pt
: Tokenizer Electra-large fornecido pela Huggingface.model_file/bart-tokenizer.pt
: tokenizador BART grande fornecido pela Huggingface. Gere pares de perguntas e respostas nas passagens de exemplo do SQuAD que fornecemos em data/squad/doc_data_0.json
executando o seguinte comando,
python RGX _doc.py
--dataset_name squad
--data_split 0
--output_dir tmp/ RGX
--version_2_with_negative
Os dados gerados serão armazenados em data_gen/squad
, incluindo RGX _0.json
e qa_train_corpus_0.json
. Fornecemos a opção $DATA_SPLIT
para geração distribuída de dados, por exemplo, com Slurm. Se estiver gerando apenas pares de controle de qualidade com um processo, basta usar --data_split 0
.
Todos os dados são armazenados nos diretórios data/
e data_gen/
.
data/{$DATASET_NAME}/doc_data_{$DATA_SPLIT}.json
: documentos não rotulados do conjunto de dados de destino.data_gen/{$DATASET_NAME}/ RGX _{$DATA_SPLIT}.json
: dados de controle de qualidade gerados alinhados com cada documento do conjunto de dados correspondente.data_gen/{$DATASET_NAME}/qa_train_corpus_{$DATA_SPLIT}.json
: conjunto de treinamento de controle de qualidade gerado do conjunto de dados fornecido. Os exemplos de treinamento seguem o formato de dados SQuAD e são embaralhados aleatoriamente. doc_data_{$DATA_SPLIT}.json
é uma lista de dicionários como [
{"context": INPUT_DOC_TXT__0},
{"context": INPUT_DOC_TXT__1},
...,
{"context": INPUT_DOC_TXT__N},
]
qa_train_corpus_{$DATA_SPLIT}.json
, é uma lista de dicionários 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
é uma lista de mapeamentos de documento-QA, [
[
$DOCUMENT_i,
$ANS2ITEM_LIST_i,
$GEN_QA_LIST_i
],
...
]
$DOCUMENT_i
tem o mesmo formato do arquivo de entrada. O $ANS2ITEM_LIST_i
são os metadados de todas as respostas reconhecidas e perguntas geradas. Observe que uma resposta pode ter várias perguntas e as perguntas podem estar corretas ou não. A saída final do modelo é $GEN_QA_LIST_i
, que é uma lista de dicionários de pares de QA gerados com base no documento de entrada,
[
{
"question": GEN_QUESTION_TXT_0,
"answers": {
"text": [ ANSWER_TXT ],
"answer_start": [ ANSWER_ST_CHAR ]
}
}
]
data/
e data_gen/
, bash new_dataset.sh $NEW_DATASET_NAME
Mova o arquivo de entrada que contém os documentos de destino como data/$NEW_DATASET_NAME/doc_data_0.json
. O formato é descrito na seção anterior.
Execute o seguinte comando
python RGX _doc.py
--dataset_name $NEW_DATASET_NAME
--data_split 0
--output_dir tmp/ RGX
--version_2_with_negative
Os arquivos gerados serão armazenados em data_gen/{$NEW_DATASET_NAME}/
.
sugerimos duas abordagens para ajuste fino de controle de qualidade com os pares de controle de qualidade gerados.
mix_mode.py
com python mix_model.py $MIX_RATE $SQUAD_MODEL_PATH $ RGX _MODEL_PATH
por exemplo,
python mix_model.py 0.5 model_ft_file/ext_sq.pt model_ft_file/ext_ RGX .pt
O modelo de saída será armazenado como model_ft_file/ext_mixed.pt
.
Entre em contato com o primeiro autor, Hongyin Luo (hyluo at mit dot edu) se houver alguma dúvida. Se nosso sistema for aplicado em seu trabalho, cite nosso artigo
@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}
}