μžμ—°μ–΄ 처리/Today I learned :

[NLP] 토큰화 , BPE, μ›Œλ“œν”ΌμŠ€

주영 🐱 2022. 7. 25. 19:13
728x90
λ°˜μ‘ν˜•

ν† ν°ν™”λž€?

λ¬Έμž₯을 토큰 μ‹œν€€μŠ€λ‘œ λ‚˜λˆ„λŠ” κ³Όμ •

 

ν† ν¬λ‚˜μ΄μ €λž€?

토큰화 μˆ˜ν–‰ν•˜λŠ” ν”„λ‘œκ·Έλž¨

 

ν•œκ΅­μ–΄ ν† ν¬λ‚˜μ΄μ € : mecab, kkma,,,,,λ“±λ“± μ’…λ₯˜μ— 따라 ν’ˆμ‚¬ νƒœκΉ…κΉŒμ§€ ν•˜λŠ” κ²½μš°λ„ 있음

 

<토큰화 방식>

1. 단어(μ–΄μ ˆ) λ‹¨μœ„ 토큰화

- 곡백 κΈ°μ€€μœΌλ‘œ 토큰화    ex) μ•„κΉŒ μΉ΄νŽ˜μ— μžˆμ—ˆμ–΄ -> μ•„κΉŒ, μΉ΄νŽ˜μ—, μžˆμ—ˆμ–΄

-- 곡백으둜 λΆ„λ¦¬ν•˜λ©΄ λ³„λ„λ‘œ ν† ν¬λ‚˜μ΄μ €λ₯Ό 쓰지 μ•Šμ•„λ„ λœλ‹€λŠ” μž₯점이 μžˆμ§€λ§Œ, μ–΄νœ˜ 집합(vocabulary)의 크기가 맀우 컀질 수 있음(μžˆμ–΄, μžˆμ—ˆμ–΄, μžˆμ—ˆλŠ”λ°μš”κΉŒμ§€ λͺ¨λ“  경우의 μˆ˜κ°€ μ–΄νœ˜μ§‘ν•©μ— λ“€μ–΄κ°€μ•Ό ν•˜κΈ° λ•Œλ¬Έ)

μ–΄νœ˜ 집합 크기가 컀지면 그만큼 λͺ¨λΈ ν•™μŠ΅μ΄ μ–΄λ €μ›Œμ§ˆ 수 있음

 

mecab같은 경우 μ•„κΉŒ, μΉ΄νŽ˜μ—, μžˆμ—ˆ,μ–΄ 와 같이 μ˜λ―ΈμžˆλŠ” λ‹¨μœ„λ‘œ ν† ν°ν™”ν•˜κΈ°μ— μ–΄νœ˜μ§‘ν•©ν¬κΈ°κ°€ μ§€λ‚˜μΉ˜κ²Œ μ»€μ§€λŠ” 것을 막을 μˆ˜λŠ” 있음

 

 

 

2. 문자 λ‹¨μœ„ 토큰화

 

ν•œκΈ€λ‘œ ν‘œν˜„κ°€λŠ₯ν•œ κΈ€μžλŠ” λͺ¨λ‘ 11172κ°œμ΄λ―€λ‘œ μ–΄νœ˜μ§‘ν•©ν¬κΈ°κ°€ 비ꡐ적 μž‘μŒ

미등둝 토큰 λ¬Έμ œλ‘œλΆ€ν„° μžμœ λ‘œμ›€(exμ‹ μ‘°μ–΄)

κ·ΈλŸ¬λ‚˜ μ˜λ―ΈμžˆλŠ” 토큰이 되기 어렀움. κ°€λ Ή, μ–΄μ œμ˜ 어와 μ–Έμ–΄μ˜ μ–΄μ˜ ꡬ뢄이 사라짐 -> μ„±λŠ₯이 떨어짐

μ•„,까,μΉ΄,페,에,있,μ—ˆ,μ–΄

 

 

3. μ„œλΈŒμ›Œλ“œ λ‹¨μœ„ 토큰화

λ‘˜μ˜ μž₯점을 취합함.

BPE:λ°”μ΄νŠΈ νŽ˜μ–΄ 인코딩

GPTλͺ¨λΈμ€ BPE, BERTλŠ” μ›Œλ“œν”ΌμŠ€λ₯Ό ν† ν¬λ‚˜μ΄μ €λ‘œ μ‚¬μš©

μ—°μ†λœ λ‘κΈ€μžλ₯Ό ν•œλ¬Έμžλ‘œ 취합함

 

 

 

BPE ν™œμš©ν•œ 토큰화 절차 

