🤔 토큰화(Tokenizing) 개요
기본적으로 컴퓨터는 우리가 일상 생활에서 사용하는 언어인 자연어를 이해하지 못합니다.
그래서 컴퓨터에게 자연어를 이해하게 하기 위해 여러 방법이 연구되어 왔습니다.
그중 가장 일반적인 방법이 Tokenizing과 임베딩 기반으로 컴퓨터가 이해할 수 있도록 데이터 화를 하는 것입니다.
또한 텍스트 유사도를 이용하여 문맥을 분류합니다.
작성하기에 앞서 [ICT COG Academy] 인공지능 고급(언어)과정을 수강하며 복습을 위해 작성한 글임을 명시합니다.
🔎 토큰화(Tokenizing) - 형태소 분석
Tokenizing이란 주어진 문자에서 토큰 단위로 정보를 나누는 작업으로 형태소 분석입니다.
문장 형태의 데이터를 처리하기 위해 제일 처음 수행해야 하는 기본적인 작업이라고 할 수 있습니다.
주로 텍스트 전처리 과정에서 사용됩니다.
Tokenizing은 어떤 문장을 일정한 의미가 있는 가장 작은 단어로 나눈 뒤, 나눠진 단어들을 이용해 의미를 분석하는 순서로 이뤄집니다.
🔎토큰화(Tokenizing)의 방식
Tokenizing의 방식은 아래 세 가지로 나눌 수 있습니다.
단어 단위 토큰화 : 단어(어절) 단위로 토큰화
문자 단위 토큰화 : 문자 단위로 토큰화
서브 워드 단위 토큰화 : 서브 워드 단위로 토큰화
단어 단위 토큰화
가장 쉬운 방법은 공백으로 분리하는 것입니다.
이는 별도의 토크나이저가 없어도 무방한 방법입니다.
하지만 어휘 집합의 크기가 매우 커질 수 있습니다.
아래와 같이 "갔었어", "갔었는데요"는 서로 다른 토큰이 됩니다.
표현이 조금만 바뀌어도 관련된 모든 경우의 수가 어휘 집합에 포함되어야 합니다.
사전 학습된 토크나이저를 사용한다면 어휘 집합의 비대화를 다소 완화할 수 있습니다.
하나의 언어로 모델을 구축할 때, 어휘 집합의 크기는 10만개가 넘어가며 어휘 집합의 크기가 커질 수록 모델의 학습은 어려워집니다.
문자 단위 토큰화
한글의 경우 표현 가능한 글자는 11,172개 입니다.
알파벳, 숫자, 기호를 모두 고려해도 어휘 집합의 크기는 15,000개 정도 입니다.
해당 언어의 모든 문자를 어휘 집합에 포함한다면 미등록 토큰이 생기는 문제가 발생하지 않습니다.
하지만 각 토큰은 의미 있는 단위가 될 수 없습니다.
어미에 따른 변화, 조사의 사용 등 한글의 특징이 모두 사라지며 분석 결과인 토큰 시퀀스의 길이가 단어 단위 토큰화의 결과보다 상대적으로 길어집니다.
언어 모델에 입력할 토큰 시퀀스가 길면 모델의 학습이 어려워지고 결과적으로 성능이 하락하게 됩니다.
서브 워드 단위 토큰화
단어 단위 토큰화와 문자 단위 토큰화의 중간 형태입니다.
두 토큰화 방식의 장점만 적용하여 어휘 집합의 크기가 지나치게 커지지 않으며 미등록 토큰 문제를 피할 수 있습니다.
분석 결과의 토큰 시퀀스가 너무 길어지지 않습니다.
대표적인 서브워드 단위 토큰화 기법으로는 BPE(Byte Pair Encoding)이 있습니다.
🔎BPE(Byte Pair Encoding)
BPE란 1994년에 제안된 정보 압축 알고리즘으로 데이터에서 가장 많이 등장한 문자열을 병합하여 데이터를 압축하는 기법입니다.
데이터에 등장한 글자를 초기 사전으로 구성하여 연속된 두 글자를 한 글자로 병합하는 방식을 적용합니다.
최근에는 자연어 처리 모델에 널리 쓰이는 토큰화 기법으로 대표적으로 GPT 모델에서 활용하였습니다.
BPE 알고리즘은 분석 대상 언어에 대한 지식이 필요하지 않고 말뭉치(코퍼스)에서 자주 나타나는 문자열(서브 워드)을 토큰으로 분석한다는 특징이 있습니다.
BPE 알고리즘의 적용은 아래와 같이 이뤄집니다.
초기 사전 a, b, c, d 4개로 이뤄진 문자열 aaabdaaabac가 있습니다.
aaabdaabac → aa를 Z로 병합 → ZabdZabac
ZabdZabac → ab를 Y로 병합 → ZYdZYac
ZYdZYac → ZY를 X로 병합 → XdXac
BPE의 수행 이후 11자의 문자열을 5자로 압축할 수 있었습니다.
🔎 BPE활용 토큰화 절차
어휘 집합 구축
자주 등장하는 문자열 병합 후 어휘집합 추가를 반복합니다.
위의 경우 초기 어휘 집합이 "b, g, h, n, p, s, u"였다면, BPE 어휘 집합 구축 결과 어휘 집합은 "b, g, h, n, p, s, u, ug, un, hug"입니다.
BPE 토큰화
어휘 집합과 병합 우선순위를 기준을 토큰화를 수행합니다.
병합의 우선순위는 "u, g"가 1순위 "u, n"이 2순위 "h, ug"가 3순위 입니다.
BPE 토큰화를 예시를 알아보겠습니다.
pug, bug, mug라는 단어가 있을 때 각각을 문자 단위로 분리합니다.
p, u, g
p, u는 병합 순위에 없고 u, g는 병합 우선순위의 1순위이므로 토큰화를 적용합니다.
p, ug
어휘 집합 b, g, h, n, p, s, u, ug , un, hug에 p와 ug가 존재하므로 BPE 토큰화 최종 결과는 p, ug가 됩니다. bug의 BPE토큰화 최종 결과도 마찬가지로 b, ug가 됩니다.
m, u, g
m, u는 병합 순위에 없고 u, g는 병합 우선순위의 1순위이므로 토큰화를 적용합니다.
m, ug
어휘 집합 b, g, h, n, p, s, u, ug , un, hug에 m이 존재하지 않으므로 BPE최종 결과는 <unk> : Unknown Token이 됩니다.
다음 글에서는 전처리와 토큰화 실습을 진행해보도록 하겠습니다.
'AI > 자연어 처리' 카테고리의 다른 글
[AI] 자연어 처리 - 전처리와 토큰화(3) (0) | 2022.08.11 |
---|---|
[AI] 자연어 처리 - 전처리와 토큰화(3) (0) | 2022.08.06 |
[AI] 자연어 처리 - 전처리와 토큰화(1) (2) | 2022.08.01 |
[AI] 자연어 처리 - PyTorch 실습 (0) | 2022.07.30 |
[AI] 자연어 처리 - 기본지식(3) (0) | 2022.07.29 |