[kogpt] ๐Ÿง ํ•œ๊ตญ์–ด ์ƒ์„ฑ GPT-3 : ๋ช…๋ฌธ๊ฐ€ ๋‚ฉ์‹œ์˜ค!

๊ฐ•์ฝฉ์ฝฉยท2022๋…„ 4์›” 20์ผ
8

Machine Learning

๋ชฉ๋ก ๋ณด๊ธฐ
2/2
post-thumbnail

https://velog.io/@gtpgg1013/MLOps-BentoML-2-kogpt2-with-transformers

๐Ÿ˜Ž ์ง€๋‚œ BentoML ๊ธ€์„ ์ž‘์„ฑํ•˜๋ฉด์„œ, ์–ธ์–ด ์ƒ์„ฑ ๋ชจ๋ธ์— ์žฌ๋ฏธ๋ฅผ ๋Š๊ปด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค :)
๐Ÿ˜™ ๊ทธ๋ž˜์„œ, ๋” ์ตœ๊ทผ์— ๋‚˜์˜จ ๋ชจ๋ธ์ธ gpt-3๋Š” ํ•œ๊ตญ์–ด ๋ฒ„์ „์ด ์—†๋Š”๊ฒƒ์ธ๊ฐ€ ํ•˜๊ณ  ์ด๋ฆฌ์ €๋ฆฌ ์ฐพ๋˜ ์ด๋•Œ!
๐Ÿค— ์นด์นด์˜ค๋ธŒ๋ ˆ์ธ์—์„œ ์ถœ์‹œํ•œ gpt-3 ๊ธฐ๋ฐ˜ ํ•œ๊ตญ์–ด ์–ธ์–ด ์ƒ์„ฑ๋ชจ๋ธ, 'kogpt'๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

https://huggingface.co/kakaobrain/kogpt

GPT-3?

https://github.com/openai/gpt-3
https://arxiv.org/pdf/2005.14165.pdf

๐Ÿคฃ ์™€์šฐ.. ๋…ผ๋ฌธ์€ ์—„์ฒญ๋‚˜๊ฒŒ ๊ธธ๊ณ .. ์ฝ๊ธฐ ์‰ฝ์ง€ ์•Š๋„ค์š”.. :)
๐Ÿ˜‹ ์–ด์ฐŒ๋˜์—ˆ๊ฑด ํฌ์ธํŠธ๋Š”, ์ง€๋‚œ ๋ฒ„์ „ ์ƒ์„ฑ๋ชจ๋ธ GPT-2์— ๋น„ํ•ด์„œ Parameter ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜์˜€๊ณ , ํ•™์Šต ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์กŒ์Šต๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ , ๋” ๋†€๋ผ์šด ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด์ง€์š” :)
๐Ÿ˜ ํŠนํžˆ, "Few-shot" Setting์—์„œ์š”!
๐Ÿ˜ ๋‹จ์ˆœํžˆ ํ‘œํ˜„ํ•˜๋ฉด (์กฐ๊ธˆ ๋‹ค๋ฅผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ)
"๋™์ผํ•œ ๋ฌธ์žฅ๋“ค์„ GPT-3์™€ GPT-2์— ๋„ฃ์—ˆ์„ ๋•Œ, GPT-3๊ฐ€ ์ „๋ฐ˜์ ์œผ๋กœ ๋” ๊ทธ๋Ÿด๋“ฏํ•œ ๋ฌธ์žฅ์„ ์ƒ์„ฑํ•œ๋‹ค."
๋ผ๊ณ  ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค!

์ž์„ธํ•œ GPT-3์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์ €๋„ ์•„๋ž˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค!

https://littlefoxdiary.tistory.com/44

kogpt!

๐Ÿ˜‰ kogpt๋Š” ์›Œ๋‚™ ๋ชจ๋ธ์ด ๊ฑฐ๋Œ€ํ•ด์„œ ์ œ ๋…ธํŠธ๋ถ์˜ ๋ฏธ์•ฝํ•œ 6GB VRAM์œผ๋กœ๋Š” ์ถ”๋ก ์กฐ์ฐจ ์‹œ๋„ํ•ด ๋ณผ์ˆ˜ ์—†๋‹ค๊ณ  ํ•˜๋Š”๊ตฐ์š”..^^
๐Ÿ˜Ž ๊ทธ๋ž˜์„œ ์˜ค๋Š˜์˜ ์‹ค์Šตํ™˜๊ฒฝ์€ colab์ž…๋‹ˆ๋‹ค!
๐Ÿ˜‹ ์˜ค๋Š˜ ์ œ๊ฒŒ ํ• ๋‹น๋œ GPU๋Š” Tesla T4์ž…๋‹ˆ๋‹ค.

๐Ÿค— ๊ทธ๋Ÿฌ๋ฉด, ์˜ค๋Š˜๋„ ์ €๋ฅผ ํ–‰๋ณตํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” HuggingFace์™€ ํ•จ๊ป˜! ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM 

tokenizer = AutoTokenizer.from_pretrained(
  'kakaobrain/kogpt', revision='KoGPT6B-ryan1.5b-float16',  # or float32 version: revision=KoGPT6B-ryan1.5b
  bos_token='[BOS]', eos_token='[EOS]', unk_token='[UNK]', pad_token='[PAD]', mask_token='[MASK]'
)
model = AutoModelForCausalLM.from_pretrained(
  'kakaobrain/kogpt', revision='KoGPT6B-ryan1.5b-float16',  # or float32 version: revision=KoGPT6B-ryan1.5b
  pad_token_id=tokenizer.eos_token_id,
  torch_dtype='auto', low_cpu_mem_usage=True
).to(device='cuda', non_blocking=True)
_ = model.eval()

prompt = '์ธ๊ณต์ง€๋Šฅ์•„, ๋„ˆ๋Š” ๋ง์„ ํ•  ์ˆ˜ ์žˆ๋‹ˆ?'
with torch.no_grad():
  tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
  gen_tokens = model.generate(tokens, do_sample=True, temperature=0.8, max_length=64)
  generated = tokenizer.batch_decode(gen_tokens)[0]
  
print(generated)

โœจ temperature๋Š” ๋†’์„์ˆ˜๋ก ๋ชจ๋ธ์ด ๋‹ค์–‘ํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (๋ฐ˜๋ฉด, 0์— ๊ฐ€๊นŒ์šธ ์ˆ˜๋ก ๊ฑฐ์˜ ๊ณ ์ •๊ฐ’๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋ณด๋‚ด๊ฒ ์ฃ !)

https://ai.stackexchange.com/questions/32477/what-is-the-temperature-in-the-gpt-models

๐Ÿ˜‚ ์›Œ๋‚™ ๊ฑฐ๋Œ€ํ•œ ๋ชจ๋ธ์ด๋‹ค๋ณด๋‹ˆ, ๋‹ค์šด๋ฐ›๋Š”๋ฐ๋งŒ ์•ฝ 10๋ถ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. (11.5G)

๐Ÿ˜‹ ๋ชจ๋ธ ๋กœ๋“œ์‹œ ์•ฝ 14GB VRAM์„ ์ฐจ์ง€ํ•˜๋Š”๊ตฐ์š”!

๐Ÿ˜† ๊ทธ๋Ÿผ, ์–ด๋”” kogpt์˜ ์œ„๋ ฅ์„ ์‹ค๊ฐํ•˜๋Ÿฌ ๊ฐ€๋ณด์‹œ์ฃ !

