Tokenization은 문장을 토큰 시퀀스로 나누는 것이다. 분할 기준은 문자, 단어, 서브워드 등 세가지로 구분할 수 있다.
단어(어절)단위로 토큰화를 수행한다. 예를 들면, 공백(white space)를 기준으로 분리할 수 있다.
카패 카페 갔었어 =(
토크나이저)=> 어제, 카페, 갔었어
카제 카페 갔었는데요 =(토크나이저)=> 어제, 카페, 갔었는데요
하지만, 여기서 "갔었어와 "갔었는데요"는 어휘만 조금 바뀌었지만, 같은 어휘 집합(vocabulary)로 포함되어, 모든 경우의 수를 포함하여 크기가 매우 커질 수 있다. 이런 문제를 완화하기 위해서는 의미 있는 단위로 토큰화해 어휘 집합을 만들 수 있다.
카패 카페 갔었어 =(
토크나이저)=> 어제, 카페, 갔었, 어
카제 카페 갔었는데요 =(토크나이저)=> 어제, 카페, 갔었, 는데요
한글로 표현할 수 있는 글자는 11,172개이고 알파벳, 숫자, 기호 등을 조합해서 만들수 있는 어휘 집합은 150,000개가 안되어 수가 적다. 하지만, 문자 단위 토큰화는 각 문자 토큰이 의미있는 단위기 되기 어려울 수 있다. 또한, 문장 시퀀스가 너무 길어지고 해당 문장을 학습하기 어려워져 성능이 떨어지게 된다.
카패 카페 갔었어 =(
토크나이저)=> 어, 제, 카, 페, 갔, 었, 어
카제 카페 갔었는데요 =(토크나이저)=> 어, 제, 카, 페, 갔, 었, 는, 데, 요
서브워드(subword)는 단어와 문자 중간의 토큰화 단위이다. 어휘 집합의 크기가 너무 ㅋ커지지 않게 하면서, 등록되지 않은 토큰 문제를 해결하고 시퀀스의 길이가 너무 길어지지 않게 한다. 대표적으로는 바이크 페어 인코딩이 있다.
원래ㅐ는 정보를 압축하는 알고리즘 이었으나, 최근에는 토큰화 기업을 위한 자연어 처리 모델로 사용하고 있다. GPT 모델은 BPE 토큰화를 수행하고, BERT는 BPE유사한 워드피스(wordpiece)를 사용한다.
정보압축 알고리즘으로, 데이터에서 가장 많은 빈도로 등장한 문자열을 병합하여 데이터를 압축한다. 반복되는 문자열 aa=Z, ab=Y, ZY=X로 병합여 표현한다. 병한 표현 이후에 원래 표현한 문자가 (a, b, c, d)에서 (a, b, c, d, Z, Y, X)로 많아졌지만, 문자 길이는 감소했다.
aaabdaaabac ==> ZabdZabac==> ZYdZYac ==>XdXac
BPE 토큰화 절차
01 어휘집합 구축 : 자주 등장하는 문자열을 병합하고 어휘 집합게 추가하여, 원하는 크기가 될때까지 반복
02 토큰화 : 대상 문장에서 서브워드가 포함된 경우 어절에서 분리
어휘집합은 병합우선순위를 통해 토큰화한다.
말뭉충에 자주 등장하는 문자열을 토큰으로 인식하지만, 어휘 집합을 구축할 때 문자열을 병합하는 기준이 말뭉치의 우도(likelihood)를 높이는 쌍으로 병합한다.
where, , , 문자열의 빈도수, =전체 글자수
이 수식의 값은 a,b가 서로 독립일 때 더 커진다. 병합 가능한 쌍의 가치를 미리 판단하여 가장 높은 값을 적용한다.