Tolles Community-Modul

Rakuten MA

Japanische README (日本语ドキュメント)

Einführung

Rakuten MA (morphologischer Analysator) ist ein rein in JavaScript geschriebener morphologischer Analysator (Wortsegmentor + PoS-Tagger) für Chinesisch und Japanisch.

Rakuten MA hat die folgenden einzigartigen Funktionen:

  • Reine JavaScript-Implementierung. Funktioniert sowohl in modernen Browsern als auch in node.js.
  • Implementiert ein sprachunabhängiges Zeichen-Tagging-Modell und gibt Wortsegmentierung und PoS-Tags für Chinesisch/Japanisch aus.
  • Unterstützt die inkrementelle Aktualisierung von Modellen durch Online-Lernen (Soft Confidence Weighted, Wang et al. ICML 2012).
  • Anpassbarer Funktionsumfang.
  • Unterstützt Feature-Hashing, Quantisierung und Beschneidung für eine kompakte Modelldarstellung.
  • Gebündelt mit chinesischen und japanischen Modellen, die aus allgemeinen Korpora (CTB [Xue et al. 2005] und BCCWJ [Maekawa 2008]) und E-Commerce-Korpora trainiert wurden.

Demo

Sie können Rakuten MA auf der Demoseite ausprobieren (das Laden dieser Seite kann eine Weile dauern.)

Verwendungszweck

Download & Install

Da es sich bei Rakuten MA um eine JavaScript-Bibliothek handelt, ist keine Installation erforderlich. Klonen Sie das Git-Repository als

1
git clone https://github.com/rakuten-nlp/rakutenma.git

oder laden Sie das Zip-Archiv hier herunter: https://github.com/rakuten-nlp/rakutenma/archive/master.zip

Wenn Sie Node.js installiert haben, können Sie die Demo ausführen, indem Sie

1
node demo.js

was identisch mit dem unten stehenden Anwendungsbeispiel ist.

npm package

Sie können Rakuten MA auch als npm-Paket verwenden und installieren, indem Sie:

1
npm install rakutenma

Die Modelldateien finden Sie unter node_modules/rakutenma/.

Usage Example (on Node.js)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
// RakutenMA demo // Load necessary libraries var RakutenMA = require('./rakutenma'); var fs = require('fs'); // Initialize a RakutenMA instance // with an empty model and the default ja feature set var rma = new RakutenMA(); rma.featset = RakutenMA.default_featset_ja; // Let's analyze a sample sentence (from http://tatoeba.org/jpn/sentences/show/103809) // With a disastrous result, since the model is empty! console.log(rma.tokenize("彼は新しい仕事できっと成功するだろう。")); // Feed the model with ten sample sentences from tatoeba.com var tatoeba = JSON.parse(fs.readFileSync("tatoeba.json")); for (var i = 0; i < 10; i ++) { rma.train_one(tatoeba[i]); } // Now what does the result look like? console.log(rma.tokenize("彼は新しい仕事できっと成功するだろう。")); // Initialize a RakutenMA instance with a pre-trained model var model = JSON.parse(fs.readFileSync("model_ja.json")); rma = new RakutenMA(model, 1024, 0.007812); // Specify hyperparameter for SCW (for demonstration purpose) rma.featset = RakutenMA.default_featset_ja; // Set the feature hash function (15bit) rma.hash_func = RakutenMA.create_hash_func(15); // Tokenize one sample sentence console.log(rma.tokenize("うらにわにはにわにわとりがいる")); // Re-train the model feeding the right answer (pairs of [token, PoS tag]) var res = rma.train_one( [["うらにわ","N-nc"], ["に","P-k"], ["は","P-rj"], ["にわ","N-n"], ["にわとり","N-nc"], ["が","P-k"], ["いる","V-c"]]); // The result of train_one contains: // sys: the system output (using the current model) // ans: answer fed by the user // update: whether the model was updated console.log(res); // Now what does the result look like? console.log(rma.tokenize("うらにわにはにわにわとりがいる"));

Usage Example (on browsers)

