Tolles Community-Modul

Rakuten MA

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

Einführung

Rakuten MA (morphologischer Analysator) ist ein morphologischer Analysator (Wortsegmentierer + PoS-Tagger) für Chinesisch und Japanisch, der ausschließlich in JavaScript geschrieben ist.

Rakuten MA verfügt über die folgenden einzigartigen Funktionen:

  • Reine JavaScript-Implementierung. Funktioniert sowohl auf modernen Browsern als auch auf node.js.
  • Implementiert ein sprachunabhängiges Zeichen-Tagging-Modell. 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 Pruning 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.)

Verwendung

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

1
node demo.js

Dies ist identisch mit dem folgenden Anwendungsbeispiel.

npm package

Sie können Rakuten MA auch als npm-Paket verwenden. Sie können es wie folgt installieren:

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 den folgenden Codeausschnitt 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, z. B. model = JSON.parse(fs.readFileSync("model_file"));dann rma = new RakutenMA(model);oderrma.set_model(model);
  2. Geben Sie featsetabhängig von Ihrer Sprache an (z. B. 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-Feature-Hashing-Funktion ( ) zu verwenden rma.hash_func = RakutenMA.create_hash_func(15);, wenn Sie die gebündelten Modelle ( model_zh.jsonund model_ja.json) verwenden.
  4. Verwenden Sie diese Option rma.tokenize(input), um Ihre Eingaben zu analysieren.

Training your own analysis model from scratch

  1. Bereiten Sie Ihren Trainingskorpus vor (eine Reihe von Trainingssätzen, wobei ein Satz nur ein Array korrekter [Token, PoS-Tag] ist).
  2. Initialisieren Sie eine RakutenMA-Instanz mit new RakutenMA().
  3. Geben Sie an featset. (und optional , ctype_funcusw. hash_func)
  4. Geben Sie Ihre Trainingssätze nacheinander (vom ersten bis zum letzten) an die train_one(sent)Methode weiter.
  5. epochNormalerweise konvergiert SCW nach einem (einem Durchgang durch den gesamten Trainingskorpus) ausreichend, Sie können jedoch Schritt 4 wiederholen, um eine noch bessere Leistung zu erzielen.

Unter scripts/train_zh.js(für Chinesisch) und scripts/train_ja.js(für Japanisch) finden Sie ein Beispiel, 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 gebündelter Modelle zur Analyse chinesischer/japanischer Sätze“ oben)
  2. Bereiten Sie Ihre Trainingsdaten vor (dies können nur ein paar Sätze sein, je nachdem, was und wie viel Sie „neu trainieren“ möchten).
  3. Geben Sie Ihre Trainingssätze einzeln an die train_one(sent)Methode weiter.

Reducing the model size

Die Modellgröße könnte auch nach Anwendung von Feature-Hashing immer noch ein Problem für die clientseitige Verteilung darstellen. Wir haben ein Skript eingefügt, das scripts/minify.jsFeature-Quantisierung anwendet (Einzelheiten finden Sie in [Hagiwara und Sekine COLING 2014]), um die Größe des trainierten Modells zu reduzieren.

Sie können es ausführen node scripts/minify.js [input_model_file] [output_model_file], um eine minimierte Version der Modelldatei zu erstellen. Denken Sie daran: Es löscht auch den „Sigma“-Teil des trainierten Modells, was bedeutet, dass Sie das minimierte Modell nicht mehr erneut trainieren können. Führen Sie bei Bedarf ein erneutes Training durch Zuerst das Modell und dann minimieren.

API-Dokumentation

