Views
No views yet
kobart-oxquiz는 OX 퀴즈 생성을 위해 fine-tuning 된 KoBART 모델입니다.gogamza/kobart-base-v2을 fine-tuning 한 모델입니다.1from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
2import torch
3import re
4
5device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
6
7# 질문 생성 함수
8def generate_ox(model, tokenizer, context, ox):
9 ox_str = "True" if ox else "False"
10 input_text = f"context: {context}\n ox: {ox_str}"
11 inputs = tokenizer(input_text, return_tensors="pt", truncation=True, padding=True).to(device)
12 inputs.pop("token_type_ids", None)
13 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)
14 question = tokenizer.decode(output_ids[0], skip_special_tokens=True)
15 question = re.sub(r'다(\.다)+\.', '다.', question)
16 question = re.sub(r'\.\.+', '.', question)
17 question = re.sub(r'(?<=다\.)(?=[^\s])', ' ', question)
18 question = question.strip()
19 last_period_index = question.rfind('.')
20 if last_period_index:
21 question = question[:last_period_index+1]
22 return question
23
24# 모델과 토크나이저 로드
25model_name = "asteroidddd/kobart-oxquiz"
26tokenizer = AutoTokenizer.from_pretrained(model_name)
27model = AutoModelForSeq2SeqLM.from_pretrained(model_name).to(device)
28model.eval()
29
30# 예시 출력
31print("\n[Example]")
32context = "올해 한국의 GDP 성장률은 2.5%로 최근 10년 사이 가장 높은 수치로 예상된다."
33question_T = generate_ox(model, tokenizer, context, True)
34question_F = generate_ox(model, tokenizer, context, False)
35
36print(f"Context\t\t: {context}")
37print(f"True question\t: {question_T}")
38print(f"False question\t: {question_F}\n")Premise는 context로, Label은 ox로 이름을 변경하여 사용하였습니다.Hypothesis를 question으로 이름 변경한 후, Hypothesis의 값인 Entailment을 True로, Contradiction을 False로 변환하고, Neutral은 제외하여 사용하였습니다.