Fügen Sie das folgende Code-Snippet in <head>Ihren HTML- Code ein .

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
<script type="text/javascript" src="rakutenma.js" charset="UTF-8"></script> <script type="text/javascript" src="model_ja.js" charset="UTF-8"></script> <script type="text/javascript" src="hanzenkaku.js" charset="UTF-8"></script> <script type="text/javascript" charset="UTF-8"> function Segment() { rma = new RakutenMA(model); rma.featset = RakutenMA.default_featset_ja; rma.hash_func = RakutenMA.create_hash_func(15); var textarea = document.getElementById("input"); var result = document.getElementById("output"); var tokens = rma.tokenize(HanZenKaku.hs2fs(HanZenKaku.hw2fw(HanZenKaku.h2z(textarea.value)))); result.style.display = 'block'; result.innerHTML = RakutenMA.tokens2string(tokens); } </script>

Die Analyse und das Ergebnis sehen so aus:

1 2 3
<textarea id="input" cols="80" rows="5"></textarea> <input type="submit" value="Analyze" onclick="Segment()"> <div id="output"></div>

Using bundled models to analyze Chinese/Japanese sentences

  1. Laden Sie ein vorhandenes Modell, zB model = JSON.parse(fs.readFileSync("model_file"));dann rma = new RakutenMA(model);oderrma.set_model(model);
  2. Geben Sie featsetje nach Sprache an (zB rma.featset = RakutenMA.default_featset_zh;für Chinesisch und rma.featset = RakutenMA.default_featset_ja;für Japanisch).
  3. Denken Sie daran, die 15-Bit-Funktions-Hashing-Funktion ( rma.hash_func = RakutenMA.create_hash_func(15);) zu verwenden, wenn Sie die gebündelten Modelle ( model_zh.jsonund model_ja.json) verwenden.
  4. Verwenden Sie rma.tokenize(input)diese Option, um Ihre Eingabe zu analysieren.

Training your own analysis model from scratch

  1. Bereiten Sie Ihr Trainingskorpus vor (eine Reihe von Trainingssätzen, bei denen ein Satz nur ein Array von korrekten [Token, PoS-Tag] ist).
  2. Initialisieren Sie eine RakutenMA-Instanz mit new RakutenMA().
  3. Die Angabe featset. (Und OPTIONAL, ctype_func, hash_func, etc.)
  4. Füttern Sie Ihre Trainingssätze einen nach dem anderen (vom ersten bis zum letzten) an die train_one(sent)Methode.
  5. Normalerweise konvergiert SCW nach einem epoch(ein Durchgang durch den gesamten Trainingskorpus) genug, aber Sie können Schritt 4 wiederholen, um eine noch bessere Leistung zu erzielen.

Siehe scripts/train_zh.js(für Chinesisch) und scripts/train_ja.js(für Japanisch), um ein Beispiel zu sehen, das zeigt, wie Sie Ihr eigenes Modell trainieren.

Re-training an existing model (domain adaptation, fixing errors, etc.)

  1. Laden Sie ein vorhandenes Modell und initialisieren Sie eine RakutenMA-Instanz (siehe "Verwenden von gebündelten Modellen zum Analysieren von chinesischen/japanischen Sätzen" oben).
  2. Bereiten Sie Ihre Trainingsdaten vor (dies können nur ein paar Sätze sein, je nachdem, was und wie viel Sie "nachtrainieren" möchten).
  3. Füttern Sie Ihre Trainingssätze nacheinander an die train_one(sent)Methode.

Reducing the model size

Die Modellgröße könnte auch nach der Anwendung von Feature-Hashing ein Problem für die clientseitige Verteilung darstellen.Wir haben ein Skript scripts/minify.jseingefügt, das die Feature-Quantisierung anwendet (siehe [Hagiwara und Sekine COLING 2014] für die Details), um die trainierte Modellgröße zu reduzieren.

Sie können es ausführen node scripts/minify.js [input_model_file] [output_model_file], um eine verkleinerte Version der Modelldatei zu erstellen. Denken Sie daran: Es löscht auch den "Sigma" -Teil des trainierten Modells, was bedeutet, dass Sie das verkleinerte Modell nicht mehr erneut trainieren können. Falls erforderlich, erneut trainieren zuerst das Modell, dann verkleinern.

API-Dokumentation

