Impresionante módulo de comunidad

Rakuten MA

README japonés (japonés)

Introduccion

Rakuten MA (analizador morfológico) es un analizador morfológico (segmento de palabras o etiquetador PoS) para chino y japonés escrito exclusivamente en JavaScript.

Rakuten MA tiene las siguientes características únicas:

  • Implementación de JavaScript puro. Funciona tanto en navegadores modernos como en node.js.
  • Implementa un modelo de etiquetado de caracteres independiente del idioma. Genera segmentación de palabras y etiquetas PoS para chino / japonés.
  • Supports incremental update of models by online learning (Soft Confidence Weighted , Wang et al. ICML 2012).
  • Conjunto de funciones personalizables.
  • Supports feature hashing , cuantización y poda de características para la representación de modelos compactos.
  • Incluido con modelos chinos y japoneses formados de corpus generales (CTB [Xue et al. 2005] y BCCWJ [Maekawa 2008]) y corpus de comercio electrónico.

Demo

Puede probar Rakuten MA en la página de demostración (puede llevar un tiempo cargar esta página).

Uso

Download & Install

Desde Rakuten MA es una biblioteca JavaScript, no hay necesidad de instalación. Clonar el repositorio git como

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

El archivo zip en su descarga desde aquí o Fondo: https://github.com/rakuten-nlp/rakutenma/archive/master.zip

Si tiene Node.js instalado, puede ejecutar la demostración

1
node demo.js

que es idéntico al ejemplo de uso a continuación.

npm package

También puede usar Rakuten MA como paquete npm. Puede instalarlo de la siguiente manera:

1
npm install rakutenma

Los archivos del modelo se pueden encontrar en 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)

Incluya el siguiente fragmento de código en el <head> de su 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>

Los análisis y resultados se ve así:

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. Load an existing model , por ejemplo, model = JSON.parse(fs.readFileSync("model_file")); luego rma = new RakutenMA(model); o rma.set_model(model);
  2. Especifique featset según su idioma (por ejemplo, rma.featset = RakutenMA.default_featset_zh; para chino y rma.featset = RakutenMA.default_featset_ja; para japonés).
  3. Recuerde usar la función hash de la característica de 15 bits ( rma.hash_func = RakutenMA.create_hash_func(15); ) cuando use los modelos agrupados ( model_zh.json y model_ja.json ).
  4. Use rma.tokenize(input) para analizar su entrada.

Training your own analysis model from scratch

  1. Prepare your training corpus (a set of training sentences where a sentence is just an array of correct [token , la etiqueta de posición].)
  2. Inicialice una instancia de RakutenMA con el new RakutenMA() .
  3. Especifique featset . (Y opcionalmente, ctype_func , hash_func , etc.)
  4. Frases una por su Training alimentación Uno (de, al El primero que en el último) que en The train_one(sent) Método ,.
  5. SCW converge suficiente, la de popa lo general epoch (una pasada a través de capacitación en el corpus completo) Pero se puede repetir el Paso 4. Lograr que la del par de mejor rendimiento.

Consulte scripts/train_zh.js (para chino) y scripts/train_ja.js (para japonés) para ver un ejemplo que muestra cómo entrenar su propio modelo.

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

  1. Cargar un modelo existente e inicializar una instancia RakutenMA. (Ver "Uso de modelos de paquetes para analizar chino / frases japonesas" más arriba)
  2. Prepare your training data (this could be as few as a couple of sentences , en función de y cuánto Lo que se quiere "Re-Train").
  3. Alimenta tus oraciones de entrenamiento una por una con el train_one(sent) .

Reducing the model size

El tamaño del modelo aún podría ser un problema para la distribución del lado del cliente, incluso después de aplicar el hash de características. Incluimos un script scripts/minify.js que aplica la cuantificación de características (ver [Hagiwara y Sekine COLING 2014] para los detalles) para reducir el modelo entrenado tamaño

