research notes

서브워드 토크나이저(Subword Tokenizer) 본문

GPT/개념정의

서브워드 토크나이저(Subword Tokenizer)

forest62590 2022. 4. 24. 22:37
728x90

*** ratsgo's NLP blog (이기창) 내용 요약 ***

 

바이트 페어 인코딩(Byte Pair Encoding: BPE)은 원래 정보를 압축하는 알고리즘으로 제안되었으나 최근에는 자연어 처리 모델에서 널리 쓰이는 토큰화 기법

- GPT는 BPE 기법 토큰화 수행
- BERT는 BPE와 유사한 워드피스(Wordpiece) 토크나이저 사용

1. BPE란?(고빈도 바이그램 쌍 병합)

BPE는 1994년 제안된 정보 압축 알고리즘으로 데이터에서 가장 많이 등장한 문자열을 병합해서 데이터를 압축하는 기법

aaabdaaabac → ZabdZabac

ZabdZabac  ZYdZYac
ZYdZYac → XdXac

BPE 수행 이전에는 원래 데이터를 표현하기 위한 사전 크기가 4개(a, b, c, d)이나 수행 이후엔 그 크기가 7개(a, b, c, d, Z, Y, X)로 늘었다. 반면 데이터의 길이는 11에서 5로 줄었다. 이처럼 BPE는 사전 크기를 지나치게 늘리지 않으면서도 각 데이터 길이를 효율적으로 압축할 수 있도록 한다.

 

1.1. BPE를 활용한 토크나이즈 절차:

  • 어휘 집합 구축 : 말뭉치에서 자주 등장하는 문자열을(서브워드) 병합하고 이를 어휘 집합에 추가하고 원하는 어휘 집합 크기가 될 때까지 반복
  • 토큰화 : 토큰화 대상 문장 내 각 어절(띄어쓰기로 문장을 나눈 것)에서 어휘 집합에 있는 서브워드가 포함되어 있을 때 해당 서브워드를 어절에서 분리

2. 워드피스(Wordpiece)란?

워드피스(wordpiece)는 말뭉치에서 자주 등장한 문자열을 토큰으로 인식한다는 점에서 BPE와 본질적으로 유사하나 BPE처럼 단순히 빈도를 기준으로 병합하는 것이 아니라, 병합했을 때 말뭉치의 우도(likelihood)를 가장 높이는 쌍을 병합한다.

< 병합 후보가 a, b일 때 워드피스의 병합기준 >

위 식은 병합 후보가 𝑎𝑏일 때 판단의 근거가 되는 값을 계산하는 방법이다. #𝑎#𝑏#𝑎𝑏는 각각 𝑎𝑏𝑎𝑏라는 문자열의 빈도수, 𝑛은 전체 글자 수를 가리킨다. 즉, 분자는 𝑎𝑏가 연이어 등장할 확률, 분모는 𝑎𝑏가 각각 등장할 확률의 곱이다.

 

허깅페이스의 tokenizers를 사용하여 토큰화 수행하는 방식은 BPE와 워드피스가 약간 다르다.

  • BPE는 어절별로 병합 우선순위(merges.txt)가 높은 바이그램 쌍을 반복해서 병합한 다음 해당 토큰이 어휘 집합(vocab.json)에 있는지 확인해 최종 결과를 도출
  • 워드피스는 어휘 집합(vocab.txt)만 가지고 토큰화 수행. 워드피스에서는 분석 대상 어절에 어휘 집합에 있는 서브워드가 포함돼 있을 때 해당 서브워드를 어절에서 분리. 그렇지 않으면 해당 문자열 전체를 미등록 단어로 취급
    • 어절은 문장의 기본 문법 단위이며 문장 성분이라고 불리기도 한다. 문장 성분은 모두 띄어서 쓰는데 띄어 쓴 문장 성분을 각각 어절이라고 한다. 따라서 어절은 띄어쓰기의 단위와 일치하며 "우리는 오늘 지리산으로 간다."라는 문장은 '우리는', '오늘', '지리산으로', '간다'의 네 어절로 이루어져 있다.

*** 스페셜 토큰 ***

- [CLS] 문장의 시작을 알림
- [SEP] 문장의 종결을 알림
- [PAD] 배치 데이터의 길이를 맞춤

References:

[1] BERT와 GPT로 배우는 자연어 처리, 이지스 퍼블리닝, 이기창

[2] ratsgo's NLP blog, https://ratsgo.github.io/nlpbook/docs/preprocess/bpe/

[3] https://terms.naver.com/entry.naver?docId=921653&cid=47319&categoryId=47319

728x90
Comments