Comprensión de la tokenización en PNL: una guía para principiantes sobre el procesamiento de textos
Publicado: 2024-11-26La tokenización es un componente crítico, aunque a menudo pasado por alto, del procesamiento del lenguaje natural (PNL). En esta guía, explicaremos la tokenización, sus casos de uso, sus ventajas y desventajas, y por qué está involucrada en casi todos los modelos de lenguajes grandes (LLM).
Tabla de contenido
- ¿Qué es la tokenización en PNL?
- Tipos de tokenización
- Cómo funciona la tokenización
- Aplicaciones de tokenización
- Beneficios de la tokenización
- Desafíos de la tokenización
¿Qué es la tokenización en PNL?
La tokenización es un método de PNL que convierte texto en formatos numéricos que los modelos de aprendizaje automático (ML) pueden utilizar. Cuando envía su mensaje a un LLM como Claude de Anthropic, Gemini de Google o un miembro de la serie GPT de OpenAI, el modelo no lee directamente su texto. Estos modelos solo pueden tomar números como entradas, por lo que primero se debe convertir el texto en una secuencia de números mediante un tokenizador.
Una forma en que un tokenizador puede tokenizar texto sería dividirlo en palabras separadas y asignar un número a cada palabra única:
"Grammarly ama la gramática, el aprendizaje automático y la escritura" podría convertirse en:
Cada palabra (y su número asociado) es una ficha. Un modelo de ML puede utilizar la secuencia de tokens ([7,102], [37], [564], [2], [9,763], [2], [231]) para ejecutar sus operaciones y producir su resultado. Esta salida suele ser un número, que se vuelve a convertir en texto utilizando el proceso inverso de este mismo proceso de tokenización. En la práctica, esta tokenización palabra por palabra es un excelente ejemplo, pero rara vez se utiliza en la industria por razones que veremos más adelante.
Una última cosa a tener en cuenta es que los tokenizadores tienen vocabularios: el conjunto completo de tokens que pueden manejar. Un tokenizador que conoce palabras básicas en inglés pero no nombres de empresas puede no tener "Grammarly" como token en su vocabulario, lo que provoca un error en la tokenización.
Tipos de tokenización
En general, la tokenización consiste en convertir un fragmento de texto en una secuencia de números. Aunque es natural pensar en la tokenización a nivel de palabra, existen muchos otros métodos de tokenización, uno de los cuales, la tokenización de subpalabras, es el estándar de la industria.
Tokenización de palabras
La tokenización de palabras es el ejemplo que vimos antes, donde el texto se divide por cada palabra y por puntuación.
El principal beneficio de la tokenización de Word es que es fácil de entender y visualizar. Sin embargo, tiene algunas deficiencias:
- La puntuación, si está presente, se adjunta a las palabras, como ocurre con "escritura".
- Las palabras nuevas o poco comunes (como "Grammarly") ocupan una ficha completa.
Como resultado, la tokenización de palabras puede crear vocabularios con cientos de miles de tokens. El problema con los vocabularios extensos es que hacen que el entrenamiento y la inferencia sean mucho menos eficientes: la matriz necesaria para convertir entre texto y números tendría que ser enorme.
Además, habría muchas palabras utilizadas con poca frecuencia y los modelos de PNL no tendrían suficientes datos de entrenamiento relevantes para devolver respuestas precisas para esas palabras poco frecuentes. Si mañana se inventara una nueva palabra, un LLM que utilice tokenización de palabras necesitaría volver a capacitarse para incorporar esta palabra.
Tokenización de subpalabras
La tokenización de subpalabras divide el texto en fragmentos más pequeños o iguales que las palabras. No existe un tamaño fijo para cada token; cada token (y su longitud) está determinado por el proceso de entrenamiento. La tokenización de subpalabras es el estándar de la industria para los LLM. A continuación se muestra un ejemplo, con la tokenización realizada por el tokenizador GPT-4o:
Aquí, la palabra poco común "Grammarly" se divide en tres tokens: "Gr", "amm" y "arly". Mientras tanto, las otras palabras son lo suficientemente comunes en el texto como para formar sus propios símbolos.
La tokenización de subpalabras permite vocabularios más pequeños, lo que significa una formación e inferencia más eficiente y económica. Los tokenizadores de subpalabras también pueden dividir palabras raras o novedosas en combinaciones de tokens existentes más pequeños. Por estos motivos, muchos modelos de PNL utilizan la tokenización de subpalabras.
Tokenización de personajes
La tokenización de caracteres divide el texto en caracteres individuales. Así es como se vería nuestro ejemplo:
Cada personajeúnicose convierte en su propia ficha. En realidad, esto requiere un vocabulario mínimo, ya que el alfabeto sólo tiene 52 letras (las mayúsculas y las minúsculas se consideran diferentes) y varios signos de puntuación. Dado que cualquier palabra en inglés debe formarse a partir de estos caracteres, la tokenización de caracteres puede funcionar con cualquier palabra nueva o rara.
Sin embargo, según los puntos de referencia estándar de LLM, la tokenización de caracteres no funciona tan bien como la tokenización de subpalabras en la práctica. El token de subpalabra "automóvil" contiene mucha más información que el token de carácter "c", por lo que el mecanismo de atención en los transformadores tiene más información para ejecutar.
Tokenización de oraciones
La tokenización de oraciones convierte cada oración del texto en su propio token. Nuestro ejemplo sería así:
El beneficio es que cada token contiene una gran cantidad de información. Sin embargo, existen varios inconvenientes. Hay infinitas formas de combinar palabras para escribir oraciones. Entonces, el vocabulario también tendría que ser infinito.
Además, cada oración en sí sería bastante rara, ya que incluso diferencias mínimas (como "también" en lugar de "y") significarían una ficha diferente a pesar de tener el mismo significado. El entrenamiento y la inferencia serían una pesadilla. La tokenización de oraciones se utiliza en casos de uso especializados, como el análisis de sentimientos de oraciones, pero por lo demás, es algo poco común.
Compensación de tokenización: eficiencia versus rendimiento
Elegir la granularidad adecuada de tokenización para un modelo es realmente una relación compleja entre eficiencia y rendimiento. Con fichas muy grandes (por ejemplo, a nivel de oración), el vocabulario se vuelve enorme. La eficiencia del entrenamiento del modelo cae porque la matriz para contener todos estos tokens es enorme. El rendimiento se desploma porque no hay suficientes datos de entrenamiento para que todos los tokens únicos aprendan relaciones de manera significativa.
Por otro lado, con fichas pequeñas, el vocabulario se vuelve pequeño. El entrenamiento se vuelve eficiente, pero el rendimiento puede caer en picado ya que cada token no contiene suficiente información para que el modelo aprenda las relaciones token-token.
La tokenización de subpalabras está justo en el medio. Cada token tiene suficiente información para que los modelos aprendan relaciones, pero el vocabulario no es tan grande como para que el entrenamiento se vuelva ineficiente.
Cómo funciona la tokenización
La tokenización gira en torno a la formación y el uso de tokenizadores. Los tokenizadores convierten el texto en tokens y los tokens nuevamente en texto. Analizaremos aquí los tokenizadores de subpalabras, ya que son el tipo más popular.
Los tokenizadores de subpalabras deben estar capacitados para dividir el texto de manera efectiva.
¿Por qué “Grammarly” se divide en “Gr”, “amm” y “arly”? ¿No podrían funcionar también “Gram”, “mar” y “ly”? Para el ojo humano, definitivamente podría hacerlo, pero el tokenizador, que presumiblemente ha aprendido la representación más eficiente, piensa de manera diferente. Un algoritmo de entrenamiento común (aunque no se utiliza en GPT-4o) empleado para aprender esta representación es la codificación de pares de bytes (BPE). Explicaremos BPE en la siguiente sección.
Entrenamiento de tokenizador
Para entrenar un buen tokenizador, necesitas un corpus masivo de texto sobre el cual entrenar. La ejecución de BPE en este corpus funciona de la siguiente manera:
- Divida todo el texto del corpus en caracteres individuales. Establécelos como fichas iniciales en el vocabulario.
- Fusione los dos tokens adyacentes con mayor frecuencia del texto en un token nuevo y agréguelo al vocabulario (sin eliminar los tokens antiguos; esto es importante).
- Repita este proceso hasta que no queden pares de fichas adyacentes que aparezcan con frecuencia o hasta que se haya alcanzado el tamaño máximo de vocabulario.
Como ejemplo, supongamos que todo nuestro corpus de entrenamiento consta del texto "abc abcd":
- El texto se dividiría en [“a”, “b”, “c”, “ ”, “a”, “b”, “c”, “d”]. Tenga en cuenta que la cuarta entrada de esa lista es un carácter de espacio. Nuestro vocabulario sería entonces [“a”, “b”, “c”, “ ”, “d”].
- “a” y “b” aparecen con mayor frecuencia uno al lado del otro en el texto (empatados con “b” y “c”, pero “a” y “b” ganan alfabéticamente). Entonces, los combinamos en un token, "ab". El vocabulario ahora se ve como [“a”, “b”, “c”, “ ”, “d”, “ab”], y el texto actualizado (con la combinación de tokens “ab” aplicada) se ve como [“ab” , “c”, “ ”, “ab”, “c”, “d”].
- Ahora bien, “ab” y “c” aparecen juntas con mayor frecuencia en el texto. Los fusionamos en el token "abc". El vocabulario entonces se ve como [“a”, “b”, “c”, “ ”, “d”, “ab”, “abc”], y el texto actualizado se ve como [“abc”, “ ”, “abc ", "d"].
- Finalizamos el proceso aquí ya que cada par de tokens adyacentes ahora solo ocurre una vez. Fusionar aún más tokens haría que el modelo resultante funcionara peor en otros textos. En la práctica, el límite del tamaño del vocabulario es el factor limitante.
Con nuestro nuevo conjunto de vocabulario, podemos mapear entre texto y tokens. Incluso el texto que no hemos visto antes, como "taxi", se puede convertir en token porque no descartamos los tokens de un solo carácter. También podemos devolver números de token simplemente viendo la posición del token dentro del vocabulario.
Una buena formación en tokenizadores requiere volúmenes extremadamente altos de datos y mucha informática, más de lo que la mayoría de las empresas pueden permitirse. Las empresas solucionan esto omitiendo la capacitación de su propio tokenizador. En su lugar, simplemente utilizan un tokenizador previamente entrenado (como el tokenizador GPT-4o vinculado anteriormente) para ahorrar tiempo y dinero con una pérdida mínima, si es que hay alguna, en el rendimiento del modelo.
Usando el tokenizador
Entonces, tenemos este tokenizador de subpalabras entrenado en un corpus masivo usando BPE. Ahora bien, ¿cómo lo usamos en un nuevo fragmento de texto?
Aplicamos las reglas de combinación que determinamos en el proceso de capacitación del tokenizador. Primero dividimos el texto de entrada en caracteres. Luego, fusionamos tokens en el mismo orden que en el entrenamiento.
Para ilustrar, usaremos un texto de entrada ligeramente diferente de "dc abc":
- Lo dividimos en caracteres [“d”, “c”, “ ”, “a”, “b”, “c”].
- La primera combinación que hicimos en el entrenamiento fue "ab", así que la hacemos aquí: ["d", "c", " ", "ab", "c"].
- La segunda combinación que hicimos fue "abc", así que hacemos eso: ["d", "c", " ", "abc"].
- Esas son las únicas reglas de fusión que tenemos, por lo que hemos terminado de tokenizar y podemos devolver los ID de los tokens.
Si tenemos un montón de ID de token y queremos convertirlos en texto, simplemente podemos buscar cada ID de token en la lista y devolver su texto asociado. Los LLM hacen esto para convertir las incrustaciones (vectores de números que capturan elsignificadode los tokens al observar los tokens circundantes) con los que trabajan en texto legible por humanos.
Aplicaciones de tokenización
La tokenización es siempre el primer paso en toda PNL. Convertir texto en formularios con los que los modelos ML (y las computadoras) puedan trabajar requiere tokenización.
Tokenización en LLM
La tokenización suele ser la primera y la última parte de cada convocatoria de LLM. El texto se convierte primero en tokens, luego los tokens se convierten en incrustaciones para capturar el significado de cada token y se pasan a las partes principales del modelo (los bloques transformadores). Una vez que se ejecutan los bloques transformadores, las incrustaciones se vuelven a convertir en tokens. Finalmente, el token recién devuelto se agrega a la entrada y se devuelve al modelo, repitiendo el proceso nuevamente. Los LLM utilizan la tokenización de subpalabras para equilibrar el rendimiento y la eficiencia.
Tokenización en motores de búsqueda
Los motores de búsqueda tokenizan las consultas de los usuarios para estandarizarlas y comprender mejor la intención del usuario. La tokenización en los motores de búsqueda puede implicar dividir el texto en palabras, eliminar palabras de relleno (como "el" o "y"), convertir las mayúsculas en minúsculas y tratar caracteres como guiones. La tokenización de subpalabras generalmente no es necesaria aquí, ya que el rendimiento y la eficiencia dependen menos del tamaño del vocabulario.
Tokenización en traducción automática
La tokenización de la traducción automática es interesante ya que los idiomas de entrada y salida son diferentes. Como resultado, habrá dos tokenizadores, uno para cada idioma. La tokenización de subpalabras suele funcionar mejor porque equilibra el equilibrio entre la eficiencia y el rendimiento del modelo. Pero algunos idiomas, como el chino, no tienen un componente lingüístico menor que una palabra. Allí, se requiere la tokenización de palabras.
Beneficios de la tokenización
La tokenización es imprescindible para cualquier modelo de PNL. Una buena tokenización permite que los modelos de aprendizaje automático funcionen de manera eficiente con texto y manejen bien palabras nuevas.
La tokenización permite a los modelos trabajar con texto
Internamente, los modelos ML solo funcionan con números. El algoritmo detrás de los modelos ML se basa completamente en la computación, que a su vez requiere números para calcularse. Por lo tanto, el texto debe convertirse en números antes de que los modelos de aprendizaje automático puedan funcionar con ellos. Después de la tokenización, se pueden ejecutar técnicas como la atención o la incrustación en los números.
La tokenización se generaliza a texto nuevo y raro
O más exactamente,una buenatokenización se generaliza a textos nuevos y raros. Con la tokenización de subpalabras y caracteres, los nuevos textos se pueden descomponer en secuencias de tokens existentes. Por lo tanto, pegar un artículo con palabras sin sentido en ChatGPT no provocará que se rompa (aunque puede que tampoco dé una respuesta muy coherente). Una buena generalización también permite que los modelos aprendan relaciones entre palabras raras, basándose en las relaciones en los subtokens.
Desafíos de la tokenización
La tokenización depende del corpus de entrenamiento y del algoritmo, por lo que los resultados pueden variar. Esto puede afectar la capacidad de razonamiento de los LLM y la duración de sus entradas y salidas.
La tokenización afecta la capacidad de razonamiento de los LLM
Un problema fácil que a menudo desconcierta a los LLM es contar las apariciones de la letra "r" en la palabra "fresa". El modelo diría incorrectamente que hay dos, aunque la respuesta en realidad es tres. Este error puede deberse en parte a la tokenización. El tokenizador de subpalabras dividió "fresa" en "st", "crudo" y "baya". Por lo tanto, es posible que el modelo no haya podido conectar la "r" de la ficha del medio con las dos "r" de la última ficha. El algoritmo de tokenización elegido afecta directamente cómo se tokenizan las palabras y cómo se relaciona cada token con los demás.
La tokenización afecta la longitud de entrada y salida de LLM
Los LLM se basan principalmente en la arquitectura transformadora, que se basa en el mecanismo de atención para contextualizar cada token. Sin embargo, a medida que aumenta la cantidad de fichas, el tiempo necesario para la atención aumenta cuadráticamente. Entonces, un texto con cuatro fichas tomará 16 unidades de tiempo pero un texto con ocho fichas tomará 64 unidades de tiempo. Esto limita a los LLM a límites de entrada y salida de unos pocos cientos de miles de tokens. Con tokens más pequeños, esto realmente puede limitar la cantidad de texto que puede introducir en el modelo, reduciendo la cantidad de tareas para las que puede usarlo.