Geweldige gemeenschapsmodule

Rakuten MA

Japanse README (日本语ドキュメント)

Invoering

Rakuten MA (morfologische analysator) is een morfologische analysator (woordsegmentor + PoS Tagger) voor Chinees en Japans, puur geschreven in JavaScript.

Rakuten MA heeft de volgende unieke kenmerken:

  • Pure JavaScript-implementatie. Werkt zowel op moderne browsers als op node.js.
  • Implementeert een taalonafhankelijk tekentaggingmodel. Voert woordsegmentatie en PoS-tags uit voor Chinees/Japans.
  • Ondersteunt de stapsgewijze update van modellen door online leren (Soft Confidence Weighted, Wang et al. ICML 2012).
  • Aanpasbare functieset.
  • Ondersteunt hashing, kwantisering en snoeien van functies voor compacte modelweergave.
  • Gebundeld met Chinese en Japanse modellen die zijn getraind op basis van algemene corpora (CTB [Xue et al. 2005] en BCCWJ [Maekawa 2008]) en e-commerce corpora.

Demo

U kunt Rakuten MA uitproberen op de demopagina (het kan even duren voordat deze pagina is geladen).

Gebruik

Download & Install

Omdat Rakuten MA een JavaScript-bibliotheek is, is installatie niet nodig. Kloon de git-repository als

1
git clone https://github.com/rakuten-nlp/rakutenma.git

of download het zip-archief hier: https://github.com/rakuten-nlp/rakutenma/archive/master.zip

Als u Node.js hebt geïnstalleerd, kunt u de demo uitvoeren via

1
node demo.js

wat identiek is aan het onderstaande gebruiksvoorbeeld.

npm package

U kunt Rakuten MA ook als npm-pakket gebruiken. U kunt het als volgt installeren:

1
npm install rakutenma

De modelbestanden vindt u onder 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)

Neem het volgende codefragment op in <head>uw HTML.

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>

De analyse en het resultaat zien er als volgt uit:

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. Laad een bestaand model, bijvoorbeeld model = JSON.parse(fs.readFileSync("model_file"));dan rma = new RakutenMA(model);ofrma.set_model(model);
  2. Specificeer featsetafhankelijk van uw taal (bijvoorbeeld rma.featset = RakutenMA.default_featset_zh;voor Chinees en rma.featset = RakutenMA.default_featset_ja;voor Japans).
  3. Vergeet niet om de 15-bit feature hashing-functie ( rma.hash_func = RakutenMA.create_hash_func(15);) te gebruiken bij gebruik van de gebundelde modellen ( model_zh.jsonen model_ja.json).
  4. Gebruik rma.tokenize(input)om uw invoer te analyseren.

Training your own analysis model from scratch

  1. Bereid uw trainingscorpus voor (een reeks trainingszinnen waarbij een zin slechts een reeks correcte [token, PoS-tag] is).
  2. Initialiseer een RakutenMA-instantie met new RakutenMA().
  3. Geef op featset(en optioneel, ctype_func, hash_func, enz.)
  4. Voer uw trainingszinnen één voor één in (van de eerste tot de laatste) aan de train_one(sent)methode.
  5. Normaal gesproken convergeert SCW voldoende na één keer epoch(één keer door het hele trainingscorpus), maar u kunt stap 4 herhalen om nog betere prestaties te bereiken.

Zie scripts/train_zh.js(voor Chinees) en scripts/train_ja.js(voor Japans) voor een voorbeeld van hoe u uw eigen model kunt trainen.

Re-training an existing model (domain adaptation, fixing errors, etc.)

  1. Laad een bestaand model en initialiseer een RakutenMA-instantie (zie 'Gebundelde modellen gebruiken om Chinese/Japanse zinnen te analyseren' hierboven)
  2. Bereid uw trainingsgegevens voor (dit kan slechts een paar zinnen zijn, afhankelijk van wat en hoeveel u wilt "opnieuw trainen").
  3. Voer uw trainingszinnen één voor één in op de train_one(sent)methode.

Reducing the model size

De modelgrootte kan nog steeds een probleem zijn voor distributie aan de clientzijde, zelfs na het toepassen van feature-hashing. We hebben een script toegevoegd scripts/minify.jsdat feature-kwantisering toepast (zie [Hagiwara en Sekine COLING 2014] voor de details) om de getrainde modelgrootte te verkleinen.