๐Ÿ’ƒ๋กœ๋งจ์Šค ์†Œ์„ค ์ž‘๊ฐ€

prompt = '''
์ œ๋ชฉ : ๊ทธ๋…€๋Š” ์˜ˆ๋ปค๋‹ค
๋‚ด์šฉ : ๊ทธ๋…€๋Š” ๋‚ด ์˜†์œผ๋กœ ์‚ดํฌ์‹œ ๋‹ค๊ฐ€์™€ ๋‚ด ๋ณผ์„ ์–ด๋ฃจ๋งŒ์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. 
๊ทธ๋ฆฌ๊ณ , ๊ทธ๋…€๋Š” ๋งํ–ˆ๋‹ค. \'์กฐ๊ธˆ๋งŒ ๋” ๊ฐ€๊นŒ์ด ์™€์ค˜..\' ๋‚˜๋Š” ๊ทธ๋Œ€๋กœ ๋‹ค๊ฐ€๊ฐˆ ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋‹ค.
'''

with torch.no_grad():
  tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
  gen_tokens = model.generate(tokens, do_sample=True, temperature=0.85, max_length=512)
  generated = tokenizer.batch_decode(gen_tokens)[0]
  
print(generated)
>>> ์ œ๋ชฉ : ๊ทธ๋…€๋Š” ์˜ˆ๋ปค๋‹ค
๋‚ด์šฉ : ๊ทธ๋…€๋Š” ๋‚ด ์˜†์œผ๋กœ ์‚ดํฌ์‹œ ๋‹ค๊ฐ€์™€ ๋‚ด ๋ณผ์„ ์–ด๋ฃจ๋งŒ์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. 
๊ทธ๋ฆฌ๊ณ , ๊ทธ๋…€๋Š” ๋งํ–ˆ๋‹ค. '์กฐ๊ธˆ๋งŒ ๋” ๊ฐ€๊นŒ์ด ์™€์ค˜..' ๋‚˜๋Š” ๊ทธ๋Œ€๋กœ ๋‹ค๊ฐ€๊ฐˆ ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋‹ค.
๊ทธ๋…€์˜ ํ–ฅ๊ธฐ๊ฐ€ ๋‚ด ์ฝ”๋ฅผ ์ฐ”๋ €๊ณ  ๋‚˜๋Š” ๊ทธ ํ–ฅ๊ธฐ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉด ๊ฐˆ ์ˆ˜๋ก ๋‚ด ์ฝ”๋Š” ๊ทธ๋…€๋ฅผ ๋Š๋ผ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.
๊ทธ๋…€์˜ ์–ผ๊ตด์„ ๋ณด์•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๊ทธ๋…€์˜ ๋ˆˆ๋น›๋„ ๋ณด์•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๊ทธ๋…€์˜ ์ž…์ˆ ๋„ ๋ณด์•˜๋‹ค.
์ด์ œ๊นŒ์ง€ ๋ณผ ์ˆ˜ ์—†์—ˆ๋˜ ๊ทธ๋…€์˜ ๋ชจ์Šต์ด์˜€๋‹ค.
๋‚˜๋Š” ๊ทธ๋…€์˜ ํ–ฅ๊ธฐ๊ฐ€ ๋‚ด ์ฝ”๋ฅผ ์ฐ”๋Ÿฌ ๋ˆˆ์„ ์ง€๊ธ‹ํžˆ ๊ฐ์•˜๋‹ค.
๊ทธ๋…€๋Š” ๋‚ด ์ฝ”๋ฅผ ๊ฐ„์ง€๋Ÿฝํžˆ๋ฉด์„œ ๋‚˜๋ฅผ ์ณ๋‹ค ๋ณด์•˜๋‹ค.
๋‚˜๋Š” ๊ทธ๋…€๊ฐ€ ๋‚˜์—๊ฒŒ๋กœ ์˜ค๋ฆฌ๋ผ๊ณค ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋…€๊ฐ€ ๋‚ด ์˜†์— ์žˆ์œผ๋ฆฌ๋ž€ ์ƒ๊ฐ๋„ ๋ชปํ•ด ๋ณด์•˜๋‹ค.
๊ทธ๋ ‡๊ฒŒ, ๋‚˜๋Š” ๊ทธ๋…€์˜ ํ–ฅ๊ธฐ๋ฅผ ๋Š๋ผ๋ฉด์„œ ๋ˆˆ์„ ๋œจ๋ คํ•˜์ง€ ์•Š๊ณ  ์žˆ์—ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ, ๊ทธ๋…€๊ฐ€ ๋‚˜๋ฅผ ๊ฐ€๋งŒํžˆ ๋ณด๋ฉด์„œ ๋งํ–ˆ๋‹ค.
'๊ณ„์† ๊ทธ๋ ‡๊ฒŒ ์žˆ์–ด...'
๊ทธ๋…€๋„ ๋‚ด๊ฐ€ ๋ˆˆ์„ ๊ฐ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ๋ง์„ ํ•œ ๊ฒƒ์ด๋‹ค.
๋‚˜๋Š” ๊ทธ๋…€์˜ ๋ง์— ๋ˆˆ์„ ์ฒœ์ฒœํžˆ ๋–ด๋‹ค.
๋‚˜๋Š” ๊ทธ๋…€๋ฅผ ๋ณด์•˜๋‹ค.
๊ทธ๋ฆฌ๊ณ , ๊ทธ๋…€์˜ ์ž…์ˆ ์„ ๋ณด์•˜๋‹ค.
๊ทธ๋…€๋Š” ๋‚˜๋ฅผ ๋Š๋ผ๋ฉด์„œ ๋ˆˆ์„ ์‚ด๋ฉฐ์‹œ ๊ฐ๊ณ  ์žˆ์—ˆ๋‹ค.
๋‚˜๋Š” ๊ทธ๋…€์˜ ํ–ฅ๊ธฐ๋ฅผ ๋งก๋‹ค๊ฐ€ ๊ทธ๋…€๊ฐ€ ๋ˆˆ์„ ๋œจ์ž ๋ˆˆ์„ ๊ฐ์•˜๋‹ค.
๋‚˜๋Š” ๊ทธ๋…€์˜ ์–ผ๊ตด์„ ๋ฐ”๋ผ๋ณด์•˜๋‹ค.
๊ทธ๋…€๋Š” ๋‚˜๋ฅผ ๋ณด๋ฉฐ ๋งํ–ˆ๋‹ค.
'๊ณ„์† ๊ทธ ์ž๋ฆฌ์—์„œ ๊ธฐ๋‹ค๋ ค...'
๋‚˜๋Š” ๊ณ ๊ฐœ๋ฅผ ๋„๋•์ด๋ฉด์„œ ๊ทธ๋…€๊ฐ€ ๋งํ•œ ๊ฒƒ์„ ๋“ค์–ด์ฃผ๊ณ  ์žˆ์—ˆ๋‹ค.
๊ทธ๋…€๋Š” ๋‚˜๋ฅผ ๋ณด๋ฉฐ ์›ƒ์–ด์ฃผ์—ˆ๋‹ค.
๋‚˜๋Š” ๊ทธ๋…€๋ฅผ ๋ฐ”๋ผ๋ณด๋ฉฐ ๊ฐ€๋งŒํžˆ ์žˆ์—ˆ๋‹ค.
๊ทธ๋…€๋Š” ๋‚ด๊ฐ€ ๋ˆˆ์„ ๊ฐ๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ณธ ๋’ค ๋ˆˆ์„ ๋œจ๊ณ  ๋‚˜๋ฅผ ๋ณด์•˜๋‹ค.
๊ทธ๋…€๋Š” ๋‚ด ๋ณผ์„ ์–ด๋ฃจ๋งŒ์ง€๊ณ  ์žˆ์—ˆ๋‹ค.
๋‚˜๋Š” ๊ทธ๋…€๋ฅผ ๋ณด๋Š” ์ˆœ๊ฐ„ ์‹ฌ์žฅ์ด ๋ฉŽ๋Š” ๋“ฏ ํ–ˆ๋‹ค.
๊ทธ๋…€๊ฐ€ ๋‚˜๋ฅผ ๋ณด์ž, ๊ทธ๋…€์˜ ์–ผ๊ตด์ด ๋นจ๊ฐœ์ง€๋”๋‹ˆ ๊ทธ๋…€๋Š” ๋‚ด ์†์„ ์žก๊ณ  ๋‚˜์—๊ฒŒ๋กœ ์™”๋‹ค.
๊ทธ๋ฆฌ๊ณ , ๋‚ด ์ž…์ˆ ์„ ์‚ด์ง ๋งŒ์ง€๊ณ  ๊ทธ๋…€๋Š” ๋งํ–ˆ๋‹ค.