Konstrukteur Beschreibung
RakutenMA(model, phi, c) Erstellt RakutenMA Eine neue Instanz model(optional) spezifiziert die Objektmodellinstanz mit der Initialisierung von The RakutenMA phiund c(beide optional) sind Hyper Parameter des SCW (Standard: phi = 2048, c = 0.003906).
Methoden Beschreibung
tokenize(input) Tokenisiert input(String) und gibt ein tokenisiertes Ergebnis zurück ([Token, PoS-Tag]-Paare).
train_one(sent) Die Aktualisierungen Das aktuelle Modell (WENN erforderlich) die Verwendung der GEGEBENEN Antwort sent([token, the PoS Tag]-Paare) des Rückgabewerts IS EIN Objekt mit drei Eigenschaften ans, sys, und updated, WO ansIST DIE GEGEBENE Antwort (Same AS sent), sysIS Das System gibt das unter Verwendung des (alten) Modells aus und updatedist ein binäres (Wahr/Falsch) Flag, das bedeutet, ob das Modell aktualisiert wurde (weil syses anders war als ans) oder nicht.
set_model(model) Legt das Modell der Rakuten MA-Instanz auf fest model.
set_tag_scheme(scheme) Legt das Tag-Schema für die sequentielle Beschriftung fest. Derzeit werden "IOB2"und "SBIEO"unterstützt. Die Angabe anderer Tag-Schemata führt zu einer Ausnahme.
Eigenschaften Beschreibung
featset Gibt ein Array von Feature-Vorlagen (String) für die Analyse an. Sie können RakutenMA.default_featset_jaund RakutenMA.default_featset_zhals Standard-Feature-Sets für Japanisch bzw. Chinesisch verwenden. Weitere Informationen zu Feature-Vorlagen finden Sie unten ("Unterstützte Feature-Vorlagen").
ctype_func Gibt die Funktion an, die zum Konvertieren eines Zeichens in seinen Zeichentyp verwendet wird. RakutenMA.ctype_ja_default_funcist die für Japanisch verwendete Standardzeichentypfunktion. Alternativ können Sie RakutenMA.create_ctype_chardic_func(chardic)eine Zeichentypfunktion aufrufen , die ein Zeichen benötigt, um es nachzuschlagen chardicund seinen Wert zurückzugeben. (For Beispielsweise RakutenMA.create_ctype_chardic_func({"A": "type1"})gibt eine Funktion , fwo f("A")zurückkehrt "type1"und []sonst.)
hash_func Gibt die für das Feature-Hashing zu verwendende Hash-Funktion an. Default = undefined(kein Feature-Hashing) Eine Feature-Hashing-Funktion mit bit-bit-Hash-Raum kann durch Aufrufen erstellt werden RakutenMA.create_hash_func(bit).

Geschäftsbedingungen

Die Verbreitung, Änderung und akademische/kommerzielle Nutzung von Rakuten MA ist gestattet, sofern Sie die Apache-Lizenzversion 2.0 http://www.apache.org/licenses/LICENSE-2.0.html einhalten .

Wenn Sie Rakuten MA zu Forschungszwecken verwenden, zitieren Sie bitte unseren Artikel über Rakuten MA [Hagiwara und Sekine 2014]

FAQ (Häufig gestellte Fragen)

F: Welche Browser und Node.js-Versionen werden unterstützt?

  • A. Wir haben bestätigt, dass Rakuten MA in den folgenden Umgebungen ausgeführt wird:
    • Internet Explorer 8 (Version 8.0.7601.17414 oder höher)
    • Google Chrome (Version 35.0.1916.153 oder höher)
    • Firefox (Version 16.0.2 oder höher)
    • Safari (Version 6.1.5 oder höher)
    • Node.js (Version 0.10.13 oder höher)

F. Ist kommerzielle Nutzung erlaubt?

  • A. Ja, solange Sie die Allgemeinen Geschäftsbedingungen befolgen. Einzelheiten finden Sie oben unter „Allgemeine Geschäftsbedingungen“.

F. Ich habe einen Bug / Analysefehler / etc. gefunden. Wo soll ich mich melden?

  • A. Bitte erstellen Sie ein Issue unter Github Issues https://github.com/rakuten-nlp/rakutenma/issues .
  • Alternatively, können Sie eine Pull-Anfrage erstellen, wenn Sie den Code ändern. Rakuten MA hat eine Testsuite mit Jasmine http://jasmine.github.io/ . Bitte stellen Sie sicher, dass alle Tests erfolgreich sind (keine Fehler nach dem Ausführen jasmine-node spec) und schreiben Sie Ihre eigenen ( falls erforderlich), bevor Sie einen Pull-Request senden.
  • Finally, wenn Ihre Frage immer noch nicht gelöst ist, kontaktieren Sie uns bitte unter prj-rakutenma [at] mail.rakuten.com.