Konstrukteur Beschreibung
RakutenMA(model, phi, c) Erstellt eine neue RakutenMA-Instanz. model(optional) Gibt das Modellobjekt an, mit dem die RakutenMA-Instanz initialisiert werden soll. phiund c(beide optional) sind Hyperparameter von SCW (Standard: phi = 2048, c = 0.003906).
Methoden Beschreibung
tokenize(input) Tokenisiert input(String) und gibt tokenisiertes Ergebnis zurück ([Token, PoS-Tag]-Paare).
train_one(sent) Aktualisiert das aktuelle Modell (falls erforderlich) mithilfe der angegebenen Antwort sent([Token, PoS-Tag]-Paare). Der Rückgabewert ist ein Objekt mit drei Eigenschaften ans: sys, und updated, wobei ansdie angegebene Antwort (identisch mit sent) sysdie Systemausgabe ist das (alte) Modell und updatedist ein binäres (Wahr/Falsch)-Flag, das angibt, ob das Modell aktualisiert wurde (weil syses sich von unterschied ans) oder nicht.
set_model(model) Setzt das Modell der Rakuten MA-Instanz auf model.
set_tag_scheme(scheme) Legt das sequentielle Beschriftungs-Tag-Schema 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) an, die für die Analyse verwendet werden. Sie können RakutenMA.default_featset_jaund RakutenMA.default_featset_zhals Standard-Feature-Sets für Japanisch bzw. Chinesisch verwenden. Einzelheiten zu Feature-Vorlagen finden Sie weiter 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 standardmäßige Zeichentypfunktion, die für Japanisch verwendet wird. Alternativ können Sie aufrufen, RakutenMA.create_ctype_chardic_func(chardic)um eine Zeichentypfunktion zu erstellen, die ein Zeichen zum Nachschlagen annimmt chardicund seinen Wert zurückgibt. (Für Gibt beispielsweise RakutenMA.create_ctype_chardic_func({"A": "type1"})eine Funktion zurück , fbei der f("A")zurückgegeben wird , "type1"und []andernfalls.)
hash_func Gibt die Hash-Funktion an, die für das Feature-Hashing verwendet werden soll. Standard = undefined(kein Feature-Hashing). Eine Feature-Hashing-Funktion mit bit-Bit-Hash-Speicherplatz kann durch Aufrufen von erstellt werden RakutenMA.create_hash_func(bit).

Geschäftsbedingungen

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

Wenn Sie Rakuten MA für Forschungszwecke 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 läuft:
    • 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 eine kommerzielle Nutzung erlaubt?

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

F. Ich habe einen Fehler/Analysefehler usw. gefunden. Wo soll ich ihn melden?

  • A. Bitte erstellen Sie ein Problem 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 verfügt über eine Testsuite mit Jasmine http://jasmine.github.io/ . Bitte stellen Sie sicher, dass alle Tests erfolgreich sind (keine Fehler nach der Ausführung jasmine-node spec) und schreiben Sie Ihre eigene ( (falls erforderlich), bevor Sie eine Pull-Anfrage senden.
  • FinallyWenn Ihre Frage immer noch nicht gelöst ist, kontaktieren Sie uns bitte unter prj-rakutenma [at] mail.rakuten.com.

