문장을 작은 단위로 쪼개기

Yerin·2022년 1월 3일
0
post-thumbnail

해당 글은 <Do it! BERT와 GPT로 배우는 자연어 처리> 책을 읽고 정리한 글입니다.

토큰화란?

토큰화(tokenization) 란 문장을 토큰 시퀀스로 나누는 과정이다.
토큰화를 수행하는 프로그램을 토크나이저 (tokenizer) 라고 한다.
대표적인 토크나이저로는 은전한닢(mecab), 꼬꼬마(kkma)등이 있다.

단어 단위 토큰화

단어(어절)단위로 토큰화를 수행한다.
가장 쉬운 예시로는 공백을 기준으로 분리하는 것이다.

어제 카페 갔었어 → (토크나이저) → 어제, 카페, 갔었어

공백 분리 시 별도의 토크나이저가 필요하지 않다는 장점이 있으나, 갔었어 / 갔었는데요 처럼 표현이 살짝만 바뀌어도 모든 경우의 수가 포함되어야하기 때문에 어휘 집합의 크기가 매우 커질 수 있다.

은전한닢을 이용한 토큰화
어제 카페 갔었어 → (토크나이저) → 어제, 카페, 갔었, 어
어제 카페 갔었는데요 → (토크나이저) → 어제, 카페, 갔었, 는데요

공백 기준 보다는 나아졌으나, 여전히 어휘 집합의 크기가 지나치게 커지는 것을 막기는 어렵다.

문자 단위 토큰화

토큰화를 단어 대신 문자 단위로 고려한다.
한글 기준으로 표현할 수 있는 글자는 모두 1만 1,172개이고, 알파벳, 숫자, 기호 등을 고려해도 기껏해야 1만 5000개이다.
하지만 각 문자 토큰은 의미있는 단위가 되기 어렵다.

어제 카페 갔었어 → (토크나이저) → 어, 제, 카, 페, 갔, 었, 어

또한 분석 결과인 토큰 시퀀스의 길이가 상대적으로 길어져 학습이 어려워지고 성능이 떨어진다.

서브워드 단위 토큰화

단어와 문자 단위 토큰화의 중간형태이다. 즉 둘의 장점만을 취한 형태이다.
어휘 집합 크기가 지나치게 커지지 않으면서 미등록 토큰 문제를 피하고, 분석된 토큰 시퀀스가 너무 길어지지 않게 한다.

바이트 페어 인코딩이란?

바이트 페어 인코딩 (Byte PAir Encoding: BPE)은 정보를 압축하는 알고리즘으로 제안되었으나, 최근에는 자연어 처리 모델에 널리 쓰이는 토큰화 기법이다.
GPT 모델은 BPE 기법, BERT 모델은 워드피스 (wordpiece)을 토크나이저로 사용한다.

BPE란?

데이터에서 가장 많이 등장한 문자열을 병합해서 데이터를 압축하는 기법

aaabdaaabac → ZabdZabac → ZYdZYac → XdXac

위와 같이 사전의 크기를 지나치게 늘리지 않으면서도 데이터 길이를 효율적으로 압축할 수 있다.

BPE 어휘 집합은 고빈도 바이그램 쌍을 병합하는 방식으로 구축한다.
병합 및 구축 과정은 생략한다. (책 참조)

워드피스란?

워드피스는 말뭉치에서 자주 등장한 문자열을 토큰으로 인식한다는 점에서 BPE와 본질적으로 유사하나 어휘 집합을 구축할 때 문자열을 병합하는 기준이 다르다.
워드피스는 우도(likelihood)를 가장 높이는 글자 쌍을 병합한다.

정리❗️
BPE는 어절별로 병합 우선순위가 높은 바이그램 쌍을 반복해서 병합한다.
병합된 코튼이 어휘 집합에 있는 지 확인해 최종 결과를 도출한다.

워드피스는 어휘집합만 가지고 토큰화한다.
분석대상 어절에 어휘 집합에 있는 서브워드가 포함돼 있을 경우 해당 서브워드를 어절에서 분리한다.
이러한 서브워드 후보가 여럿 있을 경우 가장 긴 서브워드를 선택한다.
이후 어절의 나머지에서 서브워드를 다시 찾고 또 분리한다.
분석 대상 문자열에서 서브워드 후보가 하나도 없으면 해당 문자열 전체를 미등록 단어로 취급한다.

profile
재밌는 코딩 공부

0개의 댓글