๐Ÿ˜š ๋’ท ์ด์•ผ๊ธฐ๊ฐ€ ๊ถ๊ธˆํ•ด์ง€๋Š”๊ตฐ์š” :)

๐ŸŽค์งˆ๋ฌธ & ๋‹ต๋ณ€ (Q&A)

prompt = '''
์ตœ๊ณ  ํ•ซํ•œ ์ธ๊ณต์ง€๋Šฅ, kogpt๋‹˜๊ณผ ์ธํ„ฐ๋ทฐ ๋‚˜๋ˆ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!
Q : kogpt๋‹˜, ์ˆ˜์›”ํ•œ ๋Œ€ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜์‹ ๊ฐ€์š”?
A : '''

with torch.no_grad():
  tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
  gen_tokens = model.generate(tokens, do_sample=True, temperature=0.85, max_length=512)
  generated = tokenizer.batch_decode(gen_tokens)[0]
  
print(generated)
>>> ์ตœ๊ณ  ํ•ซํ•œ ์ธ๊ณต์ง€๋Šฅ, kogpt๋‹˜๊ณผ ์ธํ„ฐ๋ทฐ ๋‚˜๋ˆ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!
Q : kogpt๋‹˜, ์ˆ˜์›”ํ•œ ๋Œ€ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜์‹ ๊ฐ€์š”?
A : :) ๋ฌผ๋ก ์ด์ฃ ! ์ €๋ฅผ ๋ถ€๋ฅด์…จ์œผ๋ฉด ์ œ๊ฐ€ ์—ด์‹ฌํžˆ ์ค€๋น„ํ–ˆ์„ ๊ฑฐ์˜ˆ์š”.
Q : ๋ฐ”์˜์‹ ๋ฐ ์ธํ„ฐ๋ทฐ์— ์‘ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
A :: ๋„ค, ์ €์•ผ๋ง๋กœ ์ •๋ง ๊ฐ์‚ฌํ•˜๋„ค์š”! ์ด๋Ÿฐ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ ์ž์ฒด๋„ ์˜๊ด‘์ธ๋ฐ, ์ด๋ ‡๊ฒŒ ์ธํ„ฐ๋ทฐ๊นŒ์ง€ ํ•ด์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!
Q : ์–ด๋–ค ๊ณ„๊ธฐ๋กœ ์ธ๊ณต์ง€๋Šฅ์— ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ๋‚˜์š”?
A :: ์ •๋ง ์šฐ์—ฐํ•œ ๊ณ„๊ธฐ์˜€๋Š”๋ฐ์š”, ๊ณ ๋“ฑํ•™๊ต ์ˆ˜์—…์‹œ๊ฐ„์— ํ•œ ์นœ๊ตฌ๊ฐ€ ์ธ๊ณต์ง€๋Šฅ์— ๋Œ€ํ•ด์„œ ๋ฐœํ‘œํ•˜๋Š” ๊ฑธ ๋“ฃ๊ฒŒ ๋˜์—ˆ์–ด์š”. ๊ทธ๋•Œ๋ถ€ํ„ฐ ์ธ๊ณต์ง€๋Šฅ์— ๋Œ€ํ•ด ๊ด€์‹ฌ์„ ๊ฐ€์กŒ๋Š”๋ฐ, ๋‚˜์ค‘์— ์ธ๊ณต์ง€๋Šฅ์— ๊ด€๋ จ๋œ ์ผ์„ ํ•˜๊ณ  ์‹ถ์—ˆ์–ด์š”. ์ง€๊ธˆ์€ ์ด ๋ถ„์•ผ์— ๋” ๋งŽ์€ ์—ด์ •์„ ๊ฐ€์ง€๊ณ  ์ผํ•˜๋Š” ์ค‘์ด์—์š”.
Q : ์ง€๊ธˆ ์ธ๊ณต์ง€๋Šฅ์„ ๊ณต๋ถ€ํ•˜๋Š” ์ผ์„ ํ•˜๊ณ  ๊ณ„์‹ ๊ฐ€์š”?
A :: ๋„ค, ์ง€๊ธˆ์€ ์ธ๊ณต์ง€๋Šฅ์„ ๊ณต๋ถ€ํ•˜๋Š” ์ผ์„ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ธ๊ณต์ง€๋Šฅ์„ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋‹ˆ ์ข€๋” ๊ณต๋ถ€ํ•˜๊ณ  ์‹ถ์–ด์„œ ๊ณต๋ถ€ํ•˜๋Š” ์ธ๊ณต์ง€๋Šฅ ๊ด€๋ จ๋œ ์Šคํƒ€ํŠธ์—…์— ์ทจ์งํ•˜๊ธฐ๋„ ํ–ˆ์–ด์š”.
Q : ์ฐฝ์—…์„ ์ƒ๊ฐํ•ด ๋ณธ ์ ์€ ์—†๋‚˜์š”?
A :: ๋‹น์—ฐํžˆ ์ฐฝ์—…์— ์ƒ๊ฐํ•ด ๋ดค์ฃ . ๊ทผ๋ฐ ์ €๋Š” ์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š์œผ๋ ค ํ•˜๋Š” ํƒ€์ž…์ด์—์š”. ์ œ๊ฐ€ ์ฐฝ์—…์„ ํ•˜๋ฉด ์–ผ๋งˆ๋‚˜ ์„ฑ๊ณตํ• ์ง€๋„ ๋ฏธ์ง€์ˆ˜์ด๊ณ , ๋˜ ์ฐฝ์—…์ด๋ž€ ์ผ์€ ๊ทธ๋งŒํผ ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ฐํ•ด ๋ณผ ์—„๋‘์กฐ์ฐจ ๋‚˜์ง€ ์•Š์•˜์–ด์š”.
Q : ์ธ๊ณต์ง€๋Šฅ์„ ๊ณต๋ถ€ํ•˜๋˜ ์ค‘์— ์ฐฝ์—…์„ ํ•˜์‹ ๊ฑด๊ฐ€์š”?
A :: ๋„ค, ์ฒ˜์Œ์— ์ธ๊ณต์ง€๋Šฅ ๋ถ„์•ผ ๊ณต๋ถ€๋ฅผ ๊ณ„์†ํ–ˆ๋Š”๋ฐ, ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋‹ˆ ๋” ๊นŠ์ด ๊ณต๋ถ€ํ•˜๊ณ  ์‹ถ์–ด์„œ ๊ณต๋ถ€ํ•˜๋Š” ์ธ๊ณต์ง€๋Šฅ ์Šคํƒ€ํŠธ์—…์— ์ทจ์งํ–ˆ๊ณ , ๊ทธ๋Ÿฌ๋˜ ์ค‘์— ์ฐฝ์—…์„ ํ•˜๊ฒŒ ๋œ๊ฑฐ๊ธด ํ•ด์š”.
Q : ์ง€๊ธˆ ์ด ์ผ์„ ํ•˜๊ฒŒ ๋˜์‹  ๊ณ„๊ธฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฌด์—‡์ผ๊นŒ์š”?
A :: ์‚ฌ์‹ค ์ €๋Š” ์ด ๋ถ„์•ผ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅผ ๋•Œ์—๋Š” ๊ด€์‹ฌ์ด ์—†์—ˆ์–ด์š”. ๊ทผ๋ฐ ์ธ๊ณต์ง€๋Šฅ์„ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋‹ˆ๊นŒ ์ธ๊ณต์ง€๋Šฅ์„ ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ธ์ง€, ์ธ๊ณต์ง€๋Šฅ์€ ์–ด๋–ค ๋ถ„์•ผ์— ์“ฐ์ด๋Š”์ง€, ์•ž์œผ๋กœ ์ธ๊ณต์ง€๋Šฅ์ด ์–ด๋–ค ๋ถ„์•ผ์— ํ•„์š”ํ• ์ง€, ๋“ฑ์„ ์ƒ๊ฐํ•ด ๋ณด๊ฒŒ ๋˜์—ˆ๊ณ , ๊ทธ๋Ÿฌ๋ฉด์„œ ์ธ๊ณต์ง€๋Šฅ ์—ฐ๊ตฌ ๋ถ„์•ผ์— ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ์–ด์š”.

