[PYTHON] Leistungsüberprüfung der Datenvorverarbeitung in der Verarbeitung natürlicher Sprache

Einführung

Bei der Systematisierung des maschinellen Lernens ist Know-how erforderlich, um die Zeit und die Ressourcen zu berücksichtigen, die für die Datenvorverarbeitung erforderlich sind, und diese beim Entwurf zu verwenden. In diesem Beitrag werden wir einen Überblick über die Datenvorverarbeitung für natürliche Sprachen und die Ergebnisse der Leistungsüberprüfung basierend auf der Datenvorverarbeitung im chABSA-Datensatz geben, der ein Implementierungsbeispiel für die Analyse der Emotionspolarität darstellt.

Beitragsliste

  1. Überblick über die Verarbeitung natürlicher Sprache und ihre Vorverarbeitung
  2. Leistungsüberprüfung der Datenvorverarbeitung in der Verarbeitung natürlicher Sprache ... Dieser Beitrag

Das Inhaltsverzeichnis dieses Beitrags lautet wie folgt.

3. Beispiel für Ressourcen und Verarbeitungszeit, die für die Vorverarbeitung der Verarbeitung natürlicher Sprache erforderlich sind

Hier wird die Datenvorverarbeitung (Tabelle 2 des ersten Teils) im chABSA-Datensatz ausgeführt und die erforderliche Ressourcenmenge und Verarbeitungszeit überprüft. Ändern Sie insbesondere die für den Teilungsprozess verwendete Bibliothek von Janome in MeCab und vergleichen Sie die Ressourcenmenge und die Verarbeitungszeit in beiden Mustern.

3.1 Überprüfungsumgebung

Tabelle 4 zeigt die Leistung der in diesem Experiment verwendeten virtuellen Maschine (VM).

Tabelle 4 Zur Überprüfung verwendete VM-Spezifikationen

Artikel Artikelname
OS Red Hat Enterprise Linux Server 7.7 (Maipo)
CPU Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.5GHz
Anzahl der CPU-Kerne 8
Hyper-Threading aus
Speicherkapazität 16GB
Festplattenkapazität 160GB
Sequentielles Lesen der Festplatte 166MB/s
Sequentielles Schreiben der Festplatte 487 MB/s
HDD Random Read(4k,QD32) 68MB/s
HDD zufälliges Schreiben(4k, QD32) 71MB/s

Während GPU-Ressourcen häufig in der Bildverarbeitung verwendet werden, werden sie in der Textdatenverarbeitung nicht benötigt. Daher werden in diesem Experiment keine GPU-Ressourcen verwendet.

Tabelle 5 zeigt die bei der Überprüfung verwendeten Softwareversionen.

Tabelle 5 Version der zur Überprüfung verwendeten Software

Name der Software Ausführung Verwenden
Python 3.7.4 Wird als Ausführungsumgebung verwendet
beautifulsoup4 4.9.0 Wird für die XML-Analyse verwendet
lxml 4.5.0 Wird für die XML-Analyse verwendet
Janome 0.3.10 Wird zum Teilen verwendet
MeCab 0.996.3 Wird zum Teilen verwendet

3.2 Versuchsinhalt

3.2.1 Experimenteller Ablauf

