Fantastisches Community-Modul

Rakuten MA

Japanische README (日本語 ド キ ュ メ メ ト)

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 hat die folgenden einzigartigen Eigenschaften:

  • Reine JavaScript-Implementierung. Funktioniert sowohl in modernen Browsern als auch in node.js.
  • Implementiert ein sprachunabhängiges Zeichen-Tagging-Modell. Gibt Wortsegmentierung und PoS-Tags für Chinesisch / Japanisch aus.
  • Supports incremental update of models by online learning (Soft Confidence Weighted , Wang et al., ICML 2012).
  • Anpassbarer Funktionsumfang.
  • Supports feature hashing , Quantisierung und Bereinigung 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 ausgebildet wurden.

Demo

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

Verwendung

Download & Install

Da Rakuten MA eine JavaScript-Bibliothek ist, 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 von hier herunter: https://github.com/rakuten-nlp/rakutenma/archive/master.zip

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

1
node demo.js

Dies ist identisch mit dem folgenden Verwendungsbeispiel.

npm package

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

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 den <head> Ihres HTML-Codes 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 folgendermaßen 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. Load an existing model , z. B. model = JSON.parse(fs.readFileSync("model_file")); dann rma = new RakutenMA(model); oder rma.set_model(model);
  2. featset Sie das featset abhä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 ( rma.hash_func = RakutenMA.create_hash_func(15); ) zu verwenden, wenn Sie die gebündelten Modelle ( model_zh.json und model_ja.json ) verwenden.
  4. Verwenden Sie rma.tokenize(input) , um Ihre Eingabe zu analysieren.

Training your own analysis model from scratch

  1. Prepare your training corpus (a set of training sentences where a sentence is just an array of correct [token , PoS-Tag] ist).
  2. Initialisieren Sie eine RakutenMA-Instanz mit new RakutenMA() .
  3. featset . (Und optional ctype_func , hash_func usw.)
  4. Füttere deine Trainingssätze nacheinander (vom ersten bis zum letzten) mit der train_one(sent) -Methode.
  5. Normalerweise konvergiert SCW nach einer epoch genug (ein Durchgang durch den gesamten Trainingskorpus), aber Sie können 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, 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. Prepare your training data (this could be as few as a couple of sentences , je nachdem, was und wie viel Sie "neu trainieren" möchten.)
  3. Füttere deine Trainingssätze nacheinander mit der train_one(sent) -Methode.

Reducing the model size

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

Sie können den node scripts/minify.js [input_model_file] [output_model_file] , um eine minimierte Version der Modelldatei zu erstellen. Denken Sie daran: Außerdem wird der "Sigma" -Teil des trainierten Modells gelöscht, sodass Sie nicht mehr erneut arbeiten können - Trainieren Sie das minimierte Modell. Trainieren Sie das Modell bei Bedarf zuerst neu und minimieren Sie es dann.

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. phi und c (beide optional) sind c = 0.003906 von SCW (Standard: phi = 2048 , c = 0.003906 ).
Methoden Beschreibung
tokenize(input) Tokenisiert die input (Zeichenfolge) und gibt das Token-Ergebnis zurück ([Token, PoS-Tag] -Paare).
train_one(sent) Aktualisiert das aktuelle Modell (falls erforderlich) unter Verwendung der angegebenen sent Antwort ([Token, PoS-Tag] -Paare). Der Rückgabewert ist ein Objekt mit drei Eigenschaften ans , sys und updated , wobei ans die angegebene Antwort ist (wie sent ). , sys ist die Systemausgabe unter Verwendung des (alten) Modells, und updated ist ein binäres (Richtig / Falsch) Flag, das angibt, ob das Modell aktualisiert wurde (weil sys von ans verschieden war) oder nicht.
set_model(model) Legt das Modell der Rakuten MA-Instanz auf model .
set_tag_scheme(scheme) Legt das Tag-Schema für die sequentielle Kennzeichnung 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 (Zeichenfolge) an, die für die Analyse verwendet werden. Sie können RakutenMA.default_featset_ja und RakutenMA.default_featset_zh als 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, mit der ein Zeichen in seinen Zeichentyp RakutenMA.ctype_ja_default_func wird. RakutenMA.ctype_ja_default_func ist die Standardfunktion für Zeichentypen, die für Japanisch verwendet wird. Alternativ können Sie RakutenMA.create_ctype_chardic_func(chardic) , um eine Zeichentypfunktion zu erstellen, die ein Zeichen zum RakutenMA.create_ctype_chardic_func(chardic) up in chardic und chardic seinen Wert zurück. (Zum Beispiel gibt RakutenMA.create_ctype_chardic_func({"A": "type1"}) eine Funktion f wobei f("A") "type1" und [] andernfalls zurückgibt.)
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 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 zu Forschungszwecken verwenden, zitieren Sie bitte unser Papier über Rakuten MA [Hagiwara und Sekine 2014].

