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
Das Inhaltsverzeichnis dieses Beitrags lautet wie folgt.
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.
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 |
[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. |
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.
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.
Obwohl das Importziel und der Name der Teilungsfunktion unterschiedlich sind, ist die aufrufende Methode selbst zwischen den Bibliotheken nahezu identisch.
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.
##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)...
##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)...
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
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
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
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.
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
――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