Mòdul de comunitat impressionant

Rakuten MA

README japonès (日本语 ド キ ュ メ ン ト)

Introducció

Rakuten MA (analitzador morfològic) és un analitzador morfològic (segmentador de paraules + PoS Tagger) per a xinès i japonès escrit exclusivament en JavaScript.

Rakuten MA té les següents característiques úniques:

  • Implementació de JavaScript pur. Funciona tant en navegadors moderns com en node.js.
  • Implementa un model d'etiquetatge de caràcters independent de l'idioma. Ofereix segmentació de paraules i etiquetes PoS per al xinès / el japonès.
  • Admet l’actualització incremental de models mitjançant l’aprenentatge en línia (Soft Confidence Weighted, Wang et al. ICML 2012).
  • Conjunt de funcions personalitzable.
  • Admet hash de característiques, quantització i poda per a la representació de models compactes.
  • Inclòs amb models xinesos i japonesos formats a partir de corpus generals (CTB [Xue et al. 2005] i BCCWJ [Maekawa 2008]) i corpus de comerç electrònic.

Demostració

Podeu provar Rakuten MA a la pàgina de demostració (pot trigar un temps a carregar-se aquesta pàgina).

Ús

Download & Install

Com que Rakuten MA és una biblioteca JavaScript, no cal instal·lar-lo. Cloneu el dipòsit git com a

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

o descarregueu l’arxiu zip des d’aquí: https://github.com/rakuten-nlp/rakutenma/archive/master.zip

Si teniu Node.js instal·lat, podeu executar la demostració

1
node demo.js

que és idèntic a l’exemple d’ús següent.

npm package

També podeu utilitzar Rakuten MA com a paquet npm. Podeu instal·lar-lo mitjançant:

1
npm install rakutenma

Els fitxers model es poden trobar a sota 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)

Incloeu el fragment de codi següent al <head>vostre codi 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>

L'anàlisi i el resultat són els següents:

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. Carregueu un model existent, per exemple, model = JSON.parse(fs.readFileSync("model_file"));llavors rma = new RakutenMA(model);orma.set_model(model);
  2. Especifiqueu featsetsegons el vostre idioma (per exemple, rma.featset = RakutenMA.default_featset_zh;per al xinès i rma.featset = RakutenMA.default_featset_ja;per al japonès).
  3. Recordeu que heu d’utilitzar la funció de resum de funció de 15 bits ( rma.hash_func = RakutenMA.create_hash_func(15);) quan utilitzeu els models inclosos ( model_zh.jsoni model_ja.json).
  4. Utilitzeu-lo rma.tokenize(input)per analitzar les vostres aportacions.

Training your own analysis model from scratch

  1. Prepareu el vostre corpus d’entrenament (un conjunt de frases d’entrenament en què una frase és només un conjunt de [token, etiqueta PoS] correcta.)
  2. Inicialitzeu una instància de RakutenMA amb new RakutenMA().
  3. La Especificar featset. (I opcionalment ctype_func, hash_func, etc.)
  4. Envieu les frases d’entrenament una per una (des de la primera fins a l’última) fins al train_one(sent)mètode.
  5. Normalment, SCW convergeix prou després d’un epoch(un pas per tot el corpus d’entrenament), però podeu repetir el pas 4. per aconseguir un rendiment encara millor.

Vegeu scripts/train_zh.js(per al xinès) i scripts/train_ja.js(per al japonès) per veure un exemple que mostra com entrenar el vostre propi model.

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

  1. Carregueu un model existent i inicialitzeu una instància de RakutenMA (consulteu "Ús de models inclosos per analitzar frases xineses / japoneses")
  2. Prepareu les vostres dades d’entrenament (poden ser tan sols un parell de frases, segons què i quant vulgueu "tornar a entrenar").
  3. Envieu les vostres frases d’entrenament una per una al train_one(sent)mètode.

Reducing the model size

La mida del model encara podria ser un problema per a la distribució del client, fins i tot després d’aplicar el hash de funcions. Hem inclòs un script scripts/minify.jsque aplica la quantització de funcions (per obtenir més informació, vegeu [Hagiwara i Sekine COLING 2014]) per reduir la mida del model entrenat.

