Aidemy 2020/10/30
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
-__ 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".
-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.
-Code (Ergebnisse sind ['Erde', 'Wissenschaft', 'ist', 'die', 'Studie', 'von'])
-Der tatsächliche Code lautet wie folgt. Siehe unten für eine detaillierte Erklärung.
・ Ü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
-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)
-__ 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)
・ 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 aus der Frage und Antwort nach der Aufmerksamkeit __ den Durchschnitt der verborgenen Zustandsvektoren zu jedem Zeitpunkt __. Der Durchschnitt zu diesem Zeitpunkt heißt __ "mean_pooling" . -Mean_pooling wird mit __ "AveragePooling1D (Argument) (x)" __ von Keras ausgeführt. Für jedes Argument - Pool_size : Geben Sie die Länge der zu übergebenden Daten x an - Schritte : Geben Sie eine Ganzzahl oder Keine an - Auffüllen __: Geben Sie "Wert" oder "Name" an
Verwenden Sie im Code (später beschrieben) zuerst AveragePooling1D für "h1 (Fragenausgabe)" und "h (Antwortausgabe)", die im vorherigen Abschnitt erstellt wurden. Um in ④ zu kombinieren, sind dies Reshape.
-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)
・ 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)
-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)
・ Abbildung (Code unten)
・ 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)
Diese Zeit ist vorbei. Vielen Dank für das Lesen bis zum Ende.
Recommended Posts