¿Que es la tokenización?, ¿Como funciona?, ¿Por que es importante? … Estas son algunas de las preguntas que nos podemos hacer cuando tratamos de entender como funcionan las LLM’s.
1 Que son los tokens?
Los tokens es un concepto usado en ML para denotar los IDs correspondientes de un grupo de palabras de un vocabulario.
Por ejemplo, podemos establecer que la frase
“Esto es una prueba.”
daria como resultado:
[“Esto”, “es”, “una”, “prueba”, “.”]
2 Encoding
El enconding Entonces, se hace mediante dos pasos
- Tokenizacion
- Conversión a inputs IDs
Ademas contamos con un paso extra el cual consiste en enmascarar la entrada, también llamada “atention mask”. Estos términos que hemos visto podrían verse de la siguiente forma:
from transformers import AutoTokenizer
= AutoTokenizer.from_pretrained("bert-base-cased")
tk "Using a Transformer network is simple") tk.tokenize(
['Using', 'a', 'Trans', '##former', 'network', 'is', 'simple']
Luego convertimos a inputs ids
= tk.tokenize("Using a Transformer network is simple")
tokens tk.convert_tokens_to_ids(tokens)
[7993, 170, 13809, 23763, 2443, 1110, 3014]
Debemos tener en cuenta que a esto aun le falta los tokens relevantes del modelo, para decirle cual es el principio de la frase y el final de la frase, para esto se implementan ciertos tokens que depende del modelo.
podemos hacer todos estos pasos haciendo lo siguiente
"Using a Transformer network is simple") tk(
{'input_ids': [101, 7993, 170, 13809, 23763, 2443, 1110, 3014, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1]}
lo que ha convertido nuestra entrada a la forma necesaria con todos los preprocesamientos necesarios
Si decodificamos el input_ids mira que ocurre …
"Using a Transformer network is simple")["input_ids"]) tk.decode(tk(
'[CLS] Using a Transformer network is simple [SEP]'
Se han hagregado dos tokens nuevos, el [CLS] y el [SEP].
3 Resumen
Podemos resumir todo lo explicado en esta entrada con lo siguiente
python
import tensorflow as tf
from transformers import AutoTokenizer, TFAutoModelForSequenceClassification
= "bert-base-cased"
checkpoint = AutoTokenizer.from_pretrained(checkpoint)
tokenizer = ["I've been waiting for a HuggingFace course my whole life.", "So have I!"]
sequences
= tokenizer(sequences, padding=True, truncation=True, return_tensors="tf") tokens
quí estan pasando varias cosas al mismo tiempo, el tokenizer convierte varias entradas al mismo tiempo, ademas trunca las entradas mayores que la del modelo -truncamiento-, ademas, las secuencias que no coinciden con la mas grande les agrega el token de pading de tal fomra que nuestra matriz sea cuadrada y por ultimo se le pide que devuelva un tensor de tensorflow -aunque tambien puede ser de pytorch-