토큰화란 문장을 토큰 시퀀스로 나누는 과정. 대상에 따라 문자, 단어, 서브워드 등 세 가지 방법이 있다. 그렇다면, 각 토큰화마다 장단점이 있을까??
토큰화란 무엇일까??
자연어 처리 데이터의 기본 단위는 텍스트 형태의 문장. 트랜스포머 모델은 토큰 시퀀스를 입력받으므로, 문장마다 토큰화를 수행한다!
‘토크나이저’
토큰화를 수행하는 프로그램. '은전한닢(mecab)', '꼬꼬마(kkma)' (대표적인 한국어 토크나이저.)
1️⃣ ‘단어 단위의 토큰화’ : 단어(어절) 단위로 토큰화를 수행하는 방법. (’공백으로 분리하기’)
- 별도로 토크나이저를 사용하지 않아도 됨.
→ 하지만 ‘어휘 집합의 크기가 매우 커질 수 있다.’
Ex) ‘갔었어’, ‘갔었는데요’ → 표현 상의 차이가 모든 경우의 수로 어휘 집합에 포함되어야 하기 때문!!
2️⃣ ‘문자 단위 토큰화’ : 단어 대신 ‘문자’ 단위로 토큰화를 하는 작업.
- 한글 위주로 표현된 데이터로 언어 모델을 만들 시에 한글로 표현할 수 있는 글자는 모두 1만 1,172개. 알파벳, 숫자, 기호 등을 고려해도 어휘 집합 크기는 기껏해야 1만 5,000개를 넘기 어려움.
- 해당 언어의 모든 문자를 어휘 집합에 포함하므로 *미등록 토큰 문제로부터 자유로움.
→ 하지만 문자 단위로 토큰화를 수행할 경우, ‘각 문자 토큰은 의미 있는 단위가 되기 어렵다.’
3️⃣ ‘서브워드 단위 토큰화’ : 대표적인 서브워드 단위 토큰화 기법으로는 ‘바이트 페어 인코딩(BPE)’가 있다. 위 단어, 문자 단위 토큰화의 장점을 추린 형태.
‘바이트 페어 인코딩 (Byte Pair Encoding. BPE)’
서브워드 단위의 ‘토크나이저’ 기법.
- 기존에는 정보를 압축하는 알고리즘이었으나, 최근 자연어 처리 모델에 널리 쓰이는 토큰화 기법.
→ GPT 모델은 BPE 기법으로 토큰화를 수행하며, BERT 모델은 BPE와 유사한 워드피스(wordpiece) 를 토크나이저로 사용.
GPT의 ‘BPE’
BPE 는 1994년 제안된 정보 압축 알고리즘으로 데이터에서 가장 많이, 빈번하게 등장한 문자열을 병합해서 데이터를 압축하는 기법.
Ex) ‘aaabdaaabac 라는 데이터'
→ BPE는 데이터에 등장한 글자(a, b, c, d)를 초기 사전으로 구성.
→ 연속된 두 글자를 한 글자로 병합함.
0️⃣ ‘aaabdaaabac’
→ aa가 가장 많이 나타났으므로, 이를 Z로 병합.
1️⃣ ‘aaabdaaabac’ → ‘ZabdZabac’ 으로 압축
→ 살펴보니, ab가 가장 많이 또 나타남. 이를 Y로 병합.
2️⃣ ‘ZabdZabac’ → ‘ZYdZYac’
→ 다시 ZY를 X로 병합
3️⃣ ‘ZYdZYac’ → ‘XdXac’
BPE 수행 이전에는 원래 데이터를 표현하기 위한 사전의 크기가 4개(a,b,c,d). BPE 수행 이후엔 그 크기가 7개(a,b,c,d,Z,Y,X)로 늘어남. But, 데이터의 길이 자체는 11에서 5로 줄어들음.
→ 이처럼 BPE는 '사전의 크기를 지나치게 늘리지 않으면서 데이터 길이를 효율적으로 압축'할 수 있도록 한다. BPE 기반 토큰화 기법은 분석 대상 언어에 대한 지식이 따로 필요 없음.
→ 왜냐?? 말뭉치에서 자주 나타나는 문자열(서브워드)을 토큰으로 분석하기 때문.
토큰화 절차
- 말뭉치의 준비
- 초기 어휘 집합을 확인
- 다시 다음 집합을 확인
1️⃣ 어휘 집합 구축.
→ 자주 등장하는 문자열을 병합하고 이를 어휘 집합에 추가함. 원하는 어휘 집합 크기가 될 때까지 반복.
Ex) [b, g, h, n, p, s, u]
토큰을 2개(바이그램)씩 묶어서 나열. 바이그램 쌍이 같은 것끼리 그 빈도를 합쳐줌.
-
- h, u, g → h, ug 로, p, u, g → p, ug로 바뀌었음.
- 다시 바이그램 쌍 빈도로 묶어서 나열.
토큰화 대상 문장의 각 어절에서 어휘 집합에 있는 서브워드가 포함되었을 때 해당 서브워드를 어절에서 분리.
2️⃣ 토큰화
-> 위 과정을 계속해서 반복한다. 언제까지??? 사용자가 정한 크기가 될 때까지. 만일 어휘 집합의 크기를 10개로 정했다면, 어휘가 10개 되는 순간 BPE 어휘 집합 구축은 마침.

