Formas de consumir texto con los modelos de bosque de decisiones de Tensorflow

Esta es una página de documentación de Markdown. Para obtener más información, consulte Markdown Reference (go / documentation-reference) y la Guía de estilo de la documentación (go / documentation-style).

Fondo

Los algoritmos de aprendizaje del bosque de decisiones funcionan de manera diferente a los modelos basados ​​en el descenso de gradientes, como las redes neuronales o los predictores lineales. Estas diferencias se manifiestan en una variedad de decisiones de modelado, pero son especialmente pronunciadas cuando un conjunto de datos contiene características categóricas de longitud variable, como características de texto tokenizadas, que tienden a requerir ingeniería de características específicas de la arquitectura. Esta guía describe las compensaciones entre diferentes estrategias de ingeniería de características para características de texto en modelos de bosque de decisiones.

En las siguientes secciones, nos referiremos a un conjunto de datos con estas características y asumiremos que estamos prediciendo si un usuario va a comprar un producto específico:

Característica ID de usuario Compras previas Titulo del producto Descripción del producto
Datos de ejemplo 1234 ["TV", "Vacío"] "Router de wifi" "Este enrutador es ..."


En este ejemplo, "Compras previas" es una característica de texto escaso (o un conjunto de elementos categóricos). El "Título del producto" también lo es, pero no está tokenizado en este ejemplo. La "descripción del producto" es una característica del lenguaje natural, que tiene propiedades diferentes a las otras características, porque esperamos que el vocabulario sea extenso (o ilimitado), que el orden de las palabras sea importante y que tenga otras propiedades semánticas y léxicas inherentes al idioma. Las estrategias que describimos a continuación son apropiadas para todas estas características, pero tendrán diferentes compensaciones para cada una.

Referencia rápida

La mejor solución, si el costo de capacitación e inferencia no es una preocupación, es usar conjuntos categóricos y embeddings pre-entrenados para cada característica de texto, ya que tienen fortalezas y debilidades complementarias. Recomendamos esto a menos que se presente una de las limitaciones que se mencionan a continuación.

Velocidad de inferencia Velocidad de entrenamiento Capacidad para memorizar relaciones entre etiquetas <> token Generalización
Múltiples categóricos Más rápido (++) Más rápido (++) Limitado Limitado (+)
multi-caliente Rápido (+) Rápido (asumiendo un tamaño de vocabulario relativamente pequeño) (++) Bien Limitado (+)
Conjuntos categóricos Más rápido (+++) Más lento (+) Mejor Limitado (++)
incrustación Más lento (asumiendo operaciones de codificador no triviales, como multiplicaciones de matrices) (+ a +++) Más rápido (asumiendo el tamaño del vocabulario >> dimensión de inserción) (+++) Malo Bueno (++ a +++)

N-gramos

N-gramas (p. Ej., {"El", "gato", "es", "azul"} -> {"<iniciar> el", "el gato", "el gato es", "es azul", "azul < end> "}) puede ser beneficioso en muchos casos y capturar información léxica local. Son compatibles con todos los métodos a continuación, pero tienen el costo de un tamaño de vocabulario dramáticamente mayor, lo que puede hacerlos poco prácticos debido al costo de capacitación.

Estrategias desalentadas

Codificación One-Hot / Multi-Hot / Bolsa de palabras

La codificación one-hot es una estrategia clásica para densificar texto disperso. Aquí asumimos una extensión donde una característica de texto disperso está representada por un multi-hot (1s para todos los tokens contenidos) o una vectorización basada en conteo (el conteo de cada token en el vocabulario).

Por ejemplo, si el vocabulario es de 4 elementos y está indexado como ["TV", "Vacío", "Wifi", "Enrutador"], la función "Compras previas" sería un vector denso <1, 1, 0, 0 >. Si se tomaran en cuenta los recuentos y la función fuera [“TV”, “TV”, “Vacío”], sería <2, 1, 0, 0>.

Pros

  • Dado que las divisiones del bosque de decisiones se aprenden en características individuales, esto es menos costoso en el momento del entrenamiento que los conjuntos categóricos.
  • A diferencia del primero, no necesita ningún recorte o relleno, y los tokens tienen la misma semántica en los ejemplos (es decir, "TV" será constante en las divisiones independientemente de la posición).