FAQ (häufig gestellte Fragen)

F. Was sind unterstützte Browser und Node.js-Versionen?

  • A. We confirmed that Rakuten MA runs in the following environments :
    • 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 zulässig?

  • A. Yes , solange Sie die Allgemeinen Geschäftsbedingungen befolgen. Einzelheiten finden Sie oben unter "Allgemeine Geschäftsbedingungen".

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

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

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

  • A. Überprüfen Sie, ob Sie denselben Funktionsumfang ( featset ) und hash_func für das Training verwendete Funktions-Hashing-Funktion ( hash_func ) verwenden. Denken Sie daran, bei Verwendung die 15-Bit-Funktions-Hashing-Funktion ( rma.hash_func = RakutenMA.create_hash_func(15); ) zu verwenden die gebündelten Modelle ( model_zh.json und model_ja.json ).

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

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

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

  • A. Yes and no. Although internal data structure of models is the same , müssen Sie eine Zuweisung hinzufügen (z. B. var model = [JSON representation]; ), um in Browsern darauf zu verweisen. Sehen Sie den Unterschied zwischen model_zh.json ( für Node.js) und model_zh.js (für Browser). Es gibt ein Mini-Skript scripts/convert_for_browser.js das dies für Sie erledigt. Wir empfehlen Ihnen, an Node.js für Modelltraining usw. zu arbeiten und es dann für scripts/convert_for_browser.js konvertieren .

Blinddarm

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 Zeichen Bigram (c-3 c-2)
b8 Zeichen Bigram (c-2 c-1)
b9 Zeichen Bigram (c-1 c0)
b1 Zeichen Bigram (c0 c + 1)
b2 Zeichen Bigram (c + 1 c + 2)
b3 Zeichen Bigram (c + 2 c + 3)
d7 Zeichentyp Bigram (t-3 t-2)
d8 Zeichentyp Bigram (t-2 t-1)
d9 Zeichentyp Bigram (t-1 t0)
d1 Zeichentyp Bigram (t0 t + 1)
d2 Zeichentyp Bigram (t + 1 t + 2)
d3 Zeichentyp Bigram (t + 2 t + 3)
Andere Wenn Sie eine benutzerdefinierte Feature-Funktion im featset Array featset , wird die Funktion mit zwei Argumenten _t und i _t , wobei _t eine Funktion ist, die eine Position j _t und das _t an dieser Position zurückgibt, und i die aktuelle Position ist. Ein Zeichenobjekt ist ein Objekt mit zwei Eigenschaften c und t die Zeichen- bzw. Zeichentyp sind. Der Rückgabewert dieser Funktion wird als Merkmalswert verwendet. (Wenn Sie beispielsweise eine Funktion f(_t, i) die returns _t(i).t; dann wird der Zeichentyp der aktuellen Position zurückgegeben, der im Grunde der Vorlage c0 .)

PoS tag list in Chinese

