LLM Large Language Models: Desafios

La tokenización es un proceso simple que toma datos sin procesar y los convierte en una cadena de datos útil. Si bien la tokenización es bien conocida por su uso en ciberseguridad y en la creación de NFT, la tokenización también es una parte importante del proceso NLP. La tokenización se utiliza en el procesamiento del lenguaje natural para dividir párrafos y oraciones en unidades más pequeñas a las que se les puede asignar un significado más fácilmente.   

El primer paso del proceso de PNL es recopilar los datos (una oración) y dividirlos en partes comprensibles (palabras).

Aquí un ejemplo de una cadena de datos:  

“¿Qué restaurantes hay cerca? “

Para que una máquina entienda esta oración, se realiza tokenización en la cadena para dividirla en partes individuales. Con la tokenización, obtendríamos algo como esto:  

'qué' 'restaurantes' 'son' 'cercanos'  

Esto puede parecer simple, pero dividir una oración en sus partes permite que una máquina entienda las partes tanto como el todo. Esto ayudará al programa a comprender cada una de las palabras por sí mismas, así como también cómo funcionan en el texto más grande. Esto es especialmente importante para grandes cantidades de texto, ya que permite que la máquina cuente las frecuencias de ciertas palabras, así como dónde aparecen con frecuencia. Esto es importante para los pasos posteriores en el procesamiento del lenguaje natural.  

La tokenización consiste en dividir los datos de entrada en una secuencia de partes significativas, por ejemplo, datos de imagen como una palabra, un parche de imagen, una oración de documento.
  • La tokenización consiste en cortar los datos de entrada en partes ( símbolos ) que se pueden mapear (incrustar) en un espacio vectorial.
  • Por ejemplo, el texto de entrada se divide en palabras frecuentes, por ejemplo, tokenización de transformadores .
  • A veces agregamos tokens especiales a la secuencia, por ejemplo, token de clase ([CLS]) que se usa para la clasificación incrustada en el transformador BERT .
  • Los tokens se asignan a vectores ( incrustados, representados ), que se pasan a redes neuronales neuronales.
  • La posición de la secuencia de tokens en sí misma a menudo se vectoriza y se agrega a las incrustaciones de palabras (codificación posicional) . 
Tokenización en PNL
  • El texto de datos de entrada se divide mediante un diccionario en fragmentos de caracteres llamados tokens
  • El vocabulario contiene alrededor de 100k secuencias más comunes del texto de entrenamiento.
  • Los tokens a menudo corresponden a palabras de 4 caracteres con espacios en blanco o caracteres especiales.
  • los algoritmos de tokenización comunes son BPE , WordPiece , SentencePiece
  • Los tokens de texto se pueden volver a convertir en texto, pero a veces se pierde información.
  • La tokenización en NLP es una forma de codificación de diccionario de compresión.
Los tokenizadores más comunes en PNL
Una lista de tokenizadores de uso común ordenados por su fecha de introducción.

FastText Tokenizer (Tokenizador de texto rápido)

  • Los modelos más antiguos como Word2vec o FastText usaban tokenizadores simples que, después de un preprocesamiento, simplemente dividían el texto en caracteres de espacio en blanco. Estos fragmentos suelen ser palabras de un lenguaje natural.
  • Luego, si el fragmento de secuencia de caracteres está presente en un diccionario de fragmentos más comunes, y devolverá un índice en el diccionario.
  • Si no se encuentra, la mayoría de los tokenizadores anteriores a FastText devolvían un token especial llamado token desconocido. FastText resolvió este problema mediante una división adicional en el nivel de palabra en "subpalabras" de tamaño fijo, pero para obtener más detalles sobre FastText, lea esta publicación .
  • BPE nunca devuelve un token desconocido y, en su lugar, compone las palabras fuera del vocabulario desde partes hasta caracteres individuales.

BPE Tokenizer (Tokenizador BPE)

Algoritmo de codificación de pares de bytes (BPE):
  • BPE pre-tokeniza el texto dividiéndolo en espacios
  • comience con solo caracteres como token
  • combinar el par de tokens de mayor frecuencia del texto
  • deténgase si se alcanza el tamaño máximo de vocabulario; de lo contrario, vuelva al paso anterior

WordPiece vs BPE Tokenizer (WordPiece frente a tokenizador BPE)

  • WordPiece fusiona el par de tokens con el más altocount(ab) / count(a)count(b)
  • Utilizado para BERT , DistilBERT, Electra

Unigram Tokenizer (Tokenizador de Unigram)

  • La construcción de Unigram en lugar de fusionarse y agregarse a un vocabulario como BPE , elimina tokens
  • Una pérdida de vocabulario se construye como una pérdida de maximización de expectativas que suma todas las tokenizaciones de todas las subsecuencias del corpus.
  • La probabilidad de cada ficha se aproxima como independiente de otras fichas.
  • Comienza con un vocabulario muy extenso y elimina los símbolos numéricos fijos de modo que la pérdida de vocabulario aumente mínimamente
  • Deténgase si se alcanza el tamaño del vocabulario; de lo contrario, vuelva al paso anterior

SentencePiece vs WordPiece Tokenizer (Tokenizador de SentencePiece frente a WordPiece)

  • Los idiomas japonés, coreano o chino no separan las palabras con un espacio
  • SentencePiece elimina la tokenización previa (dividir en espacios)
  • en su lugar, tokeniza el flujo de texto generalmente con Unigram o, alternativamente, con BPE
  • T5, ALBERT, XLNet, MarianMT utilizan SentencePiece con Unigram

Byte-Level Inputs

Las entradas de nivel de byte son una alternativa a la subpalabra tokenización es el uso de entradas de nivel de byte. nivel de byte las entradas pueden usarse en combinación con tokenizadores de subpalabras o usarse para definir un número limitado vocabulario que se puede utilizar para codificar todas las secuencias posibles. Por ejemplo, entrenar un modelo mT5 sin subpalabras usando UTF-8 bytes en lugar de tokens de subpalabras como entradas, lo que muestra un rendimiento prometedor en datos multilingües.
Si bien esto permite LLM sin subpalabras, UTF-8 codifica idiomas latinos con menos bytes que, por ejemplo, chino, japonés o coreano1 . Tay et al.  propone el Charformer, un modelo libre de tokenización que aprende una tokenización de subpalabras suaves en el espacio latente (Tokenización de subpalabras basada en gradiente) entradas dadas a nivel de byte. Charformer se desempeña de manera comparable a los modelos basados ​​en subpalabras mientras incurre en menos sobrecarga computacional que otro byte o modelos de subpalabras. Entrena un modelo de lenguaje de 0.8B a pequeña escala basado en entradas de nivel de byte sin procesar y muestra que funciona de manera comparable. En menor escala, muestran que su codificador libre de tokenización y vocabulario Canine supera a un codificador comparable basado en tokenización modelo. Yu et al.  abordar el cálculo costo en el que incurre la tokenización a nivel de byte al segmentar las secuencias de entrada en parches locales, lo que puede procesarse en paralelo. Del mismo modo, Horton et al.  proponen operar directamente en bytes de archivos.