¿Cómo funcionan los argumentos max_length, padding y truncation en HuggingFace 'BertTokenizerFast.from_pretrained (' bert-base-uncased ')?

Dec 11 2020

Estoy trabajando con un problema de clasificación de texto en el que quiero usar el modelo BERT como base seguido de capas densas. Quiero saber cómo funcionan los 3 argumentos. Por ejemplo, si tengo 3 oraciones como:

'My name is slim shade and I am an aspiring AI Engineer',
'I am an aspiring AI Engineer',
'My name is Slim'

Entonces, ¿qué harán estos 3 argumentos? Lo que pienso es lo siguiente:

  1. max_length=5 mantendrá todas las oraciones de longitud 5 estrictamente
  2. padding=max_length agregará un relleno de 1 a la tercera oración
  3. truncate=True truncará la primera y la segunda oración para que su longitud sea estrictamente 5.

Por favor, corríjame si estoy equivocado.

A continuación se muestra mi código que he usado.

! 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'])

Respuestas

1 AshwinGeetD'Sa Dec 11 2020 at 23:58

Lo que ha asumido es casi correcto, sin embargo, hay pocas diferencias.

max_length=5, max_length especifica la longitud del texto tokenizado . De forma predeterminada, BERT realiza la tokenización de piezas de palabras. Por ejemplo, la palabra "jugando" se puede dividir en "jugar" y "## ing" (esto puede no ser muy preciso, pero solo para ayudarlo a comprender la tokenización de piezas de palabras), seguido de agregar un [CLS]token al comienzo de la frase y [SEP]símbolo al final de la frase. Por lo tanto, primero tokeniza la oración, la trunca a max_length-2(if truncation=True), luego la antepone [CLS]al principio y la [SEP]token al final. (Por lo tanto, una longitud total de max_length)

padding='max_length'En este ejemplo, no es muy evidente que el tercer ejemplo se rellenará, ya que la longitud excede 5después de agregar [CLS]y [SEP]tokens. Sin embargo, si tiene un valor max_lengthde 10. El texto tokenizado corresponde a [101, 2026, 2171, 2003, 11754, 102, 0, 0, 0, 0], donde 101 es id de [CLS]y 102 es id de [SEP]tokens. Por lo tanto, rellenado con ceros para hacer que todo el texto tenga la longitud demax_length

Asimismo, truncate=Truese asegurará de que max_length se adhiera estrictamente, es decir, las oraciones más largas se truncan max_lengthsolo sitruncate=True