Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Ko-GPT2

import numpy as np
import torch
import transformers
from transformers import PreTrainedTokenizerFast

tokenizer = PreTrainedTokenizerFast.from_pretrained("skt/kogpt2-base-v2",
  bos_token='</s>', eos_token='</s>', unk_token='<unk>',
  pad_token='<pad>', mask_token='<mask>')
print(' '.join(tokenizer.tokenize("안녕하세요. 한국어 GPT-2 입니다.😤:)l^o")))
▁안녕 하 세 요. ▁한국어 ▁G P T -2 ▁입 니다. 😤 :) l^o
from transformers import GPT2LMHeadModel

model = GPT2LMHeadModel.from_pretrained('skt/kogpt2-base-v2')
text = '근육이 커지기 위해서는'
input_ids = tokenizer.encode(text)
gen_ids = model.generate(torch.tensor([input_ids]),
                         max_length=128,
                         repetition_penalty=2.0,
                         pad_token_id=tokenizer.pad_token_id,
                         eos_token_id=tokenizer.eos_token_id,
                         bos_token_id=tokenizer.bos_token_id,
                         use_cache=True)
generated = tokenizer.decode(gen_ids[0,:].tolist())
print(generated)
근육이 커지기 위해서는 무엇보다 규칙적인 생활습관이 중요하다.
특히, 아침식사는 단백질과 비타민이 풍부한 과일과 채소를 많이 섭취하는 것이 좋다.
또한 하루 30분 이상 충분한 수면을 취하는 것도 도움이 된다.
아침 식사를 거르지 않고 규칙적으로 운동을 하면 혈액순환에 도움을 줄 뿐만 아니라 신진대사를 촉진해 체내 노폐물을 배출하고 혈압을 낮춰준다.
운동은 하루에 10분 정도만 하는 게 좋으며 운동 후에는 반드시 스트레칭을 통해 근육량을 늘리고 유연성을 높여야 한다.
운동 후 바로 잠자리에 드는 것은 피해야 하며 특히 아침에 일어나면 몸이 피곤해지기 때문에 무리하게 움직이면 오히려 역효과가 날 수도 있다.
운동을
import pandas as pd

# 다음 단어 예측
입력텍스트 = '나는 너를 사랑하는데, 너도 나를'
print('입력문장:', 입력텍스트)
print('토큰:', tokenizer.tokenize(입력텍스트))
입력시퀀스 = tokenizer.encode(입력텍스트, return_tensors='pt')
print(입력시퀀스)
with torch.no_grad():
    output = model(입력시퀀스)

# print(type(output), output.keys())
print(output.logits.shape) # (배치크기, 시퀀스길이, 어휘수)

확률분포 = torch.nn.functional.softmax(output.logits, dim=-1)
확률, 다음단어 = torch.max(확률분포, dim=-1)
display(pd.DataFrame({
    '확률': 확률[0].numpy(), 
    '단어색인': 다음단어[0].numpy()}))
print(다음단어[:, -1])  # 마지막 시점의 최대 확률 단어 색인
print('다음 단어 후보')
tokenizer.decode(다음단어[:, -1])
입력문장: 나는 너를 사랑하는데, 너도 나를
토큰: ['▁나는', '▁너', '를', '▁사랑', '하는데,', '▁너도', '▁나를']
tensor([[12102, 10099,  7470, 10270, 12182, 47317, 24692]])
torch.Size([1, 7, 51200])
Loading...
tensor([10270])
다음 단어 후보
'사랑'