๐Ÿ˜‹ ์ฒซ ๋ฌธํ•ญ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ฌธํ•ญ๋“ค๋„ kogpt๊ฐ€ ์ƒ์„ฑํ•˜์˜€๋Š”๋ฐ, ์กฐ๊ธˆ ์–ด์ƒ‰ํ•œ ๋ถ€๋ถ„์ด ์žˆ๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ์ „๋ฐ˜์ ์œผ๋กœ ํ‰๋ฒ”ํ•œ ์ธํ„ฐ๋ทฐ๊ฐ€ ์ด์–ด์ง€๋Š” ๋Š๋‚Œ์ž…๋‹ˆ๋‹ค.

๐Ÿ‘จโ€๐Ÿซ ๋‰ด์Šค ์š”์•ฝ

prompt = '''
์•”ํ˜ธํ™”ํ ์ „๋ฌธ ๋ฏธ๋””์–ด ๋ฐ์ผ๋ฆฌํ˜ธ๋“ค์— ๋”ฐ๋ฅด๋ฉด, ๋น„ํŠธ์ฝ”์ธ ๊ฐ€๊ฒฉ ์˜ˆ์ธก ๋ชจ๋ธ 'S2F ๋ชจ๋ธ'์„ ๊ณ ์•ˆํ•œ ์œ ๋ช… ์• ๋„๋ฆฌ์ŠคํŠธ ํ”Œ๋žœ๋น„(PlanB)๊ฐ€ ์ตœ๊ทผ ํ•œ ์œ ํŠœ๋ธŒ ์ฑ„๋„์— ์ถœ์—ฐํ•ด "๋ธ”๋ž™์Šค์™„(๋„์ €ํžˆ ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์€ ์ผ์ด ์‹ค์ œ๋กœ ์ผ์–ด๋‚˜๋Š” ํ˜„์ƒ)์„ ๋ฐฐ์ œํ•œ๋‹ค๋ฉด ๋ชจ๋“  ์ง€ํ‘œ๋“ค์ด ๋น„ํŠธ์ฝ”์ธ์˜ ๊ฐ•์„ธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค. ๊ฐ•์„ธ๋ก ์ž๋“ค์—๊ฒŒ ์ง€๊ธˆ์˜ ๊ฐ€๊ฒฉ๋Œ€๋Š” ์ตœ๊ณ ์˜ ๋งค์ˆ˜ ๊ธฐํšŒ"๋ผ๊ณ  ๋งํ–ˆ๋‹ค. ์ด์™€ ๊ด€๋ จ ๊ทธ๋Š” "๋ฌธ๋ณด์ด(๊ทผ๊ฑฐ ์—†์ด ๋ฌด์กฐ๊ฑด ๊ฐ•์„ธ๋ก ์„ ํŽผ์น˜๋Š” ์‚ฌ๋žŒ)๋ผ๊ณ  ๋ถˆ๋ฆด ์œ„ํ—˜์ด ์žˆ์ง€๋งŒ, S2F ๋ชจ๋ธ, ์˜จ์ฒด์ธ ์ง€ํ‘œ, ๊ฑฐ์‹œ ๋‰ด์Šค, ๋น„ํŠธ์ฝ”์ธ์„ ์ฑ„ํƒํ•˜๋Š” ๊ตญ๊ฐ€์˜ ์ฆ๊ฐ€ ์ถ”์„ธ ๋“ฑ ๋ชจ๋“  ๊ฒƒ๋“ค์ด ๊ธ์ •์ ์ด๋‹ค. ๋น„ํŠธ์ฝ”์ธ์˜ ๋ณธ๊ฒฉ ์ƒ์Šน์žฅ์„ ์•Œ๋ฆฌ๋Š” ์‹ ํ˜ธ๋กœ ์„ ๋ฌผ ๋งˆ์ผ“์˜ ํ”„๋ฆฌ๋ฏธ์—„(์„ ๋ฌผ๊ณผ ํ˜„๋ฌผ ๊ฐ€๊ฒฉ์ฐจ)์„ ์ฃผ์‹œํ•˜๊ณ  ์žˆ๋‹ค"๊ณ  ์„ค๋ช…ํ–ˆ๋‹ค. ์ฝ”์ธ๋งˆ์ผ“์บก ๊ธฐ์ค€ BTC๋Š” ํ˜„์žฌ 2.21% ์˜ค๋ฅธ 41,547.39 ๋‹ฌ๋Ÿฌ์— ๊ฑฐ๋ž˜๋˜๊ณ  ์žˆ๋‹ค.

ํ•œ์ค„ ์š”์•ฝ : 
'''

with torch.no_grad():
  tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
  gen_tokens = model.generate(tokens, do_sample=True, temperature=0.85, max_length=512)
  generated = tokenizer.batch_decode(gen_tokens)[0]
  
