HuggingFace 'BertTokenizerFast.from_pretrained ('bert-base-uncased ')에서 max_length, padding 및 truncation 인수는 어떻게 작동합니까 ??
BERT 모델을 기본으로 사용하고 Dense 레이어가 뒤 따르는 Text Classification 문제로 작업하고 있습니다. 세 가지 인수가 어떻게 작동하는지 알고 싶습니다. 예를 들어 다음과 같이 3 개의 문장이있는 경우 :
'My name is slim shade and I am an aspiring AI Engineer',
'I am an aspiring AI Engineer',
'My name is Slim'
그렇다면이 세 가지 주장은 무엇을할까요? 내가 생각하는 것은 다음과 같습니다.
max_length=5
길이 5의 모든 문장을 엄격하게 유지합니다.padding=max_length
세 번째 문장에 1의 패딩을 추가합니다truncate=True
길이가 엄격하게 5가되도록 첫 번째와 두 번째 문장을 자릅니다.
내가 틀렸다면 나를 바로 잡으십시오.
아래는 내가 사용한 코드입니다.
! pip install transformers==3.5.1
from transformers import BertTokenizerFast
tokenizer = BertTokenizerFast.from_pretrained('bert-base-uncased')
tokens = tokenizer.batch_encode_plus(text,max_length=5,padding='max_length', truncation=True)
text_seq = torch.tensor(tokens['input_ids'])
text_mask = torch.tensor(tokens['attention_mask'])
답변
귀하가 가정 한 내용은 거의 정확하지만 몇 가지 차이점이 있습니다.
max_length=5
, 토큰 화 된 텍스트 의 길이를 max_length
지정 합니다 . 기본적으로 BERT는 단어 단위 토큰 화를 수행합니다. 예를 들어, "playing"이라는 단어는 "play"와 "## ing"으로 나눌 수 있습니다 (매우 정확하지는 않지만 단어 조각 토큰 화에 대해 이해하는 데 도움이 됨) . 문장, 그리고 문장 끝에 토큰. 따라서 먼저 문장을 토큰 화하고 (if )로 자른 다음 시작 부분에 앞에 추가 하고 끝에 토큰 을 추가 합니다 (따라서 총 길이는 ).[CLS]
[SEP]
max_length-2
truncation=True
[CLS]
[SEP]
max_length
padding='max_length'
,이 예에서는 5
추가 [CLS]
및 [SEP]
토큰 후 길이가 초과되기 때문에 세 번째 예가 패딩된다는 것은 분명하지 않습니다 . 그러나 a max_length
가 10 인 경우 토큰 화 된 텍스트는에 해당합니다 [101, 2026, 2171, 2003, 11754, 102, 0, 0, 0, 0]
. 여기서 101은 ID [CLS]
이고 102는 [SEP]
토큰 ID입니다 . 따라서 모든 텍스트를 길이로 만들기 위해 0으로 채워집니다.max_length
마찬가지로, truncate=True
max_length가 엄격하게 준수되도록합니다. 즉, 긴 문장은 다음 max_length
경우에만 잘립니다.truncate=True