asteroidddd/kobart-oxquiz
02
Model Description
kobart-oxquiz는 OX 퀴즈 생성을 위해 fine-tuning 된 KoBART 모델입니다. 사용자가 입력한 문맥(context)과 정답 여부(ox)를 기반으로 관련된 퀴즈 문장을 생성합니다. 이 모델은 `gogamza/kobart-base-v2`을 fine-tuning 한 모델입니다. 생성된 문장이 특히 반복 부분에서 취약하기 때문에 아래 예시와 같이 여러 매개변수를 이용하여 조정한 후에 사용하시는 것을 추천드립니다.
How to use
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
import torch
import re
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# 질문 생성 함수
def generate_ox(model, tokenizer, context, ox):
ox_str = "True" if ox else "False"
input_text = f"context: {context}\n ox: {ox_str}"
inputs = tokenizer(input_text, return_tensors="pt", truncation=True, padding=True).to(device)
inputs.pop("token_type_ids", None)
with torch.no_grad(): output_ids = model.generate(input_ids=inputs["input_ids"], attention_mask=inputs["attention_mask"], max_length=25, do_sample=True, top_k=50, top_p=0.9, repetition_penalty=3.0, no_repeat_ngram_size=2, num_beams=10, early_stopping=True)
question = tokenizer.decode(output_ids[0], skip_special_tokens=True)
question = re.sub(r'다(\.다)+\.', '다.', question)
question = re.sub(r'\.\.+', '.', question)
question = re.sub(r'(?<=다\.)(?=[^\s])', ' ', question)
question = question.strip()
last_period_index = question.rfind('.')
if last_period_index:
question = question[:last_period_index+1]
return question
# 모델과 토크나이저 로드
model_name = "asteroidddd/kobart-oxquiz"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSeq2SeqLM.from_pretrained(model_name).to(device)
model.eval()
# 예시 출력
print("\n[Example]")
context = "올해 한국의 GDP 성장률은 2.5%로 최근 10년 사이 가장 높은 수치로 예상된다."
question_T = generate_ox(model, tokenizer, context, True)
question_F = generate_ox(model, tokenizer, context, False)
print(f"Context\t\t: {context}")
print(f"True question\t: {question_T}")
print(f"False question\t: {question_F}\n")Training Data
[\[월간 데이콘 한국어 문장 관계 분류 경진대회\]](https://dacon.io/competitions/official/235875/overview/description) 원본 데이터셋은 Premise(문장), Hypothesis(가설), Label(관계) 로 이루어진 NLI(자연어 추론) 데이터입니다. input 으로는 Premise는 context로, Label은 ox로 이름을 변경하여 사용하였습니다. 목표 output 으로는 Hypothesis를 question으로 이름 변경한 후, Hypothesis의 값인 Entailment을 True로, Contradiction을 False로 변환하고, Neutral은 제외하여 사용하였습니다.