Puede ejecutarlo node scripts/minify.js [input_model_file] [output_model_file] para hacer una versión minificada del archivo del modelo. Recuerde: también elimina la parte "sigma" del modelo entrenado, lo que significa que ya no puede volver a Entrene el modelo minimizado. Si es necesario, vuelva a entrenar el modelo primero y luego minimícelo.

Documentación API

Constructor Descripción
RakutenMA(model, phi, c) Crea una nueva instancia de RakutenMA. model (opcional) especifica el objeto modelo para inicializar la instancia de RakutenMA con. phi c (ambos opcionales) son hiperparámetros de SCW (valor predeterminado: phi = 2048 , c = 0.003906 ).
Métodos Descripción
tokenize(input) Tokenizes input devoluciones (String) y tokenizados resultado ([modo, la etiqueta pos] pares).
train_one(sent) Actualiza el modelo actual (si es necesario) utilizando la respuesta dada sent (pares [token, etiqueta PoS]). El valor de retorno es un objeto con tres propiedades ans , sys y updated , donde ans es la respuesta dada (igual a la sent ) , sys es la salida del sistema que usa el modelo (antiguo) y updated es un indicador binario (verdadero / falso) que significa si el modelo se actualizó (porque sys era diferente de ans ) o no.
set_model(model) Establece el modelo de la instancia de Rakuten MA en model .
set_tag_scheme(scheme) Establece el esquema de etiqueta de etiquetado secuencial. Actualmente, "IOB2" y "SBIEO" son compatibles. La especificación de otros esquemas de etiqueta causa una excepción.
Propiedades Descripción
featset Especifique una matriz de plantillas de características (cadena) utilizadas para el análisis. Puede usar RakutenMA.default_featset_ja y RakutenMA.default_featset_zh como conjuntos de características predeterminados para japonés y chino, respectivamente. Consulte a continuación ("Plantillas de características admitidas") para obtener detalles de las plantillas de características .
ctype_func Especifique la función utilizada para convertir un carácter a su tipo de carácter. RakutenMA.ctype_ja_default_func es la función de tipo de caracteres predeterminada utilizada para japonés. Alternativamente, puede llamar a RakutenMA.create_ctype_chardic_func(chardic) para crear una función de tipo de carácter que necesita un carácter para verlo. up en chardic y devolver su valor. (Por ejemplo, RakutenMA.create_ctype_chardic_func({"A": "type1"}) devuelve una función f donde f("A") devuelve "type1" y [] contrario).
hash_func Especifique la función hash que se usará para el hash de características. Valor predeterminado = undefined (sin hashing de características). Se puede crear una función de hash de características con espacio de bit bit-bit llamando a RakutenMA.create_hash_func(bit) .

Términos y condiciones

Se permite la distribución, modificación y uso académico / comercial de Rakuten MA, siempre que cumpla con la Licencia Apache versión 2.0 http://www.apache.org/licenses/LICENSE-2.0.html .

Si está utilizando Rakuten MA para fines de investigación, cite nuestro documento sobre Rakuten MA [Hagiwara y Sekine 2014]

FAQ (Frequently Asked Questions)

P. ¿Qué son los navegadores compatibles y las versiones de Node.js?

  • A. We confirmed that Rakuten MA runs in the following environments :
    • 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. ¿Se permite el uso comercial?

  • A. Yes , siempre y cuando siga los términos y condiciones. Consulte "Términos y condiciones" más arriba para obtener más detalles.

P. Encontré un error / error de análisis / etc. ¿Dónde debo informar?

  • Por favor, la cuestión en Crear una A. Github y la delincuencia https://github.com/rakuten-nlp/rakutenma/issues .
  • Alternatively , puede crear una solicitud de extracción si modifica el código. Rakuten MA tiene un conjunto de pruebas usando Jasmine http://jasmine.github.io/ . Asegúrese de que todas las pruebas pasen (sin errores después de ejecutar la jasmine-node spec ) y escriba el suyo (si es necesario) antes de enviar una solicitud de extracción.
  • Finally , si su Aún no es la cuestión resolverse, por favor tarjeta de visita de EE.UU. AT PRJ-rakutenma [AT] mail.rakuten.com.

