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
1git 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
1node 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:
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 Codefragment 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
- Load an existing model , z. B.
model = JSON.parse(fs.readFileSync("model_file"));
dannrma = new RakutenMA(model);
oderrma.set_model(model);
-
featset
Sie dasfeatset
abhängig von Ihrer Sprache an (z. B.rma.featset = RakutenMA.default_featset_zh;
für Chinesisch undrma.featset = RakutenMA.default_featset_ja;
für Japanisch). - 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. - Verwenden Sie
rma.tokenize(input)
, um Ihre Eingabe zu analysieren.
Training your own analysis model from scratch
- Prepare your training corpus (a set of training sentences where a sentence is just an array of correct [token , PoS-Tag] ist).
- Initialisieren Sie eine RakutenMA-Instanz mit
new RakutenMA()
. -
featset
. (Und optionalctype_func
,hash_func
usw.) - Füttere deine Trainingssätze nacheinander (vom ersten bis zum letzten) mit der
train_one(sent)
-Methode. - 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 für das Trainieren Ihres eigenen Modells.
Re-training an existing model (domain adaptation, fixing errors, etc.)
- Laden Sie ein vorhandenes Modell und initialisieren Sie eine RakutenMA-Instanz (siehe "Verwenden gebündelter Modelle zur Analyse chinesischer / japanischer Sätze" oben).
- 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.)
- 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 in der Lage sind, erneut zu arbeiten - 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 (Wahr / 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. Weitere Informationen 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
) undhash_func
für das Training verwendete Funktions-Hashing-Funktion (hash_func
) verwenden. Denken Sie daran, bei der Verwendung die 15-Bit-Funktions-Hashing-Funktion (rma.hash_func = RakutenMA.create_hash_func(15);
) zu verwenden die gebündelten Modelle (model_zh.json
undmodel_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 Zuordnung hinzufügen (z. B.
var model = [JSON representation];
), um in Browsern darauf zu verweisen. Sehen Sie den Unterschied zwischenmodel_zh.json
( für Node.js) undmodel_zh.js
(für Browser). Es gibt ein Mini-Skriptscripts/convert_for_browser.js
das dies für Sie erledigt. Wir empfehlen, dass Sie an Node.js für Modelltraining usw. arbeiten und es dann fürscripts/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 |
USW | 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-Unabhängigkeit möglich | Adjektivabhängig |
C. | Verbindungswörter | Verbindung |
D. | Synonym | Pronomen |
E. | Englisch | englisches Wort |
F. | Adverb | Adverb |
Ic | Verb-General berühren | Interjektion-häufig |
Jc | Form Worte allgemein | Adjektiv Nomen-Common |
J-Tari | Formwort- タ リ | Adjektiv Nomen-Tari |
J-xs | Formwörter-Hilfsverbstamm | Adjektiv Nomen-AuxVerb Stamm |
M-aa | Mark-AA gewähren | Hilfszeichen-AA |
Mc | Subventionszeichen allgemein | Hilfszeichen-Common |
M-cp | Subventionszeichen geschlossene Klammer | Hilfszeichen - Klammer öffnen |
Mopp | Subvention mark-open Klammer | Hilfszeichen - Klammer schließen |
Mp | Subventionsfrist | Hilfszeichenperiode |
Nn | Nomen-Nomen | Nomen-Nomen |
N-nc | Substantiv-Substantiv | Substantiv-Common Substantiv |
N-pn | Substantiv-Eigenname | Nomen-Eigenes Nomen |
N-xs | Substantiv-Hilfswortstamm | Nomen-AuxVerb-Stamm |
Ö | そ の 他 | Andere |
P. | Gemeinsame Worte | Präfix |
P-fj | Teilchenadverb | Teilchenadverbial |
P-jj | Hilfswort-Quasi-Körper | Partikel-Phrasal |
Pk | Partikel-Fall-Partikel | Partikelkennzeichnung |
P-rj | Hilfswörter-Kopulative | Partikelbindung |
P-sj | Hilfswort-Hilfswort | Teilchenkonjunktiv |
Qa | Suffix-Adjektiv | Suffix-Adjektiv |
Qj | Suffixförmige Wörter | Suffix-Adjektiv Nomen |
Qn | Suffix-Nomen | Suffix-Nomen |
Qv | Suffix-Verb | Suffix-Verb |
R. | Verbundene Wörter | Adnominal Adjektiv |
Sc | Generalmark | Zeichen gemeinsam |
Sl | Markentext | Unterschreiben |
U. | URL | URL |
Vc | Verb-General | Verb-Common |
V-dp | Verb-Unabhängigkeits-Möglichkeit | 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 .