U kunt het uitvoeren node scripts/minify.js [input_model_file] [output_model_file]om een ​​verkleinde versie van het modelbestand te maken. Let op: het verwijdert ook het 'sigma'-gedeelte van het getrainde model, wat betekent dat u het verkleinde model niet langer opnieuw kunt trainen. Indien nodig kunt u het opnieuw trainen eerst het model en verklein het vervolgens.

API-documentatie

Constructeur Beschrijving
RakutenMA(model, phi, c) Creëert een nieuwe RakutenMA-instantie. model(optioneel) specificeert het modelobject waarmee de RakutenMA-instantie moet worden geïnitialiseerd. phien c(beide optioneel) zijn hyperparameters van SCW (standaard: phi = 2048, c = 0.003906).
Methoden Beschrijving
tokenize(input) Tokeniseert input(tekenreeks) en retourneert een getokeniseerd resultaat ([token, PoS tag]-paren).
train_one(sent) Werkt het huidige model bij (indien nodig) met behulp van het gegeven antwoord sent([token, PoS tag]-paren). De geretourneerde waarde is een object met drie eigenschappen ans, sys, en updated, waar ansis het gegeven antwoord (hetzelfde als sent), sysis de systeemuitvoer met het (oude) model, en updatedis een binaire (True/False) vlag die aangeeft of het model is bijgewerkt (omdat syshet anders was dan ans) of niet.
set_model(model) Stelt het model van de Rakuten MA-instantie in op model.
set_tag_scheme(scheme) Stelt het tagschema voor sequentiële labels in. Momenteel worden "IOB2"deze "SBIEO"ondersteund. Het opgeven van andere tagschema's veroorzaakt een uitzondering.
Eigenschappen Beschrijving
featset Specificeert een reeks functiesjablonen (tekenreeksen) die worden gebruikt voor analyse. U kunt RakutenMA.default_featset_jaen gebruiken RakutenMA.default_featset_zhals standaardfunctiesets voor respectievelijk Japans en Chinees. Zie hieronder ('Ondersteunde functiesjablonen') voor meer informatie over functiesjablonen.
ctype_func Specificeert de functie die wordt gebruikt om een ​​teken naar het tekentype te converteren. RakutenMA.ctype_ja_default_funcis de standaard tekentypefunctie die wordt gebruikt voor Japans. Als alternatief kunt u RakutenMA.create_ctype_chardic_func(chardic)een tekentypefunctie aanroepen die een teken nodig heeft om het op te zoeken chardicen de waarde ervan terug te geven. (Voor retourneert bijvoorbeeld RakutenMA.create_ctype_chardic_func({"A": "type1"})een functie fwaarbij f("A")retourneert "type1"en []anders.)
hash_func Specificeert de hash-functie die moet worden gebruikt voor feature-hashing. Standaard = undefined(geen feature-hashing). Een feature-hash-functie met bit-bit hash-ruimte kan worden gemaakt door RakutenMA.create_hash_func(bit).

Voorwaarden

Distributie, wijziging en academisch/commercieel gebruik van Rakuten MA is toegestaan, op voorwaarde dat u voldoet aan de Apache-licentie versie 2.0 http://www.apache.org/licenses/LICENSE-2.0.html .

Als u Rakuten MA voor onderzoeksdoeleinden gebruikt, citeer dan ons artikel over Rakuten MA [Hagiwara en Sekine 2014]

FAQ (veelgestelde vragen)

V. Wat zijn ondersteunde browsers en Node.js-versies?

  • A. We hebben bevestigd dat Rakuten MA in de volgende omgevingen draait:
    • Internet Explorer 8 (versie 8.0.7601.17414 of hoger)
    • Google Chrome (versie 35.0.1916.153 of hoger)
    • Firefox (versie 16.0.2 of hoger)
    • Safari (versie 6.1.5 of hoger)
    • Node.js (versie 0.10.13 of hoger)

V. Is commercieel gebruik toegestaan?

  • A. Ja, zolang u zich aan de algemene voorwaarden houdt. Zie 'Algemene voorwaarden' hierboven voor meer informatie.

V. Ik heb een bug/analysefout/etc gevonden. Waar moet ik dit melden?

  • A. Maak een probleem aan op Github issues https://github.com/rakuten-nlp/rakutenma/issues .
  • Alternatively, je kunt een pull-request aanmaken als je de code wijzigt. Rakuten MA heeft een testsuite met Jasmine http://jasmine.github.io/ . Zorg ervoor dat alle tests slagen (geen fouten na het uitvoeren van jasmine-node spec) en schrijf je eigen ( indien nodig) voordat u een pull-verzoek indient.
  • FinallyAls uw vraag nog steeds niet is opgelost, neem dan contact met ons op via prj-rakutenma [at] mail.rakuten.com.

