Mòdul comunitari fantàstic

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ó pura de JavaScript. Funciona tant en navegadors moderns com en node.js.
  • Implementa un model d'etiquetatge de caràcters independent de l'idioma. Produeix segmentació de paraules i etiquetes PoS per a xinès/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 personalitzables.
  • Admet funcions hashing, quantificació i poda per a la representació compacta del model.
  • Inclou 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 una estona a carregar aquesta pàgina).

Ús

Download & Install

Com que Rakuten MA és una biblioteca de JavaScript, no cal instal·lar-lo. Clonar el repositori 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 del model es poden trobar a 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 featseten funció de la vostra llengua (p. ex., rma.featset = RakutenMA.default_featset_zh;per al xinès i rma.featset = RakutenMA.default_featset_ja;per al japonès).
  3. Recordeu utilitzar la funció 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).
  4. Utilitzeu-lo rma.tokenize(input)per analitzar la vostra entrada.

Training your own analysis model from scratch

  1. Prepareu el vostre corpus d'entrenament (un conjunt d'oracions d'entrenament on una frase és només una sèrie de [token, etiqueta PoS] correcte).
  2. Inicialitzeu una instància de RakutenMA amb new RakutenMA().
  3. Especifiqueu featset. (i, opcionalment, ctype_func, hash_func, etc.)
  4. Alimenta les teves frases d'entrenament una per una (de la primera a l'última) amb el train_one(sent)mètode.
  5. Normalment, SCW convergeix prou després d'una epoch(una passada 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. (vegeu "Ús de models agrupats per analitzar frases xineses/japoneses" més amunt)
  2. Prepareu les vostres dades d'entrenament (podrien ser només un parell de frases, depenent de què i quant vulgueu "reentrenar").
  3. Alimenta les teves frases d'entrenament una per una amb el train_one(sent)mètode.

Reducing the model size

La mida del model encara podria ser un problema per a la distribució del costat del client fins i tot després d'aplicar la funció hashing. Hem inclòs un script scripts/minify.jsque aplica la quantificació de característiques (vegeu [Hagiwara i Sekine COLING 2014] per obtenir-ne més detalls) 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 entrenat, és a dir, que ja no podreu tornar a entrenar el model minificat. Si cal, torneu a entrenar-lo. primer el model i després reduïu-lo.

Documentació de l'API