Podeu executar-lo node scripts/minify.js [input_model_file] [output_model_file]per fer una versió minificada del fitxer del model. Recordeu: també elimina la part "sigma" del model format, és a dir, que ja no podeu tornar a entrenar el model minificat. Si cal, torneu a entrenar primer el model i després minifiqui-lo.

Documentació API

Constructor Descripció
RakutenMA(model, phi, c) . Crea nous nova instància RakutenMA A model(opcional) especifica a l'objecte d'instància d'identificació amb els inicialitzar el RakutenMA. phiI c(ambdós opcionals) són paràmetres Hyper de la GCE (per defecte: phi = 2048, c = 0.003906).
Mètodes Descripció
tokenize(input) Tokenitza input(cadena) i retorna el resultat tokenitzat (parells [token, etiqueta PoS]).
train_one(sent) El actualitza el model actual (si cal) l'ús de la resposta donada sent([manera, l'etiqueta pos] parells). Pel valor de retorn és objecte AN amb tres propietats ans, sysi updated, ON ansÉS La Resposta (igual que sent), sysÉS El sistema dóna sortida mitjançant el model (antic) i updatedés un senyalador binari (vertader / fals) que significa que el model s’ha actualitzat (perquè sysera diferent de ans) o no.
set_model(model) Estableix el model de la instància de Rakuten MA a model.
set_tag_scheme(scheme) Estableix l'esquema d'etiquetes d'etiquetatge seqüencial. Actualment "IOB2"i "SBIEO"s'admeten. L'especificació d'altres esquemes d'etiquetes provoca una excepció.
Propietats Descripció
featset Especifica una matriu de les plantilles importants (corda) utilitzats per a l'anàlisi. Es poden utilitzar RakutenMA.default_featset_jai RakutenMA.default_featset_zhcom els conjunts de característiques predeterminades per japonès i xinès, respectivament. Vegeu més endavant ( "plantilles" característica compatible) per als detalls de les plantilles importants.
ctype_func Especifica la funció que s’utilitza per convertir un caràcter al seu tipus de caràcter. RakutenMA.ctype_ja_default_funcÉs la funció de tipus de caràcter predeterminada que s’utilitza per al japonès. També podeu trucar RakutenMA.create_ctype_chardic_func(chardic)per crear una funció de tipus de caràcter que necessiti un caràcter per buscar-lo chardici retornar-ne el valor. per exemple, RakutenMA.create_ctype_chardic_func({"A": "type1"})retorna una funció fon f("A")torna "type1"i en []cas contrari.)
hash_func Especifica la funció de hash que s'ha d'utilitzar per al hash de funcions. Per defecte = undefined(sense hash de funcions). Es bitpot crear una funció de hash de funció amb espai de hash de bits mitjançant una trucada RakutenMA.create_hash_func(bit).

Termes i condicions

Es permet la distribució, modificació i ús acadèmic / comercial de Rakuten MA, sempre que compleixi la llicència Apache versió 2.0 http://www.apache.org/licenses/LICENSE-2.0.html .

Si utilitzeu Rakuten MA amb finalitats de recerca, citeu el nostre article sobre Rakuten MA [Hagiwara and Sekine 2014]

PMF (preguntes més freqüents)

P. Què són els navegadors i les versions de Node.js compatibles?

  • R. Hem confirmat que Rakuten MA funciona en els entorns següents:
    • Internet Explorer 8 (ver. 8.0.7601.17414 o superior)
    • Google Chrome (ver. 35.0.1916.153 o superior)
    • Firefox (ver. 16.0.2 o superior)
    • Safari (ver. 6.1.5 o superior)
    • Node.js (ver. 0.10.13 o superior)

P. Es permet l’ús comercial?

  • R. Sí, sempre que seguiu els termes i condicions. Consulteu els "Termes i condicions" anteriors per obtenir més informació.

P. He trobat un error / error d'anàlisi / etc. On he d'informar?

  • R. Creeu un problema a Github issues https://github.com/rakuten-nlp/rakutenma/issues .
  • Alternatively, podeu crear una sol·licitud d'extracció si modifiqueu el codi. Rakuten MA té una suite de proves mitjançant Jasmine http://jasmine.github.io/ . Assegureu-vos que totes les proves passen (no hi ha errors després d'executar-les jasmine-node spec) i escriviu-ne la vostra ( si cal) abans d’enviar una sol·licitud de tracció.
  • Finally, si la vostra pregunta encara no es resol, poseu-vos en contacte amb nosaltres a prj-rakutenma [at] mail.rakuten.com.

