[Final Project] TIL (1) : Subword Tokenization

eve·2022년 12월 24일

likeLion

목록 보기
44/45

1. 등장 배경


# 토큰화가 무슨 뜻일까?

문법적으로 더 이상 나눌 수 없는 단위인 
토큰으로 분리하는 작업을 의미합니다.

1️⃣ POS tagging (Part Of Speech)


  • '품사 태깅'이라고도 합니다.
  • 각 단어에 품사를 달아줍니다. 과거의 토큰화 방법입니다.
  • 영어 단어는 특성상 하나의 단어가 명사, 동사 등 두 가지의 품사를 갖는 중의성을 띠게 됩니다.
  • 따라서 영단어는 품사를 알아야 단어 의미의 중의성을 해소할 수 있기 때문에 등장한 기법입니다.

🚨 POS 태깅의 단점 🚨
처음 등장하는 단어를 처리할 경우, 모델에 Unknown Token이 들어가게 되어 모델의 성능이 낮아지는 것을 유발합니다.

# unknown token이란?

OOV(out of vocabulary), 
즉 '단어 사전에 없다'는 문제가 발생할 경우에 나타난다.
인코딩 과정에서 처음 접하는 단어 토큰이 들어올 경우,
단어장에 없기 때문에 'unknown token (UNK)'를 반환하는 것이다.



2️⃣ 보완책, Subword Tokenization

  • 단어 자체를 토큰화 하는 것이 아니라, 복합어를 여러 개의 subword로 분리합니다.
  • subword는 작은 의미로 구성됩니다.
  • 적용 방법으로는 아래에서 설명할 BPE, SPM 등이 있습니다.




2. Byte Piece Encoding, BPE

1️⃣ 빈도수가 높고, 이웃하는 2개의 바이트를 1 바이트로 치환


✅ 예시

# 일반 토큰화

링딩동-링딩동, 링디기-딩디기-딩딩딩
-> '링', '딩', '동', '-', '링', '딩', '동', ...

# Subword Tokenization (빈도 순: '링딩', '링디')

링딩동-링딩동, 링디기-딩디기-딩딩딩
-> '링딩', '동', '-', '링딩', '동', '링디', '기', '링디' ...

예시에서는 빈도수가 높은 '링딩' 과 '링디'의 2 byte 짜리 토큰들을 1 byte로 치환해주었습니다.

이 때, '이웃하는' 2개의 바이트를 모두 치환할 수 있기 때문에, 3 byte 짜리 토큰까지 BPE 적용이 가능합니다. 적용 예시는 다음과 같습니다.


✅ 예시 2

# Subword Tokenization (빈도 순: '링딩동', '링디기')

링딩동-링딩동, 링디기-딩디기-딩딩딩
-> '링딩동', '-', '링딩동', '링디기', '링디기' ...

✍️ 요약하자면, BPE의 핵심은! ✍️

✔︎ 빈도수가 높은 바이트를 치환

# '링딩동'을 A로, '링디기'를 B로 치환해보자.

링딩동-링딩동, 링디기-딩디기-딩딩딩
-> 'A', '-', 'A', 'B', 'B' ...

✔︎ 그리고 '반복' 입니다.

# '링디기'를 치환한 B가 두 번 반복되면(BB), C로 치환해보자.

링딩동-링딩동, 링디기-딩디기-딩딩딩
링딩동-링딩동, 링디기-딩디기-딩딩딩
-> 'A', '-', 'A', 'B', 'B' ...
   'A', '-', 'A', 'B', 'B' ...
-> 'A', '-', 'A', 'C' ...
   'A', '-', 'A', 'C' ...
   


2️⃣ 전처리 단계에서의 활용법

(1) 글자 단위로 분리하여 딕셔너리에 추가
(2) 빈도수가 가장 높은 쌍을 딕셔너리에 추가.
-> 추가 서치 필요!


📚 관련 논문 (영문) : https://www.derczynski.com/papers/archive/BPE_Gage.pdf




2. Sentence Piece Model, SPM


1️⃣ SPM = BPE + Unigram Language Model


  • SPM은 위에서 언급한 BPE와 Unigram Language Model을 합친 기술입니다.
# Unigram Language Model이란?
(문장에서 등장한 단어의 빈도수) % (전체 단어 수)
= (문장에서 각 단어가 등장할 확률)

-> 위의 확률을 계산한 후, 
모델 학습 시 구해둔 단어들의 등장 확률을 곱하여
단어들이 '동시에' 나타날 확률을 구합니다.

✅ 예시

# Unigram Language Model로 단어의 등장확률을 구해보자
# (실제로 이렇게 출력되지는 않습니다 ㅎㅎ)

링딩동-링딩동, 링디기-딩디기-딩딩딩
-> [ subword 목록 ]
'링딩동' (확률 = 40%)
'링디기' (확률 = 40%)
'딩딩딩' (확률 = 20%)
  • SPM은 문장이 Subword의 집합이라고 전제합니다.
  • 다양한 Subword의 케이스를 모아, Unigram Language Model을 통해 등장 확률을 구합니다.
  • 이중 가장 확률값이 가장 높은 케이스를 선택합니다.
  • 전처리 과정에서 일종의 가중치라고 볼 수 있습니다.



4. SKT의 KoGPT-2

1️⃣ KoGPT2에는 SPM이 사용되었다.

  • 한글은 어미, 접사 등이 붙는 '교착어'입니다.
  • 단어들이 독립적으로 구성되어 있지 않아서, 한글 토큰화는 쉽지 않은 과정입니다.
  • 한글의 특성상 효율적인 모델 학습을 위해서는 토큰화가 꼭 필요하며, 이는 전처리 과정을 복잡하게 만듭니다.
  • 다만 KoGPT2에 사용된 SPM은 매우 효율적이기 때문에 사전 토큰화를 수행할 필요가 없다고 합니다.

-> 다만, fine-tuning 과정에서는 전처리를 하면서 다양한 토큰화 과정을 시도해볼 수 있습니다.


📚 관련 논문 (영문) : https://aclanthology.org/D18-2012.pdf
📚 참고 자료 (한글) :
https://velog.io/@yeop2/AI-%EB%AA%A8%EB%8D%B8-%ED%83%90%ED%97%98%EA%B8%B0-4-%EB%8C%80%ED%95%99-%EC%BB%A4%EB%AE%A4%EB%8B%88%ED%8B%B0-%EA%B2%8C%EC%8B%9C%EA%B8%80-%EC%83%9D%EC%84%B1%EA%B8%B0

profile
유저가 왜 그랬을까

0개의 댓글