CS/NLP

이론 2-2. 바이트 페이 인코딩(BPE)

초코chip 2023. 11. 10. 18:00

바이트 페이 인코딩(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개)을 병합하는 방식
  • 사용자가 정한 어휘 집합의 크기가 될 때까지 반복
  1. 프리토크나이즈(pre-tokenize): 말뭉치의 모든 문장을 공백으로 분할
  2. 프로토크나이즈 결과의 빈도 계산 + 문자 단위의 초기 어휘 집합 추출

예시) 초기 어휘 집합 = b, g, h, n, p, s, u

토큰 빈도
hug 10
pug 5
pun 12
bun 4
hugs 5
  1. 초기 어휘 집합을 바탕으로 표를 단어 단위로 변경
토큰 빈도
h,u,g 10
p,u,g 5
p,u,n 12
b,u,n 4
h,u,g,s 5
  1. 문자 단위의 토큰을 2개 묶어서 (bigram) 나열한 것으로 변경
바이그램 쌍 빈도
h,u 15
u,g 20
p,u 17
u,n 16
b,u 4
g,s 5
  1. 가장 많이 등장한 바이그램 쌍을 어휘 집합에 추가.
    새로운 어휘 집합 = b, g, h, n, p, s, u, ug
  2. 새로운 어휘 집합으로 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
  1. 위 과정을 사용자가 정한 어휘 집합의 크기가 될 때까지 반복해서 수행

저장 파일

  • BPE 어휘 집합 파일: vocab.json 파일 형태로 저장
  • 병합 우선 순위 파일: 병합 순서를 파일로 저장 -> BPE 토큰화 과정에서 서브워드 병합 우선순위를 정하는데 사용

예시) 

 


처음 병합한 대상은 u,g

두 번째는 u,n

 

이 내용을 merges.txt로 저장

u g //1순위
u n //2순위

BPE 토큰화

  • 어휘 집합(vocab.json)과 병합 우선순위(merge.txt)를 가지고 토큰화를 진행
  • 예시 문장) pug bug mug
  1. 프리토크나이즈 실행: 공백 단위의 단어 단위로 분할
pug, bug, mug
  1. BPE 토큰화 진행:
    1. 각 단어를 문자 단위로 분리
      pug -> p, u, g
    2. 병합 우선순위를 참고하여 병합
      p, u -> 우선순위 없음 u, g -> 1순위 => u,g 병합 => p, ug
    3. 더 병합할 것이 없을 때까지 진행
      p, ug -> 우선순위 없음 => 병합 중지
    4. 병합 후 토큰들이 어휘 집합(vocab.json)에 있는지 확인
      p, ug -> vocab.json에 존재 => p, ug 토큰 생성
    5. 모든 단어에 대해 BPE 토큰화 반복
  2. 최종 토큰화 결과 -> 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