Módulo de comunidad impresionante

Rakuten MA

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

Introducción

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 Produce segmentación de palabras y etiquetas PoS para chino / japonés.
  • Admite la actualización incremental de modelos mediante el aprendizaje en línea (Soft Confidence Weighted, Wang et al. ICML 2012).
  • Conjunto de funciones personalizables.
  • Admite funciones hash, cuantificación y poda para la representación de modelos compactos.
  • Incluye modelos chinos y japoneses entrenados a partir de corpora generales (CTB [Xue et al. 2005] y BCCWJ [Maekawa 2008]) y corpora de comercio electrónico.

Manifestación

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

Uso

Download & Install

Dado que Rakuten MA es una biblioteca de JavaScript, no es necesario instalarlo. Clone el repositorio de git como

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

o descargue el archivo zip desde aquí: https://github.com/rakuten-nlp/rakutenma/archive/master.zip

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

1
node demo.js

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

npm package

También puede usar Rakuten MA como un 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 <head>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>

El análisis y el resultado tienen este aspecto:

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. Cargue un modelo existente, por ejemplo, model = JSON.parse(fs.readFileSync("model_file"));entonces rma = new RakutenMA(model);orma.set_model(model);
  2. Especifique featsetsegún su idioma (p. Ej., rma.featset = RakutenMA.default_featset_zh;Para chino y rma.featset = RakutenMA.default_featset_ja;para japonés).
  3. Recuerde utilizar la función hash de características de 15 bits ( rma.hash_func = RakutenMA.create_hash_func(15);) cuando utilice los modelos incluidos ( model_zh.jsony model_ja.json).
  4. Úselo rma.tokenize(input)para analizar su entrada.

Training your own analysis model from scratch

  1. Prepare su corpus de entrenamiento (un conjunto de oraciones de entrenamiento donde una oración es solo una matriz de [token, etiqueta PoS] correcta).
  2. Inicialice una instancia de RakutenMA con new RakutenMA().
  3. La Especificar featset. (Y, opcionalmente, ctype_func, hash_func, etc.)
  4. Alimente sus frases de entrenamiento una por una (desde la primera hasta la última) al train_one(sent)método.
  5. Por lo general, SCW converge lo suficiente después de una epoch(una pasada a través de todo el corpus de entrenamiento), pero puede repetir el paso 4 para lograr un rendimiento aún mejor.

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. Cargue un modelo existente e inicialice una instancia de RakutenMA (consulte "Uso de modelos empaquetados para analizar oraciones en chino / japonés" más arriba).
  2. Prepare sus datos de entrenamiento (esto podría ser tan solo un par de oraciones, dependiendo de qué y cuánto desea "volver a entrenar").
  3. Alimente sus frases de entrenamiento una por una al train_one(sent)método.

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.jsque aplica la cuantificación de características (consulte [Hagiwara y Sekine COLING 2014] para obtener más detalles) para reducir el tamaño del modelo entrenado.

Puedes ejecutarlo node scripts/minify.js [input_model_file] [output_model_file]para crear una versión minimizada del archivo de modelo. Recuerda: también elimina la parte "sigma" del modelo entrenado, lo que significa que ya no puedes volver a entrenar el modelo minimizado. Si es necesario, vuelve a entrenar el modelo primero, luego minifícalo.

Documentación de API