F. Die Tokenisierungsergebnisse sehen seltsam aus (insbesondere wird der Satz in einzelne Zeichen ohne PoS-Tags aufgeteilt)

  • A. Überprüfen Sie, ob Sie den gleichen Funktionssatz ( featset) und die gleiche Feature- Hashing-Funktion ( hash_func) für das Training verwenden. Denken Sie daran, die 15-Bit-Feature-Hashing-Funktion ( rma.hash_func = RakutenMA.create_hash_func(15);) zu verwenden, wenn Sie die gebündelten Modelle ( model_zh.jsonund model_ja.json) verwenden.

F. Welche Skripte (vereinfacht/traditionell) werden für Chinesisch unterstützt?

  • A. Derzeit wird nur vereinfachtes Chinesisch unterstützt.

F: Können wir dieselbe Modelldatei im JSON-Format für Browser verwenden?

  • A. Ja und nein. Obwohl die interne Datenstruktur von Modellen gleich ist, müssen Sie Zuweisungen hinzufügen (z. B. var model = [JSON representation];), um in Browsern darauf zu verweisen. Sehen Sie sich den Unterschied zwischen model_zh.json(für Node.js) und model_zh.js(für Browser) an. Es gibt ein Mini-Skript, scripts/convert_for_browser.jsdas dies für Sie erledigt.Wir empfehlen Ihnen, an Node.js für Modelltraining usw. zu arbeiten und es dann für Browseranwendungen zu konvertieren.

Anhang

Supported feature templates

Feature-Vorlage Beschreibung
w7 Zeichen-Unigramm (c-3)
w8 Zeichen-Unigramm (c-2)
w9 Zeichen-Unigramm (c-1)
w0 Zeichen-Unigramm (c0)
w1 Zeichen-Unigramm (c+1)
w2 Zeichen-Unigramm (c+2)
w3 Zeichen-Unigramm (c+3)
c7 Zeichentyp Unigramm (t-3)
c8 Zeichentyp Unigramm (t-2)
c9 Zeichentyp Unigramm (t-1)
c0 Zeichentyp Unigramm (t0)
c1 Zeichentyp Unigramm (t+1)
c2 Zeichentyp Unigramm (t+2)
c3 Zeichentyp Unigramm (t+3)
b7 Zeichenbigramm (c-3 c-2)
b8 Zeichenbigramm (c-2 c-1)
b9 Zeichenbigramm (c-1 c0)
b1 Zeichenbigramm (c0 c+1)
b2 Zeichenbigramm (c+1 c+2)
b3 Zeichenbigramm (c+2 c+3)
d7 Zeichentyp Bigramm (t-3 t-2)
d8 Zeichentyp Bigramm (t-2 t-1)
d9 Zeichentyp Bigramm (t-1 t0)
d1 Zeichentyp Bigramm (t0 t+1)
d2 Zeichentyp Bigramm (t+1 t+2)
d3 Zeichentyp Bigramm (t+2 t+3)
Andere Wenn Sie eine benutzerdefinierte Feature-Funktion im featsetArray angeben , wird die Funktion mit zwei Argumenten aufgerufen _tund i, wobei _teine Funktion ist, die eine Position einnimmt jund das Zeichenobjekt an dieser Position zurückgibt, und idie aktuelle Position ist mit zwei Eigenschaften cund tdie Charakter und Charakter Typ. der Rückgabewert dieser Funktion als Merkmalswert verwendet wird. (Zum Beispiel, wenn Sie eine Funktion angeben , f(_t, i)die returns _t(i).t;, dann ist es das Zeichen Typen der aktuellen Position zurückkehrt, das ist im Grunde das gleiche wie die Vorlage c0.)

PoS tag list in Chinese

Schild Beschreibung
ANZEIGE Adverb
WIE Aspekt Partikel
BA ba3 (in ba-Bauweise)
CC Koordinierende Konjunktion
CD Kardinalzahl
CS Unterordnende Konjunktion
DEZ de5 (Komplementisierer/Nominalisierer)
DEG de5 (Genitiv/Assoziativ)
DER de5 (Ergebnis)
DEV de5 (Weise)
DT Bestimmer
ETC Andere
FW Fremdwort
IJ Zwischenruf
JJ Anderer Substantiv-Modifikator
PFUND bei4 (in langer bei-Bauweise)
LC Lokalisierer
m Wort messen
MSP Andere Partikel
NN Anderes Substantiv
NN-KURZ Anderes Substantiv (Abk.)
NR Eigenname
NR-KURZ Eigenname (Abkürzung)
NT Zeitliches Substantiv
NT-KURZ Zeitliches Substantiv (Abk.)
OD Ordinalzahl
AN Lautmalerei
P Präposition
PN Pronomen
PU Interpunktion
SB bei4 (kurz bei-Konstruktion)
SP Satzletzter Partikel
URL URL
VA Prädikatives Adjektiv
VC Kopula
VE du3 (Hauptverb)
VV Andere Verben
x Andere

