[PYTHON] Themenextraktion des japanischen Textes 2 Praktische Ausgabe

Aidemy 2020/10/30

Einführung

Hallo, es ist ja! Ich bin eine knusprige Literaturschule, aber ich war an den Möglichkeiten der KI interessiert, also ging ich zur AI-spezialisierten Schule "Aidemy", um zu studieren. Ich möchte das hier gewonnene Wissen mit Ihnen teilen und habe es in Qiita zusammengefasst. Ich freue mich sehr, dass viele Menschen den vorherigen zusammenfassenden Artikel gelesen haben. Vielen Dank! Dieses Mal ist es der zweite Beitrag zur Themenextraktion von japanischem Text. Freut mich, dich kennenzulernen.

Was diesmal zu lernen ・ Implementierung eines Antworttextauswahlsystems

Antworttextauswahlsystem

-__ Antwortsatzauswahlsystem __ ist ein System __, das Kandidaten für mehrere Antwortsätze für einen Fragensatz erhält und automatisch die richtige Antwort aus diesen auswählt. -Für den Datensatz verwenden Sie Textbook Question Answering und verwenden Sie die Trainingsdaten als "train.json" und die Bewertungsdaten als "val.json".

Datenvorverarbeitung

-Wenn Sie Deep Learning in der Verarbeitung natürlicher Sprache verwenden, können die Daten nicht so behandelt werden, wie sie sind. Wie wir in "Natural Language Processing" gelernt haben, müssen Sätze zuerst in Wörter "__separation " unterteilt werden. Dieses Mal werden wir auch jedem word __ eine ID zuweisen. -Da die Matrixberechnung nicht durchgeführt werden kann, wenn die Längen der Eingabesätze unterschiedlich sind, ist es außerdem erforderlich, " die Längen der Eingabesätze zu vereinheitlichen". Dies wird auch als Padding bezeichnet. Details werden später beschrieben, aber 0 wird zu kurzen Sätzen hinzugefügt und lange Sätze werden gelöscht.

Normalisierung / Division

-Code (Ergebnisse sind ['Erde', 'Wissenschaft', 'ist', 'die', 'Studie', 'von']) スクリーンショット 2020-10-25 21.42.52.png

Wort-ID

-Der tatsächliche Code lautet wie folgt. Siehe unten für eine detaillierte Erklärung. スクリーンショット 2020-10-25 21.59.33.png

・ Über den obigen Code __ "def preprocess (s)" __ ist eine Funktion __, die __normalisierung und Division im vorherigen Abschnitt durchführt. Darunter wird __preprocess () __ verwendet, um den Fragentext ['Frage'] und den Antworttext ['Auswahlmöglichkeiten'] der Zugdaten zu normalisieren und zu trennen, und das Ergebnis (Liste) ist eine leere Liste. In "Sätzen" speichern. Für jedes Wort (w) in der "geteilten Liste (n)" in diesen Sätzen ist ein Wörterbuch mit der Häufigkeit, die durch "vocab.get ()" unter Verwendung von __ 'w'als Schlüssel als Wert erhalten wird. In "Vokabeln" speichern __. Bereiten Sie außerdem ein leeres Wörterbuch "word2id" vor. Für jede Taste (w) und jeden Wert (v) der Stimme hat __word2id noch nicht dieselbe Taste (w) und der Wert (v), dh die Häufigkeit beträgt 2 oder mehr. Gibt eine ID mit "len (word2id)" __. Übrigens hat jeder Wert, wenn die Frequenz als '' 1 angesehen wird, voreingestellt, so dass 0. Der "Ziel" -Teil unten normalisiert und teilt tatsächlich "Frage" und erhält die ID in "word2id" für jedes Wort.

Padding

·Code

Ein Modell bauen

Gesamtbild

-Verwenden Sie __ "Aufmerksamkeitsbasiertes QA-LSTM" __ für das Modell. Das Verfahren ist wie folgt. ① Implementieren Sie __BiLSTM für jede Frage und Antwort __. (2) Von Frage zu Antwort Achtung und Antwortinformationen unter Berücksichtigung der Frage erhalten. ③ Berechnen Sie aus der Frage und Antwort nach Aufmerksamkeit __ den Durchschnitt (mean_pooling) des verborgenen Zustandsvektors zu jedem Zeitpunkt __. ④ Ausgabe __ durch Kombinieren der beiden Vektoren von ③.

・ Abbildung![Screenshot 2020-10-30 13.08.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/17586dd7-fb8e-eccd- 11f6-490c8177080c.png)