Constructor Descripción
RakutenMA(model, phi, c) . Crea nuevos nueva instancia RakutenMA A model(opcional) especifica al objeto de instancia de identificación con los inicializar el RakutenMA. phiY c(ambos opcionales) son parámetros Hyper de la GCE (por defecto: phi = 2048, c = 0.003906).
Métodos Descripción
tokenize(input) Tokeniza input(cadena) y devuelve el resultado tokenizado ([token, etiqueta PoS] pares).
train_one(sent) El actualiza el modelo actual (si es necesario) el uso de la respuesta dada sent([modo, la etiqueta pos] pares). Por el valor de retorno es objeto AN con tres propiedades ans, sysy updated, DONDE ansES La Respuesta (igual que sent), sysES La salida del sistema usa el modelo (antiguo) y updatedes una marca binaria (Verdadero / Falso) que significa si el modelo se actualizó (porque sysera 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 etiquetas de etiquetado secuencial. Actualmente, "IOB2"y "SBIEO"son compatibles. Especificar otros esquemas de etiquetas provoca una excepción.
Propiedades Descripción
featset Especifica una serie de plantillas de funciones (cadena) que se utilizan para el análisis. Puede utilizar RakutenMA.default_featset_jay RakutenMA.default_featset_zhcomo conjuntos de funciones predeterminados para japonés y chino, respectivamente. Consulte a continuación ("Plantillas de funciones compatibles") para obtener más información sobre las plantillas de funciones.
ctype_func Especifica la función utilizada para convertir un carácter a su tipo de carácter. RakutenMA.ctype_ja_default_funcEs la función de tipo de carácter predeterminada utilizada para el japonés. Alternativamente, puede llamar RakutenMA.create_ctype_chardic_func(chardic)para crear una función de tipo de carácter que toma un carácter para buscarlo chardicy devolver su valor. (Para ejemplo, RakutenMA.create_ctype_chardic_func({"A": "type1"})devuelve una función fdonde f("A")devuelve "type1"y de lo []contrario).
hash_func Especifica la función hash que se utilizará para el hash de características. Predeterminado = undefined(sin hash de características). Se bitpuede crear una función de hash de características con un espacio de hash de -bit mediante la llamada 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 utiliza Rakuten MA con fines de investigación, cite nuestro artículo sobre Rakuten MA [Hagiwara and Sekine 2014]

FAQ (preguntas frecuentes)

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

  • A. Confirmamos que Rakuten MA se ejecuta en los siguientes entornos:
    • Internet Explorer 8 (versión 8.0.7601.17414 o superior)
    • Google Chrome (versión 35.0.1916.153 o superior)
    • Firefox (versión 16.0.2 o superior)
    • Safari (ver. 6.1.5 o superior)
    • Node.js (ver. 0.10.13 o superior)

P. ¿Está permitido el uso comercial?

  • R. Sí, siempre que siga los términos y condiciones. Consulte los "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?

  • R. Cree un problema en los problemas de Github 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 que utiliza Jasmine http://jasmine.github.io/ . Asegúrese de que todas las pruebas pasen (sin errores después de ejecutarlas jasmine-node spec) y escriba las suyas propias ( si es necesario) antes de enviar una solicitud de extracción.
  • Finally, si su pregunta aún no está resuelta, contáctenos en prj-rakutenma [at] mail.rakuten.com.

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

  • R. Compruebe si está utilizando el mismo conjunto de características ( featset) y la función hash de características ( hash_func) que se utilizó para el entrenamiento. Recuerde usar la función hash de características de 15 bits ( rma.hash_func = RakutenMA.create_hash_func(15);) cuando utilice los modelos incluidos ( model_zh.jsony model_ja.json).

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

  • R. Actualmente, solo se admite el chino simplificado.

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

  • R. Sí y No. Aunque la estructura de datos interna de los modelos es la misma, debe agregar una asignación (por ejemplo, var model = [JSON representation];) para poder hacer referencia 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.jsque hace esto por usted. Le recomendamos que trabaje en Node.js para el entrenamiento de modelos, etc. y luego lo convierta para usos del navegador.

Apéndice

Supported feature templates

Plantilla de función Descripción
w7 Unigrama de caracteres (c-3)
w8 Unigrama de caracteres (c-2)
w9 Unigrama de caracteres (c-1)
w0 Unigrama de caracteres (c0)
w1 Unigrama de caracteres (c + 1)
w2 Unigrama de caracteres (c + 2)
w3 Unigrama de caracteres (c + 3)
c7 Tipo de carácter unigram (t-3)
c8 Tipo de carácter unigram (t-2)
c9 Tipo de carácter unigram (t-1)
c0 Tipo de carácter unigram (t0)
c1 Tipo de carácter unigram (t + 1)
c2 Tipo de carácter unigrama (t + 2)
c3 Tipo de carácter unigram (t + 3)
b7 Bigrama de caracteres (c-3 c-2)
b8 Bigrama de caracteres (c-2 c-1)
b9 Bigrama de caracteres (c-1 c0)
b1 Bigrama de caracteres (c0 c + 1)
b2 Bigrama de caracteres (c + 1 c + 2)
b3 Bigrama de caracteres (c + 2 c + 3)
d7 Tipo de carácter bigrama (t-3 t-2)
d8 Tipo de carácter bigrama (t-2 t-1)
d9 Tipo de carácter bigrama (t-1 t0)
d1 Tipo de carácter bigrama (t0 t + 1)
d2 Tipo de carácter bigrama (t + 1 t + 2)
d3 Tipo de carácter bigrama (t + 2 t + 3)
otros Si especifica una función de característica personalizada en la featsetmatriz, la función se llamará con dos argumentos _ty i, donde _tes una función que toma una posición jy devuelve el objeto de carácter en esa posición, y ies la posición actual. Un objeto de carácter es un objeto con dos propiedades cy tque son de carácter 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;, entonces está devolviendo el tipo de carácter de la posición actual, que es básicamente lo mismo que la plantilla c0).

