이 저장소에는 논문용으로 개발된 소프트웨어가 포함되어 있습니다.
기계 독해력을 위한 협동적 자가 훈련, 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
옵션을 제공합니다. 하나의 프로세스로 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
는 인식된 모든 답변과 생성된 질문의 메타데이터입니다. 하나의 답변에 여러 질문이 있을 수 있으며 질문이 맞을 수도 있고 틀릴 수도 있습니다. 모델의 최종 출력은 입력 문서를 기반으로 생성된 QA 쌍의 사전 목록인 $GEN_QA_LIST_i
입니다.
[
{
"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
로 저장됩니다.
문의사항이 있으시면 제1저자인 Hongyin Luo(mit dot edu의 hyluo)에게 연락해 주세요. 우리 시스템이 귀하의 업무에 적용된다면, 우리 논문을 인용해주세요.
@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}
}