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]])}
- {'input_ids': tensor([[101, 343, 3423, 102], [101, 2324, 34245, 343, 102]]) ,
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 처리한다.
'이론 > NLP' 카테고리의 다른 글
[딥러닝][BERT] BERT - config | BERT 공부하기 (0) | 2023.07.20 |
---|---|
[딥러닝][Text Adversarial Attack] NLP에서 Adversarial Attack의 분류 (0) | 2023.01.03 |