- 가장 많이 등장한 바이그램 쌍은 ‘u, n’. -> 'un'을 새로운 문자로 병합.
- 또다시 가장 많이 등장한 바이그램 쌍은 ‘u, g’로, 총 20회. 따라서 u, g를 합친 ug를 어휘 집합에 추가. 추가된 어휘 집합은 다음과 같음.
-> 어휘 집합의 크기가 다소 커지더라도 토큰 시퀀스의 길이를 줄이는(= 정보를 압축하려는) 목적으로 BPE를 사용한다. 자주 등장하는 문자열을 병합하고 이를 어휘 집합에 추가함. 원하는 어휘 집합 크기가 될 때까지 반복.
BERT의 ‘Wordpiece’
말뭉치에서 자주 등장한 문자열을 토큰으로 인식한다는 점에서 BPE와 본질적으로 유사. 단 빈도가 아닌 '우도'가 출력값을 위한 척도로 사용된다!

수식의 값이 커지려면???
- a, b가 서로 독립임을 가정했을 때보다 둘이 자주 동시에 등장해야 한다.
워드피스에서는 병합 후보에 오른 쌍을 미리 병합해보고, 잃는 것과 가치 등을 판단한 후에 병합한다.
- 최종적으로 병합 대상 전체 후보들 가운데 계산한 값이 가장 높은 쌍을 합친다.
워드피스는 어휘 집합만 가지고 토큰화를 하며, 분석 대상 어절에 어휘 집합에 있는 서브워드가 포함되어 있을 때 해당 서브워드를 어절에서 분리한다. (== BPE와 동일.) 만약 분석 대상 문자열에서 서브워드 후보가 하나도 없으면, 해당 문자열 전체를 미등록 단어(Unk)로 취급한다.
'머신러닝(ML), 딥러닝(DL)' 카테고리의 다른 글
트랜스포머 (Transformer) 살펴보기 [딥러닝] (0) | 2024.03.30 |
---|---|
인공신경망(ANN)과 활성화 함수 [딥러닝] (0) | 2024.03.13 |
퍼셉트론(Perceptron) [딥러닝] (0) | 2024.03.12 |
비지도 학습 [머신러닝] (1) | 2024.01.13 |
트리 알고리즘 [머신러닝] (1) | 2023.12.26 |
토큰화란 문장을 토큰 시퀀스로 나누는 과정. 대상에 따라 문자, 단어, 서브워드 등 세 가지 방법이 있다. 그렇다면, 각 토큰화마다 장단점이 있을까??
토큰화란 무엇일까??
자연어 처리 데이터의 기본 단위는 텍스트 형태의 문장. 트랜스포머 모델은 토큰 시퀀스를 입력받으므로, 문장마다 토큰화를 수행한다!
‘토크나이저’
토큰화를 수행하는 프로그램. '은전한닢(mecab)', '꼬꼬마(kkma)' (대표적인 한국어 토크나이저.)
1️⃣ ‘단어 단위의 토큰화’ : 단어(어절) 단위로 토큰화를 수행하는 방법. (’공백으로 분리하기’)
- 별도로 토크나이저를 사용하지 않아도 됨.
→ 하지만 ‘어휘 집합의 크기가 매우 커질 수 있다.’
Ex) ‘갔었어’, ‘갔었는데요’ → 표현 상의 차이가 모든 경우의 수로 어휘 집합에 포함되어야 하기 때문!!
2️⃣ ‘문자 단위 토큰화’ : 단어 대신 ‘문자’ 단위로 토큰화를 하는 작업.
- 한글 위주로 표현된 데이터로 언어 모델을 만들 시에 한글로 표현할 수 있는 글자는 모두 1만 1,172개. 알파벳, 숫자, 기호 등을 고려해도 어휘 집합 크기는 기껏해야 1만 5,000개를 넘기 어려움.
- 해당 언어의 모든 문자를 어휘 집합에 포함하므로 *미등록 토큰 문제로부터 자유로움.
→ 하지만 문자 단위로 토큰화를 수행할 경우, ‘각 문자 토큰은 의미 있는 단위가 되기 어렵다.’
3️⃣ ‘서브워드 단위 토큰화’ : 대표적인 서브워드 단위 토큰화 기법으로는 ‘바이트 페어 인코딩(BPE)’가 있다. 위 단어, 문자 단위 토큰화의 장점을 추린 형태.
‘바이트 페어 인코딩 (Byte Pair Encoding. BPE)’
서브워드 단위의 ‘토크나이저’ 기법.
- 기존에는 정보를 압축하는 알고리즘이었으나, 최근 자연어 처리 모델에 널리 쓰이는 토큰화 기법.
→ GPT 모델은 BPE 기법으로 토큰화를 수행하며, BERT 모델은 BPE와 유사한 워드피스(wordpiece) 를 토크나이저로 사용.
GPT의 ‘BPE’
BPE 는 1994년 제안된 정보 압축 알고리즘으로 데이터에서 가장 많이, 빈번하게 등장한 문자열을 병합해서 데이터를 압축하는 기법.
Ex) ‘aaabdaaabac 라는 데이터'
→ BPE는 데이터에 등장한 글자(a, b, c, d)를 초기 사전으로 구성.
→ 연속된 두 글자를 한 글자로 병합함.
0️⃣ ‘aaabdaaabac’
→ aa가 가장 많이 나타났으므로, 이를 Z로 병합.
1️⃣ ‘aaabdaaabac’ → ‘ZabdZabac’ 으로 압축
→ 살펴보니, ab가 가장 많이 또 나타남. 이를 Y로 병합.
2️⃣ ‘ZabdZabac’ → ‘ZYdZYac’
→ 다시 ZY를 X로 병합
3️⃣ ‘ZYdZYac’ → ‘XdXac’
BPE 수행 이전에는 원래 데이터를 표현하기 위한 사전의 크기가 4개(a,b,c,d). BPE 수행 이후엔 그 크기가 7개(a,b,c,d,Z,Y,X)로 늘어남. But, 데이터의 길이 자체는 11에서 5로 줄어들음.
→ 이처럼 BPE는 '사전의 크기를 지나치게 늘리지 않으면서 데이터 길이를 효율적으로 압축'할 수 있도록 한다. BPE 기반 토큰화 기법은 분석 대상 언어에 대한 지식이 따로 필요 없음.
→ 왜냐?? 말뭉치에서 자주 나타나는 문자열(서브워드)을 토큰으로 분석하기 때문.
토큰화 절차
- 말뭉치의 준비
- 초기 어휘 집합을 확인
- 다시 다음 집합을 확인
1️⃣ 어휘 집합 구축.
→ 자주 등장하는 문자열을 병합하고 이를 어휘 집합에 추가함. 원하는 어휘 집합 크기가 될 때까지 반복.
Ex) [b, g, h, n, p, s, u]
토큰을 2개(바이그램)씩 묶어서 나열. 바이그램 쌍이 같은 것끼리 그 빈도를 합쳐줌.
-
- h, u, g → h, ug 로, p, u, g → p, ug로 바뀌었음.
- 다시 바이그램 쌍 빈도로 묶어서 나열.
토큰화 대상 문장의 각 어절에서 어휘 집합에 있는 서브워드가 포함되었을 때 해당 서브워드를 어절에서 분리.
2️⃣ 토큰화
-> 위 과정을 계속해서 반복한다. 언제까지??? 사용자가 정한 크기가 될 때까지. 만일 어휘 집합의 크기를 10개로 정했다면, 어휘가 10개 되는 순간 BPE 어휘 집합 구축은 마침.