F. Die Ergebnisse der Tokenisierung sehen seltsam aus (insbesondere ist der Satz in einzelne Zeichen ohne PoS-Tags aufgeteilt).

  • A. Überprüfen Sie, ob Sie denselben Funktionssatz ( featset) und die gleiche Feature-Hashing-Funktion ( hash_func) verwenden, die für das Training verwendet wurden. 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 Schriften (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 dieselbe ist, müssen Sie eine Zuweisung (z. B. var model = [JSON representation];) hinzufügen, 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.js, das dies für Sie erledigt. Wir empfehlen Ihnen, für Modelltraining usw. an Node.js zu arbeiten und es dann für die Verwendung im Browser zu konvertieren.

Anhang

Supported feature templates

Feature-Vorlage Beschreibung
w7 Zeichenunigramm (c-3)
w8 Zeichenunigramm (c-2)
w9 Zeichenunigramm (c-1)
w0 Zeichenunigramm (c0)
w1 Zeichenunigramm (c+1)
w2 Zeichenunigramm (c+2)
w3 Zeichenunigramm (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 _tes sich um eine Funktion handelt, die eine Position einnimmt jund das Zeichenobjekt an dieser Position zurückgibt, und izwar die aktuelle Position. Ein Zeichenobjekt ist ein Objekt mit zwei Eigenschaften c, tnämlich Zeichen bzw. Zeichentyp. Der Rückgabewert dieser Funktion wird als Merkmalswert verwendet. (Wenn Sie beispielsweise eine Funktion angeben, f(_t, i)die returns _t(i).t;, dann gibt sie den Zeichentyp der aktuellen Position zurück, d. h im Grunde das Gleiche wie die Vorlage c0. )

PoS tag list in Chinese

Etikett Beschreibung
ANZEIGE Adverb
ALS Aspektpartikel
BA ba3 (in ba-Bauweise)
CC Koordinierende Konjunktion
CD Kardinalzahl
CS Untergeordnete Konjunktion
DEZ de5 (Komplementierer/Nominalisierer)
DEG de5 (Genitiv/Assoziativ)
DER de5 (Resultativ)
ENTW de5 (Manier)
DT Determinator
USW Andere
FW Fremdwort
ij Zwischenruf
JJ Anderer Substantivmodifikator
PFUND bei4 (in langer Bei-Konstruktion)
LC Lokalisierer
M Wort messen
MSP Andere Partikel
NN Anderes Substantiv
NN-KURZ Anderes Substantiv (Abk.)
NR Eigenname
NR-KURZ Eigenname (Abk.)
NT Temporales Substantiv
NT-KURZ Temporales Substantiv (Abk.)
OD Ordinalzahl
AN Lautmalerei
P Präposition
PN Pronomen
PU Interpunktion
SB bei4 (kurz bei-construction)
SP Satzschlussteilchen
URL URL
VA Prädikatives Adjektiv
VC Kopula
VE you3 (Hauptverb)
VV Anderes Verb
X Andere

PoS tag list in Japanese and correspondence to BCCWJ tags

Etikett Ursprünglicher JA-Name Englisch
Ac Adjektiv-allgemein Adjektiv-Gewöhnlich
A-dp Adjektiv – nicht selbstständig möglich Adjektivabhängig
C Wörter aufheben Verbindung
D Pronomen Pronomen
E Englisch englisches Wort
F Adverb Adverb
Ic bewegendes Verb-allgemein Interjektion-Common
jc Formwort-allgemein Adjektivisches Substantiv – gebräuchlich
J-tari Formwort-タリ Adjektivisches Substantiv-Tari
J-xs Worthilfswortstamm formen Adjektivischer Nomen-AuxVerb-Stamm
M-aa Förderzeichen-AA Hilfszeichen-AA
Mc Subventionsmarke-allgemein Hilfszeichen-Common
M-cp Ergänzende, durch Markierungen geschlossene Klammern Hilfszeichen – Klammer öffnen
Mopp Subventionszeichen – offene Klammern Hilfszeichen – Klammer schließen
Abgeordneter Fördermarkenzeitraum Hilfszeichen-Periode
Nn Substantiv - Substantiv Nomen-Nomen
N-nc Substantiv - allgemeines Substantiv Substantiv-Allgemeines Substantiv
N-pn Substantiv - Eigenname Nomen-Eigenname
N-xs Substantiv-Hilfsstamm Nomen-AuxVerb-Stamm
Ö そのihm Andere
P Verbinder Präfix
P-fj Partikel-Adverb-Partikel Partikeladverbial
P-jj Teilchen – Quasikörperteilchen Partikelphrasal
Pk Teilchen-Fall-Teilchen Partikel-Fall-Markierung
P-rj Teilchen - Teilchen Partikelbindung
P-sj Teilchen – verbindendes Teilchen Teilchen-Konjunktiv
Qa Suffix-Adjektiv Suffix-Adjektiv
Qj Suffix - Formwort Suffix-Adjektivnomen
Qn Suffix - Substantiv Suffix-Substantiv
Qv Suffix-Verb Suffix-Verb
R verbundene Wörter Adnominales Adjektiv
Sc Notation-allgemein Zeichen-Common
SL Token-Text Zeichen-Brief
U URL URL
Vc Verb-allgemein Verb-Common
V-dp Verb – nicht selbstständig möglich Verbabhängig
W leer Leerzeichen
X Hilfsverb AuxVerb

Danksagungen

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. Leichter clientseitiger morphologischer Analysator für Chinesisch/Japanisch basierend auf Online-Lernen. COLING 2014 Demo Session, Seiten 39–43, 2014. [ PDF ]

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

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 _


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