Basado en el transformador, ¿cómo mejorar los resultados de generación de texto?

Aug 19 2020

Si no entreno previamente el modelo de generación de texto como BART, ¿cómo mejorar el resultado basado en un transformador como tensor2tensor?

¿Cuáles son las ideas de mejora para el transformador en la tarea de generación de texto?

Respuestas

1 noe Aug 19 2020 at 14:41

Si tiene muchos datos disponibles para entrenar, debe aplicar las técnicas utilizadas en modelos de transformadores grandes, como GPT-2 : modelos muy profundos (48 capas para los parámetros 1.5B), inicialización modificada, normalización previa y tokenización reversible. . También puede aplicar los patrones de atención escasa con bandas locales de GPT-3 .

Si tiene datos de entrenamiento muy pequeños, puede aplicar las técnicas agresivas "no escritas" descritas en este tweet , a saber, aumento de datos, abandono de incrustación discreta, abandono normal y disminución de peso, y mucho tiempo de entrenamiento del paciente.

Actualización: Siento que el hilo del tweet al que me referí es importante, así que aquí están los tweets más relevantes:

  • ¿Cómo puede entrenar transformadores con éxito en conjuntos de datos pequeños como PTB y WikiText-2? ¿Los LSTM son mejores en conjuntos de datos pequeños? Realicé 339 experimentos por valor de 568 horas de GPU y obtuve algunas respuestas. No tengo tiempo para escribir una publicación en el blog, así que aquí un hilo de Twitter.

  • Para dar un poco de información: todo esto se debió a mi frustración pasada al replicar los resultados de Transformer-XL en PTB y obtener resultados muy deficientes en WikiText-2 (WT2). En WT2, mi mejor modelo después de más de 200 experimentos fue de 90 personas, lo que está lejos de las líneas de base estándar de LSTM (65,8 personas).

  • ...

  • La idea clave es la siguiente: en el régimen de conjuntos de datos pequeños, se trata de aumentar el conjunto de datos. El análogo en la visión por computadora es que obtiene resultados mucho mejores, particularmente en conjuntos de datos pequeños, si realiza ciertos aumentos de conjuntos de datos. Esto también regulariza el modelo.

  • La ganancia de rendimiento más dramática proviene de la deserción de incrustaciones discretas: usted incrusta como de costumbre, pero ahora con una probabilidad p pone a cero todo el vector de palabras. Esto es similar al modelado de lenguaje enmascarado, pero el objetivo no es predecir la máscara, solo LM regular con contexto incierto.

  • El segundo factor más importante es la caída de entrada regular: se toman las incrustaciones y los elementos de caída con probabilidad p. Esto también tiene un efecto de aumento de datos muy similar a eliminar píxeles aleatorios de las imágenes. ¿Cuál es una buena manera de pensar en esto? 1/2

  • ¿Recuerdas que podemos hacer Rey-hombre+mujer=Reina? Ahora imagine que la caída de entrada elimina el componente "hombre" de "Rey". Esto obliga al modelo a distribuir información específica (género en este caso) en múltiples dimensiones para mejorar la generalización y hacerlo más robusto. 2/2

  • De lo contrario, es un juego de mayor regularización (más deserción + caída de peso) y de paciencia. Puedo entrenar a un buen modelo sin estos trucos en 15 minutos y obtener 97 personas. Si aplico todos estos abandonos, el modelo se ajusta después de 7 horas de entrenamiento a 63,4 personas (mejor que LSTM).

  • También puede aplicar estas recetas de aumento de datos a grandes conjuntos de datos, pero a nadie le gustaría entrenar durante meses en WT-103 por un par de puntos de personas. En mi opinión, las técnicas que requieren tanto cálculo adicional son más dañinas para la comunidad que útiles. 1/2

  • Aquí el código cambia al repositorio público de Transformer-XL en el que se basan mis resultados:https://github.com/TimDettmers/transformer-xl/tree/wikitext2

  • Con mis cambios en el repositorio público de Transformer-XL, puede ejecutar este script para llegar a 63,4 personas en WT2:https://github.com/TimDettmers/transformer-xl/blob/wikitext2/pytorch/replicate_wt2.sh