[Letzter Beitrag](https://qiita.com/mkakida/items/eba36f519b08dbda1d82#22-%E5%8F%96%E3%82%8A%E6%89%B1%E3%81%86%E5%89 % 8D% E5% 87% A6% E7% 90% 86% E3% 81% AE% E6% A6% 82% E8% A6% 81) Normalisieren Sie die Datenvorverarbeitung im in Tabelle 2 gezeigten chABSA-Datensatz Die Menge der in jedem Prozess verwendeten Computerressourcen und die Verarbeitungszeit werden gemessen. In Bezug auf den Vektorisierungsprozess hängt der Verarbeitungsinhalt weitgehend von der Modellimplementierung ab, und es ist unwahrscheinlich, dass das Messergebnis als Referenz in einem anderen Projekt verwendet wird.

Tabelle 6 definiert die Verarbeitung des Messziels in diesem Experiment neu. Jeder dieser Prozesse wird unabhängig und nacheinander ausgeführt. Obwohl in jedem Prozess 2.260 Arten unabhängiger Unternehmensdaten verarbeitet werden, werden alle Unternehmensdaten aufgrund der Implementierung des chABSA-Datensatzes nacheinander und nicht parallel verarbeitet.

Tabelle 6 Zu testende Prozesse

# Vorgangsname Erläuterung
1 Extraktionsprozess für Leistungsinformationen XBRL-Analyseverarbeitung. Leistungsdaten durch Analyse von Daten im XBRL-Format(HTML-Format)Verarbeitung zum Extrahieren
2 Satz-Extraktionsprozess Verarbeitung zum Entfernen von Tags aus Daten im HTML-Format und zum Extrahieren nur japanischer Sätze
3 Extraktionsprozess für Analysezieldaten Verarbeitung, die die Teilungsverarbeitung und die Normalisierungsverarbeitung kombiniert. chABSA-In dem Code im Datensatz wird er gemeinsam innerhalb der Schleifenverarbeitung aufgerufen, die für jeden zu analysierenden Satz ausgeführt wird, und es war schwierig, die für die Verarbeitung verwendeten Ressourcen zu teilen und zu messen. Das Messziel ist die kombinierte Verarbeitung der beiden.

3.2.2 Vergleich separater Schreibbibliotheken

Im chABSA-Datensatz wird der Teilungsverarbeitungsabschnitt der Analyse-Datenextraktionsverarbeitung unter Verwendung von Janome implementiert. In diesem Experiment wird die in Janome implementierte Teilungsverarbeitung in die Verarbeitung in MeCab umgeschrieben und die erforderliche Verarbeitungszeit verglichen.

Die folgenden drei Punkte werden beim Umschreiben des Teilungsprozesses geändert.

(1) Abhängige Bibliothek

Janome wird als wörterbuchgekapseltes Python-Paket bereitgestellt und kann nur verwendet werden, indem das Paket mit pip installiert wird. Zusätzlich zur Installation des Python-Pakets mit pip erfordert MeCab die Installation der MeCab-Middleware (z. B. RPM-Paket) für jedes Betriebssystem.

(2) Aufrufen der Verarbeitung (Funktion) im Code

Obwohl das Importziel und der Name der Teilungsfunktion unterschiedlich sind, ist die aufrufende Methode selbst zwischen den Bibliotheken nahezu identisch.

(3) E / A-Datenformat im Code

Sowohl für Janome als auch für MeCab handelt es sich bei der Eingabe um Daten vom Typ Zeichenfolgen, in denen Sätze gespeichert werden. Der Ausgabedatentyp ist jedoch unterschiedlich. Die Ausgabe der Teilungsfunktion von Janome sind Daten vom Array-Typ, die jedes Wort als Element enthalten, während die Ausgabe der Teilungsfunktion von MeCab Daten vom Typ Zeichenkette sind, bei denen jedes Wort durch ein Leerzeichen halber Breite getrennt ist.

Wenn Sie beispielsweise den Datensatz für Textzeichenfolgen eingeben und den Code, der das Teilungsergebnis in Token ausgibt, neu schreiben, schreiben Sie ihn als Code 1 in Code 2 um.

Code 1 Beispiel für Split-Code mit Janome
##Janome Verwendungsbeispiel
from janome.tokenizer import Tokenizer
...(Kürzung)...

#Instanzerstellung
tokenizer = Tokenizer(wakati=True)

#Satzzeichenfolgen Daten Satz eingeben und das Teilungsergebnis in Token ausgeben
tokens = tokenizer.tokenize(sentence)

#Die definierten Token sind ein Array mit jedem Wort als Element
...(Kürzung)...
Code 2 Codebeispiel mit MeCab
##Beispiel für die Verwendung von Mecab
import MeCab
...(Kürzung)...

#MeCab-Instanz zur Ausgabe von Brüchen
mecab = MeCab.Tagger("-Owakati")

#Satzzeichenfolgen Daten Satz eingeben und das Teilungsergebnis in Token ausgeben
tokens = mecab.parse(sentence)

#Die definierten Token sind eine einzelne Zeichenfolge, in der Wörter durch ein Einzelbyte-Leerzeichen getrennt sind.
# tokens.split(" ")Dann die gleiche Ausgabe wie im Fall von Janome
...(Kürzung)...

3.3 Versuchsergebnisse

Die Abbildungen 1 bis 3 zeigen die Ergebnisse der Ausführung der in Tabelle 2 des ersten Teils gezeigten Datenvorverarbeitung des chABSA-Datensatzes. Abbildung 1 zeigt die Zeit, die zum Ausführen der einzelnen Prozesse benötigt wird, und Sie können die Gesamtausführungszeit und die Aufteilung der Prozesse 1 bis 3 anzeigen. Abbildung 2 zeigt die durchschnittliche CPU-Auslastungsrate während jeder Prozessausführung, und Abbildung 3 zeigt die durchschnittliche Speicherauslastung während jeder Prozessausführung separat für jeden Prozess. In jeder Abbildung wird die Verarbeitung Nr. 3 für die Janome-Implementierung und die MeCab-Implementierung separat dargestellt.

Abbildung 1 Verarbeitungszeit fig1.png

Aus Fig. 1 geht hervor, dass unabhängig davon, ob die Verarbeitung Nr. 3 in Janome oder MeCab implementiert ist, die Verarbeitung Nr. 1 etwa 26 Minuten dauert, während die anderen Verarbeitungen Nr. 2 und Nr. 3 höchstens etwa 2 Minuten lang kombiniert werden. Es ist ersichtlich, dass es für jeden Prozess einen großen Unterschied in der Ausführungszeit gibt. In dem zeitaufwändigen Prozess Nr. 1 werden für jedes Unternehmen einige Datendateien im MB xbrl-Format gelesen und analysiert, und der HTML-Code und die Metadaten der Leistungsdaten werden extrahiert. Da die durch Verarbeitung Nr. 1 extrahierten Daten für jedes Unternehmen eine Datenmenge von höchstens einigen zehn KB aufweisen, wird davon ausgegangen, dass zwischen Verarbeitung Nr. 1 und anderen Unternehmen ein Unterschied in der Reihenfolge der Verarbeitungszeit besteht.

Darüber hinaus ist aus 1 ersichtlich, dass der Prozess Nr. 3 zum Durchführen der Division und Normalisierung bei der Implementierung der Division mit Janome etwa achtmal schneller ist als bei der Implementierung mit MeCab. Dies liegt an der Tatsache, dass die Janome-Bibliothek selbst ein Python-Skript ist, während MeCab mit C ++ implementiert wird.

Abbildung 2 Durchschnittliche CPU-Auslastung fig2.png

Aus Fig. 2 ist ersichtlich, dass die CPU-Auslastungsrate für die Verarbeitung von # 1, # 2 und # 3-Janome ungefähr 90% beträgt, während die für # 3-MeCab ungefähr 70% beträgt. Dieser Unterschied wird durch das Verhältnis der Zeit beeinflusst, die zum Lesen der Daten in jedem Prozess benötigt wird.

Zum Beispiel dauert der Vergleich von # 3-Janome und # 3-MeCab, wie in Abbildung 1 gezeigt, # 3-MeCab für den gesamten Prozess ungefähr 5 Sekunden, während # 3-Janome ungefähr 40 Sekunden dauert. .. In jedem Prozess wird zusätzlich zum Lesen der gleichen Eingabedaten aus der Datei die japanische Korpusdatei zum Schreiben von Teilungen intern gelesen. Da die CPU beim Lesen dieser Datei wartet, ist es möglich, dass die CPU-Auslastung abnimmt. In ähnlicher Weise ist die CPU-Auslastung von Prozess Nr. 2 aufgrund des Verhältnisses von Datenlesezeit zu Prozesszeit geringer als die von Prozess Nr. 1.

Abbildung 3 Durchschnittliche Speichernutzung fig3.png

In Abbildung 3 sehen wir zunächst, dass die Speichernutzung zwischen den einzelnen Prozessen sehr unterschiedlich ist. Es wird angenommen, dass dies auf die Art und Menge der verarbeiteten Daten sowie auf die Art und Menge der Bibliotheken zurückzuführen ist, die zum Zeitpunkt der Ausführung der Verarbeitung geladen wurden. Der Prozess Nr. 1, der Leistungsinformationen aus Rohdaten im XBRL-Format extrahiert, bei dem es sich um eine Art XML handelt, und der Prozess Nr. 2, der Tags aus Leistungsdaten (XML + HTML) entfernt, verwenden ähnliche Bibliotheken. Die behandelte Datengröße ist jedoch unterschiedlich. Die Rohdaten, die den Wertpapierbericht jedes Unternehmens darstellen, das in Verarbeitung Nr. 1 eingegeben wurde, haben eine Größe von etwa mehreren MB, während die Eingabedaten in Verarbeitung Nr. 2 nur den Teil mit den Leistungsinformationen darstellen, sodass sie mehrere bis mehrere zehn KB groß sind. Es wird sein. Infolge dieses Unterschieds in der Größe der Eingabedaten, der aufgrund des Datenausdruckformats innerhalb des Programms, der Speicherung von Zwischendaten und des Unterschieds im detaillierten Verarbeitungsinhalt groß wird, beträgt der Unterschied in der Speichernutzung zwischen Verarbeitung Nr. 1 und Verarbeitung Nr. 2 mehrere zehn. Es wird angenommen, dass es MB wurde. In Bezug auf die Verarbeitung von # 3-Janome und # 3-MeCab ist die Implementierung der verwendeten Bibliothek sehr unterschiedlich. In Bezug auf die Sprache ist Janome rein in der Python-Sprache geschrieben, während MeCab in C ++ geschrieben ist. Es wird angenommen, dass sich der Unterschied in der internen Implementierungssprache in dem Unterschied in der Speichernutzung widerspiegelt.

3.4 Berücksichtigung der experimentellen Ergebnisse

In diesem Beitrag haben wir als Beispiel für die Datenvorverarbeitung in der Verarbeitung natürlicher Sprache ein Experiment durchgeführt, bei dem die Datenvorverarbeitung des chABSA-Datensatzes als Thema verwendet wurde. Es kann nicht gesagt werden, dass dies eine allgemeine Regel für die gesamte Verarbeitung natürlicher Sprache ist, aber als experimentelles Ergebnis eines Falles kann gesehen werden, dass die folgende Denkweise gemacht werden kann.

--Prämisse

--Denken

Zusammenfassung

――In diesem Beitrag haben wir die Ergebnisse der Leistungsüberprüfung und ihre Berücksichtigung zum Thema Datenvorverarbeitung im chABSA-Datensatz vorgestellt, der ein Implementierungsbeispiel für die Analyse der Emotionspolarität darstellt.

Recommended Posts

Leistungsüberprüfung der Datenvorverarbeitung in der Verarbeitung natürlicher Sprache
Überblick über die Verarbeitung natürlicher Sprache und ihre Datenvorverarbeitung
Arten der Vorverarbeitung in der Verarbeitung natürlicher Sprache und ihre Leistungsfähigkeit
[WIP] Vorverarbeiten von Notizen in der Verarbeitung natürlicher Sprache
Unerträgliche Aufmerksamkeitsmangel bei der Verarbeitung natürlicher Sprache
Einfaches Auffüllen von Daten, die in der Verarbeitung natürlicher Sprache verwendet werden können
[Verarbeitung natürlicher Sprache] Vorverarbeitung mit Japanisch
■ [Google Colaboratory] Vorverarbeitung der Verarbeitung natürlicher Sprache & Janome
Leistungsüberprüfung der Datenvorverarbeitung für maschinelles Lernen (numerische Daten) (Teil 1)
100 Sprachverarbeitung Knock-91: Vorbereitung von Analogiedaten
Python: Tiefes Lernen in der Verarbeitung natürlicher Sprache: Grundlagen
Python: Verarbeitung natürlicher Sprache
RNN_LSTM2 Verarbeitung natürlicher Sprache
Vorverarbeitung von Präfekturdaten
Python: Deep Learning in der Verarbeitung natürlicher Sprache: Implementierung eines Antwortsatzauswahlsystems
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Modell unter Verwendung eines Faltungsnetzwerks in der Verarbeitung natürlicher Sprache
Verarbeitung natürlicher Sprache 1 Morphologische Analyse
Verarbeitung natürlicher Sprache 3 Wortkontinuität
Verarbeitung natürlicher Sprache 2 Wortähnlichkeit
[Verarbeitung natürlicher Sprache] Ich habe versucht, die Bemerkungen jedes Mitglieds in der Slack-Community zu visualisieren
Verarbeitung natürlicher Sprache (Originaldaten) mit Word2Vec, entwickelt von US-amerikanischen Google-Forschern
Studieren Sie die Verarbeitung natürlicher Sprache mit Kikagaku
100 Sprachverarbeitung Knock Kapitel 1 in Python
Verarbeitung natürlicher Sprache für vielbeschäftigte Menschen
Künstliche Sprache Logivan und Verarbeitung natürlicher Sprache (Verarbeitung künstlicher Sprache)
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 02 Memo "Vorverarbeitung"
100 Sprachverarbeitung Knock-59: Analyse der S-Formel
Dockerfile mit den notwendigen Bibliotheken für die Verarbeitung natürlicher Sprache mit Python
Warum ist der verteilte Ausdruck von Wörtern für die Verarbeitung natürlicher Sprache wichtig?
Vorverarbeitung beim maschinellen Lernen 2 Datenerfassung
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Vorbereitung zum Starten der Verarbeitung natürlicher Sprache
Installationszusammenfassung des Analysators für die Verarbeitung natürlicher Sprache
[Word2vec] Lassen Sie uns das Ergebnis der Verarbeitung von Unternehmensbewertungen in natürlicher Sprache visualisieren
Vorverarbeitung beim maschinellen Lernen 4 Datenkonvertierung
Zusammenfassung der Mehrprozessverarbeitung der Skriptsprache
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 4 Schritt 15 Memo "Datenerfassung"
Sie werden in 100 Tagen Ingenieur. ――Tag 66 ――Programmieren ――Über die Verarbeitung natürlicher Sprache
Ich habe eine Art einfaches Bildverarbeitungswerkzeug in der Sprache Go erstellt.
Python: Vorverarbeitung beim maschinellen Lernen: Umgang mit fehlenden / Ausreißern / unausgeglichenen Daten
Antworten und Eindrücke von 100 Sprachverarbeitungsklopfen - Teil 1
Sprachverarbeitung 100 Knocks-44: Visualisierung abhängiger Bäume
100 Sprachverarbeitung Knock-22: Extraktion des Kategorienamens
Antworten und Eindrücke von 100 Sprachverarbeitungsklopfen - Teil 2
100 Sprachverarbeitung Knock-26: Entfernen von hervorgehobenem Markup
3. Verarbeitung natürlicher Sprache durch Python 2-1. Netzwerk für das gleichzeitige Auftreten
Python: Vorverarbeitung beim maschinellen Lernen: Datenerfassung
3. Verarbeitung natürlicher Sprache durch Python 1-1. Word N-Gramm
Trennung von Design und Daten in matplotlib
Konvertierung von Zeitdaten in 25-Uhr-Notation
Python: Vorverarbeitung beim maschinellen Lernen: Datenkonvertierung
Ich habe versucht, natürliche Sprache mit Transformatoren zu verarbeiten.
Vorverarbeitung beim maschinellen Lernen 1 Datenanalyseprozess
Beispiel für eine effiziente Datenverarbeitung mit PANDAS
Status jedes Python-Verarbeitungssystems im Jahr 2020
Praktische Warenmitteilung zur Verarbeitung natürlicher Sprache