[PYTHON] Japanische Vorverarbeitung für maschinelles Lernen

Einführung

Ein Memorandum beim Erstellen eines einfachen neuronalen Netzwerks unter Verwendung von Text als Trainingsdaten, um den Mechanismus von Chatbots mithilfe von maschinellem Lernen zu verstehen.

Zweck

Wenden Sie einen regelbasierten Chatbot, der in englischem Text erstellt wurde, auf japanischen Text an, um ihn zu bedienen. Verarbeiten Sie japanischen Text vor und stellen Sie sicher, dass er über ein neuronales Netzwerk übertragen werden kann. Als Trainingsdaten verwendeten wir eine Web-Scraped-Support-Seite zu Niantics "Pokemon GO".

Niantic Support Page

Verwendete CSV-Datei (GitHub)

Klassifizierung mehrerer Klassen

In Bezug auf den "regelbasierten Typ", der den vorab gemäß der Eingabe vorbereiteten Antworttext zurückgibt, wurde sogar der Teil der Mehrklassenklassifikation gebildet, der "Absichten" (Absicht) identifiziert und vorhersagt.

Da es nicht "generiert" wird, sondern aus Eingabeinformationen verwandte "Häufig gestellte Fragen (FAQ)" vorhersagt, wird das Modell mit einer normalen neuronalen Netzwerkschicht anstelle von "RNN" erstellt.

Umgebung

Erstellen Sie eine virtuelle Umgebung ohne Jupyter-Notebook. − macOS Mojave 10.14.6

Referenzseite zur MeCab-Installation

Code

Trainingsdaten lesen und japanischen Text vorverarbeiten

wakatigaki.py


import MeCab
import csv
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing.sequence import pad_sequences

def create_tokenizer() :
#CSV-Datei lesen
    text_list = []
    with open("pgo_train_texts.csv", "r") as csvfile :
        texts = csv.reader(csvfile)

        for text in texts :
            text_list.append(text)

#Verwenden Sie MeCab, um japanischen Text separat zu schreiben.
        wakati_list = []
        label_list = []
        for label, text in text_list :
            text = text.lower()

            wakati = MeCab.Tagger("-O wakati")
            text_wakati = wakati.parse(text).strip()
            wakati_list.append(text_wakati)
            label_list.append(label)

#Finden Sie die Anzahl der Elemente im größten Satz heraus.
#Erstellen Sie eine Liste der Textdaten, die im Tokenizer verwendet werden sollen.
        max_len = -1
        split_list = []
        sentences = []
        for text in wakati_list :
            text = text.split()
            split_list.extend(text)
            sentences.append(text)

            if len(text) > max_len :
                max_len = len(text)
        print("Max length of texts: ", max_len)
        vocab_size = len(set(split_list))
        print("Vocabularay size: ", vocab_size)
        label_size = len(set(label_list))

#Verwenden Sie Tokenizer, um Wörtern Zahlen aus Index 1 zuzuweisen.
#Erstellen Sie auch ein Wörterbuch.
        tokenizer = tf.keras.preprocessing.text.Tokenizer(oov_token="<oov>")
        tokenizer.fit_on_texts(split_list)
        word_index = tokenizer.word_index
        print("Dictionary size: ", len(word_index))
        sequences = tokenizer.texts_to_sequences(sentences)

#Die für das überwachte Lernen verwendeten Etikettendaten werden ebenfalls mit Tokenizer nummeriert.
        label_tokenizer = tf.keras.preprocessing.text.Tokenizer()
        label_tokenizer.fit_on_texts(label_list)
        label_index = label_tokenizer.word_index
        label_sequences = label_tokenizer.texts_to_sequences(label_list)

#Tokenizer weist Zahlen ab 1 zu, während das eigentliche Label ab 0 indiziert, also -1.
        label_seq = []
        for label in label_sequences :
            l = label[0] - 1
            label_seq.append(l)

# to_categorical()Werden die tatsächlichen Etikettendaten mit One an das Modell übergeben?-Erstellen Sie einen Hot-Vektor.
        one_hot_y = tf.keras.utils.to_categorical(label_seq)

#Um die Größe der Trainingsdaten zu vereinheitlichen, fügen Sie dem kurzen Text 0 hinzu, um den längsten Textdaten zu entsprechen.
        padded = pad_sequences(sequences, maxlen=max_len, padding="post", truncating="post")
        print("padded sequences: ", padded)

        reverse_index = dict()
        for intent, i in label_index.items() :
            reverse_index[i] = intent

    return padded, one_hot_y, word_index, reverse_index, tokenizer, max_len, vocab_size

Modellerstellung mit TensorFlow

model.py


import tensorflow as tf

def model(training, label, vocab_size) :
    model = tf.keras.models.Sequential([
        tf.keras.layers.Embedding(input_dim=vocab_size, output_dim=16, input_length=len(training[0])),
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(30, activation="relu"),
        tf.keras.layers.Dense(len(label[0]), activation="softmax")
    ])

    model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
    model.fit(x=training, y=label, epochs=100)

    model.summary()

    return model

Eingabebildschirm erstellen

chat.py



import MeCab
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing.sequence import pad_sequences

#Ordnen Sie den von der Konsole empfangenen Text so an, dass das Modell ihn verarbeiten kann.
def prepro_wakati(input, tokenizer, max_len) :
    sentence = []

    input = input.lower()
    wakati = MeCab.Tagger("-O wakati")
    text_wakati = wakati.parse(input).strip()
    sentence.append(text_wakati)
    print(sentence)

    seq = tokenizer.texts_to_sequences(sentence)
    seq = list(seq)
    padded = pad_sequences(seq, maxlen=max_len, padding="post", truncating="post")
    print(padded)

    return padded