P. Els resultats de tokenització semblen estranys (concretament, la frase es divideix en caràcters individuals sense etiquetes PoS)

  • A. Comproveu si utilitzeu el mateix conjunt de funcions ( featset) i la funció de hash de funcions ( hash_func) que s’utilitza per a l’entrenament. Recordeu d’utilitzar la funció de hash de funcions de 15 bits ( rma.hash_func = RakutenMA.create_hash_func(15);) quan utilitzeu els models inclosos ( model_zh.jsoni model_ja.json).

P. Quins scripts (simplificats / tradicionals) són compatibles amb el xinès?

  • R. Actualment, només s’admet el xinès simplificat.

P. Podem utilitzar el mateix fitxer model en format JSON per als navegadors?

  • R. Sí i no. Tot i que l'estructura de dades interna dels models és la mateixa, heu d'afegir assignació (per exemple, var model = [JSON representation];) per fer-hi referència als navegadors. Vegeu la diferència entre model_zh.json(per a Node.js) i model_zh.js(per a navegadors). Hi ha un mini script scripts/convert_for_browser.jsque us ho fa recomanable. Us recomanem que treballeu a Node.js per a la formació de models, etc. i que el converteixis per a usos del navegador.

Apèndix

Supported feature templates

Plantilla de funcions Descripció
w7 Unigrama de caràcters (c-3)
w8 Unigrama de caràcters (c-2)
w9 Unigrama de caràcters (c-1)
w0 Unigrama de caràcters (c0)
w1 Unigrama de caràcters (c + 1)
w2 Unigrama de caràcters (c + 2)
w3 Unigrama de caràcters (c + 3)
c7 Tipus de caràcter unigrama (t-3)
c8 Tipus de caràcter unigrama (t-2)
c9 Tipus de caràcter unigrama (t-1)
c0 Tipus de caràcter unigrama (t0)
c1 Tipus de caràcter unigrama (t + 1)
c2 Tipus de caràcter unigrama (t + 2)
c3 Tipus de caràcter unigrama (t + 3)
b7 Bigram de personatges (c-3 c-2)
b8 Bigram de personatges (c-2 c-1)
b9 Bigram de personatges (c-1 c0)
b1 Bigrama de caràcters (c0 c + 1)
b2 Bigrama de caràcters (c + 1 c + 2)
b3 Bigrama de caràcters (c + 2 c + 3)
d7 Tipus de caràcter bigram (t-3 t-2)
d8 Tipus de caràcter bigram (t-2 t-1)
d9 Tipus de caràcter bigram (t-1 t0)
d1 Tipus de caràcter bigram (t0 t + 1)
d2 Tipus de caràcter bigram (t + 1 t + 2)
d3 Tipus de caràcter bigram (t + 2 t + 3)
altres Si especifiqueu una funció de funció personalitzada a la featsetmatriu, la funció es cridarà amb dos arguments _ti i, on _tés una funció que pren una posició ji retorna l'objecte de caràcter en aquesta posició i iés la posició actual. Un objecte de caràcter és un objecte amb dues propietats ci tque són caràcters i tipus de caràcters, respectivament. El valor de retorn d'aquesta funció s'utilitza com a valor de característica. (Per exemple, si especifiqueu una funció f(_t, i)que returns _t(i).t;, llavors torna el tipus de caràcter de la posició actual, que és bàsicament el mateix que la plantilla c0.)

PoS tag list in Chinese

Etiqueta Descripció
AD Adverbi
AS Partícula d'aspecte
BA ba3 (en construcció ba)
CC Conjunció coordinadora
CD Número cardinal
CS Conjunció subordinada
DEC de5 (Complementador / Nominalitzador)
DEG de5 (genitiu / associatiu)
DER de5 (resultant)
DEV de5 (Manera)
DT Determinador
ETC Altres
FW Paraula estrangera
IJ Interjecció
JJ Un altre modificador de substantius
LB bei4 (en construcció bei llarga)
LC Localitzador
M Mesura la paraula
MSP Una altra partícula
NN Un altre substantiu
NN-CURT Un altre substantiu (abrev.)
NR Nom propi
NR-CURT Nom propi (abrev.)
Nou Testament Substantiu temporal
NT-CURT Nom temporal (abrev.)
OD Nombre ordinal
ACTIVAT Onomatopeia
Pàg Preposició
PN Pronom
PU Puntuació
SB bei4 (en resum bei-construction)
SP Partícula final-frase
URL URL
VA Adjectiu predicatiu
VC Còpula
VE you3 (verb principal)
VV Un altre verb
X Altres