Q. De resultaten van tokenisatie zien er vreemd uit (de zin is met name opgesplitst in afzonderlijke tekens zonder PoS-tags)

  • A. Controleer of u dezelfde functieset ( featset) en de functie-hashing-functie ( hash_func) gebruikt die voor training worden gebruikt. Vergeet niet de 15-bits functie-hashing-functie ( rma.hash_func = RakutenMA.create_hash_func(15);) te gebruiken wanneer u de gebundelde modellen ( model_zh.jsonen model_ja.json) gebruikt.

V. Welke scripts (vereenvoudigd/traditioneel) worden ondersteund voor Chinees?

  • A. Momenteel wordt alleen vereenvoudigd Chinees ondersteund.

V. Kunnen we hetzelfde modelbestand in JSON-indeling gebruiken voor browsers?

  • A. Ja en nee. Hoewel de interne gegevensstructuur van modellen hetzelfde is, moet u een toewijzing (bijvoorbeeld var model = [JSON representation];) toevoegen om ernaar te verwijzen in browsers. Bekijk het verschil tussen model_zh.json(voor Node.js) en model_zh.js(voor browsers). Er is een miniscript scripts/convert_for_browser.jsdat dit voor u doet. We raden u aan om aan Node.js te werken voor modeltraining etc. en het vervolgens te converteren voor browsergebruik.

Bijlage

Supported feature templates

Functiesjabloon Beschrijving
w7 Karakterunigram (c-3)
w8 Karakterunigram (c-2)
w9 Karakterunigram (c-1)
w0 Tekenunigram (c0)
w1 Tekenunigram (c+1)
w2 Tekenunigram (c+2)
w3 Tekenunigram (c+3)
c7 Tekentype unigram (t-3)
c8 Tekentype unigram (t-2)
c9 Tekentype unigram (t-1)
c0 Tekentype unigram (t0)
c1 Tekentype unigram (t+1)
c2 Tekentype unigram (t+2)
c3 Tekentype unigram (t+3)
b7 Karakterbigram (c-3 c-2)
b8 Karakterbigram (c-2 c-1)
b9 Karakterbigram (c-1 c0)
b1 Karakterbigram (c0 c+1)
b2 Karakterbigram (c+1 c+2)
b3 Karakterbigram (c+2 c+3)
d7 Tekentype biggram (t-3 t-2)
d8 Tekentype bigram (t-2 t-1)
d9 Tekentype biggram (t-1 t0)
d1 Tekentype biggram (t0 t+1)
d2 Tekentype biggram (t+1 t+2)
d3 Tekentype biggram (t+2 t+3)
anderen Als u een aangepaste featurefunctie in de featsetarray opgeeft, wordt de functie aangeroepen met twee argumenten _ten i, waar _tis een functie die een positie inneemt jen het karakterobject op die positie retourneert, en ide huidige positie is. met twee eigenschappen cen tdie respectievelijk karakter en karaktertype zijn. De geretourneerde waarde van die functie wordt gebruikt als de featurewaarde. (Als u bijvoorbeeld een functie opgeeft f(_t, i)die returns _t(i).t;, retourneert deze het tekentype van de huidige positie, namelijk in principe hetzelfde als de sjabloon c0.)

PoS tag list in Chinese

Label Beschrijving
ADVERTENTIE Bijwoord
ALS Aspectdeeltjes
BA ba3 (in ba-constructie)
CC Coördinerende conjunctie
CD hoofdtelwoord
CS Ondergeschikte conjunctie
DEC de5 (aanvuller/nominalisator)
GR de5 (genitief/associatief)
DER de5 (Resultatief)
DEV de5 (Manier)
DT Bepaler
ENZ Anderen
FW Buitenlands woord
ij Tussenwerpsel
JJ Andere zelfstandig naamwoord-modificator
POND bei4 (in lange bei-constructie)
LC Localisator
M Meetwoord
MSP Andere deeltjes
NN Ander zelfstandig naamwoord
NN-KORT Ander zelfstandig naamwoord (afkorting)
NR Eigen naam
NR-KORT Eigennaam (afkorting)
NT Tijdelijk zelfstandig naamwoord
NT-KORT Tijdelijk zelfstandig naamwoord (afkorting)
O.D Rangtelwoord
OP Onomatopee
P Voorzetsel
PN Voornaamwoord
PU Interpunctie
SB bei4 (kortweg bei-constructie)
SP Zin-finale deeltje
URL URL
VA Predicatief bijvoeglijk naamwoord
VC Koppelwoord
VE jij3 (hoofdwerkwoord)
VV Ander werkwoord
X Anderen

