Wir haben die Chatbots mit dem Microsoft Cognitive Toolkit (CNTK) zusammengefasst.
Teil 1 bereitet Sie darauf vor, Ihren Chatbot mit dem Microsoft Cognitive Toolkit zu trainieren.
Ich werde sie in der folgenden Reihenfolge vorstellen.
Es wird davon ausgegangen, dass Sie über ein Twitter-Konto verfügen und über Linux verfügen.
Gehen Sie zur obigen Seite und klicken Sie oben rechts auf Übernehmen.
Klicken Sie auf Für ein Entwicklerkonto anwenden und wählen Sie das Twitter-Konto aus, das Sie verwenden möchten.
Wählen Sie dann einige grundlegende Elemente aus. Während Sie den Vorgang durchlaufen, werden Sie aufgefordert, jeweils etwa 100 bis 200 Zeichen zu schreiben, z. B. welchen Zweck Sie verwenden und wie Sie die Twitter-API und -Daten verwenden. Aber auch einfaches Englisch ist ein Problem. Es scheint, dass es so etwas nicht gibt, also schreiben wir ehrlich den Verwendungszweck.
Wenn Sie die Registrierungsdetails bestätigen und sich bei Twitter Developer bewerben, wird die E-Mail mit der Annahme der Anwendung an die E-Mail-Adresse gesendet, die mit dem für die Registrierung verwendeten Twitter-Konto verknüpft ist. Warten Sie also auf das Prüfungsergebnis. Sie erhalten frühestens innerhalb eines Tages eine E-Mail mit den Prüfungsergebnissen.
In diesem Stadium erhalten Sie möglicherweise erneut eine E-Mail von Twitter Developer und fragen nach der Verwendung der Twitter-API auf Japanisch. Es scheint jedoch kein Problem zu geben, wenn Sie den auf Englisch gehorsam geschriebenen Inhalt gehorsam ins Japanische übersetzen. Ich werde.
Rufen Sie als Nächstes den API-Schlüssel, den geheimen API-Schlüssel, das Zugriffstoken und das geheime Zugriffstoken ab, um die Tweets und Antworten abzurufen.
Klicken Sie auf Apps-> App erstellen und Sie werden nach dem Namen der App, die Sie erstellen möchten, der Website und der Art und Weise, wie Sie sie verwenden möchten, gefragt.
Sobald die App erstellt wurde, sehen Sie den API-Schlüssel und den geheimen API-Schlüssel in Schlüssel und Token auf der Detailseite der erstellten App.
Notieren Sie sich das Zugriffstoken und das Geheimnis des Zugriffstokens, da diese nur einmal angezeigt werden, indem Sie auf die Schaltfläche "Generieren" klicken.
Sobald Sie sich bei Twitter Developer registriert und den API-Schlüssel, den API-Geheimschlüssel, das Zugriffstoken und das Zugriffstoken-Geheimnis erhalten haben, können Sie Tweets und Antworten sammeln.
Installieren Sie tweepy, um mit der Twitter-API in Python zu arbeiten. Die Twitter-API bietet viele Funktionen, aber dieses Mal habe ich beschlossen, die veröffentlichten Tweets und eine Antwort darauf als eine Konversation zu sammeln und als Textdatei mit bis zu 100 Konversationen gleichzeitig zu speichern.
Die Verzeichnisstruktur ist diesmal wie folgt.
Doc2Vec STSA |―twitter |―20200401_000000.txt |―... stsa_corpus.py stsa_twitter.py Word2Vec
Verarbeiten Sie die Textdaten vor dem Sammeln des Tweet- und Antwortkonversationsdatensatzes.
Dieses Mal habe ich die Textbereinigung mit den Python-Standardmodulen re und emoji ausgeführt.
In Word2Vec und Doc2Vec ist MeCab in Wörter unterteilt. Ich habe es ausgeführt, um ein Wortwörterbuch zu erstellen, aber dieses Mal werde ich ein Unterwortmodell mit Satzstück erstellen.
Nach der Konvertierung in Wort-IDs mithilfe des mit den Trainingsdaten trainierten Satzstückmodells können Sie eine Textdatei für den CTFDeserializer erstellen, mit dem Ihr Chatbot trainiert wird.
CTFDeserializer wird in Computer Vision: Bildunterschrift Teil1 - STAIR-Untertitel eingeführt.
・ CPU Intel (R) Core (TM) i7-9750H 2,60 GHz
・ Windows 10 Pro 1909 ・ Python 3.6.6 ・ Emoji 0.5.4 ・ Satzstück 0.1.86 ・ Tweepy 3.8.0
Das implementierte Programm wird auf GitHub veröffentlicht.
stsa_twitter.py
stsa_corpus.py
Ich werde einige Teile des auszuführenden Programms extrahieren und ergänzen.
Die Textbereinigung ist wichtig, da die von uns gesammelten Tweets und Antworten viel Rauschen enthalten.
text_cleaning
s = re.sub(r"http\S+", "", s) # remove https
s = re.sub(r"\@[a-z0-9-_][a-z0-9-_]*", "", s) # remove @tweet
s = re.sub(r"\#.+", "", s) # remove #tag
text_clearning
s = re.sub("[˗֊‐‑‒–⁃⁻₋−]+", "-", s) # normalize hyphens
s = re.sub("[- ---- ━ ━- -]+", "- -", s) # normalize choonpus
s = re.sub("[~∼∾〜〰~]", "", s) # remove tildes
s = s.lower() # normalize alphabet to lowercase
s = s.translate({ord(x): ord(y) for x, y in zip( # normalize half-width symbols to full-width symbols
"!\"#$%&'()*+,-./:;<=>?@[¥]^_`{|}~¡, ・ """,
"!! # $% & '() * +, -. / :; <=>? @ [\] ^ _` {|} ~., ・")})
text_clearning
s = re.sub(r"!+", "!", s)
s = re.sub(r"??+", "?", s)
s = re.sub(r"…+", "…", s)
s = re.sub(r"w+w", "。", s)
text_clearning
s = "".join(["" if c in emoji.UNICODE_EMOJI else c for c in s]) # remove emoji
s = re.sub(r"(.*).*", "", s) # remove kaomoji
Das ist nicht perfekt, aber die Ergebnisse sind fair.
Klonen Sie zuerst SentencePiece von GitHub und erstellen Sie es. Das Folgende läuft auf einer Linux-Distribution.
$ git clone https://github.com/google/sentencepiece.git
$ sudo apt-get install cmake build-essential pkg-config libgoogle-perftools-dev
$ cd sentencepiece
$ mkdir build
$ cd build
$ cmake ..
$ make -j $(nproc)
$ sudo make install
$ sudo ldconfig -v
Am Ende des Trainings werden twitter.model und twitter.vocab erstellt. Standardmäßig wird dem Satzstückmodell 0, 1 und 2 für unbekannte Wörter (Start und Ende) zugewiesen.
In der gespeicherten Tweet- und Antworttextdatei befinden sich Tweet und Antwort in einer Konversation mit zwei Zeilen.
Die Textbereinigung kann zu null Wörtern führen. Sie müssen daher sicherstellen, dass mindestens ein Wort vorhanden ist.
stsa_preprocessing
for idx in range(len(corpus) // 2):
tweet = text_cleaning(corpus[2 * idx])
reply = text_cleaning(corpus[2 * idx + 1])
if len(tweet) == 0 or len(reply) == 0:
continue
else:
f.write("%s\n" % tweet)
f.write("%s\n" % reply)
Da Tweets und Antworten unterschiedliche Serienlängen haben können, wird die Länge von Tweets und Antworten mithilfe von zip_longest des Python-Standardmoduls itertools angepasst, um eine Textdatei zu erstellen, die vom integrierten Reader gelesen werden kann.
stsa_sentencepiece
with open("./tweet_reply_corpus.txt", "w") as ctf_file:
for i, (tweet, reply, target) in enumerate(tweet_reply):
for (twt, rep) in zip_longest(tweet, reply, fillvalue=""):
if twt == "":
ctf_file.write("{} |reply {}:1\n".format(i, rep))
elif rep == "":
ctf_file.write("{} |tweet {}:1\n".format(i, twt))
else:
ctf_file.write("{} |tweet {}:1\t|reply {}:1\n".format(i, twt, rep))
Führen Sie zunächst stsa_twitter.py aus, um Tweets und Antworten zu sammeln.
1 : @user_id ...
2 : @user_id ...
...
Der auf GitHub veröffentlichte Code behandelt Ausnahmen nicht vollständig. Wenn Sie ihn also so ausführen, wie er ist, wird er alle 24 Stunden gestoppt. Überprüfen Sie ihn daher bitte jeden halben Tag.
Nach dem Sammeln der erforderlichen Datenmenge generiert die Funktion stsa_preprocessing ein Twitter-Konversationskorpus twitter.txt, das aus einem textbereinigten Tweet- und Antwortpaar besteht.
Number of tweet and reply: 1068294
Dann trainieren Sie das Satzstückmodell. Das Training beginnt mit dem Setzen der Argumente wie unten gezeigt. Ich habe die Anzahl der Wörter auf 32.000 festgelegt.
$ spm_train --input=/mnt/c/.../twitter.txt --model_prefix=twitter --vocab_size=32000
Am Ende des Trainings werden twitter.model und twitter.vocab erstellt.
Führen Sie abschließend die Funktion stsa_sentencepiece aus, um eine Textdatei zu erstellen, die von CTFDeserializer gelesen werden soll.
Now 10000 samples...
Now 20000 samples...
...
Now 970000 samples...
Number of samples 973124
Wir konnten in ungefähr einem Monat ungefähr 1 Million Konversationen sammeln, aber die tatsächlich verfügbaren Daten waren 973.124 Konversationen.
Jetzt, da Sie bereit sind zu trainieren, verwendet Teil 2 CNTK, um Ihren Chatbot zu trainieren.
Twitter - Developer sentencepiece
Computer Vision : Image Caption Part1 - STAIR Captions Natural Language : Word2Vec Part1 - Japanese Corpus
Recommended Posts