Constructor Descripció
RakutenMA(model, phi, c) Crea una instància de RakutenMA nova. model(opcional) especifica l'objecte model amb què inicialitzar la instància de RakutenMA. phii c(ambdós opcionals) són híper paràmetres de SCW (per defecte: phi = 2048, c = 0.003906).
Mètodes Descripció
tokenize(input) Tokenitza input(cadena) i retorna el resultat tokenitzat (parells de [token, etiqueta PoS]).
train_one(sent) Actualitza el model actual (si cal) utilitzant la resposta donada sent(parells [token, etiqueta PoS]). El valor de retorn és un objecte amb tres propietats ans, sysi updated, on ansés la resposta donada (igual que sent), sysés la sortida del sistema que utilitza el model (antic) i updatedés un indicador binari (Vertader/Fals) que significa si 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'etiquetes seqüencials. Actualment, "IOB2"i "SBIEO"s'admeten. L'especificació d'altres esquemes d'etiquetes provoca una excepció.
Propietats Descripció
featset Especifica una sèrie de plantilles de característiques (cadena) utilitzades per a l'anàlisi. Podeu utilitzar RakutenMA.default_featset_jai RakutenMA.default_featset_zhcom a conjunts de característiques predeterminades per al japonès i el xinès, respectivament. Vegeu a continuació ("Plantilles de funcions admeses") per obtenir els detalls de les plantilles de funcions.
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. De manera alternativa, podeu trucar RakutenMA.create_ctype_chardic_func(chardic)per crear una funció de tipus de caràcter que pren un caràcter per buscar-lo chardici retornar-ne el valor. (Per a per exemple, RakutenMA.create_ctype_chardic_func({"A": "type1"})retorna una funció fon f("A")retorna "type1"i []d'una altra manera.)
hash_func Especifica la funció hash que s'ha d'utilitzar per a la funció hash. Per defecte = undefined(no hi ha hash). Es pot crear una funció hash amb bitespai hash de -bit cridant a RakutenMA.create_hash_func(bit).

Termes i condicions

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

Si utilitzeu Rakuten MA amb finalitats de recerca, si us plau, cita el nostre article sobre Rakuten MA [Hagiwara i Sekine 2014]

Preguntes Freqüents (Preguntes Freqüents)

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

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

P. Es permet l'ús comercial?

  • R. Sí, sempre que seguiu els termes i condicions. Consulteu "Termes i condicions" més amunt per obtenir-ne els detalls.

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 que utilitza Jasmine http://jasmine.github.io/ . Assegureu-vos que totes les proves passen (sense errors després d'executar-se jasmine-node spec) i escriviu la vostra ( si cal) abans d'enviar una sol·licitud d'extracció.
  • Finally, si la vostra pregunta encara no s'ha resolt, poseu-vos en contacte amb nosaltres a prj-rakutenma [at] mail.rakuten.com.

P. Els resultats de la 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 resum de funcions ( hash_func) que s'utilitzen per a l'entrenament. Recordeu que heu d'utilitzar la funció de resum 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 de 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 una assignació (p. ex. 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 ho fa per vosaltres. Us recomanem que treballeu amb Node.js per a l'entrenament de models, etc. i després el convertiu per als usos del navegador.

Apèndix

Supported feature templates

Plantilla de funció 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 Unigrama de tipus de caràcter (t-3)
c8 Unigrama de tipus de caràcter (t-2)
c9 Unigrama de tipus de caràcter (t-1)
c0 Unigrama de tipus de caràcter (t0)
c1 Unigrama de tipus de caràcter (t+1)
c2 Unigrama de tipus de caràcter (t+2)
c3 Unigrama de tipus de caràcter (t+3)
b7 Bigrama del caràcter (c-3 c-2)
b8 Bigrama de caràcters (c-2 c-1)
b9 Bigrama de caràcters (c-1 c0)
b1 Bigram de caràcters (c0 c+1)
b2 Bigram de caràcters (c+1 c+2)
b3 Bigrama de caràcters (c+2 c+3)
d7 Tipus de caràcter bigrama (t-3 t-2)
d8 Tipus de caràcter bigrama (t-2 t-1)
d9 Tipus de caràcter bigrama (t-1 t0)
d1 Bigram tipus de caràcter (t0 t+1)
d2 Tipus de caràcter bigrama (t+1 t+2)
d3 Bigrama tipus de caràcter (t+2 t+3)
altres Si especifiqueu una funció de característica 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 caràcter en aquesta posició, i iés la posició actual. Un objecte caràcter és un objecte. amb dues propietats ci tque són caràcter i tipus de caràcter, 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;, aleshores retorna 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ícules d'aspecte
BA ba3 (en ba-construcció)
CC Conjunció coordinadora
CD Número cardinal
CS Conjunció subordinada
DES de5 (complementador/nominalitzador)
DEG de5 (genitiu/associatiu)
DER de5 (Resultatiu)
DEV de5 (manera)
DT Determinador
ETC Altres
FW Paraula estrangera
ij Interjecció
JJ Un altre nom-modificador
LB bei4 (en bei-construcció llarga)
LC Localitzador
M Mesura la paraula
MSP Altres partícules
NN Un altre substantiu
NN-CURT Un altre substantiu (abrev.)
NR Nom propi
NR-CURT Nom propi (abrev.)
Nou Testament Nom temporal
NT-CURT Nom temporal (abrev.)
OD Nombre ordinal
ON Onomatopeia
P Preposició
PN Pronom
PU Puntuació
SB bei4 (en resum bei-construcció)
SP Partícula final de frase
URL URL
VA Adjectiu predicatiu
VC Còpula
VE tu3 (verb principal)
VV Un altre verb
X Altres

PoS tag list in Japanese and correspondence to BCCWJ tags

Etiqueta Nom original JA Anglès
AC adjectiu-general Adjectiu-Comú
A-dp adjectiu - possible no autosuficient Dependent de l'adjectiu
C agafar paraules Conjunció
D pronom Pronom
E Anglès paraula anglesa
F adverbi Adverbi
I C moviment verb-general Interjecció-Comú
jc Forma paraula general Adjectival Nom-Comú
J-tari Forma paraula-タリ Adjectival Nom-Tari
J-xs Forma paraula auxiliar-rama de paraula Adjectival Nom-AuxVerb tronc
M-aa Marca de subvenció-AA Senyal auxiliar-AA
Mc Subvenció marca general Signe auxiliar-Comú
M-cp Suports suplementaris amb marca tancada Signe auxiliar-Parèntesis obert
M-op Marca de subvenció - parèntesis oberts Signe auxiliar-Parèntesis de tancament
MP Període marca de subvenció Signe auxiliar-Període
Nn substantiu - substantiu Nom-substantiu
N-nc substantiu - substantiu comú Nom-substantiu comú
N-pn substantiu - nom propi Nom-Nom propi
N-xs tija substantiu-auxiliar Nom-AuxVerb tronc
O そのell Altres
P connector Prefix
P-fj partícula-adverbi partícula Partícula-Adverbial
P-jj Partícula - partícula quasi cos Partícula-Frasal
Pk Partícula de cas de partícules Marcatge de cas de partícules
P-rj partícula - partícula Unió de partícules
P-sj Partícula - partícula de connexió Partícula-conjuntiva
Qa sufix-adjectiu Sufix-adjectiu
Qj sufix - paraula de forma Sufix-Adjectival Nom
Qn sufix - substantiu Sufix-substantiu
Qv sufix-verb Sufix-Verb
R paraules unides Adjectiu adnominal
Sc Notació general Signe-Comú
SL token-text Signe-Carta
U URL URL
Vc verb-general Verb-Comú
V-dp Verb - possible no autosuficient Dependent 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 per al client basat en l'aprenentatge en línia Sessió de demostració COLING 2014, pàgines 39-43, 2014. [ PDF ]

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

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

Naiwen Xue, Fei Xia, Fu-dong Chiou i Marta Palmer The Penn Chinese treebank: Phrase structure annotation of a large corpus, Natural Language Engineering, 11(2):207–238, 2005. [ PDF ] [ Lloc ]


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