import torch from transformers import AutoTokenizer, AutoModelForCausalLM import re # ← 문장 분리용 # 1. 디바이스 설정 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 2. 한국어 GPT-2 모델과 토크나이저 로드 tokenizer = AutoTokenizer.from_pretrained("skt/kogpt2-base-v2") model = AutoModelForCausalLM.from_pretrained("skt/kogpt2-base-v2").to(device) # 3. 한국어 소설 생성 함수 (4문장만 출력) def generate_korean_story(prompt, max_length=300, num_sentences=4): input_ids = tokenizer.encode(prompt, return_tensors="pt").to(device) outputs = model.generate( input_ids, max_length=max_length, min_length=100, do_sample=True, temperature=0.9, top_k=50, top_p=0.95, repetition_penalty=1.2, no_repeat_ngram_size=3, eos_token_id=tokenizer.eos_token_id ) full_text = tokenizer.decode(outputs[0], skip_special_tokens=True) # 문장 단위로 자르기 (정규표현식으로 마침표/물음표/느낌표 기준) sentences = re.split(r'(?<=[.?!])\s+', full_text.strip()) # 앞에서 4문장만 선택 후 합치기 story = " ".join(sentences[:num_sentences]) return story # 4. 실행 if __name__ == "__main__": user_prompt = input("📜 소설의 시작 문장을 입력하세요 (한국어): ") result = generate_korean_story(user_prompt, max_length=500, num_sentences=4) print("\n📖 생성된 한국어 소설 (4문장):\n") print(result)