Etikett Beschreibung
ANZEIGE Adverb
WIE Aspekt Partikel
BA ba3 (in ba-Konstruktion)
CC Koordinierende Konjunktion
CD Kardinalzahl
CS Untergeordnete Konjunktion
DEZ de5 (Complementizer / Nominalizer)
DEG de5 (Genitiv / Assoziativ)
DER de5 (Ergebnis)
DEV de5 (Art und Weise)
DT Bestimmer
ETC Andere
FW Fremdwort
IJ Zwischenruf
JJ Anderer Substantiv-Modifikator
PFUND bei4 (in langer bei-Konstruktion)
LC Localizer
M. Wort messen
MSP Andere Partikel
NN Anderes Substantiv
NN-KURZ Anderes Substantiv (Abkürzung)
NR Eigenname
NR-KURZ Eigenname (Abkürzung)
NT Zeitliches Substantiv
NT-KURZ Zeitnomen (Abkürzung)
OD Ordinalzahl
AUF Lautmalerei
P. Präposition
PN Pronomen
VE Interpunktion
SB bei4 (kurz bei-Konstruktion)
SP Satzendteilchen
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-Common
A-dp Adjektiv-nicht unabhängig Adjektivabhängig
C. Wähle Wörter Verbindung
D. Synonym Pronomen
E. Englisch englisches Wort
F. Adverb Adverb
Ic Bewegende Worte allgemein Interjection-Common
Jc Form allgemein Adjektiv Nomen-Common
J-Tari Formwort Adjektiv Nomen-Tari
J-xs Formwort-Hilfsverbstamm Adjektiv Nomen-AuxVerb Stamm
M-aa Subventionssymbol -AA Hilfszeichen-AA
Mc Subventionssymbol allgemein Hilfszeichen-Common
M-cp Subventionssymbol-Klammer geschlossen Hilfszeichen - Klammer öffnen
Mopp Subventionssymbol-offene Klammer Hilfszeichen - Klammer schließen
Mp Subventionssymbolperiode Hilfszeichenperiode
Nn Nomen-Nomen Nomen-Nomen
N-nc Substantiv-Substantiv Substantiv-Common Substantiv
N-pn Nomen-intrinsisches Nomen Nomen-Eigenes Nomen
N-xs Substantiv-Hilfsverbstamm Nomen-AuxVerb-Stamm
Ö そ の 他 Andere
P. Gemeinsame Rede Präfix
P-fj Hilfswort Teilchenadverbial
P-jj Hilfswort Partikel-Phrasal
Pk Hilfswort Partikelkennzeichnung
P-rj Hilfswort Partikelbindung
P-sj Hilfswort Teilchenkonjunktiv
Qa Suffix-Adjektiv Suffix-Adjektiv
Qj Suffix-förmiges Wort Suffix-Adjektiv Nomen
Qn Suffix-Nomen Suffix-Nomen
Qv Suffix-Verb Suffix-Verb
R. Konjunktionen Adnominal Adjektiv
Sc Symbol-Allgemein Zeichen gemeinsam
Sl Symboltext Unterschreiben
U. URL URL
Vc Verb-General Verb-Common
V-dp Verb-nicht-unabhängig Verbabhä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. Leichter clientseitiger chinesisch / japanischer morphologischer Analysator 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 (Japanisch-Studien), 4 (1): 82–95, 2008. (Einige englische Informationen finden Sie hier .) [ Site ]

Jialei Wang, Peilin Zhao und Steven C. Hoi. Genaues, weiches, vertrauensgewichtetes Lernen. In Proc. Of ICML 2012, Seiten 121–128, 2012. [ PDF ]

Naiwen Xue, Fei Xia, Fu-dong Chiou und Marta Palmer. Die chinesische Baumbank Penn: Anmerkung zur Phrasenstruktur eines großen Korpus. Natural Language Engineering, 11 (2): 207–238, 2005. [ PDF ] [ Site ]


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