Status: Archiv (Code wird als IS bereitgestellt, keine Aktualisierungen erwartet)
Bert-Keras
Die Keras -Implementierung von Google Bert (bidirektionale Encoder -Darstellungen von Transformatoren) und OpenAIs Transformator LM, mit dem vorbereitete Modelle mit einer Finetuning -API geladen werden können.
Update : Mit TPU -Unterstützung sowohl für Inferenz als auch für das Training wie dieses Colab -Notizbuch dank @HighCwu
Wie benutze ich es?
# 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!
Notizen
- Die allgemeine Idee dieser Bibliothek besteht darin, das vorbereitete Modell von OpenAI/Google zum Übertragungslernen zu verwenden
- Um zu sehen, wie das Bert -Modell funktioniert, können Sie dieses Colab -Notebook überprüfen
- Um sowohl mit Bert als auch mit OpenAI kompatibel zu sein, musste ich eine Standardbestellung für das Wortschatz annehmen, ich verwende OpenAIs in der Ladefunktion von Bert einen Teil, um die Bestellung zu ändern. Dies ist jedoch ein Implementierungsdetail und Sie können es ignorieren!
- Das Laden von OpenAI -Modell wird sowohl mit Tensorflow als auch mit Theano als Backend getestet
- Das Laden eines Bert -Modells ist im Theano -Backend noch nicht möglich, aber die TF -Version funktioniert und es wurde getestet
- Training und Feinabstimmung eines Modells ist mit Theano-Backend nicht möglich, funktioniert aber mit Tensorflow vollkommen in Ordnung
- Für die meisten NLP -Aufgaben können Sie die Datengenerator- und Task -Meta -Daten verwenden und sie in anderen Frameworks verwenden
- Es gibt einige Unit -Tests sowohl für das Datensatz als auch für das Transformatormodell (lesen Sie sie, wenn Sie sich über etwas nicht sicher sind)
- Sogar hart Ich mag meinen Keras -Code nicht, es ist lesbar :)
- Sie können andere Encoder wie LSTM oder BiQRNN für das Training verwenden, wenn Sie den Modellvertrag befolgen (haben die gleichen Eingaben und Ausgaben wie Transformator -Encoder).
- Warum sollte ich dies anstelle der offiziellen Veröffentlichung verwenden? Erstens ist dies in Keras und zweitens hat es eine schöne Abstraktion über Token-Level- und Satzebene-NLP-Aufgaben, die Framework unabhängig sind
- Warum Keras? Die Pytorch -Version ist bereits ausgegeben! (Übrigens können Sie diesen Datengenerator für das Training und die Feinabstimmung auch dieses Modell verwenden.)
- Ich empfehle Ihnen dringend, das Tutorial.IPynb zu lesen (ich mag Notizbücher nicht, also ist dies ein schlecht gestaltetes Notizbuch, aber lesen Sie es trotzdem).
Wichtige Codekonzepte
- Aufgabe: Es gibt zwei allgemeine Aufgaben, Aufgaben der Satzebene (wie IS_Next und Sentiment Analysis) und Token Level -Aufgaben (wie POS und NER)
- Satz: Ein Satz stellt ein Beispiel für seine Etiketten und alles dar, für jede Aufgabe, die er ein Ziel (einzelne für Satzebene und pro Token -Etikett für Token -Level -Aufgaben) und eine Maske für Token -Ebenen darstellt, die wir nicht nur ignorieren, sondern auch das Erstpadding. Paepr)
- TaskWeightScheduler: Für das Training möchten wir vielleicht mit der Sprachmodellierung beginnen und reibungslos zur Klassifizierung übergehen, können sie einfach mit dieser Klasse implementiert werden
- Achtung.
- Special_tokens: Pad, Start, Ende, Trennzeichen, Maske
Eigentum
Neiron