P. Los resultados de la tokenización parecen extraños (específicamente, la oración se divide en caracteres individuales sin etiquetas PoS)

  • A. Compruebe si está utilizando el mismo conjunto de características ( featset ) y la función de hashing de características ( hash_func ) utilizada para el entrenamiento. Recuerde utilizar la función de hashing de características de 15 bits ( rma.hash_func = RakutenMA.create_hash_func(15); ) al usar los modelos agrupados ( model_zh.json y model_ja.json ).

P. ¿Qué scripts (simplificados / tradicionales) son compatibles con el chino?

  • R. Actualmente solo se admite chino simplificado.

P. ¿Podemos usar el mismo archivo de modelo en formato JSON para los navegadores?

  • A. Yes and no. Although internal data structure of models is the same , debe agregar la asignación (por ejemplo, var model = [JSON representation]; ) para referirse a ella en los navegadores. Vea la diferencia entre model_zh.json ( para Node.js) y model_zh.js (para navegadores). Hay un mini script scripts/convert_for_browser.js que hace esto por usted. Le recomendamos que trabaje en Node.js para entrenamiento de modelos, etc. y luego lo convierta para usos del navegador .

Apéndice

Supported feature templates

Plantilla de funciones Descripción
w7 Unigrama de caracteres (c-3)
w8 Unigrama de caracteres (c-2)
w9 Unigrama de caracteres (c-1)
w0 Carácter unigram (C0)
w1 Unigrama de caracteres (c + 1)
w2 Unigrama de caracteres (c + 2)
w3 Unigrama de caracteres (c + 3)
c7 Tipo de caracteres unigram (t-3)
c8 Tipo de caracteres unigram (t-2)
c9 tipo de caracteres unigram (t-1)
c0 Tipo de caracteres unigram (t0)
c1 tipo de caracteres unigram (t + 1)
c2 tipo de caracteres unigram (t + 2)
c3 tipo de caracteres unigram (t + 3)
b7 Carácter bigram (c-3 C-2)
b8 Carácter bigram (c-2 c-1)
b9 Carácter bigram (c-1 c0)
b1 Carácter bigram (c0 c + 1)
b2 Carácter bigram (c + 1 c + 2)
b3 Carácter bigram (c + 2 c + 3)
d7 Tipo de caracteres bigram (t-3 t-2)
d8 tipo de caracteres bigram (t-2 t-1)
d9 tipo de caracteres bigram (t-1 t0)
d1 tipo de caracteres bigram (t0 t + 1)
d2 tipo de caracteres bigram (t + 1 t + 2)
d3 tipo de caracteres bigram (t + 2 t + 3)
otros Si especifica una función de entidad personalizada en la matriz featset , la función se llamará con dos argumentos _t e i , donde _t es una función que toma una posición j y devuelve el objeto de carácter en esa posición, e i es la posición actual. Un objeto de carácter es un objeto con dos propiedades c y t que son caracteres y tipo de carácter, respectivamente. El valor de retorno de esa función se utiliza como el valor de la característica (por ejemplo, si especifica una función f(_t, i) que returns _t(i).t; , TI apos el entonces devolver el carácter actual el tipo de posición, que como es básicamente el mismo la plantilla c0 ).

PoS tag list in Chinese

Etiqueta Descripción
AD Adverbio
AS Aspecto Partícula
BA ba3 (en ba-construcción)
CC Conjunción coordinadora
CD Número cardinal
CS Conjunción subordinada
DEC de5 (Complementador / Nominalizador)
DEG de5 (Genitivo / Asociativo)
DER de5 (resultante)
DEV de5 (Moda)
DT Determinante
ETC Otros
FW Palabra extranjera
IJ Interjección
JJ Otro modificador de sustantivo
LB bei4 (en construcción larga bei)
LC Localizador
M Medir palabra
MSP Otra partícula
NN Otro sustantivo
NN-CORTO Otro sustantivo (abreviatura)
NR Nombre propio
NR-CORTO Proper noun (abrev.)
NT Sustantivo temporal
NT-CORTO Sustantivo temporal (abreviatura)
OD Número ordinal
ON Onomatopeya
P Preposición
PN Pronombre
PU Puntuación
SB bei4 (en resumen bei-construcción)
SP Partícula final de la oración
URL URL
VA Adjetivo predictivo
VC Cópula
VE you3 (verbo principal)
VV Otro verbo
X Otros

