질문 생성기는 뉴스 기사 나 책에서 발췌 한 텍스트에서 독해 스타일의 질문을 생성하기위한 NLP 시스템입니다. 이 시스템은 Huggingface Transformers의 사전 모델을 사용하여 구축되었습니다. 질문 생성기 자체와 QA 평가자는 수용 가능성에 따라 질문 응답 쌍을 순위하고 필터링하는 두 가지 모델이 있습니다.
교육 노트북은 교육 스크립트로 업데이트되었습니다. 실행 :
python question_generator/training/qg_train.pypython question_generator/training/qa_eval_train.py하이퍼 파라미터는 CommandLine 인수를 사용하여 변경할 수 있습니다. 사용 가능한 인수 목록은 스크립트를 참조하십시오.
데이터 세트는 Huggingface Hub에 업로드되었습니다.
몇 가지 질문을 생성하는 가장 쉬운 방법은 Github Repo를 복제 한 다음 다음과 같이 qg_run.py 실행하는 것입니다.
git clone https://github.com/amontgomerie/question_generator
cd question_generator
pip install -r requirements.txt -qq
python run_qg.py --text_file articles/twitter_hack.txt
이렇게하면 --text_file 에 지정된 기사를 기반으로 10 개의 질문 답변 혼합 스타일 (전체 서식 및 객관식) 쌍이 생성되어 콘솔에 인쇄합니다. 자세한 내용은 qg_commandline_example 노트북을 참조하십시오.
QuestionGenerator 클래스는 다음과 같이 인스턴스화하고 사용할 수 있습니다.
from questiongenerator import QuestionGenerator
qg = QuestionGenerator ()
qg . generate ( text , num_questions = 10 ) 이것은 혼합 스타일의 10 가지 질문을 생성하고 질문 응답 쌍을 포함하는 사전 목록을 반환합니다. 객관식 질문의 경우, 답변에는 답변이 포함 된 사전 목록과 답이 정확한지 여부에 따라 부울 가치가 포함됩니다. print_qa() 함수를 사용하여 출력을 쉽게 인쇄 할 수 있습니다. 자세한 내용은 question_generation_example 노트를 참조하십시오.
원하는 수의 질문은 qg.generate(text, num_questions=20 호출 할 때 --num_questions 사용하여 명령 줄 인수로 전달 될 수 있습니다 (텍스트, num_questions = 20. 선택한 질문 수가 너무 크면 모델이 충분히 생성되지 않을 수 있습니다. 최대 질문 수는 입력 텍스트의 길이에 의존 할 수 있습니다. QA 평가자가 생성 된 질문을 순위에 올리고 최고의 질문을 반환함에 따라 더 많은 수의 질문에 대해 줄어들 것입니다.
이 시스템은 전체 문장 답변 ( 'sentences' ), 객관식 답변 ( 'multiple_choice' )이있는 질문 또는 둘 다 ( 'all' )를 사용하여 질문을 생성 할 수 있습니다. --answer_style 또는 qg.generate(answer_style=<style>) 인수를 사용하여 선택할 수 있습니다.
질문 생성기 모델은 입력으로 텍스트를 취하고 일련의 질문과 답변 쌍을 출력합니다. 답은 입력 텍스트에서 추출한 문장과 구입니다. 추출 된 문구는 전체 문장이거나 스파이를 사용하여 추출 된 이름의 지명 된 엔티티 일 수 있습니다. 명명 된 엔티티는 객관식 답변에 사용됩니다. 잘못된 대답은 텍스트에있는 동일한 유형의 다른 엔티티입니다. 질문은 다음 형식의 컨텍스트로 전체 텍스트 (최대 512 개의 토큰까지)와 추출 된 답변을 연결하여 생성됩니다.
answer_token <extracted answer> context_token <context>
그런 다음 연결된 문자열이 인코딩되어 질문 생성기 모델에 공급됩니다. 모델 아키텍처는 t5-base 입니다. 사전 배치 된 모델은 여러 잘 알려진 QA 데이터 세트 (Squad, Race, Coqa 및 MSMarco)를 구성하는 데이터 세트의 시퀀스-시퀀스 모델로 미세하게되었습니다. 데이터 세트는 답과 컨텍스트 필드를 앞에서 언급 한 형식으로 연결하여 재구성되었습니다. 그런 다음 연결된 답변과 컨텍스트는 훈련을위한 입력으로 사용되었고 질문 필드는 목표가되었습니다.
데이터 세트는 여기에서 찾을 수 있습니다.
QA 평가자는 입력으로 질문 답변 쌍을 취하고 입력이 유효한 질문 및 답변 쌍인지 아닌지에 대한 예측을 나타내는 값을 출력합니다. 이 모델은 시퀀스 분류 헤드와 함께 bert-base-cased . 사전에 걸린 모델은 질문 생성기 모델과 동일한 데이터에서 미세 조정되었지만 컨텍스트가 제거되었습니다. 질문과 답변은 시간의 50%가 연결되었습니다. 다른 50%에서는 부패 작업이 수행되었습니다 (관련된 답변에 대한 답변을 교체하거나 질문의 일부를 답변에 복사하여). 그런 다음 모델은 입력 시퀀스가 원래 QA 쌍 중 하나인지 또는 손상된 입력을 나타내는 지 여부를 예측하도록 훈련되었습니다.
QA 평가자의 입력은 BertForSequenceClassification 의 형식을 따르지만 질문과 답변을 두 시퀀스로 사용합니다. 다음 형식입니다.
[CLS] <question> [SEP] <answer [SEP]