BERT ๊ฐ ํธ๋์คํฌ๋จธ์ ์ธ์ฝ๋๋ฅผ ํ์ฉํ๋ค๋ฉด, GPT๋ ํธ๋์คํฌ๋จธ์ ๋์ฝ๋๋ง ํ์ฉํฉ๋๋ค. ๋์ฝ๋ ์ค์์๋ encoder-decoder attention์ด ๋น ์ง ๋์ฝ๋๋ง ์ฌ์ฉํฉ๋๋ค.
GPT์ ๊ตฌ์กฐ
Masked Multi-Head Attention์์ ์ผ์ด๋๋ ์ผ์ ๋ณด๋ฉด,
์ ๊ฐ ๊ณ์ ์์๋ก ๋๋ ๋ฌธ์ฅ์ ๊ฐ์ ธ์ ์ ์ฉํด๋ณด๊ฒ ์ต๋๋ค.
'๋๋ ํ ๋ผ๋ฅผ ํค์. ๋ชจ๋ ์ฌ๋์ด ๊ทธ๋ฅผ ์ข์ํด'๋ผ๋ ๋ฌธ์ฅ์์ ์ฒ์์๋ ๋๋์ ๋บด๊ณ ๋ชจ๋ ๋ง์คํน์ฒ๋ฆฌํด์ค๋๋ค. ๋๋ ๋ง๋ณด๊ณ ํ ๋ผ๋ฅผ ์ ์์ธกํ ์ ์๋๋ก ํ๊ธฐ ์ํด์ ํ ๋ผ๋ฅผ์ ํ๋ฅ ์ ๋์ด๋ ์์ผ๋ก ์
๋ฐ์ดํฐํ๋ฉฐ ํ์ต์ด ์งํ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋ ํ ๋ผ๋ฅผ ๋ง์ผ๋ก ํค์๋ฅผ ์์ธกํ ์ ์๊ฒ , ํค์์ ํ๋ฅ ์ ๋์ด๋ ๋ฐฉ์์ผ๋ก ํ์ต์ ์ํํฉ๋๋ค. BERT์์๋ ๊ฐ์ด๋ฐ ๋จ์ด๋ฅผ [MASK]๋ก ์ฒ๋ฆฌํ๊ณ ์๊ณผ ๋ค ๋จ์ด๋ค์ ๋ณด๊ณ ๊ฐ์ด๋ฐ ๋ง์คํน์ฒ๋ฆฌ๋ ๋จ์ด๋ฅผ ์์ธกํ๋ ์์ผ๋ก ํ๋ฆฌํธ๋ ์ธ์ ํ์์๋๋ฐ, GPT์์๋ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ํ ์ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ ๋ฐ๋ก ๊ตฌ์กฐ์ ์ธ ์ฐจ์ด์ ์๊ธฐ ๋๋ฌธ์ธ๋ฐ,
BERT๋ ์๋ฐฉํฅ ํธ๋์คํฌ๋จธ ๋ชจ๋ธ์ธ ๋ฐ๋ฉด, GPT๋ ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. GPT๋ ์์ฐจ์ ์ผ๋ก ํ์ต์ด ์ด๋ฃจ์ด์ง๋ ๊ฒ์ด์ฃ
GPT๋ ์๋ ๋์ฝ๋ ๊ฐ์์ ๋ฐ๋ผ small ๋ถํฐ large ๋ชจ๋ธ๋ก ๋ถ๋ฆฝ๋๋ค.
ํ์ฌ๋ GPT-3 ๋ชจ๋ธ๊น์ง ๋์์ผ๋ฉฐ ์์ผ๋ก ๋ ๋์ค๊ณ ์ฑ๋ฅ๋ ์ข์์ง ๊ฒ์ด๋ผ ๋ณด๊ณ ์์ต๋๋ค.
๊ฐ๋จํ๊ฒ GPT-2๋ฅผ ์ํํ๋ ๊ฒ์ ์ฝ๋๋ก ์ดํด๋ณด๊ฒ ์ต๋๋ค.
huggingface์ transformers ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ์ํํ ์ ์์ต๋๋ค.
pip install transformers
from transformers import GPT2LMHeadModel, GPT2Tokenizer
model = GPT2LMHeadModel.from_pretrained("gpt2")
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
input_ids = tokenizer.encode("Some text to encode", return_tensors='pt')
generated_text_samples = model.generate(
input_ids,
max_length=150,
num_return_sequences=5,
no_repeat_ngram_size=2,
repetition_penalty=1.5,
top_p=0.92,
temperature=0.85,
do_sample=True,
top_k=125,
early_stopping=True
)
for i, beam in enumerate(generated_text_samples):
print("{}: {}".format(i, tokenizer.decode(beam, skip_special_tokens=True)))
print()