PoS tag list in Japanese and correspondence to BCCWJ tags

Etiqueta Nom original de JA Anglès
AC Adjectiu general Adjectiu-Comú
A-dp Els adjectius no són autosuficients Depenent de l’adjectiu
C Paraules de connexió Conjunció
D sinònim Pronom
E Anglès Paraula anglesa
F adverbi Adverbi
I C Tocant Verbs-General Interjecció-Comú
Jc Forma paraules generals Nom adjectival-comú
J-tari Forma la paraula- タ リ Substantiu adjectival-Tari
J-xs Forma paraules-tija del verb auxiliar Adjectival Noun-AuxVerb stem
M-aa Marca de subvenció-AA Senyal auxiliar-AA
Mc Signe general de subvenció Senyal auxiliar-Comú
M-cp Marca de subvenció tancada entre parèntesis Signe auxiliar-Parèntesi oberta
M-op Marca de subvenció oberta entre parèntesis Senyal auxiliar-Tancar parèntesi
Mp Període de marca de subvenció Rètol auxiliar-Període
Nn Substantiu-substantiu Substantiu-Substantiu
N-nc Substantiu substantiu comú Substantiu-Nom comú
N-pn Substantiu propi del substantiu Substantiu-Nom adequat
N-x Vara del verb substantiu-auxiliar Tija del substantiu-auxverb
O そ の 他 Altres
Pàg Paraules conjuntes Prefix
P-fj Auxiliar-Adverbial Partícula-Adverbial
P-jj Paraules auxiliars-Paraules auxiliars quasi-subjectives Partícula-Frasal
Pk Paraules auxiliars-Paraules auxiliars de cas Marcatge de casos de partícules
P-rj Paraules auxiliars-Paraules auxiliars Unió de partícules
P-sj Paraules auxiliars-Paraules auxiliars Partícula-Conjuntiva
Qa Sufix-adjectiu Sufix-Adjectiu
Qj Paraules amb forma de sufix Sufix-Adjectiu substantiu
Qn Sufix-substantiu Sufix-Substantiu
Qv Sufix-verbal Sufix-Verb
R Paraules unides Adjectiu adnominal
Sc Marc general Signe-comú
Sl Marca el text Signatura-Carta
U URL URL
Vc Verb general Verb-Comú
V-dp Verbs-Possibilitat d’independència Depenent del verb
W en blanc Espai blanc
X Verb auxiliar AuxVerb

Agraïments

Els desenvolupadors volen agrair a Satoshi Sekine, Satoko Marumoto, Yoichi Yoshimoto, Keiji Shinzato, Keita Yaegashi i Soh Masuko la seva contribució a aquest projecte.

Referències

Masato Hagiwara i Satoshi Sekine. Analitzador morfològic xinès / japonès lleuger al costat del client basat en l'aprenentatge en línia. Sessió de demostració COLING 2014, pàgines 39-43, 2014. [ PDF ]

Kikuo Maekawa. Recopilació del corpus Kotonoha-BCCWJ (en japonès). Nihongo no kenkyu (Estudis en japonès), 4 (1): 82-95, 2008. (Es pot trobar informació anglesa aquí .) [ Lloc ]

Jialei Wang, Peilin Zhao i Steven C. Hoi. Aprenentatge exacte i ponderat en la confiança. A Proc. De ICML 2012, pàgines 121-128, 2012. [ PDF ]

Naiwen Xue, Fei Xia, Fu-dong Chiou i Marta Palmer. El banc de l'arbre xinès Penn: Anotació de l'estructura de frases d'un gran corpus. Enginyeria del Llenguatge Natural, 11 (2): 207-238, 2005. [ PDF ] [ Lloc ]


© 2014, 2015 Projecte Rakuten NLP. Tots els drets reservats. / Patrocinat per Rakuten, Inc. i Rakuten Institute of Technology .