바이트 페이 인코딩(Byte Pair Encoding: BPE)
배경
- 초기에는 정보를 압축하는 알고리즘으로 제안됨.
- but 최근에 자연어 처리 모델에 널리 쓰이는 토큰화 기법으로 사용
- 예시)
- GPT 모델도 BPE 기법을 토큰화에 사용
- BERT 모델은 BPE와 유사한 워드피스(wordpiece)를 토크나이저로 사용
정의
- 정의: 데이터에서 가장 많이 등장한 문자열을 병합해서 데이터를 압축하는 방법
- 말뭉치에서 자주 나타나는 문자열 = 서브워드 = 토큰
- 장점: 사전 크기(어휘 집합) 증가를 억제하면서도 데이터 길이(시퀀스 길이)를 효율적으로 압축할 수 있는 알고리즘
예시
//언어 사전(a,b,c,d), 데이터 길이(11)
aaabdaaabac -> aa가 많이 등장 -> aa를 Z로 병합
//언어 사전(a,b,c,d,Z), 데이터 길이(9)
ZabdZabac -> ab도 많이 등장 -> ab를 Y로 병합
//언어 사전(a,b,c,d,Z,Y), 데이터 길이(7)
ZYdZYac -> ZY도 많이 등장 -> ZY를 X로 병합
//언어 사전(a,b,c,d,Z,Y,X), 데이터 길이(5)
XdXac
BPE를 활용한 토큰화 절차
BPE 어휘 집합 구축
- 정의: 고빈도의 바이그램 쌍(토큰 2개)을 병합하는 방식
- 사용자가 정한 어휘 집합의 크기가 될 때까지 반복
- 프리토크나이즈(pre-tokenize): 말뭉치의 모든 문장을 공백으로 분할
- 프로토크나이즈 결과의 빈도 계산 + 문자 단위의 초기 어휘 집합 추출
예시) 초기 어휘 집합 = b, g, h, n, p, s, u
토큰 | 빈도 |
---|---|
hug | 10 |
pug | 5 |
pun | 12 |
bun | 4 |
hugs | 5 |
- 초기 어휘 집합을 바탕으로 표를 단어 단위로 변경
토큰 | 빈도 |
---|---|
h,u,g | 10 |
p,u,g | 5 |
p,u,n | 12 |
b,u,n | 4 |
h,u,g,s | 5 |
- 문자 단위의 토큰을 2개 묶어서 (bigram) 나열한 것으로 변경
바이그램 쌍 | 빈도 |
---|---|
h,u | 15 |
u,g | 20 |
p,u | 17 |
u,n | 16 |
b,u | 4 |
g,s | 5 |
- 가장 많이 등장한 바이그램 쌍을 어휘 집합에 추가.
새로운 어휘 집합 = b, g, h, n, p, s, u, ug - 새로운 어휘 집합으로 4번 과정을 반복
- 새로운 표 생성
토큰 빈도 h,ug 10 p,ug 5 p,u,n 12 b,u,n 4 h,ug,s 5
- 새로운 표 생성
- 새로운 표를 바탕으로 새로운 바이그램 쌍 표 생성
바이그램쌍 빈도 h,ug 15 p,ug 5 p,u 12 u,n 16 b,u 4 ug,s 5
- 위 과정을 사용자가 정한 어휘 집합의 크기가 될 때까지 반복해서 수행
저장 파일
- BPE 어휘 집합 파일: vocab.json 파일 형태로 저장
- 병합 우선 순위 파일: 병합 순서를 파일로 저장 -> BPE 토큰화 과정에서 서브워드 병합 우선순위를 정하는데 사용
예시)
![]() 처음 병합한 대상은 u,g |
![]() 두 번째는 u,n |
이 내용을 merges.txt로 저장
u g //1순위
u n //2순위
BPE 토큰화
- 어휘 집합(vocab.json)과 병합 우선순위(merge.txt)를 가지고 토큰화를 진행
- 예시 문장) pug bug mug
- 프리토크나이즈 실행: 공백 단위의 단어 단위로 분할
pug, bug, mug
- BPE 토큰화 진행:
- 각 단어를 문자 단위로 분리
pug -> p, u, g
- 병합 우선순위를 참고하여 병합
p, u -> 우선순위 없음 u, g -> 1순위 => u,g 병합 => p, ug
- 더 병합할 것이 없을 때까지 진행
p, ug -> 우선순위 없음 => 병합 중지
- 병합 후 토큰들이 어휘 집합(vocab.json)에 있는지 확인
p, ug -> vocab.json에 존재 => p, ug 토큰 생성
- 모든 단어에 대해 BPE 토큰화 반복
- 각 단어를 문자 단위로 분리
- 최종 토큰화 결과 -> p, ug, b, ug, (m은 어휘 집합에 존재x), ug
'CS > NLP' 카테고리의 다른 글
이론 2-3. 실습 - 어휘 집합 구축 (0) | 2023.11.10 |
---|---|
이론 2-3. 워드피스(wordpiece) (0) | 2023.11.10 |
이론 2-1. 토큰화 (0) | 2023.11.10 |
이론 모델 학습 파이프라인 (0) | 2023.10.19 |
이론 1장 NLP 기초 지식 (0) | 2023.10.16 |