(1) Implementieren Sie BiLSTM für Fragen und Antworten

-__ BiLSTM__ ist ein __ "bidirektionales rekursives neuronales Netz" __, das Werte aus beiden Richtungen eingibt, wie in Kapitel 1 dargestellt. Die Implementierung erfolgt mit __ "Bidirektional (Argument)" __.

・ Code![Screenshot 2020-10-25 23.38.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/f8543aa5-8428-9c29- 7e4b-d07a70fcd345.png)

② Aufmerksamkeit von Frage zu Antwort

・ Code![Screenshot 2020-10-30 13.09.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/228e3f25-c90b-1321- 4be7-744ecf59b6c9.png)

Berechnen Sie jeweils den Durchschnitt (mean_pooling) der versteckten Zustandsvektoren

Ausgabe durch Kombinieren der beiden Vektoren von ③

-Finale kombinieren Sie "mean_pooled_1" und "mean_pooled_2", die in ③ erstellt wurden, mit __concatenate () __. -In diesem Code müssen __ "sub" und "mult" an verketten () übergeben werden, also erstellen Sie sie jeweils. Nachdem Sie dies Reshape getan und eine Ausgabeebene als Ausgabe erstellt haben, erstellen Sie ein Modell mit __Model () __. Die Eingabeebene übergibt "Eingabe1" und "Eingabe2", die in ① erstellt wurden.

・ Code![Screenshot 2020-10-30 13.11.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/f2bdd73d-46b6-53e5- 6c0b-38e4a160b157.png)

Modelllernen

Lernen

・ Code![Screenshot 2020-10-30 13.13.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/719c1b8b-3d23-d87b- 10fb-50e2c52c6fa0.png)

Prüfung

-Finale __ testen Sie die Genauigkeit des Modells anhand der Bewertungsdaten __. Seit dieser Zeit werden ___2 Wertklassifizierungen __, __ "Genauigkeit", "Präzision" und "Rückruf" __ als Indikatoren für die Genauigkeit berechnet. ・ (Überprüfung) In Bezug auf die tatsächliche Klassifizierung von Vorhersagen gibt es vier Typen: __ wahr positiv, falsch positiv, falsch negativ und richtig negativ __ und "wie sehr die Vorhersage insgesamt korrekt war" ist _korrekte Rate _, "Das Verhältnis von dem, was als positiv vorhergesagt wurde, das tatsächlich positiv war" ist __ Anpassungsrate __, und "das Verhältnis von dem, was korrekt war und was als positiv vorhergesagt wurde" ist __ Rückrufrate __. ・ Bei der Berechnung dieser Indikatoren müssen wir zuerst die Anzahl der __wahren Positiven __ überprüfen. Um dies herauszufinden, muss es eine "Vorhersage" und eine "richtige Antwort" für die Klassifizierung geben. Die "Vorhersage" kann mit __ "model.predict ()" __ erhalten werden, und die "richtige Antwort" kann so erhalten werden, wie sie aus den im vorherigen Abschnitt erstellten Ausgaben stammt. Beide werden als [1,0] gespeichert, wenn die Antwort richtig (richtig) ist, und als [0,1], wenn die Antwort falsch (negativ) ist. Wenn Sie also nur die zweite Spalte mit __axis = -1 extrahieren, können Sie das Positive oder Negative sehen. _. Danach klassifizieren wir basierend auf diesem Positiven und Negativen vier als wahres Positiv und berechnen die richtige Antwortrate.

・ Code![Screenshot 2020-10-30 13.15.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/7c682822-8e73-d2d2- 5dbd-e29e3ff4a859.png)

・ Ergebnis![Screenshot 2020-10-30 13.15.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/688beca2-21d0-be64- 8a39-13419bb1be8c.png)

Aufmerksamkeitsvisualisierung

・ Abbildung (Code unten) スクリーンショット 2020-10-30 13.24.25.png

・ Code![Screenshot 2020-10-30 13.24.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/13506aa3-2328-0435- c88b-bccd51d305b8.png)

Zusammenfassung

Diese Zeit ist vorbei. Vielen Dank für das Lesen bis zum Ende.

Recommended Posts

Themenextraktion des japanischen Textes 2 Praktische Ausgabe
Themenextraktion von japanischem Text 1 Grundlagen
Python: Japanischer Text: Charakteristisch für Sprache aufgrund von Wortähnlichkeit
Python: Japanischer Text: Charakteristisch für Sprache aus Wortkontinuität
Japanische Lokalisierung von Pycharm