Este repositorio contiene recetas de extremo a extremo para pretrarse y finetune el modelo de representación del lenguaje Bert (representaciones de codificadores bidireccionales de Transformers) utilizando Azure Machine Learning Service.
Actualización el 7/7/2020 :? Una implementación más reciente para el pre-pretenero de Bert disponible en https://github.com/microsoft/onnxruntime-training-examples/tree/master/nvidia-bert es significativamente más rápido que la implementación en este repositorio. Esa implementación utiliza el tiempo de ejecución de ONNX para acelerar la capacitación y se puede utilizar en entornos con GPU, incluido el servicio de aprendizaje automático de Azure. Los detalles sobre el uso de tiempo de ejecución de ONNX para capacitación y aceleración de la capacitación de modelos de transformadores como Bert y GPT-2 están disponibles en el blog de ONNX Runtime Training Technical Deep Dive.
Bert es un modelo de representación del lenguaje que se distingue por su capacidad para capturar relaciones textuales profundas y sutiles en un corpus. En el artículo original, los autores demuestran que el modelo Bert podría adaptarse fácilmente para construir modelos de última generación para una serie de tareas de PNL, incluida la clasificación de texto, el reconocimiento de entidades nombrado y la respuesta a las preguntas. En este repositorio, proporcionamos cuadernos que permiten a un desarrollador que prevén un modelo Bert desde cero en un corpus, así como para ajustar un modelo Bert existente para resolver una tarea especializada. Una breve introducción a Bert está disponible en este repositorio para un comienzo rápido en Bert.
Pretrarse un modelo de representación del lenguaje Bert al nivel de precisión deseado es bastante desafiante; Como resultado, la mayoría de los desarrolladores comienzan desde un modelo Bert que fue priorizado en un corpus estándar (como Wikipedia), en lugar de entrenarlo desde cero. Esta estrategia funciona bien si el modelo final se está entrenando en un corpus similar al corpus utilizado en el paso previo al tren; Sin embargo, si el problema involucra un corpus especializado que es bastante diferente del corpus estándar, los resultados no serán óptimos. Además, para avanzar en la representación del lenguaje más allá de la precisión de Bert, los usuarios deberán cambiar la arquitectura del modelo, los datos de capacitación, la función de costos, las tareas y las rutinas de optimización. Todos estos cambios deben explorarse en grandes tamaños de datos de parámetros y entrenamiento. En el caso de Bert-Large, esto podría ser bastante sustancial, ya que tiene 340 millones de parámetros y entrenado en un corpus de documentos muy grande. Para apoyar esto con las GPU, los ingenieros de aprendizaje automático necesitarán soporte de capacitación distribuida para entrenar estos grandes modelos. Sin embargo, debido a la complejidad y fragilidad de configurar estos entornos distribuidos, incluso los ajustes expertos pueden terminar con resultados inferiores de los modelos capacitados.
Para abordar estos problemas, este repositorio está publicando un flujo de trabajo para los modelos Bert-Large previos a la altura. Los desarrolladores ahora pueden construir sus propios modelos de representación lingüística como BERT utilizando sus datos específicos de dominio en GPU, ya sea con su propio hardware o usando el servicio de aprendizaje automático Azure. La receta del pretrén en este repositorio incluye el conjunto de datos y los scripts de preprocesamiento para que cualquiera pueda experimentar con la construcción de sus propios modelos de representación de lenguaje de propósito general más allá de Bert. En general, esta es una receta estable y predecible que converge a un buen óptimo para que los investigadores prueben exploraciones por su cuenta.
La receta previa a la preparación en este repositorio se basa en el paquete Bert V0.6.2 de Pytorch Pretraled de la cara abrazada. La implementación en esta receta previa a la altura incluye técnicas de optimización, como gradient accumulation (los gradientes se acumulan para mini lotes más pequeños antes de actualizar los pesos del modelo) y mixed precision training . El cuaderno y los módulos de Python para el pretratamiento están disponibles en el directorio de Pretrin.
La preparación de datos es uno de los pasos importantes en cualquier proyecto de aprendizaje automático. Para Bert Pretratining, se necesita un corpus de nivel de documento. La calidad de los datos utilizados para el prostramiento afecta directamente la calidad de los modelos capacitados. Para facilitar el preprocesamiento de datos y para la repetibilidad de los resultados, el código de preprocesamiento de datos se incluye en el repositorio. Se puede utilizar para preprocesar el Corpus de Wikipedia u otros conjuntos de datos para el tratamiento previo. Consulte la información adicional en la preparación de datos para el preenaje para obtener detalles sobre eso.
La receta de Finetuning en este repositorio muestra cómo Finetune el modelo de representación del lenguaje Bert utilizando el servicio de aprendizaje automático Azure. Los cuadernos y los módulos de Python para Finetuning están disponibles en Finetune Directory. Finetunimos y evaluamos nuestros puntos de control previos al estado previo contra los siguientes:
El punto de referencia de evaluación general de comprensión del lenguaje (pegamento) es una colección de nueve tareas de comprensión de lenguaje de oraciones o oraciones para evaluar y analizar los sistemas de comprensión del lenguaje natural. El cuaderno bert_eval_glue.ipynb Jupyter permite al usuario ejecutar uno de los puntos de control previos al detenido contra estas tareas en Azure ML.
Azure Machine Learning Service proporciona un entorno basado en la nube para preparar datos, capacitar, probar, implementar, administrar y rastrear modelos de aprendizaje automático. Este servicio admite completamente tecnologías de código abierto como Pytorch, TensorFlow y Scikit-Learn y puede usarse para cualquier tipo de aprendizaje automático, desde ML clásico hasta aprendizaje profundo, aprendizaje supervisado y sin supervisión.
Los cuadernos Jupyter se pueden usar para usar Azureml Python SDK y enviar trabajos de Pretrin y Finetune. Este repositorio contiene los siguientes cuadernos para diferentes actividades.
| Actividad | Computadora portátil |
|---|---|
| Predicha | Bert_pretrain.ipynb |
| Glue Finetune/Evaluar | Bert_eval_glue.ipynb |
| Actividad | Computadora portátil |
|---|---|
| Glue Finetune/Evaluar | Tensorflow-bert-azureml.ipynb |
Este proyecto ha adoptado el Código de Conducta Open Open Microsoft. Para obtener más información, consulte el Código de Conducta Preguntas frecuentes o comuníquese con [email protected] con cualquier pregunta o comentario adicional.