- 가장 많이 등장한 바이그램 쌍은 ‘u, n’. -> 'un'을 새로운 문자로 병합.
- 또다시 가장 많이 등장한 바이그램 쌍은 ‘u, g’로, 총 20회. 따라서 u, g를 합친 ug를 어휘 집합에 추가. 추가된 어휘 집합은 다음과 같음.
-> 어휘 집합의 크기가 다소 커지더라도 토큰 시퀀스의 길이를 줄이는(= 정보를 압축하려는) 목적으로 BPE를 사용한다. 자주 등장하는 문자열을 병합하고 이를 어휘 집합에 추가함. 원하는 어휘 집합 크기가 될 때까지 반복.
BERT의 ‘Wordpiece’
말뭉치에서 자주 등장한 문자열을 토큰으로 인식한다는 점에서 BPE와 본질적으로 유사. 단 빈도가 아닌 '우도'가 출력값을 위한 척도로 사용된다!

수식의 값이 커지려면???
- a, b가 서로 독립임을 가정했을 때보다 둘이 자주 동시에 등장해야 한다.
워드피스에서는 병합 후보에 오른 쌍을 미리 병합해보고, 잃는 것과 가치 등을 판단한 후에 병합한다.
- 최종적으로 병합 대상 전체 후보들 가운데 계산한 값이 가장 높은 쌍을 합친다.
워드피스는 어휘 집합만 가지고 토큰화를 하며, 분석 대상 어절에 어휘 집합에 있는 서브워드가 포함되어 있을 때 해당 서브워드를 어절에서 분리한다. (== BPE와 동일.) 만약 분석 대상 문자열에서 서브워드 후보가 하나도 없으면, 해당 문자열 전체를 미등록 단어(Unk)로 취급한다.
'머신러닝(ML), 딥러닝(DL)' 카테고리의 다른 글
트랜스포머 (Transformer) 살펴보기 [딥러닝] (0) | 2024.03.30 |
---|---|
인공신경망(ANN)과 활성화 함수 [딥러닝] (0) | 2024.03.13 |
퍼셉트론(Perceptron) [딥러닝] (0) | 2024.03.12 |
비지도 학습 [머신러닝] (1) | 2024.01.13 |
트리 알고리즘 [머신러닝] (1) | 2023.12.26 |