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
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
1node 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:
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 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
- Laden Sie ein vorhandenes Modell, z. B.
model = JSON.parse(fs.readFileSync("model_file"));
dannrma = new RakutenMA(model);
oderrma.set_model(model);
- Geben Sie
featset
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 ( ) zu verwenden
rma.hash_func = RakutenMA.create_hash_func(15);
, wenn Sie die gebündelten Modelle (model_zh.json
undmodel_ja.json
) verwenden. - Verwenden Sie diese Option
rma.tokenize(input)
, um Ihre Eingaben zu analysieren.
Training your own analysis model from scratch
- Bereiten Sie Ihren Trainingskorpus vor (eine Reihe von Trainingssätzen, wobei ein Satz nur ein Array korrekter [Token, PoS-Tag] ist).
- Initialisieren Sie eine RakutenMA-Instanz mit
new RakutenMA()
. - Geben Sie an
featset
. (und optional ,ctype_func
usw.hash_func
) - Geben Sie Ihre Trainingssätze nacheinander (vom ersten bis zum letzten) an die
train_one(sent)
Methode weiter. epoch
Normalerweise 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.)
- Laden Sie ein vorhandenes Modell und initialisieren Sie eine RakutenMA-Instanz. (siehe „Verwenden gebündelter Modelle zur Analyse chinesischer/japanischer Sätze“ oben)
- 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).
- 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.js
Feature-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. phi und 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 ans die angegebene Antwort (identisch mit sent ) sys die Systemausgabe ist das (alte) Modell und updated ist ein binäres (Wahr/Falsch)-Flag, das angibt, ob das Modell aktualisiert wurde (weil sys es 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_ja und RakutenMA.default_featset_zh als 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_func ist 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 chardic und seinen Wert zurückgibt. (Für Gibt beispielsweise RakutenMA.create_ctype_chardic_func({"A": "type1"}) eine Funktion zurück , f bei 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.json
undmodel_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 zwischenmodel_zh.json
(für Node.js) undmodel_zh.js
(für Browser) an. Es gibt ein Mini-Skriptscripts/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 featset Array angeben, wird die Funktion mit zwei Argumenten aufgerufen _t und i , wobei _t es sich um eine Funktion handelt, die eine Position einnimmt j und das Zeichenobjekt an dieser Position zurückgibt, und i zwar die aktuelle Position. Ein Zeichenobjekt ist ein Objekt mit zwei Eigenschaften c , t nä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 ]
© 2014, 2015 Rakuten NLP Project. Alle Rechte vorbehalten. / Gesponsert von Rakuten, Inc. und dem Rakuten Institute of Technology .