¿Cómo funcionan los argumentos max_length, padding y truncation en HuggingFace 'BertTokenizerFast.from_pretrained (' bert-base-uncased ')?
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:
max_length=5
mantendrá todas las oraciones de longitud 5 estrictamentepadding=max_length
agregará un relleno de 1 a la tercera oracióntruncate=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
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 5
después de agregar [CLS]
y [SEP]
tokens. Sin embargo, si tiene un valor max_length
de 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=True
se asegurará de que max_length se adhiera estrictamente, es decir, las oraciones más largas se truncan max_length
solo sitruncate=True