PoS tag list in Japanese and correspondence to BCCWJ tags

Label Originele JA-naam Engels
Ac bijvoeglijk naamwoord-algemeen Bijvoeglijk naamwoord-gemeenschappelijk
A-dp bijvoeglijk naamwoord - niet-zelfredzaam mogelijk Bijvoeglijk naamwoord-afhankelijk
C woorden oppakken Voegwoord
D voornaamwoord Voornaamwoord
E Engels Engels woord
F bijwoord Bijwoord
Ik bewegend werkwoord-algemeen Tussenwerpsel-algemeen
jc Vorm woord-algemeen Bijvoeglijk naamwoord-gemeenschappelijk
J-tari Vorm woord-タリ Bijvoeglijk naamwoord-Tari
J-xs Vorm woord-hulpwoordstam Bijvoeglijk naamwoord-AuxVerb stam
M-aa Subsidiemerk-AA Hulpbord-AA
Mc Subsidiemerk-algemeen Hulpteken-gemeenschappelijk
M-cp Aanvullende merk-gesloten haakjes Hulpteken-haakje openen
Dweil Subsidieteken - open haakjes Hulpteken-haakje sluiten
Kamerlid Subsidiemerkperiode Hulpteken-periode
Nn zelfstandig naamwoord - zelfstandig naamwoord Zelfstandig naamwoord
N-nc zelfstandig naamwoord - zelfstandig naamwoord Zelfstandig naamwoord
N-pn zelfstandig naamwoord - eigennaam Zelfstandig naamwoord
N-xs zelfstandig naamwoord-hulpstam Zelfstandig naamwoord-AuxVerb stam
O そのhem Anderen
P aansluiting Voorvoegsel
P-fj deeltje-bijwoord deeltje Deeltjes-bijwoordelijk
P-jj Deeltje - quasi-lichaamsdeeltje Deeltjeszin
PK Deeltjes-geval deeltje Markering van deeltjesbehuizing
P-rj deeltje - deeltje Deeltjesbindend
P-sj Deeltje - verbindend deeltje Deeltjes-conjunctief
Qa achtervoegsel-bijvoeglijk naamwoord Achtervoegsel-bijvoeglijk naamwoord
Qj achtervoegsel - vormwoord Achtervoegsel-bijvoeglijk naamwoord
Qn achtervoegsel - zelfstandig naamwoord Achtervoegsel-zelfstandig naamwoord
Qv achtervoegsel-werkwoord Achtervoegsel-werkwoord
R samengevoegde woorden Adnominaal bijvoeglijk naamwoord
sc Notatie-algemeen Teken-gemeenschappelijk
SL token-tekst Tekenbrief
U URL URL
Vc werkwoord-algemeen Werkwoord-gemeenschappelijk
V-dp Werkwoord - niet-zelfredzaam mogelijk Werkwoordafhankelijk
W blanco Witte ruimte
X hulpwerkwoord Hulpwerkwoord

Dankbetuigingen

De ontwikkelaars willen Satoshi Sekine, Satoko Marumoto, Yoichi Yoshimoto, Keiji Shinzato, Keita Yaegashi en Soh Masuko bedanken voor hun bijdrage aan dit project.

Referenties

Masato Hagiwara en Satoshi Sekine. Lichtgewicht Chinees/Japanse morfologische analyser aan de clientzijde, gebaseerd op online leren. COLING 2014 demosessie, pagina's 39-43, 2014. [ PDF ]

Kikuo Maekawa. Compilatie van het Kotonoha-BCCWJ-corpus (in het Japans). Nihongo no kenkyu (Studies in het Japans), 4(1):82–95, 2008. (Enige Engelse informatie kunt u hier vinden .) [ Site ]

Jialei Wang, Peilin Zhao en Steven C. Hoi. Exact zacht, op vertrouwen gewogen leren. In Proc. van ICML 2012, pagina's 121–128, 2012. [ PDF ]

Naiwen Xue, Fei Xia, Fu-dong Chiou en Marta Palmer. De Chinese boombank van Penn: Annotatie van de zinsstructuur van een groot corpus. Natural Language Engineering, 11(2):207–238, 2005. [PDF ] [ Site ]


© 2014, 2015 Rakuten NLP Project. Alle rechten voorbehouden. / Gesponsord door Rakuten, Inc. en Rakuten Institute of Technology .