PoS tag list in Japanese and correspondence to BCCWJ tags

Etiqueta Nombre original de JA Ingles
Ac Adjetivo general Adjetivo-Común
A-dp Adjetivo-no independiente Dependiente del adjetivo
C Adverbio Conjunción
D Pronombre Pronombre
E Argot inglés Palabra inglesa
F Adverbio Adverbio
Ic Verbo general Interjección-Común
Jc Forma palabra general Adjetiva Sustantivo-Común
J-tari Las palabras dan forma - ta ri Adjetivo sustantivo-Tari
J-xs La forma de la palabra - frase verbal seca Adjetivo Noun-AuxVerb stem
M-aa Grant Mark-AA Señal auxiliar-AA
Mc Grant Mark-General Señal auxiliar común
M-cp marca de subsidio - paréntesis de cierre señal abierta auxiliar Paréntesis
M-op marca de subsidio - paréntesis abierto Signo auxiliar-Cerrar paréntesis
Mp Período de marca de subsidio Periodo de signo auxiliar
Nn Sustantivo Sustantivo
N-nc Sustantivo Sustantivo
N-pn Nombre propio Sustantivo
N-xs Vástago auxiliar de sustantivo raíz nominal-AuxVerb
O そ の 他 Otros
P Conjunción Prefijo
P-fj Adverbio de partículas Partícula-Adverbial
P-jj Partícula-cuasi-partícula Partículas-Frasal
Pk Partículas-caso de partículas Marcado de cajas de partículas
P-rj Particle - sistema de partículas La unión de partículas
P-sj Particle - partícula conexión ma du Partícula conjuntiva
qa Sufijo - adjetivos Sufijo-Adjetivo
qj Sufijo - la forma de la palabra Sustantivo-Adjetivo Sustantivo
qn Sufijo - sustantivo Sufijo-Sustantivo
Qv Conjuntivo-verbal Verbo sufijo
R Conjunción Adjetivo adnominal
Sc Mark-General Señal común
sl Mark-text Carta de firma
U URL URL
Vc Verbo general Verbo-Común
V-dp Verbo - no puede auto Dependiente del verbo
W En blanco Espacio en blanco
X Verbo auxiliar AuxVerb

Agradecimientos

Los desarrolladores desean agradecer a Satoshi Sekine, Satoko Marumoto, Yoichi Yoshimoto, Keiji Shinzato, Keita Yaegashi y Soh Masuko por su contribución a este proyecto.

Referencias

Masato Hagiwara y Satoshi Sekine. Analizador morfológico chino / japonés ligero del lado del cliente basado en el aprendizaje en línea. Sesión de demostración COLING 2014, páginas 39-43, 2014. [ PDF ]

Kikuo Maekawa. Recopilación del corpus Kotonoha-BCCWJ (en japonés). Nihongo no kenkyu (Estudios en japonés), 4 (1): 82–95, 2008. (Puede encontrar información en inglés aquí .) [ Sitio ]

Jialei Wang, Peilin Zhao, y Steven C. Hoi. Aprendizaje exacto y suave, ponderado en la confianza. En Proc. Of ICML 2012, páginas 121–128, 2012. [ PDF ]

Naiwen Xue, Fei Xia, Fu-dong Chiou y Marta Palmer. The Penn Chinese treebank: Anotación de estructura de frase de un gran corpus. Ingeniería del lenguaje natural, 11 (2): 207–238, 2005. [ PDF ] [ Sitio ]


© 2014, 2015 Proyecto Rakuten NLP. Todos los derechos reservados. / Patrocinado por Rakuten, Inc. y el Instituto de Tecnología de Rakuten .