PoS tag list in Japanese and correspondence to BCCWJ tags

Schild Ursprünglicher JA-Name Englisch
Ac Adjektiv-allgemein Adjektiv-Common
A-dp Adjektive-nicht selbstständig Adjektivabhängig
C Verbindungswörter Verbindung
D Synonym Pronomen
E Englisch englisches Wort
F Adverb Adverb
NS Berührende Verben-Allgemein Interjektion-Common
Jc Formwörter-allgemein Adjektiv Substantiv-Common
J-Tari Formwort-タリ Adjektiv Nomen-Tari
J-xs Formwörter-Hilfsverbstamm Adjektiver Nomen-AuxVerb-Stamm
M-aa Förderkennzeichen-AA Hilfszeichen-AA
Mc Förderzeichen-allgemein Hilfszeichen-Common
M-cp Subventionskennzeichen-geschlossene Klammer Hilfszeichen-Open Parenthesis
Mopp Förderkennzeichen-offen in Klammern Hilfszeichen-Klammer schließen
MP Förderzeitraum Hilfszeichen-Periode
Nn Substantiv-Substantiv Substantiv-Substantiv
N-nc Substantiv - Substantiv Substantiv-Common Substantiv
N-pn Substantiv Substantiv-Eigenes Substantiv
N-xs Substantiv-Hilfsverbstamm Nomen-AuxVerb-Stamm
Ö そ の 他 Andere
P Gemeinsame Wörter Präfix
P-fj Hilfs-Adverbial Partikel-Adverbial
P-jj Hilfswörter-Quasi-subjektive Hilfswörter Partikel-Phrasal
NS Hilfswörter-Fall Hilfswörter Partikel-Gehäuse-Kennzeichnung
P-rj Hilfswörter-Hilfswörter Partikelbindung
P-sj Hilfswörter-Hilfswörter Teilchen-Konjunktiv
Qa Suffix-Adjektiv Suffix-Adjektiv
Qj Wörter in Suffixform Suffix-Adjektiv-Substantiv
Qn Suffix-Nomen Suffix-Nomen
Qv Suffix-Verbal Suffix-Verb
R Verbundene Wörter Adnomiales Adjektiv
SC Mark-allgemein Zeichen-Gemeinsam
Sl Markierungstext Zeichen-Brief
U URL URL
Vc Verb-allgemein Verb-Common
V-dp Verben-Unabhängigkeitsmöglichkeit Verb-abhängig
W leer Leerzeichen
x Hilfsverb AuxVerb

Danksagung

Die Entwickler möchten Satoshi Sekine, Satoko Marumoto, Yoichi Yoshimoto, Keiji Shinzato, Keita Yaegashi und Soh Masuko für ihren Beitrag zu diesem Projekt danken.

Verweise

Masato Hagiwara und Satoshi Sekine, Lightweight Client-Side Chinese/Japanese Morphological Analyzer Based on Online Learning, COLING 2014 Demo Session, Seiten 39-43, 2014. [ PDF ]

Kikuo Maekawa, Zusammenstellung des Kotonoha-BCCWJ-Korpus (auf Japanisch) Nihongo no kenkyu (Studien auf Japanisch), 4(1): 82–95, 2008. (Einige englische Informationen finden Sie hier .) [ Site ]

Jialei Wang, Peilin Zhao und Steven C. Hoi. Exact soft Confidence-weighted learning. In Proc. of ICML 2012, Seiten 121–128, 2012. [ PDF ]

. Naiwen Xue Fei Xia, Fu-dong Chiou und Marta Palmer Die Penn Chinese Treebank: Phrasenstruktur Anmerkung eines großen Korpus Natur Language Engineering, 11 (2):. 207-238, 2005. [ PDF ] [ Website ]


© 2014, Rakuten NLP-Projekt 2015. Alle Rechte vorbehalten. / Gesponsert von Rakuten, Inc. und Rakuten Institute of Technology .