Este repositório contém receitas de ponta a ponta para pré-travar e finalizar o modelo de representação de idiomas BERT (Bidirecional Coder Representations From Transformers) usando o serviço de aprendizado de máquina do Azure.
Atualização em 7/7/2020 :? Uma implementação mais recente para a pré-treinamento de Bert disponível em https://github.com/microsoft/onnxruntime-trening-examples/tree/master/nvidia-bert é significativamente mais rápida que a implementação neste repo. Essa implementação usa o tempo de execução do ONNX para acelerar o treinamento e pode ser usado em ambientes com GPU, incluindo o Azure Machine Learning Service. Detalhes sobre o uso do OnNX Runtime para treinamento e aceleração de treinamento de modelos de transformadores como BERT e GPT-2 estão disponíveis no blog do OnNX Runtime Training Technical Deep Dive.
Bert é um modelo de representação de idiomas que se distingue por sua capacidade de capturar efetivamente relações textuais profundas e sutis em um corpus. No artigo original, os autores demonstram que o modelo Bert pode ser facilmente adaptado para criar modelos de ponta para várias tarefas de PNL, incluindo classificação de texto, reconhecimento de entidade denominado e respondendo a perguntas. Neste repositório, fornecemos notebooks que permitem que um desenvolvedor pré-retenhe um modelo BERT do zero em um corpus, bem como ajustar um modelo BERT existente para resolver uma tarefa especializada. Uma breve introdução a Bert está disponível neste repositório para um início rápido no Bert.
Pré -treinar um modelo de representação da linguagem Bert para o nível desejado de precisão é bastante desafiador; Como resultado, a maioria dos desenvolvedores começa a partir de um modelo Bert pré-treinado em um corpus padrão (como a Wikipedia), em vez de treiná-lo do zero. Essa estratégia funciona bem se o modelo final estiver sendo treinado em um corpus semelhante ao corpus usado na etapa de pré-trens; No entanto, se o problema envolver um corpus especializado que seja bem diferente do corpus padrão, os resultados não serão ideais. Além disso, para avançar a representação de idiomas além da precisão de Bert, os usuários precisarão alterar a arquitetura do modelo, dados de treinamento, função de custo, tarefas e rotinas de otimização. Todas essas mudanças precisam ser exploradas em grandes tamanhos de dados de parâmetros e treinamento. No caso de Bert-Large, isso pode ser bastante substancial, pois possui 340 milhões de parâmetros e treinado em um corpo de documentos muito grande. Para apoiar isso com as GPUs, os engenheiros de aprendizado de máquina precisarão de suporte de treinamento distribuído para treinar esses grandes modelos. No entanto, devido à complexidade e fragilidade da configuração desses ambientes distribuídos, mesmo ajustes especializados podem acabar com resultados inferiores dos modelos treinados.
Para resolver essas questões, este repositório está publicando um fluxo de trabalho para os modelos pré-treinamento de Bert-Large. Agora, os desenvolvedores podem criar seus próprios modelos de representação de idiomas como Bert usando seus dados específicos de domínio nas GPUs, com seu próprio hardware ou usando o serviço de aprendizado de máquina do Azure. A receita de pré -rAin neste repositório inclui o conjunto de dados e os scripts de pré -processamento, para que qualquer pessoa possa experimentar a construção de seus próprios modelos de representação de idiomas de propósito geral além de Bert. No geral, esta é uma receita estável e previsível que converge para um bom ótimo para os pesquisadores experimentarem explorações por conta própria.
A receita de pré -treinamento neste repositório é baseada no pacote Bert v0.6.2 de Pytorch, com o rosto de abraçar. A implementação nesta receita de pré-treinamento inclui técnicas de otimização, como gradient accumulation (os gradientes são acumulados para mini-lotes menores antes de atualizar pesos do modelo) e mixed precision training . O notebook e os módulos Python para pré -treinamento estão disponíveis no diretório pré -train.
A preparação de dados é uma das etapas importantes em qualquer projeto de aprendizado de máquina. Para a pré-treinamento de Bert, o corpus no nível de documentos é necessário. A qualidade dos dados usados para pré -treinamento afeta diretamente a qualidade dos modelos treinados. Para facilitar o pré -processamento de dados e a repetibilidade dos resultados, o código de pré -processamento de dados está incluído no repositório. Pode ser usado para pré-processar a Wikipedia Corpus ou outros conjuntos de dados para pré-treinamento. Consulte informações adicionais na preparação de dados para pré -treinamento para obter detalhes sobre isso.
A receita de Finetuning neste repositório mostra como finalizar o modelo de representação da linguagem Bert usando o serviço de aprendizado de máquina do Azure. Os notebooks e módulos Python para Finetuning estão disponíveis no diretório FineTune. Fineine e avaliamos nossos postos de controle pré -traços em relação ao seguinte:
O benchmark de avaliação de Entendendo a Linguagem Geral (CLUE) é uma coleção de nove tarefas de compreensão de idiomas de duas frases ou pares de frases para avaliar e analisar sistemas de compreensão de linguagem natural. O notebook Bert_eval_glue.ipynb Jupyter permite que o usuário execute um dos pontos de verificação pré -treinados contra essas tarefas no Azure ML.
O Azure Machine Learning Service fornece um ambiente baseado em nuvem para preparar dados, treinar, testar, implantar, gerenciar e rastrear modelos de aprendizado de máquina. Este serviço suporta totalmente tecnologias de código aberto, como Pytorch, Tensorflow e Scikit-Learn, e pode ser usado para qualquer tipo de aprendizado de máquina, desde a ML clássica a aprendizado profundo, aprendizado supervisionado e não supervisionado.
Os notebooks Jupyter podem ser usados para usar o AzureMl Python SDK e enviar trabalhos de pré -train e Finetune. Este repo contém os seguintes cadernos para diferentes atividades.
| Atividade | Caderno |
|---|---|
| Pré | Bert_pretrain.ipynb |
| Cole Finetune/Avalie | Bert_eval_glue.ipynb |
| Atividade | Caderno |
|---|---|
| Cole Finetune/Avalie | Tensorflow-bert-azureml.ipynb |
Este projeto adotou o Código de Conduta Open Microsoft. Para obter mais informações, consulte o Código de Conduta Perguntas frequentes ou entre em contato com [email protected] com quaisquer perguntas ou comentários adicionais.