[๐ค ๊ฐ์ข 6.5] ์ ๊ทํ(Normalization) ๋ฐ ์ฌ์ ํ ํฐํ(Pre-tokenization)
ํธ๋์คํฌ๋จธ ๋ชจ๋ธ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ 3๊ฐ์ง ํ์ ๋จ์ด(subwword) ํ ํฐํ ์๊ณ ๋ฆฌ์ฆ(Byte-Pair Encoding[BPE], WordPiece, Unigram)์ ๋ํด ๋ ์์ธํ ์์๋ณด๊ธฐ ์ ์, ๋จผ์ ๊ฐ ํ ํฌ๋์ด์ ๊ฐ ํ ์คํธ์ ์ ์ฉํ๋ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋ค์ ๊ทธ๋ฆผ์ ํ ํฐํ ํ์ดํ๋ผ์ธ์ ๋จ๊ณ์ ๋ํ ์์ ์์ค์ ๊ฐ์๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค:
ํ ์คํธ๋ฅผ ํ์ ํ ํฐ(subtokens)์ผ๋ก ๋ถํ ํ๊ธฐ ์ ์(๋ชจ๋ธ์ ๋ฐ๋ผ), ํ ํฌ๋์ด์ ๋ ์ ๊ทํ(normalization) ๋ฐ ์ฌ์ ํ ํฐํ(pre-tokenization) ๋ ๋จ๊ณ๋ฅผ ์ํํฉ๋๋ค.
์ ๊ทํ(Normalization)
์ ๊ทํ ๋จ๊ณ์๋ ๋ถํ์ํ ๊ณต๋ฐฑ ์ ๊ฑฐ, ์๋ฌธ์ ๋ณํ(lowercasing) ๋ฐ ์ ์ผํธ ์ ๊ฑฐ ๋ฑ๊ณผ ๊ฐ์ ๋ช๊ฐ์ง ์ผ๋ฐ์ ์ธ ์ ์ ์์ ์ด ํฌํจ๋ฉ๋๋ค. NFC ๋๋ NFKC์ ๊ฐ์ ์ ๋์ฝ๋ ์ ๊ทํ(Unicode normalization) ์์ ๊ณผ ๊ฑฐ์ ๋์ผํ ์์ ์ด ์ด ๊ณผ์ ์์ ์ํ๋ฉ๋๋ค.
๐คTransformers์ tokenizer
๋ ๐คTokenizers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํ๋ถ ํ ํฌ๋์ด์ ์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ๋ backend_tokenizer
๋ผ๋ ์์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
print(type(tokenizer.backend_tokenizer))
ํ ํฌ๋์ด์ ๊ฐ์ฒด์ normalizer
์์ฑ์๋ normalize_str()
๋ฉ์๋๊ฐ ์์ต๋๋ค. ์ด ๋ฉ์๋๋ ์ ๊ทํ๊ฐ ์ํ๋๋ ๋ฐฉ์์ ํ์ธํ๋๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค:
print(tokenizer.backend_tokenizer.normalizer.normalize_str("Hรฉllรฒ hรดw are รผ?"))
์ด ์์์๋ bert-base-uncased
์ฒดํฌํฌ์ธํธ๋ฅผ ์ ํํ๊ธฐ ๋๋ฌธ์ ์ ๊ทํ ๊ณผ์ ์์ ์๋ฌธ์ํ(lowercasing)๋ฅผ ์ํํ๊ณ ์
์ผํธ๋ฅผ ์ ๊ฑฐํ์ต๋๋ค.
โ๏ธ Try it out!
bert-base-cased
์ฒดํฌํฌ์ธํธ์์ ํ ํฌ๋์ด์ ๋ฅผ ๋ก๋ํ๊ณ ๋์ผํ ๋ฌธ์์ด์ ์ ๋ ฅํด๋ณด์ธ์. ํ ํฌ๋์ด์ ์ ๋์๋ฌธ์ ๊ตฌ๋ถ์ด ์๋ ๋ฒ์ ๊ณผ ์๋ฌธ์ ๋ณํ์ด ๋ ๋ฒ์ ๊ฐ์ ๋ณผ ์ ์๋ ์ฃผ์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
์ฌ์ ํ ํฐํ(Pre-tokenization)
๋ค์ ์น์ ์์ ๋ณผ ์ ์๋ฏ์ด ํ ํฌ๋์ด์ ๋ ์์ ํ ์คํธ๋ง์ผ๋ก๋ ํ์ต๋ ์ ์์ต๋๋ค. ๋์ ์ ๋จผ์ ํ ์คํธ๋ฅผ ๋จ์ด์ ๊ฐ์ ์์ ๊ฐ์ฒด๋ค๋ก ๋ถํ ํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ ์ฌ์ ํ ํฐํ(pre-tokenization) ๋จ๊ณ๊ฐ ์คํ๋ฉ๋๋ค. 2์ฅ์์ ๋ณด์๋ฏ์ด ๋จ์ด ๊ธฐ๋ฐ ํ ํฌ๋์ด์ ๋ ์์ ํ ์คํธ๋ฅผ ๋จ์ํ ๊ณต๋ฐฑ๊ณผ ๊ตฌ๋์ ์ ๊ธฐ์ค์ผ๋ก ๋จ์ด๋ก ๋ถํ ํ ์ ์์ต๋๋ค. ์ด ๋จ์ด๋ค์ ํ ํฌ๋์ด์ ๊ฐ ํ์ต ๊ณผ์ ์์ ํ์ตํ ์ ์๋ ํ์ ํ ํฐ(subtokens)์ ๊ฒฝ๊ณ๊ฐ ๋ฉ๋๋ค.
๋น ๋ฅธ ํ ํฌ๋์ด์ (fast tokenizer)๊ฐ ์ฌ์ ํ ํฐํ(pre-tokenization)๋ฅผ ์ํํ๋ ๊ณผ์ ์ ๋ณด๋ ค๋ฉด tokenizer
๊ฐ์ฒด์ pre_tokenizer
์์ฑ์ด ๊ฐ์ง pre_tokenize_str()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str("Hello, how are you?")
ํ ํฌ๋์ด์ ๊ฐ ์คํ์ (offsets)์ ์ด๋ป๊ฒ ์ ์งํ๊ณ ์๋์ง์ ์ฃผ๋ชฉํ์ธ์. ์ด๋ ์ด์ ์น์ ์์ ์ฌ์ฉํ ์คํ์ ๋งคํ์ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ฌ๊ธฐ์ ํ ํฌ๋์ด์ ๋ ๋ ๊ฐ์ ๊ณต๋ฐฑ("are"์ "you" ์ฌ์ด์ ์๋)์ ๋ฌด์ํ๊ณ ํ๋์ ๊ณต๋ฐฑ์ผ๋ก ๋ฐ๊พธ์ง๋ง, "are"์ "you" ์ฌ์ด์ ์คํ์ ์ ํ(14์์ 16)๋ ๊ณ์ ์ ์งํฉ๋๋ค.
์ฐ๋ฆฌ๋ BERT ํ ํฌ๋์ด์ ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ํฐํ(pre-tokenization)์๋ ๊ณต๋ฐฑ(whitespace)๊ณผ ๊ตฌ๋์ (puntuation) ๋ถํ ์ด ํฌํจ๋ฉ๋๋ค. ๋ค๋ฅธ ํ ํฌ๋์ด์ ๋ค์ ์ด ๋จ๊ณ์์ ๋ค๋ฅธ ๊ท์น์ ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด GPT-2 ํ ํฌ๋์ด์ ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:
tokenizer = AutoTokenizer.from_pretrained("gpt2")
tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str("Hello, how are you?")
์ ์ฝ๋์ ์คํ ๊ฒฐ๊ณผ์ ๊ฐ์ด, ๊ณต๋ฐฑ๊ณผ ๊ตฌ๋์ ์์๋ ๋ถํ ๋์ง๋ง ๊ณต๋ฐฑ์ ์์ ์ง ์๊ณ ฤ ๊ธฐํธ๋ก ๋์ฒดํ๋ฏ๋ก ํ ํฐ์ ๋์ฝ๋ฉํ๋ฉด ์๋ ๊ณต๋ฐฑ์ ๋ณต๊ตฌํ ์ ์์ต๋๋ค.
๋ํ BERT ํ ํฌ๋์ด์ ์ ๋ฌ๋ฆฌ ์ด ํ ํฌ๋์ด์ ๋ ์ด์ค ๊ณต๋ฐฑ์ ๋ฌด์ํ์ง ์์ต๋๋ค.
๋ง์ง๋ง ์๋ก SentencePiece ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ T5 ํ ํฌ๋์ด์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
tokenizer = AutoTokenizer.from_pretrained("t5-small")
tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str("Hello, how are you?")
GPT-2 ํ ํฌ๋์ด์ ์ ๊ฐ์ด T5 ํ ํฌ๋์ด์ ๋ ๊ณต๋ฐฑ์ ์ ์งํ๊ณ ํน์ ํ ํฐ(_)์ผ๋ก ๋์ฒดํ์ง๋ง ๊ตฌ๋์ ์ด ์๋ ๊ณต๋ฐฑ์์๋ง ํ ํฐ์ ๋ถํ ํฉ๋๋ค. ๋ํ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌธ์ฅ ์์ ๋ถ๋ถ("Hello" ์๋ถ๋ถ)์ ๊ณต๋ฐฑ์ ์ถ๊ฐํ๊ณ "are"์ "you" ์ฌ์ด์ ์ด์ค ๊ณต๋ฐฑ์ ๋ฌด์ํ์ต๋๋ค.
์ง๊ธ๊น์ง ํ ํฌ๋์ด์ ๊ฐ ํ ์คํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ๊ฐ์ ๋ฐฉ๋ฒ์ ์กฐ๊ธ ์ดํด๋ณด์์ผ๋ฏ๋ก ํ๋ถ์ ํ ํฐํ ์๊ณ ๋ฆฌ์ฆ ์์ฒด๋ฅผ ๊ณต๋ถํ ์ ์์ต๋๋ค. ์ฐ์ ๋ค์ํ ๋ชฉ์ ์ผ๋ก ๊ด๋ฒ์ํ๊ฒ ์ ์ฉํ ์ ์๋ SentencePiece๋ฅผ ๊ฐ๋จํ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ 3๊ฐ์ ์น์ ์์ ํ์ ๋จ์ด(subword) ํ ํฐํ์ ์ฌ์ฉ๋๋ ์ธ ๊ฐ์ง ์ฃผ์ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ํ๋ ๋ฐฉ์์ ์์๋ณด๊ฒ ์ต๋๋ค.
SentencePiece
SentencePiece๋ ๋ค์ ์ธ ์น์ ์์ ๋ณด๊ฒ ๋ ๋ชจ๋ ๋ชจ๋ธ๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ํ ์คํธ ์ ์ฒ๋ฆฌ๋ฅผ ์ํ ํ ํฐํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ํ ์คํธ๋ฅผ ์ผ๋ จ์ ์ ๋์ฝ๋ ๋ฌธ์๋ค๋ก ๊ฐ์ฃผํ๊ณ ๊ณต๋ฐฑ์ ํน์ ๋ฌธ์์ธ _๋ก ์นํํฉ๋๋ค. Unigram ์๊ณ ๋ฆฌ์ฆ(์น์ 7 ์ฐธ์กฐ)๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ฌ์ ํ ํฐํ(pre-tokenization) ๋จ๊ณ๊ฐ ํ์ํ์ง ์์ผ๋ฏ๋ก ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์ฌ์ฉ๋์ง ์๋ ์ธ์ด(์: ์ค๊ตญ์ด ๋๋ ์ผ๋ณธ์ด)์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
SentencePiece์ ๋ ๋ค๋ฅธ ์ฃผ์ ๊ธฐ๋ฅ์ ๊ฐ์ญ์ ํ ํฐํ(reversible tokenization)์ ๋๋ค. ๊ณต๋ฐฑ์ ๋ํ ํน๋ณํ ์ฒ๋ฆฌ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ ํฐ ๋์ฝ๋ฉ์ ํ ํฐ์ ์ฐ๊ฒฐํ๊ณ _s๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ผ๋ก ๊ฐ๋จํ ์ํ๋ฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ ๊ทํ๋ ํ ์คํธ๊ฐ ๋์ถ๋ฉ๋๋ค. ์์์ ๋ณด์๋ฏ์ด BERT ํ ํฌ๋์ด์ ๋ ๋ฐ๋ณต๋๋ ๊ณต๋ฐฑ์ ์ ๊ฑฐํ๋ฏ๋ก ํ ํฐํ๋ ๋๋๋ฆด ์ ์์ต๋๋ค.
ํ ํฐํ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์
์ดํ ์น์ ์์๋ ์ธ ๊ฐ์ง ์ฃผ์ ํ์ ๋จ์ด ํ ํฐํ(subword tokenization) ์๊ณ ๋ฆฌ์ฆ์ธ BPE(GPT-2 ๋ฑ์์ ์ฌ์ฉ), WordPiece(์: BERT์์ ์ฌ์ฉ) ๋ฐ Unigram(T5 ๋ฐ ๊ทธ ์ธ.)์ ๋ํด ์์ธํ ์ค๋ช ํฉ๋๋ค. ๋ณธ๊ฒฉ์ ์ผ๋ก ์์ํ๊ธฐ ์ ์ ๊ฐ๊ฐ์ ์๋ ๋ฐฉ์์ ๋ํ ๊ฐ๋ตํ ๊ฐ์๋ฅผ ์๋ ํ์์ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค. ๋ค์ ์น์ ์ ๊ฐ๊ฐ ์ฝ์ ํ ๊ทธ๋๋ ์ดํด๊ฐ ๋์ง ์๋ ๊ฒฝ์ฐ์๋ ์ฃผ์ ํ์ง ๋ง๊ณ ์ด ํ๋ก ๋ค์ ๋์์ค์ธ์.
๋ชจ๋ธ | BPE | WordPiece | Unigram |
---|---|---|---|
ํ์ต ๊ณผ์ (Training) | ์๊ท๋ชจ vocabulary์์ ์์ํ์ฌ ํ ํฐ ๋ณํฉ ๊ท์น์ ๋ฐฐ์๋๋ค. | ์๊ท๋ชจ vocabulary์์ ์์ํ์ฌ ํ ํฐ ๋ณํฉ ๊ท์น์ ๋ฐฐ์๋๋ค. | ๋๊ท๋ชจ vocabulary์์ ์์ํ์ฌ ํ ํฐ์ ์ ๊ฑฐํ๋ ๊ท์น์ ๋ฐฐ์๋๋ค. |
ํ์ต ๋จ๊ณ(Training step) | ๊ฐ์ฅ ๋น๋ฒํ๊ฒ ๋ฐ์๋๋ ํ ํฐ ์์ ๋ณํฉํฉ๋๋ค. | ํ ํฐ ์์ ๋น๋์์ ๊ธฐ๋ฐํ ์ต๊ณ ์ ์๋ฅผ ๊ฐ์ง ์์ ํด๋นํ๋ ํ ํฐ์ ๋ณํฉํ๊ณ ๊ฐ ๊ฐ๋ณ ํ ํฐ์ ๋น๋๊ฐ ๋ฎ์ ์์ ํน๊ถ์ ๋ถ์ฌํฉ๋๋ค. | ์ ์ฒด ์ฝํผ์ค์์ ๊ณ์ฐ๋ ์์ค(loss)์ ์ต์ํํ๋ vocabulary์ ๋ชจ๋ ํ ํฐ์ ์ ๊ฑฐํฉ๋๋ค. |
ํ์ต ๊ฒฐ๊ณผ(Learns) | ํ ํฐ ๋ณํฉ ๊ท์น ๋ฐ vocabulary | Vocabulary | ๊ฐ ํ ํฐ์ ๋ํ ์ ์๊ฐ ์๋ vocabulary |
์ธ์ฝ๋ฉ(Encoding) | ๋จ์ด๋ฅผ ๋ฌธ์๋ค๋ก ๋ถํ ํ๊ณ ํ์ต ๊ณผ์ ์์ ์ต๋ํ ๋ณํฉ ๊ท์น ์ ์ฉ | Vocabulary์ ์์ ๋ถ๋ถ์์ ์์ํ์ฌ ๊ฐ์ฅ ๊ธด ํ์ ๋จ์ด(longest subword)๋ฅผ ์ฐพ์ ๋ค์ ๋๋จธ์ง ๋จ์ด์ ๋ํด ๋์ผํ ์์ ์ ์ํ | ํ์ต ๊ณผ์ ์์ ํ๋ํ ์ ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฅ ๊ฐ๋ฅ์ฑ ์๋ ํ ํฐ ๋ถํ ์ ์ฐพ์ |
์ด์ BPE์ ๋ํด์ ์์ธํ ์์๋ด ์๋ค!
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([๐ค ๊ฐ์ข 6.5] ์ ๊ทํ(Normalization) ๋ฐ ์ฌ์ ํ ํฐํ(Pre-tokenization)), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@spasis/๊ฐ์ข-6.5-์ ๊ทํNormalization-๋ฐ-์ฌ์ -ํ ํฐํPre-tokenization์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค