CoolFace
Modelpublic

asteroidddd/kobart-oxquiz

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes2downloads
Model Card

Model Description

kobart-oxquiz는 OX 퀴즈 생성을 위해 fine-tuning 된 KoBART 모델입니다. 사용자가 입력한 문맥(context)과 정답 여부(ox)를 기반으로 관련된 퀴즈 문장을 생성합니다. 이 모델은 `gogamza/kobart-base-v2`을 fine-tuning 한 모델입니다. 생성된 문장이 특히 반복 부분에서 취약하기 때문에 아래 예시와 같이 여러 매개변수를 이용하여 조정한 후에 사용하시는 것을 추천드립니다.

How to use

python
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 으로는 Premisecontext로, Labelox로 이름을 변경하여 사용하였습니다. 목표 output 으로는 Hypothesisquestion으로 이름 변경한 후, Hypothesis의 값인 EntailmentTrue로, ContradictionFalse로 변환하고, Neutral은 제외하여 사용하였습니다.