Tokenización e Inputs IDs

code
llms
python
transformers
Author

Cesar A. Munoz A.

Published

June 16, 2024

¿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

  1. Tokenizacion
  2. 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

tk = AutoTokenizer.from_pretrained("bert-base-cased")
tk.tokenize("Using a Transformer network is simple")
['Using', 'a', 'Trans', '##former', 'network', 'is', 'simple']

Luego convertimos a inputs ids

tokens = tk.tokenize("Using a Transformer network is simple")
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

tk("Using a Transformer network is simple")
{'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 …

tk.decode(tk("Using a Transformer network is simple")["input_ids"])
'[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

checkpoint = "bert-base-cased"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
sequences = ["I've been waiting for a HuggingFace course my whole life.", "So have I!"]

tokens = tokenizer(sequences, padding=True, truncation=True, return_tensors="tf")

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-