Preparándose para lo inesperado

Algunos de los problemas que abordamos con el aprendizaje automático involucran características categóricas que representan objetos del mundo real, como palabras, elementos y categorías. Entonces, ¿qué sucede cuando en el momento de la inferencia obtenemos nuevos valores de objetos que nunca antes se habían visto? ¿Cómo podemos prepararnos con anticipación para que aún podamos dar sentido a la entrada?

Los valores no vistos, también llamados valores OOV (fuera de vocabulario), deben manejarse correctamente. Diferentes algoritmos tienen diferentes métodos para tratar con valores OOV. Las diferentes suposiciones sobre las características categóricas también deben tratarse de manera diferente.

En este post me centraré en el caso del aprendizaje profundo aplicado a datos dinámicos, donde aparecen nuevos valores todo el tiempo. Usaré el sistema de recomendación de Taboola como ejemplo. Algunas de las entradas que obtiene el modelo en el momento de la inferencia contienen valores invisibles; esto es común en los sistemas de recomendación. Ejemplos incluyen:

  • Identificación del artículo: cada artículo recomendable tiene un identificador único. Todos los días, miles de elementos nuevos ingresan al sistema.
  • Identificación del anunciante: el contenido patrocinado es creado por los anunciantes. El número de nuevos anunciantes diarios es mucho menor en comparación con el número de artículos nuevos. No obstante, es importante manejarlos correctamente, especialmente porque queremos apoyar a los nuevos anunciantes.

Entonces, ¿cuál es el desafío con los valores OOV?

Un valor OOV está asociado con valores no vistos por el modelo en el momento del entrenamiento. Por lo tanto, si obtenemos un valor OOV en el momento de la inferencia, el modelo no sabrá qué hacer con él.

Una solución simple es reemplazar todos los valores raros con un token OOV especial antes del entrenamiento. Dado que todos los valores OOV son iguales desde el punto de vista del modelo, los reemplazaremos con el token OOV en el momento de la inferencia. Esta solución tiene dos resultados positivos:

  1. El modelo estará expuesto al token OOV durante el entrenamiento. En el aprendizaje profundo, generalmente incorporamos características categóricas. Después del entrenamiento, el modelo aprenderá una incrustación significativa para todos los valores OOV.
  2. Se mitigará el riesgo de sobreajuste a los valores raros. Estos valores aparecen en un pequeño número de ejemplos. Si aprendemos incorporaciones para estos valores, el modelo podría aprender a usarlos para explicar las particularidades o el ruido aleatorio que se encuentra en estos ejemplos específicos.
    Otro desastre que puede resultar del aprendizaje de estas incrustaciones es que no se les propaguen suficientes actualizaciones de gradiente. Como consecuencia, la inicialización aleatoria dominará las incrustaciones de resultados sobre la señal aprendida a través del entrenamiento.

Problema resuelto… ¿o no?

El modelo utiliza la función de identificación de artículo para memorizar información diferente por artículo, de manera similar a la pura filtración colaborativa acercarse. Los elementos raros que se inyectan con el token OOV no pueden beneficiarse de él, por lo que el modelo funciona peor con ellos.

Lo interesante es que incluso si no usamos la identificación del artículo durante el entrenamiento, ¡el modelo aún funciona peor en artículos raros! Esto se debe a que provienen de una distribución diferente a la de la población general. Tienen características específicas: tal vez tuvieron un desempeño deficiente en línea, lo que provocó que el sistema de recomendación de Taboola los recomendara menos y, a su vez, se volvieron raros en el conjunto de datos. Entonces, ¿por qué importa esta diferencia de distribución?

Si aprendemos la incrustación OOV usando esta distribución especial, no se generalizará a la población general. Piénselo de esta manera: cada elemento fue un elemento nuevo en algún momento. En ese momento, se le inyectó el token OOV. Por lo tanto, la incrustación OOV debería funcionar bien para todos los elementos posibles.

Para aprender la incorporación de OOV utilizando la población general, podemos inyectar el token OOV en un conjunto aleatorio de ejemplos del conjunto de datos antes de comenzar el proceso de capacitación. Pero, ¿cuántos ejemplos serán suficientes?

Cuanto más muestreemos, mejor será la incrustación OOV. Pero al mismo tiempo, el modelo estará expuesto a una menor cantidad de valores que no sean OOV, por lo que el rendimiento se degradará.

¿Cómo podemos usar muchos ejemplos para entrenar la incrustación OOV y, al mismo tiempo, usar los mismos ejemplos para entrenar las incrustaciones que no son OOV? En lugar de inyectar aleatoriamente el token OOV antes de comenzar a entrenar, elegimos el siguiente enfoque: en cada época, el modelo entrena usando todos los valores disponibles (el token OOV no se inyecta). Al final de la época, probamos un conjunto aleatorio de ejemplos, inyectamos el token OOV y entrenamos el modelo una vez más. ¡Así disfrutamos de ambos mundos!

Como se hizo en el enfoque anterior, también inyectamos el token OOV en valores raros, para evitar el sobreajuste.

Para evaluar el nuevo enfoque, inyectamos el token OOV en todos los ejemplos y evaluamos nuestra métrica fuera de línea (MSE). Mejoró en un 15 % en comparación con la inyección aleatoria del token OOV antes de que el modelo comience a entrenar.

Nuestro modelo se había utilizado en producción durante mucho tiempo antes de que pensáramos en el nuevo enfoque. Podría haber sido fácil pasar por alto esta ganancia de rendimiento potencial, ya que el modelo funcionó bien en general. ¡Simplemente enfatiza el hecho de que siempre hay que buscar lo inesperado!


Publicado originalmente por mí en
ingeniería.taboola.com.

Fuente del artículo

Deja un comentario