TL; DR
Einführung in konoha, eine Bibliothek zum Tokenisieren von Anweisungen. (Alter tiny_tokenizer) Sie können es wie ↓ verwenden. Was ist das ~
from konoha import WordTokenizer
sentence = 'Studium der Verarbeitung natürlicher Sprache'
tokenizer = WordTokenizer('MeCab')
print(tokenizer.tokenize(sentence)) # -> [Natur,Sprache,wird bearbeitet,Zu,Studie,Shi,Hand,ich,Masu]
tokenizer = WordTokenizer('Kytea')
print(tokenizer.tokenize(sentence)) # -> [Natur,Sprache,wird bearbeitet,Zu,Studie,Shi,Hand,ich,Gut,Su]
tokenizer = WordTokenizer('Sentencepiece', model_path="data/model.spm")
print(tokenizer.tokenize(sentence)) # -> [▁,Natur,Sprache,wird bearbeitet,Zu,Studie,Shi,Ist]
Im Gegensatz zu Sprachen wie Englisch hat Japanisch keine klaren Trennzeichen an den Wortgrenzen. Aus diesem Grund ist es bei der Analyse von Japanisch zunächst erforderlich, den Satz in einige Einheiten (z. B. Wörter) zu unterteilen. Dieser Teilungsprozess wird in Worteinheiten unterteilt, Wörter werden weiter in Unterworteinheiten unterteilt und so weiter. Und es gibt Dinge, die die Zeichenkette im Satz in jedes Zeichen unterteilen. In diesem Artikel werden die durch die obigen Einheiten geteilten Teilzeichenfolgen als Token bezeichnet. Es gibt verschiedene Methoden zur Tokenisierung. Morphologische Analysegeräte, die häufig bei der Analyse japanischer Texte verwendet werden, führen auch eine Wortsegmentierung durch. (Zusätzlich zur Wortteilung führt die morphologische Analyse eine Wortüberschriften- und Teilwort-Tag-Schätzung durch.)
Verwenden Sie für die wortweise Teilung ein Wörterbuch, um ein Gitter zu erstellen, und verwenden Sie dann MeCab, um die optimale Wortfolge zu bestimmen. Es gibt Algorithmen wie Kytea, die Wortgrenzen auf Zeichenebene bestimmen. Diese Algorithmen können das gleiche Teilungsergebnis oder unterschiedliche Teilungsergebnisse zurückgeben. Selbst wenn der Teilungsalgorithmus derselbe ist, ändert sich die Worteinheit, wenn das Teilesystem unterschiedlich ist.
Unterwörter sind mehr unterteilte Wörter. Seine Wirksamkeit wurde durch neuronale maschinelle Übersetzung bestätigt. Als typischer Tokenword für Unterworteinheiten, der in der japanischen Textanalyse verwendet wird Satzstück ist berühmt.
Für diejenigen, die japanisches Text Mining betreiben Verwenden Sie normalerweise MeCab + NEologd? Es kann Fälle geben, in denen in der Forschung häufig Kytea verwendet wird. Auch in der kürzlich besprochenen Abhängigkeitsanalyse-Bibliothek Ginza Verwendung eines morphologischen Analysators namens SudachiPy (Python-Implementierung von Sudachi) usw. Für die Analyse auf Wortebene werden verschiedene Analysegeräte verwendet. Es ist schwierig zu bestimmen, welcher Analysator für Sie am besten geeignet ist.
Darüber hinaus wurde in den letzten Jahren hauptsächlich im Zusammenhang mit maschineller Übersetzung "Die Aufgabenleistung ist besser, wenn die Token in Unterwörter unterteilt sind, anstatt die Ergebnisse des morphologischen Analysators zu verwenden." Es wurde auch berichtet, dass eine auf Unterwörtern basierende Unterteilung häufig angewendet wird.
Die Tokenisierung auf Zeichenebene ist durch eine geringe Anzahl von Zeichentypen im Vergleich zur Anzahl der Worttypen gekennzeichnet. Die Anzahl der Worttypen ist im Allgemeinen viel größer als die Anzahl der Zeichentypen, und die Tokenisierung auf Zeichenebene hat den Effekt, dass die Vokabulargröße verringert wird. In der Studie zur Eigenausdrucksextraktion gibt es beispielsweise einen Ansatz zum Hinzufügen von Features auf Zeichenebene zu LSTM-Features. Viele neuere Studien haben diesen Ansatz übernommen. (Das im Link aufgeführte Papier ist alt, aber es ist mein Lieblingspapier)
In welcher Einheit sollten wir in dieser Situation die Aussage tokenisieren? Im Allgemeinen verstehe ich, dass die Antwort auf diese Frage "** aufgabenabhängig **" ist und es keine einzige Antwort gibt. Aus diesem Grund "benutze ich MeCab + NEologd, weil viele Leute es benutzen." "Da das Papier Subwörter verwendet, werde ich vorerst mit Subwörtern arbeiten." Solche Optionen werden in der Regel getroffen.
Für aktuelle Aufgaben zur Verarbeitung natürlicher Sprache (insbesondere bei Verwendung neuronaler Netze) Es gibt viele Dinge, die genauso bezahlt werden müssen wie die Tokenisierung. (Beispiel: Architektur, verborgene Schichtdimensionen, Optimierer, Lernrate ... usw.), Vor diesem Hintergrund steht die Methode der Tokenisierung am Anfang der Lösung des Problems. Ich denke, die aktuelle Situation ist, dass oft entschieden wird, "Nein" zu sein. Aber sind andere Tokenisierungsmethoden wirklich einen Versuch wert? Ich finde es lohnenswert, verschiedene Tokenisierungsmethoden auszuprobieren Wir haben eine Bibliothek entwickelt, um die Tokenisierungsmethode einfach zu wechseln. Dies ist der Grund für die Entwicklung von Konoha.
Das Wechseln von Tokenizern kostet oft etwas. Alle oben gezeigten morphologischen Analysatoren und Tokenizer verfügen über Python-Wrapper. Benutzer können diese Tools von Python aus verwenden, indem sie die Wrapper-Bibliothek installieren.
Die Wrapper-Bibliotheken bieten jedoch APIs mit unterschiedlichen Redewendungen. (Ich denke, es ist natürlich, weil jeder Analysator und seine Wrapper-Bibliothek von verschiedenen Autoren geschrieben wurden.) Wenn Sie daher den Ausgang mehrerer Analysegeräte je nach Situation umschalten möchten, Sie müssen die Ebene implementieren, die die Unterschiede in den Redewendungen dieser APIs absorbiert.
Es gibt eine Bibliothek namens JapaneseTokenizer. (GitHub-Repository: Kensuke-Mitsuzawa / JapaneseTokenizers) Wie konoha bietet JapaneseTokenizer auch Wrapper für mehrere Tokenizer. JapaneseTokenizer bietet eine Schnittstelle für mehrere morphologische Analysegeräte. JapaneseTokenizer kann verwendet werden, um Satzanalyseergebnisse nach bestimmten Teilwort-Tags usw. zu filtern. Es hat viele praktische Funktionen, die für die Textanalyse nützlich sind. Es ist ein sehr praktisches Werkzeug für die Verarbeitung natürlicher Sprache unter Verwendung der Ergebnisse mehrerer morphologischer Analysegeräte.
konoha
Auf der anderen Seite bietet der winzige Tokenizer derzeit keine Funktionen wie die Teilwortfilterung. Der winzige Tokenizer ist eine Bibliothek, die den Tokenisierungsprozess jedes Analysators abstrahiert. Es bietet Funktionen zur Unterteilung von Unterworteinheiten und zur Unterteilung auf Zeichenebene, auf die JapaneseTokenizer nicht abzielt.
Die Position dieser Bibliothek ist ein Wrapper für den Python-Wrapper. Vielen Dank an alle, die den Python-Wrapper für den Analysator bereitgestellt haben. Der Zweck dieser Bibliothek besteht darin, die Unterschiede in den Schnittstellen dieser Bibliotheken auszugleichen. Durch die Verwendung von konoha können Benutzer mehrere Analysegeräte mit einer einheitlichen API verwenden.
Zunächst zeige ich Ihnen ein Beispiel mit MeCab.
In diesem Beispiel verwendet das Wörterbuch mecab-ipadic.
Wenn Sie macOS verwenden, mecab
, mecab-ipadic
,
Wenn Sie Ubuntu verwenden, installieren Sie bitte zusätzlich zu den oben genannten "libmecab-dev".
Der Betrieb wurde für andere Distributionen nicht überprüft.
(Wenn mecab
, mecab-config
ausgeführt werden kann und das Wörterbuch installiert ist, funktioniert es ohne Probleme.)
Wenn Sie die Docker-Datei im GitHub-Repository erstellen und die Umgebung erstellen, sind alle Vorbereitungen abgeschlossen.
--Code
from konoha import WordTokenizer
sentence = 'Studium der Verarbeitung natürlicher Sprache'
tokenizer = WordTokenizer('MeCab')
print(tokenizer.tokenize(sentence))
--Ausgabe
[Natur,Sprache,wird bearbeitet,Zu,Studie,Shi,Hand,ich,Masu]
Als nächstes verwenden wir Kytea. Wieder müssen Sie Kytea bauen. (Siehe auch die Docker-Datei im Repository.)
--Code
from konoha import WordTokenizer
sentence = 'Studium der Verarbeitung natürlicher Sprache'
tokenizer = WordTokenizer('Kytea')
print(tokenizer.tokenize(sentence))
--Ausgabe
[Natur,Sprache,wird bearbeitet,Zu,Studie,Shi,Hand,ich,Gut,Su]
Wenn Sie einen Satz in Unterwörter unterteilen möchten, können Sie auch Satzstück verwenden. Bei Verwendung von Satzstück muss die Modelldatei angegeben werden. Übergeben Sie den Pfad zur Modelldatei an "model_path".
--Code
from konoha import WordTokenizer
sentence = 'Studium der Verarbeitung natürlicher Sprache'
tokenizer = WordTokenizer('Sentencepiece', model_path="data/model.spm")
print(tokenizer.tokenize(sentence))
--Ausgabe
[▁,Natur,Sprache,wird bearbeitet,Zu,Studie,Shi,Ist]
Auf diese Weise können mehrere Analysatoren auf einheitliche Weise verwendet werden, indem einfach der Wert des an "WordTokenizer" übergebenen Arguments geändert wird. Dies macht es einfach, während der Versuchsphase mit verschiedenen Tokenisierern zu experimentieren.
Ein morphologischer Analysator ist ebenfalls im Tokenizer enthalten. Von den derzeit von konoha unterstützten Tokenizern Die morphologischen Analysatoren sind "MeCab", "Kytea" und "Sudachi (SudachiPy)". In Bezug auf diese, ob die vom morphologischen Analysator gegebenen Informationen wie das Teil-der-Sprache-Tag erhalten werden sollen oder nicht, wenn eine Tokenisierung durchgeführt wird. Es kann optional gesteuert werden.
Ein Beispiel für die Verwendung von "SudachiPy" ist unten dargestellt.
--Code
from konoha import WordTokenizer
sentence = 'Studium der Verarbeitung natürlicher Sprache'
tokenizer = WordTokenizer('Sudachi', mode='A', with_postag=True)
print(tokenizer.tokenize(sentence))
--Ausgabe
[Natur(Substantiv),Sprache(Substantiv),wird bearbeitet(Substantiv),Zu(Partikel),Studie(Substantiv),Shi(Verb),Hand(
Partikel),ich(Verb),Masu(助Verb)]
Die Ausgabe von "tokenizer.tokenize" ist eine Instanz der "Token" -Klasse. Die folgenden Instanzvariablen sind in der Token-Klasse definiert. (Auszug aus der Dokumentzeichenfolge der Token-Klasse)
Informationen, die der Analysator nicht zurückgibt, sind "Keine".
Zum Beispiel verwendet token.normalized_form
SudachiPy und Und nur wenn "with_postag" "True" ist, ist der Wert nicht "None". (
Token ist ein Element des Arrays von Token-Strings, die von
tokenizer.tokenize` ausgegeben werden.)
"""
surface (str)
surface (original form) of a word
postag (str, default: None)
part-of-speech tag of a word (optional)
postag2 (str, default: None)
detailed part-of-speech tag of a word (optional)
postag3 (str, default: None)
detailed part-of-speech tag of a word (optional)
postag4 (str, default: None)
detailed part-of-speech tag of a word (optional)
inflection (str, default: None)
conjugate type of word (optional)
conjugation (str, default: None)
conjugate type of word (optional)
base_form (str, default: None)
base form of a word
yomi (str, default: None)
yomi of a word (optional)
pron (str, default: None)
pronounciation of a word (optional)
normalized_form (str, default: None)
normalized form of a word (optional)
Note that normalized_form is only
available on SudachiPy
"""
Wenn Sie das Benutzerwörterbuch verwenden möchten, verwenden Sie "user_dictionary_path" von "WordTokenizer" Übergeben Sie den Pfad im benannten Argument an das Benutzerwörterbuch.
from konoha import WordTokenizer
sentence = 'Studium der Verarbeitung natürlicher Sprache'
tokenizer = WordTokenizer('MeCab', user_dictionary_path="path/to/user_dict")
print(tokenizer.tokenize())
Ich möchte mecab-ipadic-NEologd
verwenden,
Oder wenn Sie das Systemwörterbuch verwenden möchten, das Sie mithilfe des Korpus selbst neu gelernt haben
Es ist möglich, einen Tokenizer durch Angabe eines Systemwörterbuchs zu generieren.
Da das Argument "system_dictionary_path" in "WordTokenizer" generiert wird,
Geben Sie den Pfad zum Systemwörterbuch an, das Sie verwenden möchten.
from konoha import WordTokenizer
sentence = 'Studium der Verarbeitung natürlicher Sprache'
tokenizer = WordTokenizer('MeCab', system_dictionary_path="path/to/system_dict")
print(tokenizer.tokenize())
In diesem Dokument handelt es sich um eine Bibliothek zur Verwendung mehrerer Tokenizer mit derselben Schnittstelle. Wir haben Konoha eingeführt. Verwenden Sie diese Bibliothek, wenn Sie sich fragen, welcher Analysator zu Beginn der Textanalyse verwendet werden soll Der Analysator kann einfach umgeschaltet werden. Ich habe auch vor, mit MeCab zu experimentieren, aber meine früheren Forschungen verwenden andere Analysegeräte. Selbst in dem Fall, in dem Sie Code schreiben müssen, um einen anderen Analysator zum Vergleich zu verwenden Durch Einfügen von konoha können Sie problemlos mit demselben Code experimentieren. Ich hoffe, es hilft Menschen, die natürliche Sprache auf dem Gebiet verarbeiten, und solchen, die natürliche Sprache in der Forschung verarbeiten. Bitte benutzen Sie es, wenn Sie möchten, danke.
Um Kytea unter Ubuntu 18.04 zu erstellen, diese Pull-Anfrage Muss importiert werden. Weitere Informationen finden Sie in der Docker-Datei im Konoha-Repository.
Recommended Posts