이론/NLP

[딥러닝][BERT] BertTokenizer 정리 | BERT 공부하기

쏘오금 2023. 7. 20. 17:17

Bert-Tokenizer

tokenizer 정의
: 주어진 corpus에서 토큰이라 불리는 단위로 나누는 작업임.

  • berttokenizer의 특별한 점.
    • wordpiece tokenizer(BPE의 변형 알고리즘) 적용
    • BPE(Byte Pair Encoding): OOV(OUT-OF-VOCA) 문제를 완화하기위한 대표적인 서브워드 분리 알고리즘
    • 서브워드 분리(subword segmenation); 하나의 단어는 더 작은 단위의 의미있는 여러 서브워드들(workplace = work + place)조합으로 구성된 경우가 많음. 이같은 하나의 단어를 서브워드로 분리해 인코딩 & 임베딩하기 위한 전처리 작업.

 

Tokenizer의 input과 output

  • input 텍스트 (List[str]), 리스트 형태로 반환
    • ["단어 단어", "단어 단어 단어:]
  • output 토큰화 결과 (Dict), 딕셔너리 형태로 변환
    • {'input_ids': tensor([[101, 343, 3423, 102], [101, 2324, 34245, 343, 102]]) ,
      'token_type_ids': tensor([[0, 0, 0, 0], [0, 0, 0, 0, 0]]) ,
      'attention_mask': tensor([[1, 1, 1, 1], [1, 1, 1, 1, 1]])}

 

output 파헤치기

input_ids

  • 각 토큰에 대한 정수 인코딩 결과물.
  • 문장에 존재하는 입력 시퀀스(단어)의 인덱스, bertTokenizer를 이용해 지수를 부여

예시문장(생성 순서)

  • "오늘은 꽈배기를 먹었다"
  • [tokenize]
  • "CLS", "오늘은", "꽈배기를", "먹었다", "SEP"
  • [encode]
  • 101, 2344, 423534, 2342, 102
  • [decode]
  • "CLS", "오늘은", "꽈배기를", "먹었다", "SEP"

token_type_ids (= segment_ids)

  • pre-training 단계의 NSP(Next Sentence Prediction) 작업을 위해 존재한다. fine-tuning 시에는 모두 0이다.0 = 문장 A 토큰, 1 = 문장 B 토큰
  • 토큰 인덱스를 세그먼트 형태로 변형하여 입력의 첫번째 및 두번째 부분을 나타냄. 이때 인덱스는 [0, 1]에서 선택

attention mask

  • attention을 받지 않도록 하는 부분 구분.CLS, SEP도 포함해 최대길이를 지정하고 다른 문장에 토큰이 없다면 0으로 masking
  • BERT의 Inference시에는 zero padding으로 입력된 토큰에 대해선 attention score를 받지 못하도록 masking 처리한다.