def chat(model, tokenizer, label_index, max_len) :
    print("Start talking with the bot (type quit to stop): ")
    while True :
        input_text = input("You: ")
        if input_text.lower() == "quit" :
            break

        x = prepro_wakati(input_text, tokenizer, max_len)
        results = model.predict(x, batch_size=1)
        print("results: ", results)
        results_index = np.argmax(results)
        print("Predicted index: ", results_index)

        intent = label_index[results_index + 1]

        print("Type of intent: ", intent)

Konsolenbildschirm. Wenden Sie den eingegebenen Text auf das trainierte Modell an und sagen Sie voraus, für welche der neun "Absichten" es gilt.

Lauf

Rufen Sie die definierte Funktion auf und führen Sie sie aus.

ex.py


import wakatigaki
import model
import chat

padded, one_hot_y, word_index, label_index, tokenizer, max_len, vocab_size = wakatigaki.create_tokenizer()

model = model.model(padded, one_hot_y, vocab_size)

chat.chat(model, tokenizer, label_index, max_len)

Trainingsergebnisse

スクリーンショット 2020-04-29 16.39.32.png

Die Zahlen in "Ergebnisse:" repräsentieren die entsprechenden Wahrscheinlichkeiten für jede Kategorie.

Sagen Sie eine "Startanleitung" für die Eingabe "Wie man Pokemon fängt" voraus. Als nächstes sagen Sie "Shop" für "Poke Coins and Items" voraus. Beide konnten die entsprechende Kategorie vorhersagen.

Recommended Posts

Japanische Vorverarbeitung für maschinelles Lernen
Datensatz für maschinelles Lernen
Maschinelles Lernen
<Für Anfänger> Python-Bibliothek <Für maschinelles Lernen>
Python: Vorverarbeitung beim maschinellen Lernen: Übersicht
Informationen zum maschinell erlernten Meeting für HRTech
Vorverarbeitung beim maschinellen Lernen 2 Datenerfassung
[Empfohlenes Tagging für maschinelles Lernen # 4] Skript für maschinelles Lernen ...?
Vorverarbeitung beim maschinellen Lernen 4 Datenkonvertierung
Leistungsüberprüfung der Datenvorverarbeitung für maschinelles Lernen (numerische Daten) (Teil 2)
Leistungsüberprüfung der Datenvorverarbeitung für maschinelles Lernen (numerische Daten) (Teil 1)
Verstärken Sie Bilder für maschinelles Lernen mit Python
Erste Schritte für Anfänger des maschinellen Lernens (KI)
Eine Einführung in OpenCV für maschinelles Lernen
Warum Python für maschinelles Lernen ausgewählt wird
"Verwendbare" One-Hot-Codierungstechnik für maschinelles Lernen
Python: Vorverarbeitung beim maschinellen Lernen: Datenerfassung
[Shakyo] Begegnung mit Python zum maschinellen Lernen
[Python] Webanwendungsdesign für maschinelles Lernen
[Memo] Maschinelles Lernen
Eine Einführung in Python für maschinelles Lernen
Klassifikation des maschinellen Lernens
Python: Vorverarbeitung beim maschinellen Lernen: Datenkonvertierung
Vorverarbeitung beim maschinellen Lernen 1 Datenanalyseprozess
Erstellen einer Entwicklungsumgebung für maschinelles Lernen
Beispiel für maschinelles Lernen
[Ver1.3.1 Update] Ich habe DataLiner erstellt, eine Datenvorverarbeitungsbibliothek für maschinelles Lernen.
Eine Einführung in maschinelles Lernen für Bot-Entwickler
Japanische Textvorverarbeitung ohne Aussage in Pandas
Empfohlene Studienreihenfolge für Anfänger des maschinellen Lernens / Deep Learning
Maschinelles Lernen ab 0 für theoretische Physikstudenten # 1
[Python] Datenanalyse, maschinelles Lernen (Kaggle) -Datenvorverarbeitung-
[Python] Sammeln Sie Bilder mit Icrawler für maschinelles Lernen [1000 Blatt]
Maschinelles Lernen ab 0 für theoretische Physikstudenten # 2
Sammeln Sie Bilder für maschinelles Lernen (Bing Search API)
Ich habe mit der maschinellen Vorverarbeitung von Python Data begonnen
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
Zusammenfassung des Lernprogramms für maschinelles Lernen
Maschinelles Lernen Über Overlearning
Maschinelles Lernen ⑤ AdaBoost-Zusammenfassung
Maschinelles Lernen: Betreut --AdaBoost
Logistische Regression beim maschinellen Lernen
Feature-Vorverarbeitung für die Modellierung
Stärkung des Lernens der dritten Zeile
Maschinelles Lernen unterstützt Vektormaschine
Maschinelles Lernen studieren ~ matplotlib ~
Lineare Regression des maschinellen Lernens
Memo zum Kurs für maschinelles Lernen
Bibliothek für maschinelles Lernen dlib
Maschinelles Lernen (TensorFlow) + Lotto 6
Lerne irgendwie maschinelles Lernen
Zusammenfassung zum Lernen von RAPIDS
Bibliothek für maschinelles Lernen Shogun
Maschinelles Lernen Kaninchen Herausforderung
Einführung in das maschinelle Lernen
Maschinelles Lernen: k-Nächste Nachbarn
Was ist maschinelles Lernen?
Bildersammlung Python-Skript zum Erstellen von Datensätzen für maschinelles Lernen
Erstellen Sie mit Python eine interaktive Umgebung für maschinelles Lernen
[Empfohlenes Tagging beim maschinellen Lernen # 2] Erweiterung des Scraping-Skripts