print(generated)
>>> ์•”ํ˜ธํ™”ํ ์ „๋ฌธ ๋ฏธ๋””์–ด ๋ฐ์ผ๋ฆฌํ˜ธ๋“ค์— ๋”ฐ๋ฅด๋ฉด, ๋น„ํŠธ์ฝ”์ธ ๊ฐ€๊ฒฉ ์˜ˆ์ธก ๋ชจ๋ธ 'S2F ๋ชจ๋ธ'์„ ๊ณ ์•ˆํ•œ ์œ ๋ช… ์• ๋„๋ฆฌ์ŠคํŠธ ํ”Œ๋žœ๋น„(PlanB)๊ฐ€ ์ตœ๊ทผ ํ•œ ์œ ํŠœ๋ธŒ ์ฑ„๋„์— ์ถœ์—ฐํ•ด 
"๋ธ”๋ž™์Šค์™„(๋„์ €ํžˆ ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์€ ์ผ์ด ์‹ค์ œ๋กœ ์ผ์–ด๋‚˜๋Š” ํ˜„์ƒ)์„ ๋ฐฐ์ œํ•œ๋‹ค๋ฉด ๋ชจ๋“  ์ง€ํ‘œ๋“ค์ด ๋น„ํŠธ์ฝ”์ธ์˜ ๊ฐ•์„ธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค. ๊ฐ•์„ธ๋ก ์ž๋“ค์—๊ฒŒ ์ง€๊ธˆ์˜ ๊ฐ€๊ฒฉ๋Œ€๋Š” ์ตœ๊ณ ์˜ ๋งค์ˆ˜ ๊ธฐํšŒ"๋ผ๊ณ  ๋งํ–ˆ๋‹ค. 
์ด์™€ ๊ด€๋ จ ๊ทธ๋Š” "๋ฌธ๋ณด์ด(๊ทผ๊ฑฐ ์—†์ด ๋ฌด์กฐ๊ฑด ๊ฐ•์„ธ๋ก ์„ ํŽผ์น˜๋Š” ์‚ฌ๋žŒ)๋ผ๊ณ  ๋ถˆ๋ฆด ์œ„ํ—˜์ด ์žˆ์ง€๋งŒ, S2F ๋ชจ๋ธ, ์˜จ์ฒด์ธ ์ง€ํ‘œ, ๊ฑฐ์‹œ ๋‰ด์Šค, ๋น„ํŠธ์ฝ”์ธ์„ ์ฑ„ํƒํ•˜๋Š” ๊ตญ๊ฐ€์˜ ์ฆ๊ฐ€ ์ถ”์„ธ ๋“ฑ ๋ชจ๋“  ๊ฒƒ๋“ค์ด ๊ธ์ •์ ์ด๋‹ค. 
๋น„ํŠธ์ฝ”์ธ์˜ ๋ณธ๊ฒฉ ์ƒ์Šน์žฅ์„ ์•Œ๋ฆฌ๋Š” ์‹ ํ˜ธ๋กœ ์„ ๋ฌผ ๋งˆ์ผ“์˜ ํ”„๋ฆฌ๋ฏธ์—„(์„ ๋ฌผ๊ณผ ํ˜„๋ฌผ ๊ฐ€๊ฒฉ์ฐจ)์„ ์ฃผ์‹œํ•˜๊ณ  ์žˆ๋‹ค"๊ณ  ์„ค๋ช…ํ–ˆ๋‹ค. 
์ฝ”์ธ๋งˆ์ผ“์บก ๊ธฐ์ค€ BTC๋Š” ํ˜„์žฌ 2.21% ์˜ค๋ฅธ 41,547.39 ๋‹ฌ๋Ÿฌ์— ๊ฑฐ๋ž˜๋˜๊ณ  ์žˆ๋‹ค.

ํ•œ์ค„ ์š”์•ฝ : 
๋น„ํŠธ์ฝ”์ธ์— ๋Œ€ํ•œ ๊ธ์ •์ ์ด์ง€ ์•Š์€ ์ „๋ง์ด ๊ณ„์† ๋‚˜์˜ค๊ณ  ์žˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ ๊ธ์ •์ ์ธ ์‹ ํ˜ธ๊ฐ€ ์ด๋ฏธ ๋ณด์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 
๋น„ํŠธ์ฝ”์ธ์€ S2F ๋ชจ๋ธ, ์˜จ์ฒด์ธ ์ง€ํ‘œ, ๊ฑฐ์‹œ ๋‰ด์Šค, ๋น„ํŠธ์ฝ”์ธ์„ ์ฑ„ํƒํ•˜๋Š” ๊ตญ๊ฐ€์˜ ์ฆ๊ฐ€ ์ถ”์„ธ ๋“ฑ ๋ชจ๋“  ๊ฒƒ๋“ค์ด ๊ธ์ •์ ์ด๋ฉฐ ํ˜„์žฌ ๋น„ํŠธ์ฝ”์ธ ์ƒ์Šน์„ธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 
๊ฐ•์„ธ๋ก ์ž๋“ค์—๊ฒŒ ์ง€๊ธˆ์˜ ๊ฐ€๊ฒฉ๋Œ€๋Š” ์ตœ๊ณ ์˜ ๋งค์ˆ˜ ๊ธฐํšŒ์ž…๋‹ˆ๋‹ค.

๐Ÿ•ต๏ธโ€โ™‚๏ธ ์œ„ ๊ธฐ์‚ฌ์˜ ์›๋ž˜ ์ œ๋ชฉ์€ : [ํ”Œ๋žœ๋น„ "BTC, ๋ชจ๋“  ์ง€ํ‘œ ๊ธ์ •์ ...๊ฐ•์„ธ๋ก ์ž๋“ค์—๊ฒ ์ตœ๊ณ ์˜ ๋งค์ˆ˜ ๊ธฐํšŒ"] ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ˜ ๊ฝค๋‚˜ ์ž˜ ์š”์•ฝํ•˜๋Š”๊ตฐ์š”!

