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
1git 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
1node 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:
1npm 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
- Laden Sie ein vorhandenes Modell, zB
model = JSON.parse(fs.readFileSync("model_file"));
dannrma = new RakutenMA(model);
oderrma.set_model(model);
- Geben Sie
featset
je nach Sprache an (zBrma.featset = RakutenMA.default_featset_zh;
für Chinesisch undrma.featset = RakutenMA.default_featset_ja;
für Japanisch). - 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.json
undmodel_ja.json
) verwenden. - Verwenden Sie
rma.tokenize(input)
diese Option, um Ihre Eingabe zu analysieren.
Training your own analysis model from scratch
- Bereiten Sie Ihr Trainingskorpus vor (eine Reihe von Trainingssätzen, bei denen ein Satz nur ein Array von korrekten [Token, PoS-Tag] ist).
- Initialisieren Sie eine RakutenMA-Instanz mit
new RakutenMA()
. - Die Angabe
featset
. (Und OPTIONAL,ctype_func
,hash_func
, etc.) - Füttern Sie Ihre Trainingssätze einen nach dem anderen (vom ersten bis zum letzten) an die
train_one(sent)
Methode. - 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.)
- 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).
- Bereiten Sie Ihre Trainingsdaten vor (dies können nur ein paar Sätze sein, je nachdem, was und wie viel Sie "nachtrainieren" möchten).
- 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.js
eingefü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 phi und 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 ans IST DIE GEGEBENE Antwort (Same AS sent ), sys IS Das System gibt das unter Verwendung des (alten) Modells aus und updated ist ein binäres (Wahr/Falsch) Flag, das bedeutet, ob das Modell aktualisiert wurde (weil sys es 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_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, die zum Konvertieren eines Zeichens in seinen Zeichentyp verwendet wird. RakutenMA.ctype_ja_default_func ist 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 chardic und seinen Wert zurückzugeben. (For Beispielsweise RakutenMA.create_ctype_chardic_func({"A": "type1"}) gibt eine Funktion , f wo 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.json
undmodel_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 zwischenmodel_zh.json
(für Node.js) undmodel_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, 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 featset Array angeben , wird die Funktion mit zwei Argumenten aufgerufen _t und i , wobei _t eine Funktion ist, die eine Position einnimmt j und das Zeichenobjekt an dieser Position zurückgibt, und i die aktuelle Position ist mit zwei Eigenschaften c und t die 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 .