
Ein einfaches Python-Paket, das vorhandene Modellfeinabstimmungs- und Generationskripte für das GPT-2-Textgenerierungsmodell von OpenAI (insbesondere die "kleinen" 124-m- und "Medium" 355M-Hyperparameter-Versionen) umhüllt. Darüber hinaus ermöglicht dieses Paket eine einfachere Erzeugung von Text und generiert in einer Datei für eine einfache Kuration und ermöglicht den Präfixen, den Text mit einem bestimmten Ausdruck zu beginnen.
Dieses Paket enthält und führt minimale Änderungen auf niedriger Ebene vor::
Für die Finetuning wird dringend empfohlen, eine GPU zu verwenden, obwohl Sie mit einer CPU (wenn auch viel langsamer) erzeugen können. Wenn Sie in der Cloud trainieren, wird mit einem Colaboratory -Notebook oder einem Google Compute Engine VM mit dem TensorFlow Deep Learning -Bild dringend empfohlen. (Da das GPT-2-Modell auf GCP gehostet wird)
Sie können GPT-2-SOMPLE verwenden, um ein Modell mit einer GPU kostenlos in diesem Colaboratory-Notizbuch zu übernehmen, das auch zusätzliche Funktionen des Pakets demonstriert.
HINWEIS: Die Entwicklung von GPT-2-Simple wurde hauptsächlich von AitextGen überfüllt, das ähnliche Funktionen für die Erzeugung von KI-Texten mit effizienterer Trainingszeit und Ressourcenverbrauch aufweist. Wenn Sie TensorFlow nicht verwenden müssen, empfehle ich stattdessen die Verwendung von AitextGen. Checkpoints, die mit GPT-2-Simple trainiert werden, können auch mit Aitextgen geladen werden.
GPT-2-Simple kann über PYPI installiert werden:
pip3 install gpt-2-simple Sie müssen auch die entsprechende TensorFlow 2.x-Version (min 2.5.1) für Ihr System (z. B. tensorflow oder tensorflow-gpu ) installieren.
Ein Beispiel für das Herunterladen des Modells in das lokale System, das es auf einem Datensatz finanziert. und einen Text erzeugen.
WARNUNG: Das vorgezogene 124 -m -Modell und damit jedes Geldmodell beträgt 500 MB! (Das vorbereitete 355 -m -Modell ist 1,5 GB)
import gpt_2_simple as gpt2
import os
import requests
model_name = "124M"
if not os . path . isdir ( os . path . join ( "models" , model_name )):
print ( f"Downloading { model_name } model..." )
gpt2 . download_gpt2 ( model_name = model_name ) # model is saved into current directory under /models/124M/
file_name = "shakespeare.txt"
if not os . path . isfile ( file_name ):
url = "https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt"
data = requests . get ( url )
with open ( file_name , 'w' ) as f :
f . write ( data . text )
sess = gpt2 . start_tf_sess ()
gpt2 . finetune ( sess ,
file_name ,
model_name = model_name ,
steps = 1000 ) # steps is max number of training steps
gpt2 . generate ( sess ) Die generierten Modellprüfpunkte sind standardmäßig in /checkpoint/run1 . Wenn Sie ein Modell aus diesem Ordner laden und Text daraus generieren möchten:
import gpt_2_simple as gpt2
sess = gpt2 . start_tf_sess ()
gpt2 . load_gpt2 ( sess )
gpt2 . generate ( sess ) Wie bei TextgenRNN können Sie Text für die spätere Verwendung (z. B. eine API oder einen Bot) erstellen und speichern, indem Sie den Parameter return_as_list verwenden.
single_text = gpt2 . generate ( sess , return_as_list = True )[ 0 ]
print ( single_text ) Sie können einen run_name -Parameter an finetune und load_gpt2 übergeben, wenn Sie mehrere Modelle in einem checkpoint -Ordner speichern/laden möchten.
Es gibt auch eine Befehlszeilenschnittstelle sowohl für die Finetuning als auch für die Generierung mit starken Standardeinstellungen für das Ausführen einer Cloud-VM mit GPU. Für die Finetuning (die auch das Modell herunterlädt, falls dies nicht vorhanden ist):
gpt_2_simple finetune shakespeare.txt Und für die Generation, die Texte zu Dateien in einem gen generiert:
gpt_2_simple generateDie meisten der gleichen Parameter in den Funktionen sind als CLI -Argumente verfügbar, z. B.:
gpt_2_simple generate --temperature 1.0 --nsamples 20 --batch_size 20 --length 50 --prefix " <|startoftext|> " --truncate " <|endoftext|> " --include_prefix False --nfiles 5Siehe unten, um zu sehen, was einige der CLI -Argumente tun.
NB: Starten Sie zuerst die Python -Sitzung neu, wenn Sie einen anderen Datensatz abschließen oder ein anderes Modell laden möchten.
Die Methode, die GPT-2 zum Generieren von Text verwendet, unterscheidet sich geringfügig von anderen Paketen wie TextenRNN (insbesondere die Erzeugung der vollständigen Textsequenz nur in der GPU und decodieren sie später), was nicht leicht zu fixieren ist, ohne den zugrunde liegenden Modellcode zu hacken. Infolge:
truncate in eine generate -Funktion, um nur Text zu sammeln, bis ein bestimmtes End -Token ist. Sie möchten möglicherweise length angemessen reduzieren.)prefix angeben, das auf die anfänglichen Token -Sequenzen abzielt, und ein truncate auf die End -Token -Sequenz. Sie können auch include_prefix=False festlegen, um das Präfix -Token während der Erzeugung zu verwerfen (z. B. wenn es etwas Ungewolltes wie <|startoftext|> ist)..csv Datei an finetune() übergeben, wird das CSV automatisch in ein Format analysiert, das ideal für das Training mit GPT-2 (einschließlich Vorbereitung <|startoftext|> und Suffixing <|endoftext|> für jedes Textdokument, sodass die obigen Tricks truncate hilfreich sind, wenn sie die Ausgabe generieren). Dies ist erforderlich, um sowohl Anführungszeichen als auch Neulisten in jedem Textdokument korrekt zu behandeln.batch_size einstellen, die in nsamples teilbar ist, was zu einer viel schnelleren Erzeugung führt. Funktioniert sehr gut mit einer GPU (kann batch_size auf 20 K80 von Colaboratory einstellen)!batch_size=1 und etwa 88% der V100 -GPU.overwrite=True to Finetune festlegen, das die vorherige Iteration des Modells weiter trainiert und beseitigt, ohne eine doppelte Kopie zu erstellen. Dies kann besonders für das Übertragungslernen nützlich sein (z. B. stark finetune GPT-2 auf einem Datensatz und dann in einem anderen Datensatz, um eine "Verschmelzung" beider Datensätze zu erhalten).gpt2.encode_dataset(file_path) vorbekommen und komprimieren. Die Ausgabe ist eine komprimierte .npz -Datei, die viel schneller in die GPU zum Finetuning lädt.gpt2.load_gpt2(sess, model_name='774M') und gpt2.generate(sess, model_name='774M') generieren.Max Woolf (@Minimaxir)
Max 'Open-Source-Projekte werden von seinem Patreon unterstützt. Wenn Sie dieses Projekt hilfreich empfanden, werden alle Geldbeiträge zum Patreon geschätzt und werden gut kreativ genutzt.
MIT
Dieses Repo hat keine Zugehörigkeit oder Beziehung zu OpenAI.