Statut: Archive (le code est fourni en tant que mises à jour attendues)
Bert -keras
Implémentation de Keras de Google Bert (représentations de l'encodeur bidirectionnelle de Transformers) et LM Transformateur d'OpenAI capable de charger des modèles pré-entraînés avec une API Finetuning.
MISE À JOUR : Avec le support TPU à la fois pour l'inférence et la formation comme ce carnet Colab grâce à @highcwu
Comment l'utiliser?
# 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!
Notes
- L'idée générale de cette bibliothèque est d'utiliser le modèle pré-entraîné d'Openai / Google pour l'apprentissage du transfert
- Afin de voir comment fonctionne le modèle Bert, vous pouvez consulter ce carnet Colab
- Afin d'être compatible avec Bert et Openai, j'ai dû assumer une commande standard pour le vocabulaire, j'utilise OpenAI, donc dans la fonction de chargement de Bert, il y a une pièce pour modifier l'ordre; Mais c'est un détail d'implémentation et vous pouvez l'ignorer!
- Le chargement Openai est testé avec TensorFlow et Theano comme backend
- Le chargement d'un modèle Bert n'est pas encore possible sur le backend Theano mais la version TF fonctionne et il a été testé
- La formation et le réglage fin qu'un modèle n'est pas possible avec Theano Backend mais fonctionne parfaitement bien avec TensorFlow
- Vous pouvez utiliser le générateur de données et les méta-données de tâche pour la plupart des tâches NLP et vous pouvez les utiliser dans d'autres cadres
- Il existe des tests unitaires pour l'ensemble de données et le modèle de transformateur (lisez-les si vous n'êtes pas sûr de quelque chose)
- Même dur je n'aime pas mon code Keras, c'est lisible :)
- Vous pouvez utiliser d'autres encodeurs, comme LSTM ou BIQRNN pour la formation si vous suivez le contrat du modèle (avez les mêmes entrées et sorties que le transformateur encodeur)
- Pourquoi devrais-je l'utiliser au lieu de la version officielle ?, D'abord celui-ci est dans Keras et deuxièmement, il a une belle abstraction sur les tâches NLP au niveau du jeton et au niveau
- Pourquoi Keras? La version Pytorch est déjà sortie! (BTW Vous pouvez utiliser ce générateur de données pour la formation et le réglage fin de ce modèle)
- Je vous conseille fortement de lire le tutoriel.ipynb (je n'aime pas les cahiers, c'est donc un cahier mal conçu, mais lisez-le quand même)
Concepts de code importants
- Tâche: Il y a deux tâches générales, des tâches au niveau des phrases (comme IS_NEXT et analyse des sentiments), et des tâches de niveau de jeton (comme POS et NER)
- Phrase: une phrase représente un exemple avec ses étiquettes et tout, pour chaque tâche, elle fournit une cible (une seule pour les tâches de niveau de phrase et par étiquette de jeton pour les tâches de niveau de jeton) et un masque, pour les niveaux de jeton, nous devons non seulement ignorer les paddings, mais aussi nous pourrions prédire le classe paepr)
- Task WeightScheduler: Pour la formation, nous pourrions vouloir commencer par la modélisation du langage et passer en douceur à la classification, ils peuvent être facilement mis en œuvre avec cette classe
- Attention_mask: avec cela, vous pouvez 1.Gake votre modèle causal 2.Ignore Paddings 3. Faites votre idée folle: D
- spécial_tokens: pad, démarrer, fin, délimiteur, masque
Possession
Neiron