[Final Project] TIL (1) : Subword Tokenization

eve·2022년 12월 24일
0

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개의 댓글