1. μ–΄νœ˜ 집합 ꡬ좕

    - pre-tokenize: μ½”νΌμŠ€μ—μ„œ λͺ¨λ“  λ¬Έμž₯을 곡백(λ˜λŠ” λ‹€λ₯Έ κΈ°μ€€)으둜 λ‚˜λˆ μ€Œ

    - 자주 λ“±μž₯ν•˜λŠ” λ¬Έμžμ—΄ 병합 ν›„ 사전에 μΆ”κ°€,, μ›ν•˜λŠ” μ–΄νœ˜μ§‘ν•© λ λ•ŒκΉŒμ§€ 반볡

    - κ³ λΉˆλ„ bigram(2κ°œμ”© λ¬ΆλŠ”) μŒμ„ λ³‘ν•©ν•˜λŠ” λ°©μ‹μœΌλ‘œ ꡬ좕

    - μ–΄νœ˜ 집합은 vocab.json으둜 μ €μž₯, 병합 μš°μ„ μˆœμœ„λ„ merge.txt둜 μ €μž₯

2. 토큰화

   - 토큰화 λŒ€μƒ 무μž₯의 각 μ–΄μ ˆμ—μ„œ μ–΄νœ˜ 집합에 μžˆλŠ” μ„œλΈŒμ›Œλ“œκ°€ ν¬ν•¨λ˜μ—ˆμ„ λ•Œ ν•΄λ‹Ή μ„œλΈŒμ›Œλ“œλ₯Ό μ–΄μ ˆμ—μ„œ 뢄리

   - 문자 λ‹¨μœ„λ‘œ λΆ„λ¦¬ν•œ ν›„ 병합 μš°μ„ μˆœμœ„(merge.txt에 따라) λΆ€μ—¬

   - μš°μ„ μˆœμœ„μ— 따라 병합 -> μš°μ„ μˆœμœ„ λΆ€μ—¬ -> 반볡 , μ–΄νœ˜μ§‘ν•©μ— μ—†λŠ” 토큰은 <unk>(미등둝토큰)으둜 처리

 

 

μ›Œλ“œν”ΌμŠ€

μ–΄νœ˜μ§‘ν•© κ΅¬μΆ•μ‹œ λ¬Έμžμ—΄ 병합할 λ•Œ λΉˆλ„κ°€ μ•„λ‹Œ μš°λ„(likelihood)λ₯Ό κ°€μž₯ λ†’μ΄λŠ” κΈ€μž μŒμ„ 병합

μ–΄νœ˜ 집합(vocab.txt)만 가지고 토큰화

뢄석 λŒ€μƒ μ–΄μ ˆμ— μ–΄νœ˜ 집합에 μžˆλŠ” μ„œλΈŒμ›Œλ“œκ°€ ν¬ν•¨λ˜μ—ˆμ„ λ•Œ ν•΄λ‹Ή μ„œλΈŒμ›Œλ“œλ₯Ό μ–΄μ ˆμ—μ„œ 뢄리

μ΄λŸ¬ν•œ μ„œλΈŒμ›Œλ“œ 후보가 μ—¬λŸΏμžˆμ„ 경우 κ°€μž₯ κΈ΄ μ„œλΈŒμ›Œλ“œ 선택

이후 μ–΄μ ˆμ˜ λ‚˜λ¨Έμ§€μ—μ„œ μ–΄νœ˜ 집합에 μžˆλŠ” μ„œλΈŒμ›Œλ“œλ₯Ό λ‹€μ‹œ μ°Ύκ³ , 뢄리,,, 뢄석 λŒ€μƒ λ¬Έμžμ—΄μ—μ„œ μ„œλΈŒμ›Œλ“œ 후보가 ν•˜λ‚˜λ„ μ—†μœΌλ©΄ ν•΄λ‹Ή λ¬Έμžμ—΄ 전체λ₯Ό 미등둝 λ‹¨μ–΄λ‘œ μ·¨κΈ‰

 

 

νŒ¨λ”© padding

병렬 연산을 μœ„ν•΄μ„œ μ—¬λŸ¬ λ¬Έμž₯의 길이λ₯Ό μž„μ˜λ‘œ λ™μΌν•˜κ²Œ λ§žμΆ°μ£ΌλŠ” μž‘μ—…

max_lengthκ°€ 7인경우. 길이가 7보닀 짧은 λ¬Έμž₯μ—λŠ” 숫자 0을 μ±„μ›Œμ„œ 길이 7둜 맞좀

이와 같이 νŒ¨λ”©μ€ 데이터에 νŠΉμ • 값을 μ±„μ›Œμ„œ λ°μ΄ν„°μ˜ 크기(shape)λ₯Ό μ‘°μ •ν•˜λŠ” 것

숫자 0을 μ‚¬μš©ν•˜κ³  μžˆλ‹€λ©΄ μ œλ‘œ νŒ¨λ”©(zero padding)이라고 ν•œλ‹€

 

λ°˜μ‘ν˜•