Contras

  • Esta estrategia a menudo conduce a divisiones escasas y altamente desequilibradas, lo que puede hacer que los algoritmos de aprendizaje de DF sean más lentos para converger o deficientes. Esto es porque:
    • Se necesitan más divisiones para aprender la misma información
    • Los árboles muy dispersos se generalizan peor que los árboles equilibrados, lo que generalmente da como resultado un modelo menos preciso.
  • No tiene en cuenta la información posicional. Esto puede afectar el rendimiento de las funciones del lenguaje natural.
  • Aprender divisiones numéricas en datos categóricos es subóptimo; hay optimizaciones para encontrar divisiones categóricas que no se aprovechan aquí.
  • La complejidad computacional del entrenamiento se escala linealmente con el número de elementos de vocabulario (cada uno de los cuales se consumirá como una característica numérica). En la práctica, a menos que el conjunto de datos sea muy pequeño (en cuyo caso los vocabularios grandes pueden fomentar el sobreajuste), esto hace que los vocabularios de> 5k elementos sean muy lentos de entrenar.
  • El consumo de memoria de entrenamiento será de 1 byte (para one-hot) o 4 bytes (para recuentos) por elemento de vocabulario por ejemplo, ya que en el momento de la indexación, los datos se almacenarán como una versión densa de los datos dispersos. Esto puede volverse prohibitivamente grande para vocabularios y conjuntos de datos más grandes.

Varias características categóricas con una longitud fija

Dado que las características categóricas se pueden aprender de manera eficiente mediante algoritmos de bosque de decisiones, una forma natural de consumir tokens dispersos es rellenar / recortar de manera que haya un número fijo de tokens de entrada por ejemplo, y cada posición de token sea una característica separada e independiente. En el ejemplo anterior, si "Compras previas" tiene un máximo de 5 tokens, podemos crear características f1 ... f5 que representen los tokens 1-5, descartar los tokens> 5 y agregar los valores faltantes para los ejemplos en los que hay <5.

Pros

  • Esto es eficaz para entrenar.
  • Esto puede no afectar la calidad del modelo si hay una baja variación en la cantidad de tokens por ejemplo y los tokens son independientes.
  • Esto puede capturar semántica adicional (como la orden de compra en el ejemplo) de forma más natural que otros métodos.

Contras

  • Agrega semántica a las fichas acolchadas "faltantes" que servirán como ruido para el modelo. Esto será especialmente pronunciado si hay una gran variación en la cantidad de tokens por ejemplo, lo que puede suceder, por ejemplo, con la función "Descripción del producto".
  • Los árboles aprendidos serán muy sensibles al orden, es decir, si la característica es ["A", "B"], la predicción será diferente a la predicción para ["B", "A"], y si esta última nunca se vio en los datos, el modelo no podrá generalizar a partir del primero. En general, esto requerirá muchos más datos para aprender la invariancia de posición.
  • De forma predeterminada, cada token estará representado por una función con un vocabulario diferente. Incluso si obliga a la implementación a considerar el mismo conjunto de elementos de vocabulario por función, f1 = "TV" será un elemento de vocabulario diferente que f2 = "TV". Esto significa que el algoritmo será menos eficiente para aprender la relación entre el token "TV" y la etiqueta; tendrá que aprenderlo por separado para cada posición del token.

Mejores estrategias

Conjuntos categóricos

