Estado: Archivo (el código se proporciona como es, no se esperan actualizaciones)
Bert-Kinos
Implementación de Keras de Google Bert (representaciones de codificadores bidireccionales de Transformers) y Transformer LM de OpenAI capaz de cargar modelos previos a la aparición con una API de Finetuning.
ACTUALIZACIÓN : con TPU Soporte tanto por inferencia como para capacitación como este cuaderno de Colab gracias a @highcwu
¿Cómo usarlo?
# 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
- La idea general de esta biblioteca es utilizar el modelo de petróleo de Openai/Google para el aprendizaje de transferencia
- Para ver cómo funciona el modelo Bert, puede consultar este cuaderno de colab
- Para ser compatible con Bert y OpenAi, tuve que asumir un pedido estándar para el vocabulario, estoy usando OpenAI, así que en la función de carga de Bert hay una parte para cambiar el pedido; ¡Pero este es un detalle de implementación y puede ignorarlo!
- La carga del modelo Openai se prueba con TensorFlow y Thano como backend
- Cargar un modelo Bert aún no es posible en el backend de Theano, pero la versión de TF está funcionando y se ha probado
- Entrenamiento y ajuste fino Un modelo no es posible con Theano Backend, pero funciona perfectamente bien con TensorFlow
- Puede usar el generador de datos y los meta datos de tareas para la mayoría de las tareas de PNL y puede usarlos en otros marcos
- Hay algunas pruebas unitarias para el modelo de conjunto de datos y transformador (léalas si no está seguro de algo)
- Incluso duro no me gusta mi código keras, es legible :)
- Puede usar otros codificadores, como LSTM o Biqrnn para capacitación si sigue el contrato del modelo (tiene las mismas entradas y salidas que el codificador del transformador)
- ¿Por qué debería usar esto en lugar del lanzamiento oficial?, Primero este está en Keras y segundo tiene una buena abstracción sobre las tareas de PNL a nivel de token y a nivel de oración que es independiente del marco.
- ¿Por qué Keras? ¡La versión de Pytorch ya está fuera! (Por cierto, puede usar este generador de datos para capacitación y ajuste fino también)
- Le aconsejo encarecidamente que lea el tutorial.ipynb (no me gustan los cuadernos, así que este es un cuaderno mal diseñado, pero lo léelo de todos modos)
Conceptos de código importantes
- Tarea: hay dos tareas generales, tareas de nivel de oración (como IS_NEXT y análisis de sentimientos) y tareas de nivel de token (como POS y 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 Paemp)
- Peso de la tarea Scheduler: para la capacitación es posible que deseemos comenzar con el modelado de idiomas y pasar sin problemas a la clasificación, se pueden implementar fácilmente con esta clase
- Atention_mask: con esto puede 1. Haga su modelo Causal 2.Enderore Roilds 3. Haga su locura Idea: D
- special_tokens: almohadilla, inicio, final, delimitador, máscara
Propiedad
Neumonía