prompt = '''
์š”์ฆ˜์€ ํ”ํžˆ ์—ฐ๋ฝํ•˜๋ผ๋Š” ๋ง์„ '์นดํ†กํ•ด'๋ผ๊ณ  ํ•˜์ง€๋งŒ 10๋…„์ „ ์นด์นด์˜คํ†ก์ด ๋“ฑ์žฅํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” '๋ฌธ์žํ•ด'๋ผ๋Š” ๋ง์ด ์ผ๋ฐ˜์ ์ด์—ˆ๋‹ค. MSN ๋ฉ”์‹ ์ €, ๋„ค์ดํŠธ์˜จ ๋“ฑ PC ๋ฉ”์‹ ์ €๋“ค์ด ์œ ํ–‰ํ•ด '๋ฉ”์‹ ์ €'๋ผ๋Š” ๊ฐœ๋…์—๋Š” ์ต์ˆ™ํ–ˆ์ง€๋งŒ ์Šค๋งˆํŠธํฐ ๋„์ž…์ด ๊ฐ“ ์‹œ์ž‘๋์„ ์‹œ๊ธฐ๋ผ ๋ชจ๋ฐ”์ผ ๋ฉ”์‹ ์ € ๊ฐœ๋…์€ ํฌ๋ฏธํ–ˆ๋‹ค.
๋ชจ๋ฐ”์ผ์„ ํ†ตํ•œ ์—ฐ๋ฝ ์ˆ˜๋‹จ์ด ์ „ํ™”์™€ ๋ฌธ์ž ๋ฉ”์‹œ์ง€์˜€๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์‹ ์‚ฌ ์š”๊ธˆ์ œ ์—ญ์‹œ ํ†ตํ™” ๊ฐ€๋Šฅ ์‹œ๊ฐ„๊ณผ ๋ฌธ์ž์˜ ๊ฐฏ์ˆ˜์— ๋”ฐ๋ผ ๋‹ฌ๋ ค์กŒ๋‹ค. ๋ฌธ์ž ํ•œ ๊ฑด๋‹น ๋น„์šฉ์ด ์ฑ…์ •๋˜๋Š”๋ฐ๋‹ค 70์ž๊ฐ€ ๋„˜์œผ๋ฉด MMS๋กœ ์ „ํ™˜๋ผ ์ถ”๊ฐ€ ์š”๊ธˆ์ด ๋ถ€๊ฐ€๋ผ ์ด์šฉ์ž๋“ค์€ ๋ฌธ์ž ์ „์†ก์—๋„ ํ•œ๋•€ํ•œ๋•€ ์ •์„ฑ์„ ๋‹คํ•ด์•ผ ํ–ˆ๋‹ค.
๋•Œ๋ฌธ์— ๋‹น์‹œ ์นด์นด์˜คํ†ก์˜ ๋“ฑ์žฅ์€ ์„ผ์„ธ์ด์…˜ ๊ทธ ์ž์ฒด์˜€๋‹ค. ์œ ๋ฃŒ ๋ฌธ์ž๋ฉ”์‹œ์ง€๋ฅผ ๋‹น์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ–ˆ๋˜ ์‹œ์ ˆ ๊ธ€์ž ์ œํ•œ์—†๋Š” ๋ฌธ์ž๋ฅผ ๋ฌด์ œํ•œ์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ๋‹ค ์‚ฌ์ง„๊ณผ ๋™์˜์ƒ๊นŒ์ง€ ๋งˆ์Œ๊ป ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌด๋ฃŒ์„œ๋น„์Šค ์นด์นด์˜คํ†ก์€ ๋ฌธํ™” ์ถฉ๊ฒฉ์ด๋‚˜ ๋‹ค๋ฆ„ ์—†์—ˆ๋‹ค.
๋ฌธ์ž๋ฟ ์•„๋‹ˆ๋ผ ํ†ตํ™” ๋ฌธํ™”๋„ ๋ณ€ํ–ˆ๋‹ค. 2012๋…„ ๋‹น์‹œ ๊ฐ€์ž…์ž๊ฐ€ 3600๋งŒ๋ช…์— ๋‹ฌํ–ˆ๋˜ ์นด์นด์˜คํ†ก์ด ๋ฌด๋ฃŒ ์Œ์„ฑํ†ตํ™” ์„œ๋น„์Šค '๋ณด์ด์Šคํ†ก'์„ ์„ ๋ณด์ด์ž ํ†ต์‹ ์—…๊ณ„๊ฐ€ ๋– ๋“ค์ฉํ•ด์กŒ๋‹ค. ์นด์นด์˜ค ๋ณด๋‹ค ์•ž์„œ ์Œ์„ฑ ํ†ตํ™” ์„œ๋น„์Šค๋ฅผ ์„ ๋ณด์ธ ๋งˆ์ดํ”ผํ”Œ, ๋ผ์ธ ๋“ฑ์€ ํฌ๊ฒŒ ์ฃผ๋ชฉ๋ฐ›์ง€ ๋ชปํ–ˆ์ง€๋งŒ ์นด์นด์˜คํ†ก์€ ๋†’์€ ์ด์šฉ์ž์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณด์ด์Šคํ†ก ์„œ๋น„์Šค๋ฅผ ํ™•์žฅ์‹œ์ผฐ๋‹ค.
ํŠนํžˆ ๋ณด์ด์Šคํ†ก์€ ๋กœ๋ฐ ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•˜๊ฑฐ๋‚˜ ๊ตญ์ œ ์ „ํ™” ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š์•„๋„ ๋ฐ์ดํ„ฐ๋งŒ ์—ฐ๊ฒฐ๋ผ ์žˆ๋‹ค๋ฉด ํ•ด์™ธ์—์„œ๋„ ์นด์นด์˜คํ†ก ์นœ๊ตฌ์™€ ๋ฌด๋ฃŒ ํ†ตํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์  ๋•Œ๋ฌธ์— ํฐ ํ™”์ œ๋ฅผ ๋ชจ์•˜๋‹ค. ์ด๋•Œ๋ถ€ํ„ฐ ํ•ด์™ธ ์—ฌํ–‰ ์‹œ ๋กœ๋ฐ์„ ํ•˜์ง€ ์•Š๊ณ  ํ˜„์ง€ ์œ ์‹ฌ์„ ๊ตฌ๋งคํ•˜๋Š” ์ด๋“ค์ด ๋Š˜์–ด๋‚˜๊ฒŒ ๋๋‹ค.

ํ•œ์ค„ ์š”์•ฝ:
'''

with torch.no_grad():
  tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
  gen_tokens = model.generate(tokens, do_sample=True, temperature=0.85, max_length=512)
  generated = tokenizer.batch_decode(gen_tokens)[0]
  