Conjuntos categóricas ( https://arxiv.org/pdf/2009.09991.pdf ) son TF-DFS representación de entidad predeterminado para el texto escasa. Un conjunto categórico es efectivamente una bolsa de palabras, ignorando duplicados y ordenando. Por ejemplo, la función "La televisión es la mejor" estaría representada por el conjunto categórico {"mejor", "es", "la", "TV}.

El divisor de conjuntos categóricos nativos, de acuerdo con los puntos de referencia en una variedad de tareas (ver artículo), generalmente supera a las características categóricas de longitud fija y múltiples activos. En teoría, tanto las divisiones de conjuntos categóricos como las divisiones booleanas en características codificadas en un solo uso pueden obtener la misma información. Sin embargo, tome el siguiente ejemplo, donde el árbol está tratando de aprender la siguiente función:

if description contains “high” AND “speed” AND “gaming”:
  return True

En este caso, el divisor de conjuntos categóricos nativo aprenderá 1 división, donde {“alto”, “velocidad”, “juego”} => Verdadero.

Una representación en caliente requeriría 3 divisiones, en "alta", "división" y "juego", y necesitaría encontrar nodos hoja razonables para todas las posibles disyunciones de esas categorías (es decir, "alta" y no "velocidad"). En la práctica, la codificación one-hot conduce a árboles altamente desequilibrados que no se pueden optimizar de manera eficiente mediante los algoritmos de aprendizaje de bosque de decisiones con mejor rendimiento.

Pros

  • Mejor para aprender información de bolsa de palabras para los bosques de decisiones.
  • Altamente eficiente para servir (se puede servir con QuickScorer, que puede servir árboles grandes en un tiempo de hasta sub-microsegundos por ejemplo). La complejidad del tiempo de servicio es lineal en el número de elementos en el conjunto categórico de cada ejemplo, que en la práctica es mucho menor que el tamaño del vocabulario.
  • Optimiza un solo vocabulario por característica, por lo que se comparte la semántica.

Contras

  • El costo de entrenar un conjunto categórico dividido escala con num_examples * tamaño de vocabulario, tan similar al algoritmo one-hot, el tamaño de vocabulario entrenable puede ser bastante pequeño (N mil) en entornos prácticos. Tenga en cuenta que esta velocidad de entrenamiento se puede mejorar ajustando la fracción de muestreo del algoritmo codicioso, pero puede lograr una calidad subóptima.

Embeddings

Las redes neuronales han mostrado un rendimiento de vanguardia en una variedad de tareas de PNL, y las incrustaciones pre-entrenadas consumidas como características numéricas empíricamente también funcionan bien con algoritmos de bosque de decisiones, a pesar de que las características se utilizan de manera muy diferente internamente. Tenga en cuenta que aquí nos referimos a "incrustación" como cualquier codificación de red neuronal, por ejemplo, la salida de capas de transformador / convolucional / recurrente.

El uso de incrustaciones previamente entrenadas funciona bien con redes neuronales, en parte porque la inicialización de un espacio vectorial donde tokens u oraciones similares están cerca en el espacio euclidiano ha demostrado que se transfiere bien a través de las tareas de PNL, y los gradientes de esa inicialización son más pequeños y más rápidos para converger. que una inicialización completamente aleatoria. Sin embargo, los árboles de decisión utilizan como inclusiones características numéricas individuales, y aprenden las particiones de los ejes alineados de esas características individuales 1 . Esto significa que es casi imposible utilizar la misma información semántica: un producto escalar o una multiplicación de matrices, por ejemplo, no se pueden representar con un conjunto de divisiones alineadas con el eje. Además, a diferencia de las redes neuronales, que pueden actualizar las incorporaciones a través del descenso de gradiente durante el entrenamiento, los algoritmos de aprendizaje del bosque de decisiones predeterminados no son diferenciables, lo que significa que las incorporaciones deben permanecer congeladas. Tenga en cuenta que hay trabajo ( https://arxiv.org/pdf/2007.14761.pdf, por ejemplo) en los bosques de toma diferenciables. Sin embargo, quizás en parte porque en la práctica no todos los bits de información en una incrustación se utilizan realmente, incluso por redes neuronales, esta estrategia aún funciona bien con bosques de decisiones.

Pros:

  • Puede trabajar con tamaños de vocabulario mucho más grandes, dado que una incrustación es efectivamente una densificación en una pequeña cantidad de dimensiones de incrustación, es poco probable que la cantidad de características de entrada al bosque de decisiones aumente drásticamente.
  • Puede generalizar mejor, en teoría, ya que incrustaciones similares pueden compartir conjuntos de particiones. Tenga en cuenta que una gran advertencia aquí es que, como se mencionó anteriormente, las transformaciones o rotaciones de base en el espacio vectorial pueden tener dos incrustaciones similares y ser completamente diferentes en el espacio particionado alineado con el eje para los bosques de decisión.
  • Puede encapsular de forma natural la recurrencia / orden de las palabras, por ejemplo, si el codificador contiene convoluciones, atención o un RNN.
  • Puede aprovechar la información de otro conjunto de datos (capacitación previa para el aprendizaje por transferencia).

Contras

  • No es bueno para memorizar información: las divisiones pueden causar clasificaciones borrosas o una alta sensibilidad a la redacción (es decir, "el enrutador es excelente" frente a "un excelente enrutador") producirá diferentes incrustaciones, que pueden estar cerca en el espacio euclidiano, pero no necesariamente tienen similares características numéricas.
  • Más lento de servir, porque el pase directo del codificador completo debe realizarse en el momento de la inferencia. La latencia real depende en gran medida de la arquitectura que produjo las incrustaciones; es decir, un codificador de transformador normalmente será mucho más lento que una búsqueda de tabla de incrustación sin procesar con agrupación de medias.

Notas


  1. Habilitar divisiones oblicuas puede permitir el aprendizaje de información no alineada con el eje, pero seguirá siendo dimensión por dimensión.