머신러닝 및 딥러닝/자연어처리

Fast Tokenizer

viamemine 2024. 6. 27. 15:21
728x90
반응형

 

Slow Tokenizer와 Fast tokenizer

'slow' tokenizer는 Transformers 라이브러리 내부에서 Python으로 작성된 것, 'fast' tokenizer는 Rust로 작성되어 Tokenizers에서 제공하는 것입니다. 단일 문장을 토큰화할 때 동일한 토크나이저의 느린 버전과 빠른 버전 간의 속도 차이가 항상 나는 것은 아닙니다. 사실, 빠른 버전은 실제로 더 느릴 수 있습니다. 많은 텍스트를 동시에 토큰화할 때만 차이를 명확하게 알 수 있습니다. 

 

 

Batch Encoding

토크나이저의 출력은 단순한 python 딕셔너리가 아닙니다. 우리가 얻는 것은 실제로 특별한 batch encoding 객체입니다. 빠른 토크나이저에서 주로 사용하는 추가 메서드가 있습니다. 병렬화(parallelization) 기능 외에도, 빠른 토크나이저의 주요 기능은 최종 토큰이 원본 텍스트에서 어디에 위치하는지 범위(span)를 항상 추적한다는 것입니다. 이를 offset mapping이라고 합니다. 

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
example = "My name is Sylvain and I work at Hugging Face in Brooklyn."
encoding = tokenizer(example)
print(type(encoding))

 

AutoTokenizer 클래스는 기본적으로 빠른 토크나이저를 선택하므로, 이 batch encoding 객체가 제공하는 추가 메서드를 사용할 수 있습니다. 토크나이저가 빠른지 느린지 확인하는 두 가지 방법이 있습니다. 우선, 토크나이저의 is_fast 속성을 확인할 수 있습니다.

tokenizer.is_fast

 

 

빠른 토크나이저를 가지고 우리가 무엇을 할 수 있을까요 ? 

첫째, 토큰 아이디를 다시 토큰으로 변환하지 않고도 토큰에 액세스 할 수 있습니다. 

encoding.tokens()

 

이 경우 인덱스 5의 토큰은 ##yl이며, 원래 문장에서 'Sylvain'이라는 단어의 일부입니다.

728x90