PoS tag list in Chinese

Etiqueta Descripción
ANUNCIO Adverbio
COMO Partícula de aspecto
licenciado en Letras ba3 (en construcción ba)
CC Conjunción de coordinación
CD número cardinal
CS Conjunción subordinada
DIC de5 (Complementador / Nominalizador)
DEG de5 (genitivo / asociativo)
DER de5 (resultante)
DEV de5 (modales)
DT Determinante
ETC Otros
FW Palabra extranjera
IJ Interjección
JJ Otro modificador de sustantivo
LB bei4 (en construcción larga bei)
LC Localizador
METRO Palabra de medida
MSP Otra partícula
NN Otro sustantivo
NN-CORTO Otro sustantivo (abrev.)
NR Nombre propio
NR-CORTO Sustantivo propio (abrev.)
Nuevo Testamento Sustantivo temporal
NT-SHORT Sustantivo temporal (abrev.)
sobredosis Número ordinal
SOBRE Onomatopeya
PAG Preposición
PN Pronombre
PU Puntuación
SB bei4 (en resumen, bei-construcción)
SP Partícula final de oración
URL URL
Virginia Adjetivo predicativo
VC Cópula
VE you3 (Verbo principal)
VV Otro verbo
X Otros

PoS tag list in Japanese and correspondence to BCCWJ tags

Etiqueta Nombre JA original inglés
C.A Adjetivo-general Adjetivo-Común
A-dp Adjetivos: no autosuficiente Dependiente del adjetivo
C Conectar palabras Conjunción
D sinónimo Pronombre
mi inglés palabra inglesa
F adverbio Adverbio
Ic Tocar verbos generales Interjección-Común
Jc Dar forma a las palabras-general Sustantivo común adjetivo
J-tari Forma palabra- タ リ Sustantivo adjetivo-tari
J-xs Forma palabras-raíz verbal auxiliar Sustantivo adjectival-AuxVerb
M-aa Marca de subvención-AA Señal auxiliar-AA
Mc Signo de subvención general Señal auxiliar común
M-cp Subvención marca-paréntesis cerrado Signo auxiliar-Paréntesis abierto
Fregar Subvención marca abierta entre paréntesis Signo auxiliar-Cerrar paréntesis
Mp Período de marca de subvención Período de signo auxiliar
Nn Sustantivo Sustantivo
N-nc Sustantivo común Sustantivo común
N-pn Sustantivo propio Sustantivo propio
N-xs Sustantivo-raíz del verbo auxiliar Sustantivo-AuxVerb
O そ の 他 Otros
PAG Palabras conjuntas Prefijo
P-fj Auxiliar-Adverbial Partícula adverbial
P-jj Palabras auxiliares-Palabras auxiliares cuasi subjetivas Partícula-Phrasal
Paquete Palabras auxiliares-Caso Palabras auxiliares Marcado de cajas de partículas
P-rj Palabras auxiliares-Palabras auxiliares Unión de partículas
P-sj Palabras auxiliares-Palabras auxiliares Partícula-Conjuntiva
Qa Sufijo-adjetivo Sufijo-Adjetivo
Qj Palabras en forma de sufijo Sufijo-Adjetivo Sustantivo
Qn Sufijo-sustantivo Sufijo-Sustantivo
Qv Sufijo-verbal Sufijo-Verbo
R Palabras conjuntas Adjetivo adnominal
Carolina del Sur Mark-general Signo común
Sl Marcar-texto Signo-Carta
U URL URL
Vc Verbo general Verbo común
V-dp Posibilidad de independencia de los verbos Dependiente del verbo
W 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 ligero chino / japonés del lado del cliente basado en aprendizaje en línea. Sesión de demostración de COLING 2014, páginas 39-43, 2014. [ PDF ]

Kikuo Maekawa. Compilació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 suave exacto ponderado en confianza. En Proc. De ICML 2012, páginas 121–128, 2012. [ PDF ]

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


© 2014, 2015 Rakuten NLP Project. Todos los derechos reservados. / Patrocinado por Rakuten, Inc. y Rakuten Institute of Technology .