HuggingFace 'BertTokenizerFast.from_pretrained ('bert-base-uncased ')에서 max_length, padding 및 truncation 인수는 어떻게 작동합니까 ??

Dec 11 2020

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'

그렇다면이 세 가지 주장은 무엇을할까요? 내가 생각하는 것은 다음과 같습니다.

  1. max_length=5 길이 5의 모든 문장을 엄격하게 유지합니다.
  2. padding=max_length 세 번째 문장에 1의 패딩을 추가합니다
  3. 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'])

답변

1 AshwinGeetD'Sa Dec 11 2020 at 23:58

귀하가 가정 한 내용은 거의 정확하지만 몇 가지 차이점이 있습니다.

max_length=5, 토큰 화 된 텍스트 의 길이를 max_length 지정 합니다 . 기본적으로 BERT는 단어 단위 토큰 화를 수행합니다. 예를 들어, "playing"이라는 단어는 "play"와 "## ing"으로 나눌 수 있습니다 (매우 정확하지는 않지만 단어 조각 토큰 화에 대해 이해하는 데 도움이 됨) . 문장, 그리고 문장 끝에 토큰. 따라서 먼저 문장을 토큰 화하고 (if )로 자른 다음 시작 부분에 앞에 추가 하고 끝에 토큰 을 추가 합니다 (따라서 총 길이는 ).[CLS][SEP]max_length-2truncation=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=Truemax_length가 엄격하게 준수되도록합니다. 즉, 긴 문장은 다음 max_length경우에만 잘립니다.truncate=True