Hugging Face ๐ค ์ฌ์์ ์ ๊ณตํ๋ Transformers Course๋ฅผ ํ๊ตญ์ด ๋ฒ์ ์ผ๋ก ํผ์ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
- 1์ฅ์์ ์๊ฐํ
pipeline()
ํจ์๋ฅผ ๋์ฒดํ๊ธฐ ์ํด, ์ง์ model๊ณผ tokenizer๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ค. - tokenizer๋ ํ ์คํธ ์ ๋ ฅ์ ์์น ๋ฐ์ดํฐ(numerical data)๋ก ๋ณํํ๊ณ , ์ด ์์น ๋ฐ์ดํฐ๋ฅผ ๋ค์ ํ ์คํธ๋ก ๋ณํํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค.
- model์ ์ ํฉํ ๋ชจ๋ธ ์ํคํ ์ฒ๋ฅผ ๋ถ๋ฌ์ ํ์ต์ ์งํํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค.
- ํ์ดํ๋ผ์ธ์ ์ ์ฒ๋ฆฌ, ๋ชจ๋ธ๋ก ์ ๋ ฅ ์ ๋ฌ, ํ์ฒ๋ฆฌ์ 3๋จ๊ณ๋ฅผ ํ ๋ฒ์ ์คํํ๋ค.
๋ชจ๋ธ / ํ ํฌ๋์ด์ ๋ถ๋ฌ์ค๊ธฐ
config()
๊ธฐ๋ณธ ์ค์ ์์ ๋ชจ๋ธ์ ์์ฑํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง, ๋ณดํต ์ฌ์ ํ์ต๋ Transformer ๋ชจ๋ธ์ ๋ก๋ํด์จ๋ค.from_pretrained()
๋ฉ์๋๋ฅผ ํตํด์ ์ด ์์ ์ ์ํํ ์ ์๋ค.
from transformers import AutoModel
import torch
- checkpoint์ ์ฌ์ฉํ๊ณ ์ถ์ ์ํคํ ์ฒ๋ฅผ ์ ์ฅํด๋ ๋ค, ํ ํฌ๋์ด์ ์ ๋ชจ๋ธ์ ํด๋น ์ํคํ ์ฒ์์ ๋ถ๋ฌ์ค๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
checkpoint = "bert-base-cased"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModel.from_pretrained(checkpoint)
sequence๋ฅผ ์ธ์ฝ๋ฉ๋ id๋ก ๋ณํํ๊ธฐ
sequences = ["Hello!", "Cool.", "Nice!"]
encoded_ids = []
for sequence in sequences:
tokens = tokenizer.tokenize(sequence)
ids = tokenizer.convert_tokens_to_ids(tokens)
encoded_ids.append(ids)
inputs = torch.tensor(encoded_ids)
- sequences์ ์ ์ฅ๋ ๊ฐ ๋ฌธ์ฅ์ ์ธ์ฝ๋ฉ ํด์ค๋ค.
- ๋์ด์ฐ๊ธฐ๊ฐ ์๋ ๋ฌธ์ฅ์ ํฌํจํ๊ณ ์ถ๋ค๋ฉด ํจ๋ฉ์ ์ถ๊ฐํ๋ ๊ณผ์ ์ด ํ์ํ๋ค. (์ถํ์ ๋์ด)
output / postprocessing
- ํ์ฌ ๋ชจ๋ธ์ ๊ฑฐ์น output์ ํฌํ ํํ๋ก, last_hidden_state, grad_fn ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์ด ์ค softmax๋ฅผ ์ด์ฉํด last_hidden_state ๊ฐ์ ์ ๊ทํํ ์ ์๋ค.
- ์ฐธ๊ณ ๋ก last hidden state๋ BERT ๋ชจ๋ธ์ ๋ง์ง๋ง ๋ ์ด์ด์์์ ์๋ ์ํ๋ก, ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ ํด๋นํ๋ค.
๋ค์ค ์ํ์ค ์ฒ๋ฆฌํ๊ธฐ
- ๋ชจ๋ธ์ ์ ๋ ฅ์ ๋ฐฐ์น ํํ๋ฅผ ์๊ตฌํ๊ณ , ๋จ์ผํ ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฃ์ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
- ๋ฐ๋ผ์ input์ ๋ฌด์กฐ๊ฑด ๋ฐฐ์น ํํ(๋ค์ค ๋ฆฌ์คํธ)๋ก ์ ๋ฌํด์ผ ํ๋ค.
- ์๋์ฒ๋ผ ๋ฆฌ์คํธ๋ก ํ ๋ฒ ๋ ๊ฐ์ธ์ฃผ๋ฉด, ์ฐจ์์ด ์ฆ๊ฐํ๋ฉด์ ๋ชจ๋ธ์ ๊ฑฐ์น ์ ์๊ฒ ๋๋ค.
input_ids = torch.tensor([ids])
padding ์ถ๊ฐํ๊ธฐ
- tensor๋ ๋ฐ๋์ ์ง์ฌ๊ฐํ ๋ชจ์์ด์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ input sequence๋ ํฌ๊ธฐ๊ฐ ๋์ผํด์ผ ํ๋ค.
- ๋ฌธ์ฅ์ ๊ธธ์ด๋ค์ ์ ๋ถ ๋ค๋ฅผ ์ ์๊ธฐ ๋๋ฌธ์ max_length๋ฅผ ์ ํ ๋ค, ๋ชจ๋ ๋์ผํ ์ฌ์ด์ฆ๊ฐ ๋ ์ ์๋๋ก padding์ ์ถ๊ฐํ๋ ๋ฐฉ์์ ์ฑํํ๋ค.
- ์ด ๋ padding ํ๋ผ๋ฏธํฐ๋ฅผ ๊ณ ๋ คํ์ง ์๋๋ก ํ๊ธฐ ์ํด attention mask๋ฅผ ์ฌ์ฉํ๋ค.
attention mask ์ฌ์ฉํ๊ธฐ
batch_ids = [
[200, 200, 200],
[200, 200, tokenizer.pad_token_id],
]
attention_mask = [
[1, 1, 1],
[1, 1, 0],
]
outputs = model(torch.tensor(batch_ids), attention_mask=torch.tensor(attention_mask))
print(outputs.logits)
- ์์ฒ๋ผ padding ์ฒ๋ฆฌํ ID์๋ attention mask๋ฅผ 0์ผ๋ก ์ค์ ํด์ผ ํ๋ค.
ํน์ ํ ํฐ๋ค
- ํ ํฌ๋์ด์ ๊ฐ ๋ฐํํ๋ ๊ฐ์ ๋ฐ๋ก ๋์ฝ๋ฉํ ๊ฒฝ์ฐ, CLS/SEP ๊ณผ ๊ฐ์ ํน์ ํ ํฐ๋ค์ด ์ถ๊ฐ๋๋ค.
- tokenize ํจ์๋ฅผ ํตํด ์ป์ token๋ค์ id๋ก ๋ณํํ ํ ๋์ฝ๋ฉํ๋ฉด ํน์ ํ ํฐ์ด ์์ด ์ผ๋ฐ ๋ฌธ์ฅ์ผ๋ก ๋์ฝ๋ฉ๋๋ค.
'AI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ์์ฐ์ด์ฒ๋ฆฌ - TfidfVectorizer (0) | 2024.07.30 |
---|---|
[RecSys] Latent Factor ์์๋ณด๊ธฐ (0) | 2024.03.26 |
[NLP] ์ธ์ด๋ชจ๋ธ์ ํ๊ฐ ์งํ - PPL, BLEU score (2) | 2023.11.21 |
[PyTorch] Transformer ๋ผ์ด๋ธ๋ฌ๋ฆฌ #1 (0) | 2023.10.30 |
[PyTorch] M1, M2 ์นฉ์ผ๋ก Pytorch GPU ์ฌ์ฉํ๊ธฐ (0) | 2023.08.10 |