print(generated)
์š”์ฆ˜์€ ํ”ํžˆ ์—ฐ๋ฝํ•˜๋ผ๋Š” ๋ง์„ '์นดํ†กํ•ด'๋ผ๊ณ  ํ•˜์ง€๋งŒ 10๋…„์ „ ์นด์นด์˜คํ†ก์ด ๋“ฑ์žฅํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” '๋ฌธ์žํ•ด'๋ผ๋Š” ๋ง์ด ์ผ๋ฐ˜์ ์ด์—ˆ๋‹ค. MSN ๋ฉ”์‹ ์ €, ๋„ค์ดํŠธ์˜จ ๋“ฑ PC ๋ฉ”์‹ ์ €๋“ค์ด ์œ ํ–‰ํ•ด '๋ฉ”์‹ ์ €'๋ผ๋Š” ๊ฐœ๋…์—๋Š” ์ต์ˆ™ํ–ˆ์ง€๋งŒ ์Šค๋งˆํŠธํฐ ๋„์ž…์ด ๊ฐ“ ์‹œ์ž‘๋์„ ์‹œ๊ธฐ๋ผ ๋ชจ๋ฐ”์ผ ๋ฉ”์‹ ์ € ๊ฐœ๋…์€ ํฌ๋ฏธํ–ˆ๋‹ค.
๋ชจ๋ฐ”์ผ์„ ํ†ตํ•œ ์—ฐ๋ฝ ์ˆ˜๋‹จ์ด ์ „ํ™”์™€ ๋ฌธ์ž ๋ฉ”์‹œ์ง€์˜€๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์‹ ์‚ฌ ์š”๊ธˆ์ œ ์—ญ์‹œ ํ†ตํ™” ๊ฐ€๋Šฅ ์‹œ๊ฐ„๊ณผ ๋ฌธ์ž์˜ ๊ฐฏ์ˆ˜์— ๋”ฐ๋ผ ๋‹ฌ๋ ค์กŒ๋‹ค. ๋ฌธ์ž ํ•œ ๊ฑด๋‹น ๋น„์šฉ์ด ์ฑ…์ •๋˜๋Š”๋ฐ๋‹ค 70์ž๊ฐ€ ๋„˜์œผ๋ฉด MMS๋กœ ์ „ํ™˜๋ผ ์ถ”๊ฐ€ ์š”๊ธˆ์ด ๋ถ€๊ฐ€๋ผ ์ด์šฉ์ž๋“ค์€ ๋ฌธ์ž ์ „์†ก์—๋„ ํ•œ๋•€ํ•œ๋•€ ์ •์„ฑ์„ ๋‹คํ•ด์•ผ ํ–ˆ๋‹ค.
๋•Œ๋ฌธ์— ๋‹น์‹œ ์นด์นด์˜คํ†ก์˜ ๋“ฑ์žฅ์€ ์„ผ์„ธ์ด์…˜ ๊ทธ ์ž์ฒด์˜€๋‹ค. ์œ ๋ฃŒ ๋ฌธ์ž๋ฉ”์‹œ์ง€๋ฅผ ๋‹น์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ–ˆ๋˜ ์‹œ์ ˆ ๊ธ€์ž ์ œํ•œ์—†๋Š” ๋ฌธ์ž๋ฅผ ๋ฌด์ œํ•œ์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ๋‹ค ์‚ฌ์ง„๊ณผ ๋™์˜์ƒ๊นŒ์ง€ ๋งˆ์Œ๊ป ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌด๋ฃŒ์„œ๋น„์Šค ์นด์นด์˜คํ†ก์€ ๋ฌธํ™” ์ถฉ๊ฒฉ์ด๋‚˜ ๋‹ค๋ฆ„ ์—†์—ˆ๋‹ค.
๋ฌธ์ž๋ฟ ์•„๋‹ˆ๋ผ ํ†ตํ™” ๋ฌธํ™”๋„ ๋ณ€ํ–ˆ๋‹ค. 2012๋…„ ๋‹น์‹œ ๊ฐ€์ž…์ž๊ฐ€ 3600๋งŒ๋ช…์— ๋‹ฌํ–ˆ๋˜ ์นด์นด์˜คํ†ก์ด ๋ฌด๋ฃŒ ์Œ์„ฑํ†ตํ™” ์„œ๋น„์Šค '๋ณด์ด์Šคํ†ก'์„ ์„ ๋ณด์ด์ž ํ†ต์‹ ์—…๊ณ„๊ฐ€ ๋– ๋“ค์ฉํ•ด์กŒ๋‹ค. ์นด์นด์˜ค ๋ณด๋‹ค ์•ž์„œ ์Œ์„ฑ ํ†ตํ™” ์„œ๋น„์Šค๋ฅผ ์„ ๋ณด์ธ ๋งˆ์ดํ”ผํ”Œ, ๋ผ์ธ ๋“ฑ์€ ํฌ๊ฒŒ ์ฃผ๋ชฉ๋ฐ›์ง€ ๋ชปํ–ˆ์ง€๋งŒ ์นด์นด์˜คํ†ก์€ ๋†’์€ ์ด์šฉ์ž์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณด์ด์Šคํ†ก ์„œ๋น„์Šค๋ฅผ ํ™•์žฅ์‹œ์ผฐ๋‹ค.
ํŠนํžˆ ๋ณด์ด์Šคํ†ก์€ ๋กœ๋ฐ ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•˜๊ฑฐ๋‚˜ ๊ตญ์ œ ์ „ํ™” ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š์•„๋„ ๋ฐ์ดํ„ฐ๋งŒ ์—ฐ๊ฒฐ๋ผ ์žˆ๋‹ค๋ฉด ํ•ด์™ธ์—์„œ๋„ ์นด์นด์˜คํ†ก ์นœ๊ตฌ์™€ ๋ฌด๋ฃŒ ํ†ตํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์  ๋•Œ๋ฌธ์— ํฐ ํ™”์ œ๋ฅผ ๋ชจ์•˜๋‹ค. ์ด๋•Œ๋ถ€ํ„ฐ ํ•ด์™ธ ์—ฌํ–‰ ์‹œ ๋กœ๋ฐ์„ ํ•˜์ง€ ์•Š๊ณ  ํ˜„์ง€ ์œ ์‹ฌ์„ ๊ตฌ๋งคํ•˜๋Š” ์ด๋“ค์ด ๋Š˜์–ด๋‚˜๊ฒŒ ๋๋‹ค.

ํ•œ์ค„ ์š”์•ฝ:
์Šค๋งˆํŠธํฐ ๋“ฑ์žฅ์œผ๋กœ '๋ฌธ์ž'์™€ '์ „ํ™”'์— ๋Œ€ํ•œ ๋ฌธํ™”๊ฐ€ ๋‹ฌ๋ผ์ง€๊ณ  ์žˆ๋‹ค.

๐Ÿ˜Ž ํ‰์ดํ•œ ์ธํ„ฐ๋„ท ์‹ ๋ฌธ๊ธฐ์‚ฌ๋Š” ๋”๋”์šฑ ์ž˜ ์š”์•ฝํ•˜๋Š”๊ตฐ์š”!

๐Ÿ™†โ€โ™‚๏ธ ๋งํˆฌ ๋ณ€ํ˜•!

prompt = '''
๋ฐฐ๊ณ ํ”ˆ๋ฐ, ์šฐ๋ฆฌ ์ €๊ธฐ์„œ ๋ญ๋ผ๋„ ๋จน๊ณ ๊ฐˆ๊นŒ?

์ „๋ผ๋„ ์‚ฌํˆฌ๋ฆฌ:
'''

with torch.no_grad():
  tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
  gen_tokens = model.generate(tokens, do_sample=True, temperature=0.85, max_length=256)
  generated = tokenizer.batch_decode(gen_tokens)[0]
  
print(generated)
๋ฐฐ๊ณ ํ”ˆ๋ฐ, ์šฐ๋ฆฌ ์ €๊ธฐ์„œ ๋ญ๋ผ๋„ ๋จน๊ณ ๊ฐˆ๊นŒ?

์ „๋ผ๋„ ์‚ฌํˆฌ๋ฆฌ:

1. ๊ทธ๋ž˜, ๊ทธ๋ž˜, ์–ด๋”ฐ! ๊ทธ๋ž˜๊ฐ€๊ผฌ ์šฐ๋ฆฌ๊ฐ€ ๋ฌต๊ณ ์žก์€ ๊ฒƒ๋„ ๋ชปํ•ด?
2. ๊ทธ๋ž˜๊ฐ€๊ผฌ ์šฐ๋ฆฌ๊ฐ€ ์—ฌ์„œ ๋ฌต๊ฒŒ ์ƒ๊ฒผ์–ด, ์ž‰?
3. ๊ทธ๋ž˜๊ฐ€๊ผฌ ์šฐ๋ฆฌ๊ฐ€ ์šฐ์˜ˆ ๋จน๊ฒŒ ์ƒ๊ฒผ์–ด, ์ž‰?
4. ๊ทธ๋ž˜, ๊ทธ๋ž˜๊ฐ€๊ผฌ ์šฐ๋ฆฌ๊ฐ€ ์šฐ์งธ ๋จน๊ฒŒ ์ƒ๊ฒผ์–ด, ์ž‰?
5. ๊ทธ๋ž˜, ๊ทธ๋ž˜๊ฐ€๊ผฌ ์šฐ๋ฆฌ๊ฐ€ ์šฐ์งธ ๋จน๊ฒŒ ์ƒ๊ฒผ์–ด, ์ž‰?
6. ๊ทธ๋ž˜๊ฐ€๊ผฌ ์šฐ๋ฆฌ๊ฐ€ ์ž‰? ์šฐ๋ฆฌ๊ฐ€ ์šฐ์งธ ๋จน๊ฒŒ ์ƒ๊ฒผ์–ด, ์ž‰?
7. ๊ทธ๋ž˜, ๊ทธ๋ž˜๊ฐ€๊ผฌ ์šฐ๋ฆฌ๊ฐ€ ์šฐ์งธ ๋จน๊ฒŒ ์ƒ๊ฒผ์–ด, ์ž‰?

