Status: Arquivo (o código é fornecido como está, sem atualizações esperadas)
Bert-Keras
Implementação de Keras do Google Bert (representações bidirecionais do codificador dos Transformers) e o Transformer LM do OpenAI capaz de carregar modelos pré -treinados com uma API Finetuning.
ATUALIZAÇÃO : Com o suporte da TPU para inferência e treinamento como este notebook Colab, graças a @highcwu
Como usá -lo?
# this is a pseudo code you can read an actual working example in tutorial.ipynb or the colab notebook
text_encoder = MyTextEncoder ( ** my_text_encoder_params ) # you create a text encoder (sentence piece and openai's bpe are included)
lm_generator = lm_generator ( text_encoder , ** lm_generator_params ) # this is essentially your data reader (single sentence and double sentence reader with masking and is_next label are included)
task_meta_datas = [ lm_task , classification_task , pos_task ] # these are your tasks (the lm_generator must generate the labels for these tasks too)
encoder_model = create_transformer ( ** encoder_params ) # or you could simply load_openai() or you could write your own encoder(BiLSTM for example)
trained_model = train_model ( encoder_model , task_meta_datas , lm_generator , ** training_params ) # it does both pretraing and finetuning
trained_model . save_weights ( 'my_awesome_model' ) # save it
model = load_model ( 'my_awesome_model' , encoder_model ) # load it later and use it!
Notas
- A idéia geral desta biblioteca é usar o modelo pré -traido do OpenAI/Google para aprendizado de transferência
- Para ver como funciona o modelo Bert, você pode verificar este notebook Colab
- Para ser compatível com o BERT e o OpenAI, tive que assumir uma ordem padrão para o vocabulário, estou usando o OpenAI, portanto, na função de carregamento de Bert, há uma parte para alterar a ordem; Mas este é um detalhe da implementação e você pode ignorá -lo!
- Carregar o modelo OpenAi é testado com Tensorflow e Theano como back -end
- Carregar um modelo Bert ainda não é possível no back -end do Theano, mas a versão TF está funcionando e foi testada
- Treinar e ajustar um modelo não é possível com o back-end, mas funciona perfeitamente bem com o tensorflow
- Você pode usar o gerador de dados e os meta -dados da tarefa para a maioria das tarefas de PNL e pode usá -los em outras estruturas
- Existem alguns testes de unidade para o modelo de dados e transformadores (leia -os se você não tiver certeza sobre algo)
- Mesmo duro, eu não gosto do meu código de Keras, é legível :)
- Você pode usar outros codificadores, como LSTM ou BIQRNN para treinamento se seguir o contrato de modelo (tenha as mesmas entradas e saídas que o codificador do transformador)
- Por que devo usar isso em vez do lançamento oficial?, Primeiro este está em Keras e o segundo tem uma boa abstração sobre as tarefas de NLP no nível do token e no nível da frase, que é a estrutura independente
- Por que Keras? A versão pytorch já está fora! (Btw você pode usar este gerador de dados para treinamento e ajuste fino também esse modelo)
- Aconselho você a ler o tutorial.ipynb (eu não gosto de cadernos, então este é um caderno mal projetado, mas leia de qualquer maneira)
Conceitos importantes de código
- Tarefa: Existem duas tarefas gerais, tarefas de nível de sentença (como IS_Next e análise de sentimentos) e tarefas de nível de token (como POS e NER)
- Sentence: a sentence represents an example with it's labels and everything, for each task it provides a target(single one for sentence level tasks and per token label for token level tasks) and a mask, for token levels we need to not only ignore paddings but also we might want to predict class on first char of a word (like the BERT paper(first piece of a multi piece word)) and for sentence levels we want a extraction point(like start token in Bert Paepr)
- TaskweightScheduler: Para o treinamento, podemos querer começar com a modelagem de idiomas e mover suavemente para a classificação, eles podem ser facilmente implementados com esta classe
- ATTHEN_MASK: Com isso, você pode 1. fazer seu modelo Causal 2.Ignore Paddings 3. Faça sua ideia maluca: D
- special_tokens: pad, start, fim, delimitador, máscara
Propriedade
Neiron