Formas de consumir texto con modelos de Tensorflow Decision Forest

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

Fondo

Los algoritmos de aprendizaje de bosques de decisión funcionan de manera diferente a los modelos basados ​​en 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 bosques de decisión.

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

Característica ID de usuario Compras anteriores Titulo del producto Descripción del Producto
Datos de ejemplo 1234 [“TV”, “Aspiradora”] "Router de wifi" "Este enrutador es..."


En este ejemplo, "Compras anteriores" es una función 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 amplio (o ilimitado), que el orden de las palabras importe y que tenga otras propiedades semánticas y léxicas inherentes al lenguaje natural. 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 utilizar conjuntos categóricos e incrustaciones previamente entrenadas para cada característica del texto, ya que tienen fortalezas y debilidades complementarias. Recomendamos esto a menos que esté presente una de las restricciones mencionadas a continuación.

Velocidad de inferencia Velocidad de entrenamiento Capacidad para memorizar relaciones de token <> etiqueta Generalización
Múltiples categorías 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 (++)
incrustar Más lento (asumiendo operaciones de codificador no triviales, como multiplicaciones de matrices) (+ a +++) Más rápido (asumiendo tamaño de vocabulario >> dimensión de incrustación) (+++) Malo Bueno (++ a +++)

N-gramos

N-gramas (por ejemplo, {"el", "gato", "es", "azul"} -> {"<inicio> 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 siguientes, pero tienen el costo de un vocabulario mucho 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 se representa mediante una vectorización multiactiva (1 para todos los tokens contenidos) o basada en recuento (el recuento de cada token en el vocabulario).

Por ejemplo, si el vocabulario consta de 4 elementos y está indexado como [“TV”, “Vacuum”, “Wifi”, “Router”], la función “Compras anteriores” sería un vector denso <1, 1, 0, 0 >. Si se tuvieran en cuenta los recuentos y la característica fuera [“TV”, “TV”, “Vacuum”], sería <2, 1, 0, 0>.

Ventajas

  • Dado que las divisiones de bosques de decisión 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 ni relleno, y los tokens tienen la misma semántica en todos los ejemplos (es decir, "TV" será constante en todas las divisiones, independientemente de la posición).

Contras

  • Esta estrategia a menudo conduce a divisiones escasas y muy 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 generalizan peor que los árboles equilibrados, lo que normalmente 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 no es óptimo; Hay optimizaciones para encontrar divisiones categóricas que no se aprovechan aquí.
  • La complejidad computacional del entrenamiento aumenta linealmente con la cantidad 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 el entrenamiento de vocabularios de > 5k elementos sea muy lento.
  • 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 llegar a ser prohibitivamente grande para vocabularios y conjuntos de datos más grandes.

Múltiples funciones categóricas con una longitud fija

Dado que las características categóricas se pueden aprender de manera eficiente mediante algoritmos de bosque de decisión, una forma natural de consumir tokens dispersos es rellenar/recortar de manera que haya una cantidad fija 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 anteriores" tiene como máximo 5 tokens, podemos crear funciones f1...f5 que representen los tokens 1 a 5, descartar cualquier token > 5 y agregar valores faltantes para los ejemplos donde hay < 5.

Ventajas

  • Esto es eficiente para entrenar.
  • Es posible que esto no afecte la calidad del modelo si hay una variación baja 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 los tokens acolchados "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 ocurrir, 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 característica con un vocabulario diferente. Incluso si obliga a la implementación a considerar el mismo conjunto de elementos de vocabulario por característica, f1=”TV” será un elemento de vocabulario diferente que f2=”TV”. Esto significa que el algoritmo será menos eficiente a la hora de aprender la relación entre el token "TV" y la etiqueta: tendrá que aprenderla por separado para cada posición del token.

Mejores estrategias

Conjuntos categóricos

Los conjuntos categóricos ( https://arxiv.org/pdf/2009.09991.pdf ) son la representación de funciones predeterminada de TF-DF para texto disperso. Un conjunto categórico es efectivamente una bolsa de palabras, ignorando duplicados y ordenando. Por ejemplo, la característica “El televisor es el mejor” estaría representada por el conjunto categórico {“mejor”, “es”, “el”, “TV}.

El divisor de conjuntos categóricos nativo, 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 funciones. En teoría, tanto las divisiones de conjuntos categóricos como las divisiones booleanas en funciones codificadas en caliente pueden aprender la misma información. Sin embargo, tomemos el siguiente ejemplo, donde el árbol intenta 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 {“alta”, “velocidad”, “juegos”} => Verdadero.

Una representación única requeriría 3 divisiones, en “alta”, “división” y “juego”, y necesitaría encontrar nodos de 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 pueden optimizarse de manera eficiente mediante los algoritmos de aprendizaje de bosques de decisiones de mejor rendimiento.

Ventajas

  • Lo mejor para aprender información breve sobre bosques de decisión.
  • Servicio altamente eficiente (se puede servir con QuickScorer, que puede servir árboles grandes en un tiempo de hasta submicrosegundos por ejemplo). La complejidad del tiempo de entrega es lineal en la cantidad 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 único vocabulario por característica, por lo que se comparte la semántica.

Contras

  • El costo de entrenar un conjunto categórico se divide en escalas con num_examples * tamaño de vocabulario, por lo que, similar al algoritmo one-hot, el tamaño del 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.

Incrustaciones

Las redes neuronales han mostrado un rendimiento de vanguardia en una variedad de tareas de PNL, y las incorporaciones previamente entrenadas consumidas como características numéricas empíricamente también funcionan bien con algoritmos de bosque de decisión, a pesar de que las características se usan 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 transformadoras/convolucionales/recurrentes.

El uso de incrustaciones previamente entrenadas funciona bien con redes neuronales en parte porque se ha demostrado que la inicialización de un espacio vectorial donde tokens u oraciones similares están cerca en el espacio euclidiano se transfiere bien entre 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 incrustaciones como características numéricas individuales y aprenden particiones alineadas con los ejes 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 los ejes. Además, a diferencia de las redes neuronales, que pueden actualizar las incorporaciones mediante el descenso de gradiente durante el entrenamiento, los algoritmos de aprendizaje del bosque de decisión predeterminados no son diferenciables, lo que significa que las incorporaciones deben permanecer congeladas. Tenga en cuenta que hay trabajos ( https://arxiv.org/pdf/2007.14761.pdf, por ejemplo) sobre bosques de decisión diferenciables. Sin embargo, tal vez en parte porque en la práctica no todos los bits de información de una incrustación se utilizan realmente, ni siquiera por las redes neuronales, esta estrategia todavía funciona bien con los bosques de decisión.

Ventajas:

  • Puede manejar vocabularios de mayor tamaño: 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 decisión aumente dramáticamente.
  • En teoría, se puede generalizar mejor, 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 de base o rotaciones 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 naturalmente la recurrencia/orden de palabras, por ejemplo, si el codificador contiene convoluciones, atención o un RNN.
  • Puede aprovechar información de otro conjunto de datos (formación previa para el aprendizaje por transferencia).

Contras

  • No es bueno para memorizar información: las divisiones pueden causar clasificaciones confusas o una alta sensibilidad a las frases (es decir, “el enrutador es excelente” frente a “un enrutador excelente”) producirán incrustaciones diferentes, que pueden estar cercanas en el espacio euclidiano pero no necesariamente tener características similares. características numéricas.
  • Es el más lento de servir, porque el paso directo completo del codificador 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 formato con agrupación de medias.

Notas


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