๐Ÿ˜ ์˜ค์šฐ, ์ „๋ผ๋„ ์‚ฌํˆฌ๋ฆฌ ๋ฒˆ์—ญ๊นŒ์ง€?!

๐Ÿคฃ ์‚ฌ์‹ค์€ ์‹คํŒจํ•œ ์ผ€์ด์Šค๊ฐ€ ๋” ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.

๋ฐฐ๊ณ ํ”ˆ๋ฐ, ์šฐ๋ฆฌ ์ €๊ธฐ์„œ ๋ญ๋ผ๋„ ๋จน๊ณ ๊ฐˆ๊นŒ?

์ „๋ผ๋„ ์‚ฌํˆฌ๋ฆฌ:
๋ญ์•ผ?? ๋‹ˆ๊ฐ€ ๋จน์„๊บผ ๋งํ•˜๋ผ๊ณ !

๊ฒฝ์ƒ๋„ ์‚ฌํˆฌ๋ฆฌ:
์•„๋…€~ ๋จน์„๊บผ๋Š” ์—†๊ณ , ๋ผ๋ฉด ์‹œํ‚ค๋ฉด ์•ˆ๋ผ? ๋ผ๋ฉด์— ๋‹ฌ๊ฑ€ ๋„ฃ์–ด๋‹ฌ๋ผ๊ณ !

๐Ÿ‘จโ€๐ŸŽ“ ์˜์–ด ๋ฒˆ์—ญ!

prompt = '''
"๋‚˜ ์ง€๊ธˆ ๋งŽ์ด ๋ฐฐ๊ณ ํ”ˆ๋ฐ, ์šฐ๋ฆฌ ์ €๊ธฐ์„œ ๋ญ๋ผ๋„ ๋จน๊ณ ๊ฐˆ๊นŒ?"
English Translation : 
'''

with torch.no_grad():
  tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
  gen_tokens = model.generate(tokens, do_sample=True, temperature=0.3, max_length=64)
  generated = tokenizer.batch_decode(gen_tokens)[0]
  
print(generated)
"๋‚˜ ์ง€๊ธˆ ๋งŽ์ด ๋ฐฐ๊ณ ํ”ˆ๋ฐ, ์šฐ๋ฆฌ ์ €๊ธฐ์„œ ๋ญ๋ผ๋„ ๋จน๊ณ ๊ฐˆ๊นŒ?"
English Translation : 
"I'm so hungry, we'd like to go out and have something to eat."

๐Ÿ˜™ ๋ฒˆ์—ญ Task ๊ฐ™์€ ๊ฒฝ์šฐ, temperature๊ฐ€ ๋†’์„ ๊ฒฝ์šฐ ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค!
๐Ÿ˜‰ ์ฐฝ์ž‘๋ ฅ์„ ์ตœ๋Œ€ํ•œ ๋ฐฐ์ œํ•˜๋Š” ๋ฒˆ์—ญ Task์—์„œ๋Š” temperature ๋ณ€์ˆ˜๋ฅผ ๋‚ฎ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค :)
๐Ÿ˜‚ ๊ธด ๋ฌธ์žฅ๋ณด๋‹ค๋Š”, ์งง์€ ๋ฌธ์žฅ์ผ ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ธ€์„ ์ •๋ฆฌํ•˜๋ฉฐ

๐Ÿ˜ ์˜ค๋Š˜์€ GPT-3์˜ ํ•œ๊ตญ์–ด ๋ฒ„์ „, kogpt์„ ์‚ฌ์šฉํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค!
๐Ÿ˜Ž ์ƒ์„ฑ ๋ชจ๋ธ์ธ ๋งŒํผ, ์ฐฝ์ž‘๋ ฅ์ด ํ•„์š”ํ•œ Task์— ๋”์šฑ ๊ฐ•์ ์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค!
๐Ÿ˜“ ๊ธฐ๋ณธ ๋ชจ๋ธ ์‚ฌ์ด์ฆˆ๊ฐ€ ํฐ ๋งŒํผ, ์•„์‰ฝ๊ฒŒ๋„ local BentoML์—๋Š” ์˜ฌ๋ ค๋ณด์ง€ ๋ชปํ•ด ์•„์‰ฝ์Šต๋‹ˆ๋‹ค.
๐Ÿ˜Œ ๋‹ค์Œ์— ์ข€๋” ๊ฐ€๋ฒผ์šด ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ๊ธฐํšŒ๊ฐ€ ์˜ค๋ฉด ๋„์›Œ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
๐Ÿ™‚ ๊ทธ๋Ÿผ, ์˜ค๋Š˜๋„ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ข‹์€ ํ•˜๋ฃจ ๋˜์„ธ์š”!

profile
MLOps, ML Engineer. ๋ฐ์ดํ„ฐ์—์„œ ์‹œ์Šคํ…œ์œผ๋กœ, ์‹œ์Šคํ…œ์—์„œ ๊ฐ€์น˜๋กœ.

6๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2022๋…„ 6์›” 29์ผ

์ฝ”๋žฉ์€ ์œ ๋ฃŒ ๊ฒฐ์ œ๋กœ ํ•˜์‹œ๋‚˜์š”? ๋ฌด๋ฃŒ๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ„ฑ์—†์ด ๋ถ€์กฑํ•œ๋“ฏํ•˜๋„ค์š”,,ใ…Žใ…Ž

1๊ฐœ์˜ ๋‹ต๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š”. ์ €๋Š” ์œ ํŠœ๋ธŒ ๋นตํ˜•์˜ ๊ฐœ๋ฐœ๋„์ƒ๊ตญ์„ ์šด์˜ํ•˜๊ณ  ์žˆ๋Š” ๋นตํ˜•์ž…๋‹ˆ๋‹ค!
https://www.youtube.com/@bbanghyong
๊ณต์œ ํ•ด์ฃผ์‹  ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…์ด ๋„ˆ๋ฌด ์ข‹์•„์š”. ๋ธ”๋กœ๊ทธ ๋‚ด์šฉ์„ ํ™œ์šฉํ•˜์—ฌ ์œ ํŠœ๋ธŒ ์˜์ƒ์œผ๋กœ ๋งŒ๋“ค์–ด๋„ ๊ดœ์ฐฎ์„๊นŒ์š”?
๋งŒ์•ฝ ํ—ˆ๋ฝํ•ด์ฃผ์‹ ๋‹ค๋ฉด ๊ฐ•์ฝฉ์ฝฉ๋‹˜ ๋ธ”๋กœ๊ทธ ์ฃผ์†Œ๋ฅผ ์˜์ƒ์— ์ฒจ๋ถ€ํ•˜๊ณ  ์˜์ƒ์— ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

1๊ฐœ์˜ ๋‹ต๊ธ€