Tokenizers
토큰화는 문장을 토큰이라는 조각으로 잘게 자르는 작업이며, 동시에 구두점과 같은 특정 문자를 버릴 수도 있다. Hugging Face에는 이러한 문장을 단어와 하위 단어로 나눌 수 있는 토큰화 도구가 포함되어 있다. 영어와 일부 다른 언어는 공통된 단어 부분으로 구성되어 있기 때문에 하위 단어를 토큰화한다. 예를 들어, "sleeping"과 같은 동명사 단어는 "sleep"과 "##ing"으로 토큰화된다.
먼저, 허깅 페이스 토큰화 도구를 생성한다. 허깅 페이스 허브에서 여러 가지 토큰화 도구를 사용할 수 있다. 이 토큰화 도구는 BERT를 기반으로 하며 대소문자를 구분하지 않는 영어 텍스트를 가정한다.
from transformers import AutoTokenizer
model = "distilbert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model)
이제 샘플 문장을 토큰화할 수 있다.
encoded = tokenizer('Tokenizing text is easy.')
print(encoded)
{'input_ids': [101, 19204, 6026, 3793, 2003, 3733, 1012, 102], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1]}
이 토큰화 결과에는 두 가지 요소가 포함된다.
|
이 문장에는 패딩이 없으므로 모든 요소의 주의 마스크는 "1"이다. 나중에 출력을 고정 길이로 요청하여 패딩을 도입하고 항상 주의 마스크가 "0"이 되도록 할 것이다. 각 토큰화기는 다르게 구현될 수 있지만, 토큰화기의 어텐션 마스크는 일반적으로 "0" 또는 "1"이다. 하위 단어와 특수 토큰으로 인해 토큰의 수가 소스 문자열의 단어 수와 일치하지 않을 수 있다. 이러한 ID를 다시 문자열로 변환하면 개별 토큰의 의미를 확인할 수 있다.
tokenizer.convert_ids_to_tokens(encoded.input_ids)
['[CLS]', 'token', '##izing', 'text', 'is', 'easy', '.', '[SEP]']
보시다시피, 각 시퀀스의 시작과 끝에 두 개의 특수 토큰이 배치되어 있다. 곧 이러한 특수 토큰을 포함하거나 제외하는 방법에서 이러한 특수 토큰은 토큰화기마다 다를 수 있지만, [CLS]는 이 토큰화기의 시퀀스를 시작하고 [SEP]는 시퀀스를 끝낸다. 또한, "tokening"라는 동명사가 "token"과 "*ing"으로 나뉘어져 있는 것을 볼 수 있다.
이 토큰화기의 경우 특수 토큰은 100에서 103 사이에 발생한다. 대부분의 허깅 페이스 토큰라이저는 특수 토큰에 대해 이 대략적인 범위를 사용된다. 값 0은 일반적으로 패딩을 나타낸다. 이 명령으로 모든 특수 토큰을 표시할 수 있다.
tokenizer.convert_ids_to_tokens([0, 100, 101, 102, 103])
['[PAD]', '[UNK]', '[CLS]', '[SEP]', '[MASK]']
이 토큰 생성기는 다음과 같은 일반적인 토큰을 지원한다.
- [CLS] : 시퀀스 시작 - [SEP] : 시퀀스 종료 - [PAD] : 패딩 - [UNK] : 알 수 없는 토큰 - [MASK] : 신경망이 예측할 토큰을 마스킹 |
시퀀스 목록을 토큰화할 수도 있다. 한 번에 많은 시퀀스를 토큰화하여 표준 길이를 얻기 위해 시퀀스를 추가하거나 잘라낼 수 있다.
text = ["This movie was great!",
"I hated this move, waste of time!"
"Epic?"
]
encoded = tokenizer(text, padding=True, add_special_tokens=True)
print("∗∗ Input IDs∗∗")
for a in encoded.input_ids:
print(a)
print("∗∗ Attention Mask∗∗")
for a in encoded.attention_mask:
print(a)
∗∗ Input IDs∗∗
[101, 2023, 3185, 2001, 2307, 999, 102, 0, 0, 0, 0, 0, 0]
[101, 1045, 6283, 2023, 2693, 1010, 5949, 1997, 2051, 999, 8680, 1029, 102]
∗∗ Attention Mask∗∗
[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
세 개의 영화 리뷰 텍스트 시퀀스에 대한 input_id를 확인한다. 각 시퀀스는 101로 시작하고 0으로 패딩한다. 패딩 바로 직전에 각 ID 그룹은 102로 끝난다. 관심도 마스크에도 각 패딩 항목에 대해 0이 있다.
토큰화 프로세스를 제어하기 위해 토큰화 도구에 두 개의 매개변수를 사용했다. 다른 유용한 매개변수는 다음과 같다.
|
'DNN with Keras > NLP with Hugging Face' 카테고리의 다른 글
임베딩 전송 (Transferring Embedding) (0) | 2024.01.11 |
---|---|
Embedding Layers (0) | 2024.01.11 |
Training HUGGING FACE models (0) | 2024.01.11 |
Hugging Face API (2) (0) | 2024.01.10 |
Hugging Face API (1) (0) | 2024.01.10 |