๋ฐ์ํ
์ดํ ์งํฉ ๊ตฌ์ถํ๊ธฐ (Vocab)
1๋จ๊ณ: ์ค์ต ํ๊ฒฝ ๋ง๋ค๊ธฐ
pip ๋ช ๋ น์ด๋ก ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
!pip install ratsnlp
2๋จ๊ณ: ๊ตฌ๊ธ ๋๋ผ์ด๋ธ ์ฐ๋ํ๊ธฐ
from google.colab import drive
drive.mount('/gdrive', force_remount=True)
3๋จ๊ณ: ๋ง๋ญ์น ๋ค์ด๋ก๋ ๋ฐ ์ ์ฒ๋ฆฌ
- ์ฝํฌ๋ผ(Korpora)๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฅผ ํ์ฉํด BPE ์ํ ๋์ ๋ง๋ญ์น๋ฅผ ๋ด๋ ค๋ฐ๊ณ ์ ์ฒ๋ฆฌ.
- ์ค์ต์ฉ ๋ง๋ญ์น๋ ๋ฐ์์ ๋์ด ๊ณต๊ฐํ์ Naver Sentiment Movie Corpus(NSMC)์ ์ฌ์ฉ
- ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค๋ฐ์ `nsmc`๋ผ๋ ๋ณ์๋ก ์ฝ์ด๋ค์ ๋๋ค.
from Korpora import Korpora
nsmc = Korpora.load("nsmc", force_download=True)
NSMC์ ํฌํจ๋ ์ํ ๋ฆฌ๋ทฐ(์์ ํ ์คํธ)๋ค์ ์ง์ ๋ ๊ฒฝ๋ก์ ์ ์ฅ.
import os
def write_lines(path, lines):
with open(path, 'w', encoding='utf-8') as f:
for line in lines:
f.write(f'{line}\n')
write_lines("/content/train.txt", nsmc.train.get_all_texts())
write_lines("/content/test.txt", nsmc.test.get_all_texts())
`train.txt`, 'text.txt' ์ ์๋ถ๋ถ ํ์ธ
!head train.txt
!head test.txt
4๋จ๊ณ: GPT ํ ํฌ๋์ด์ ๊ตฌ์ถ
- GPT ๊ณ์ด ๋ชจ๋ธ์ด ์ฌ์ฉํ๋ Tokenizer -> Byte-level Byte Pair Encoding(BBPE)์ ๋๋ค.
- ์ดํ์งํฉ ๊ตฌ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ตฌ๊ธ ๋๋ผ์ด๋ธ ๊ณ์ ๋ด `๋ด ๋๋ผ์ด๋ธ/nlpbook/bbpe`๋ก ๋ง๋ค์ด ๋ .
import os
os.makedirs("/gdrive/My Drive/nlpbook/bbpe", exist_ok=True)
`nsmc` ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ BBPE ์ดํ์งํฉ์ ๊ตฌ์ถ (์๊ฐ ์กฐ๊ธ ์์)
from tokenizers import ByteLevelBPETokenizer
bytebpe_tokenizer = ByteLevelBPETokenizer()
bytebpe_tokenizer.train(
files=["/content/train.txt", "/content/test.txt"],
vocab_size=10000,
special_tokens=["[PAD]"]
)
bytebpe_tokenizer.save_model("/gdrive/My Drive/nlpbook/bbpe")
- ์ฝ๋ ์คํ์ด ๋๋๋ฉด ์์ ์ ๊ตฌ๊ธ ๋๋ผ์ด๋ธ ๊ฒฝ๋ก(`/gdrive/My Drive/nlpbook/bbpe`)์ `vocab.json`๊ณผ `merges.txt`๊ฐ ์์ฑ๋ฉ๋๋ค.
- ์ ์๋ ๋ฐ์ดํธ ๋ ๋ฒจ BPE์ ์ดํ ์งํฉ์ด๋ฉฐ ํ์๋ ๋ฐ์ด๊ทธ๋จ ์์ ๋ณํฉ ์ฐ์ ์์
- `vocab.json` ๋ด์ฉ ํ์ธ ์คํ ์ฝ๋ ์ ๋๋ค.
!cat /gdrive/My\ Drive/nlpbook/bbpe/vocab.json
- merges.txt์ ๋ด์ฉ ํ์ธ ์คํ ์ฝ๋ ์ ๋๋ค.
!head /gdrive/My\ Drive/nlpbook/bbpe/merges.txt
5๋จ๊ณ: BERT ํ ํฌ๋์ด์ ๊ตฌ์ถ
BERT๋ ์๋ํผ์ค(wordpiece) ํ ํฌ๋์ด์ ๋ฅผ ์ฌ์ฉ.
- ์ฐ์ ์ดํ์งํฉ ๊ตฌ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ ์ ๊ตฌ๊ธ ๋๋ผ์ด๋ธ ๊ณ์ ๋ด `๋ด ๋๋ผ์ด๋ธ/nlpbook/bbpe`๋ก ๋ง๋ค์ด๋ก๋๋ค.
import os
os.makedirs("/gdrive/My Drive/nlpbook/wordpiece", exist_ok=True)
- ๋ค์์ ์ํํ๋ฉด BERT ๋ชจ๋ธ์ด ์ฌ์ฉํ๋ ์๋ํผ์ค ์ดํ์งํฉ์ ๊ตฌ์ถํฉ๋๋ค.(์๊ฐ์ด ๊ฑธ๋ฆผ)
- ์ฝ๋ ์คํ์ด ๋๋๋ฉด ์์ ์ ๊ตฌ๊ธ ๋๋ผ์ด๋ธ ๊ฒฝ๋ก(/gdrive/My Drive/nlpbook/wordpiece)์ vocab.txt๊ฐ ์์ฑ๋ฉ๋๋ค.
- vocab.txt์ ๋ด์ฉ ํ์ธ ์คํ ์ฝ๋ ์ ๋๋ค.
!head /gdrive/My\ Drive/nlpbook/wordpiece/vocab.txt
๋ฐ์ํ
'๐ NLP (์์ฐ์ด์ฒ๋ฆฌ) > ๐ Natural Language Processing' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NLP] Seq2Seq, Encoder & Decoder (0) | 2024.01.19 |
---|---|
[NLP] Pre-Trained Language Model - ๋ฏธ๋ฆฌ ํ์ต๋ ์ธ์ด๋ชจ๋ธ (0) | 2024.01.18 |
[NLP} Tokenization - ํ ํฐํํ๊ธฐ (0) | 2024.01.18 |
[NLP] Tokenization - ํ ํฐํ๋? (0) | 2024.01.16 |
[NLP] ์ฒ์ ๋ง๋๋ ์์ฐ์ด ์ฒ๋ฆฌ & Transfer Learning (0) | 2024.01.16 |