Aidemy 2020/10/30
Einführung
Hallo, es ist ja! Obwohl es ein knuspriges literarisches System ist, interessierte ich mich für die Möglichkeiten der KI, also ging ich zur KI-Fachschule "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!
Dies ist der zweite Beitrag der negativ-positiven Analyse. Freut mich, dich kennenzulernen.
- Dieser Artikel ist eine Zusammenfassung dessen, was Sie in "Aidemy" "in Ihren eigenen Worten" gelernt haben. Es kann Fehler und Missverständnisse enthalten. Bitte beachten Sie.
Was diesmal zu lernen
・ Twitter-Negativ / Positiv-Analyse mit RNN
・ Datenbank erstellen
RNN
・ Eine negativ-positive Analyse kann unter Verwendung eines Polaritätswörterbuchs durchgeführt werden, es ist jedoch schwierig, eine kontextbezogene Beurteilung vorzunehmen. Daher ist es unter Verwendung von __ "RNN (Retroactive Neural Network)" __, das in "Themenextraktion 1 des japanischen Textes" behandelt wird, möglich, eine Beurteilung entsprechend dem Kontext vorzunehmen.
・ Obwohl der RNN-Kontext auf Japanisch geschätzt werden kann, __ verwenden wir diesmal Englisch __.
Negative / positive Analyse von Twitter
-__ Twitter__ besteht aus einem kurzen Satz von 140 Zeichen und eignet sich daher zur Analyse der Verarbeitung natürlicher Sprache. Dieses Mal werden wir die Twitter-Daten von USAirline verwenden.
- Öffnen Sie zunächst die CSV-Datei, in der die Tweet-Daten aufgezeichnet sind, und extrahieren Sie die Spalte __ 'Text' __ und __ 'Airline_Sentiment' __ __ alle Zeilen daraus __. Die Methode lautet "__loc [:, [Spaltenname]] __".
Datenbank erstellen
Löschen Sie häufige Wörter
- Bei der Analyse der Beziehungen zwischen Wörtern mit RNN werden die häufig verwendeten Wörter __ wie __ "@" und "I" __ "Stoppwörter" __ genannt, die die Analyse stören. Dieses Mal werde ich dieses __stop Wort __ löschen.
-Für die im vorherigen Abschnitt gelesenen Tweet-Daten teilen Sie sie zuerst durch __ morphologische Analyse __ in Wörter auf und verwenden Sie dann __ "lower ()" , um sie alle niedriger zu machen ( Normalisierung __).
- Laden Sie auch das Modul nltk stopwords herunter und setzen Sie die englischen Stoppwortinformationen in der Variablen "stopps" mit "__set (stopwords.words (" english ")) __".
-Für jedes Wort w in Wörtern enthält nur __ "nicht in Stopps (nicht Stoppwörter)" __ und __ "kein @ und Flug" __ Wörter werden als "aussagekräftige_Wörter" zurückgegeben.
- Von den Bedingungen kann die erstere durch __ "wenn nicht w in Stopps" __ und die letztere durch "__ not re.match ('^ [Zeichenfolge]', w)" __ beschrieben werden.
・ Code![Screenshot 2020-10-27 18.04.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/693ead18-245f-1050- 07de-fe398abc1569.png)
Erstellen einer Datenbank mit Wörtern
-Nächste, füge alle Wörter von __Tweet in der Datenbank __ zusammen. Auf diese Weise können Sie die Häufigkeit des Auftretens von __Wörtern überprüfen und Negative und Positive gleichzeitig markieren __.
- "__ CleanTweet__" ist die Funktion, auf die die im vorherigen Abschnitt erstellte Funktion __ "tweet_to_words" __ auf den Teil text der Tweet-Daten angewendet wird. Mit "__apply (lambda x: function) " können Sie auf jedes Element __ eine Funktion anwenden. Der Inhalt davon ist, dass jedes Wort durch Leerzeichen getrennt gespeichert wird, so dass es für jedes Wort mit " '' getrennt werden kann. Join (Liste) __". Wenn Sie "__split () __" verwenden, können Sie außerdem das Wort abrufen, in dem jedes Wort einzeln in der Liste gespeichert ist.
・ Code![Screenshot 2020-10-27 18.38.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/a115f91f-0811-1a2f- bbf3-5bb47e0c5430.png)
・ Inhalt der Wörter![Screenshot 2020-10-27 18.39.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/b9d684fe-1bf6- 78f9-64cb-aba87ea7f537.png)
Wörter digitalisieren
-
Fügen Sie jedem __Wort ein numerisches Tag hinzu, basierend darauf, wie oft das Wort __ erscheint. Erstellen Sie außerdem eine neue Liste von __cleanTweet-Zeichenfolgen, die in Zahlen __ konvertiert wurden.
-Die Häufigkeit, mit der ein Wort erscheint, kann mit __ "Counter () " berechnet werden. Sortieren Sie die Wörter in absteigender Reihenfolge nach der Anzahl der Vorkommen und erstellen Sie ein Wörterbuch, sodass es zu "{word: Anzahl der Vorkommen}" wird. Die Anzahl der Vorkommen kann mit " für ii, Wort in Aufzählung (Vokabular, 1) __" ermittelt werden. Wenn Sie für __enumerate () __ eine Liste als Argument übergeben und zu einer for-Anweisung machen, wird der Index in die erste Variable (ii) und die Spalte in die zweite Variable (Wort) eingegeben. Daher kann gesagt werden, dass dieser Code ein Wörterbuch erstellt, in dem Indexnummern in der Reihenfolge des Wortes zugewiesen werden, in dem "Vokabular" am häufigsten vorkommt.
-
Konvertieren Sie als Nächstes die Zeichenfolge __cleanTweet in eine Zahl __ und erstellen Sie eine neue Liste. Erstellen Sie zunächst eine leere Liste "tweet_ints".
-Für jede Zeile (jede) von cleanTweet, die in Wörter (Wort) unterteilt ist, konvertieren Sie sie in die unmittelbar zuvor zugewiesene Indexnummer und speichern Sie sie in der leeren Liste tweet_ints so wie sie ist. Dann enthält tweet_ints eine Liste, in der die Indexnummer für jede Zeile (Tweet) gespeichert ist.
-
Beziehen Sie sich für die Konvertierungsmethode auf den Wert des unmittelbar zuvor erstellten Wörterbuchs für jedes Wort.
・ Code![Screenshot 2020-10-27 20.36.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/71666eae-8acf-2146- 218f-a1a04ee76b5f.png)
・ Ergebnis (nur Teil)![Screenshot 2020-10-27 20.37.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/1cbd9513 -e394-12a4-4687-ed90a9ec809e.png)
Negative und positive Quantifizierung
- In der Spalte __ 'Airline_sentiment' __ von tweetData, die zu Beginn dieses Kapitels extrahiert wurde, werden Informationen gespeichert, dass jeder Tweet __negativ, positiv oder neutral __ ist. Diese Informationen werden in numerische Werte wie __ "negativ = 0, positiv = 1, neutral = 2" __ umgewandelt. __ Wenn Sie einen numerischen Wert festlegen, können Sie ihn während des Lernens verwenden. __.
-Wenn jede Zeile von'airline_sentiment' jede ist, wenn __ "each == 'negative'", repräsentiert der Wert "0" __ if-Anweisungen und sie werden in einem np.array-Format kombiniert Machen.
・ Code![Screenshot 2020-10-27 21.01.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/af152708-57ec-3735- fa90-16e3728c50f3.png)
Richten Sie die Anzahl der Spalten aus
-Das im vorherigen Abschnitt erstellte __ "tweet_ints" __ enthält die Indexnummer des Wortes jedes Tweets, aber die __ Länge jeder Liste ist unterschiedlich __. Beim Lernen von __ ist es jedoch erforderlich, die Längen einheitlich zu gestalten. __ Löschen Sie außerdem die Zeile, in der die Anzahl der Wörter im cleanTweet-Prozess 0 wurde. __.
- Ermitteln Sie zunächst die Länge jeder Liste mit __ "Counter ()" __. In dem unmittelbar darauf folgenden Prozess werden __ die Längen anderer Listen entsprechend der Länge mit der maximalen __ Länge angepasst, sodass nur die maximale Länge mit __ "max ()" __ und der Variablen "seq_len" erfasst wird. Speichern in.
-Nächste löschen Sie die Zeile mit __ Länge 0 __. Anstatt es direkt mit drop () usw. zu löschen, tweet_ints
Für die Spalte (Tweet) werden nur diejenigen mit len (Tweet)> 0 erfasst. Speichern Sie den Index der Zeile, die die Bedingung len (tweet)> 0 erfüllt, in "__tweet_index" __ und speichern Sie __labels und tweetData erneut entsprechend __. Schließlich können Sie tweet_ints gemäß den Bedingungen erneut speichern.
・ __ Richten Sie die Länge jeder Liste aus . Wie oben erwähnt, __ stellen Sie die Länge auf die längste __ ein. Wenn die Länge nicht ausreicht, füllen Sie die digitalisierten Wörter in der Zeile von rechts aus und ersetzen Sie den Mangel durch 0. (Wenn beispielsweise die Länge der Liste von __ [1,2,3] __ durch diese Methode auf 5 gesetzt wird, wird sie zu __ [0,0,3,2,1] __)
- Der Teil "__np.zeros ((len (tweet_ints), seq_len), dtype = int) " des folgenden Codes ist ein Array mit allen 0 Elementen, Zeilen mit einer Länge von tweet_ints und einer maximalen Anzahl von Spalten. Zeigt an, dass Sie erstellen. Wenn jede Zeile von tweet_ints i und column row ist, setzen Sie row in den Teil, in dem __row i ist, und column -len (row) __ in das Array mit 0 Elementen. Das obige komplementäre Verfahren wird realisiert.
・ Code![Screenshot 2020-10-28 15.23.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/69e4bdd0-0c2e-398f- ec5a-dee991526845.png)
・ Ergebnis (nur Teil)![Screenshot 2020-10-27 22.52.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/907dc703 -1da6-ec31-9c8a-5b964658ed11.png)
Zusammenfassung
- Durch die Verwendung von RNN ist es möglich, eine negative / positive Analyse durchzuführen, die den Fluss des Kontexts __ berücksichtigt.
-Wörter, die häufig in den Daten vorkommen, werden als __ "Stoppwörter" __ bezeichnet und beeinträchtigen die Analyse. Daher muss __ gelöscht werden.
- Durch Erstellen einer __Datenbank von Wörtern in Twitter-Daten ist es möglich, für jedes __Wort __ eine negative / positive Analyse durchzuführen.
-Wortdaten werden durch Zuweisen von __ID in der Reihenfolge der Frequenz __ quantifiziert, und der entsprechende __PN-Wert wird auch unter Verwendung des Polaritätswörterbuchs __ gespeichert. Darüber hinaus sollte es möglich sein, numerisch zwischen negativ und positiv zu unterscheiden. Dies ist das Lehrerlabel bei der Implementierung des Modells.
-Für Daten, die Trainingsdaten sind, machen Sie die Spaltenlängen für jede __ Liste __ einheitlich.
Diese Zeit ist vorbei. Vielen Dank für das Lesen bis zum Ende.