Impresionante módulo comunitario

Rakuten MA

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

Introdución

Rakuten MA (analizador morfolóxico) é un analizador morfolóxico (segmentador de palabras + PoS Tagger) para chinés e xaponés escrito exclusivamente en JavaScript.

Rakuten MA ten as seguintes características únicas:

  • Implementación pura de JavaScript. Funciona tanto en navegadores modernos como en node.js.
  • Implementa un modelo de etiquetado de caracteres independente da linguaxe. Produce segmentación de palabras e etiquetas PoS para chinés/xaponés.
  • Admite a actualización incremental de modelos mediante a aprendizaxe en liña (Soft Confidence Weighted, Wang et al. ICML 2012).
  • Conxunto de funcións personalizables.
  • Admite funcións de hash, cuantificación e poda para a representación do modelo compacto.
  • Incluído con modelos chineses e xaponeses adestrados a partir de corpus xerais (CTB [Xue et al. 2005] e BCCWJ [Maekawa 2008]) e corpus de comercio electrónico.

Demostración

Podes probar Rakuten MA na páxina de demostración (pode tardar un tempo en cargar esta páxina).

Uso

Download & Install

Dado que Rakuten MA é unha biblioteca JavaScript, non hai necesidade de instalación. Clona o repositorio git como

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

ou descarga o arquivo zip desde aquí: https://github.com/rakuten-nlp/rakutenma/archive/master.zip

Se tes Node.js instalado, podes executar a demostración mediante

1
node demo.js

que é idéntico ao exemplo de uso que aparece a continuación.

npm package

Tamén podes usar Rakuten MA como paquete npm. Podes instalalo mediante:

1
npm install rakutenma

Os ficheiros do modelo pódense atopar 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)

Inclúe o seguinte fragmento de código no <head>código 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>

A análise e o resultado ten o seguinte 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 exemplo, model = JSON.parse(fs.readFileSync("model_file"));entón rma = new RakutenMA(model);ourma.set_model(model);
  2. Especifique featsetdependendo da súa lingua (por exemplo, rma.featset = RakutenMA.default_featset_zh;para chinés e rma.featset = RakutenMA.default_featset_ja;xaponés).
  3. Lembra usar a función de hash de funcións de 15 bits ( rma.hash_func = RakutenMA.create_hash_func(15);) cando utilices os modelos incluídos ( model_zh.jsone model_ja.json).
  4. Use rma.tokenize(input)para analizar a súa entrada.

Training your own analysis model from scratch

  1. Prepare o seu corpus de adestramento (un conxunto de frases de adestramento onde unha oración é só unha matriz de [token, etiqueta PoS] correcta)
  2. Inicialice unha instancia de RakutenMA con new RakutenMA().
  3. Especifique featset. (e opcionalmente , ctype_func, hash_funcetc.)
  4. Alimenta as túas frases de adestramento unha por unha (da primeira á última) co train_one(sent)método.
  5. Normalmente SCW converxe o suficiente despois dunha epoch(unha pasada por todo o corpus de adestramento) pero pode repetir o paso 4. para conseguir un rendemento aínda mellor.

Consulta scripts/train_zh.js(para chinés) e scripts/train_ja.js(para xaponés) para ver un exemplo que mostra como adestrar o teu propio modelo.

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

  1. Carga un modelo existente e inicializa unha instancia de RakutenMA (consulta "Utilizar modelos agrupados para analizar frases en chinés/xaponés" máis arriba)
  2. Prepare os seus datos de adestramento (poden ser tan poucos como un par de frases, dependendo de que e canto quere "readestrar").
  3. Alimenta as túas frases de adestramento unha a unha co train_one(sent)método.

Reducing the model size

O tamaño do modelo aínda pode ser un problema para a distribución do cliente mesmo despois de aplicar o hash de funcións. Incluímos un script scripts/minify.jsque aplica a cuantificación de funcións (consulta [Hagiwara e Sekine COLING 2014] para obter máis información) para reducir o tamaño do modelo adestrado.

Podes executalo node scripts/minify.js [input_model_file] [output_model_file]para crear unha versión reducida do ficheiro do modelo. Lembra: tamén elimina a parte "sigma" do modelo adestrado, o que significa que xa non podes volver adestrar o modelo reducido. Se é necesario, volve adestrar. primeiro o modelo e despois minízao.

Documentación API

Construtor Descrición
RakutenMA(model, phi, c) Crea unha nova instancia de RakutenMA. model(opcional) especifica o obxecto modelo co que inicializar a instancia de RakutenMA. phie c(ambos opcionais) son hiperparámetros de SCW (predeterminado: phi = 2048, c = 0.003906).
Métodos Descrición
tokenize(input) Tokenizes input(cadea) e devolve o resultado tokenizado (pares [token, PoS tag]).
train_one(sent) Actualiza o modelo actual (se é necesario) usando a resposta dada sent(pares [token, etiqueta PoS]). O valor de retorno é un obxecto con tres propiedades ans, syse updated, onde ansé a resposta dada (igual que sent), sysé a saída do sistema usando o modelo (antigo) e updatedé unha bandeira binaria (Verdadero/Falso) que significa se o modelo foi actualizado (porque sysera diferente de ans) ou non.
set_model(model) Establece o modelo da instancia de Rakuten MA en model.
set_tag_scheme(scheme) Establece o esquema de etiquetas secuenciais. Actualmente, "IOB2"son "SBIEO"compatibles. Especificar outros esquemas de etiquetas provoca unha excepción.
Propiedades Descrición
featset Especifica unha matriz de modelos de funcións (cadea) utilizados para a análise. Podes usar RakutenMA.default_featset_jae RakutenMA.default_featset_zhcomo conxuntos de funcións predeterminados para xaponés e chinés, respectivamente. Consulta a continuación ("Modelos de funcións admitidos") para obter máis información sobre os modelos de funcións.
ctype_func Especifica a función que se usa para converter un carácter no seu tipo de carácter. RakutenMA.ctype_ja_default_funcÉ a función de tipo de carácter predeterminada que se usa para o xaponés. Como alternativa, pode chamar RakutenMA.create_ctype_chardic_func(chardic)para crear unha función de tipo de carácter que leva un carácter para buscalo chardice devolver o seu valor. (Para exemplo, RakutenMA.create_ctype_chardic_func({"A": "type1"})devolve unha función fonde f("A")devolve "type1"e []doutro xeito.)
hash_func Especifica a función hash que se utilizará para o hash de funcións. Valor predeterminado = undefined(sen función hash). bitPódese crear unha función de hash de función con espazo hash de -bit chamando a RakutenMA.create_hash_func(bit).

Termos e condicións

Permítese a distribución, modificación e uso académico/comercial de Rakuten MA, sempre que cumpra coa versión 2.0 da licenza Apache http://www.apache.org/licenses/LICENSE-2.0.html .

Se está a usar Rakuten MA para fins de investigación, cite o noso artigo sobre Rakuten MA [Hagiwara e Sekine 2014]

FAQ (Preguntas máis frecuentes)

P. Cales son os navegadores compatibles e as versións de Node.js?

  • R. Confirmamos que Rakuten MA funciona nos seguintes ambientes:
    • Internet Explorer 8 (ver. 8.0.7601.17414 ou superior)
    • Google Chrome (ver. 35.0.1916.153 ou superior)
    • Firefox (ver. 16.0.2 ou superior)
    • Safari (ver. 6.1.5 ou superior)
    • Node.js (ver. 0.10.13 ou superior)

P. Permítese o uso comercial?

  • R. Si, sempre que sigas os termos e condicións. Consulta os "Termos e condicións" máis arriba para obter máis información.

P. Atopei un erro / erro de análise / etc. Onde debo informar?

  • R. Crea un problema en Github issues https://github.com/rakuten-nlp/rakutenma/issues .
  • Alternatively, podes crear unha solicitude de extracción se modificas o código. Rakuten MA ten unha suite de probas usando Jasmine http://jasmine.github.io/ . Asegúrate de que todas as probas pasen (sen erros despois de executar jasmine-node spec) e escribe a túa propia ( se é necesario) antes de enviar unha solicitude de extracción.
  • Finally, se a túa pregunta aínda non está resolta, póñase en contacto connosco en prj-rakutenma [en] mail.rakuten.com.

P. Os resultados da tokenización parecen estraños (específicamente, a frase divídese en caracteres individuais sen etiquetas PoS)

  • R. Comproba se estás a usar o mesmo conxunto de funcións ( featset) e a función de hash de funcións ( hash_func) que se usan para o adestramento. Lembra que debes usar a función de hash de funcións de 15 bits ( rma.hash_func = RakutenMA.create_hash_func(15);) cando utilices os modelos incluídos ( model_zh.jsone model_ja.json).

P. Que scripts (simplificados/tradicionais) son compatibles con chinés?

  • R. Actualmente só se admite o chinés simplificado.

P. Podemos usar o mesmo ficheiro de modelo no formato JSON para os navegadores?

  • R. Si e non. Aínda que a estrutura de datos interna dos modelos é a mesma, cómpre engadir unha asignación (por exemplo, var model = [JSON representation];) para facer referencia a ela nos navegadores. Consulta a diferenza entre model_zh.json(para Node.js) e model_zh.js(para navegadores). Hai un mini script scripts/convert_for_browser.jsque fai isto por ti. Recomendámosche que traballes en Node.js para adestramento de modelos, etc. e despois o convertes para usos do navegador.

Apéndice

Supported feature templates

Modelo de características Descrició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 Unigrama de tipo de carácter (t-3)
c8 Unigrama de tipo de carácter (t-2)
c9 Unigrama de tipo de carácter (t-1)
c0 Unigrama de tipo de carácter (t0)
c1 Unigrama de tipo de carácter (t+1)
c2 Unigrama de tipo de carácter (t+2)
c3 Unigrama de tipo de carácter (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)
outros Se especifica unha función de función personalizada na featsetmatriz, chamarase á función con dous argumentos _te i, onde _té unha función que toma unha posición je devolve o obxecto carácter nesa posición e ié a posición actual. Un obxecto carácter é un obxecto con dúas propiedades ce tque son carácter e tipo de carácter, respectivamente. O valor de retorno desa función utilízase como valor de característica. (Por exemplo, se especifica unha función f(_t, i)que returns _t(i).t;, entón está devolvendo o tipo de carácter da posición actual, que é basicamente o mesmo que o modelo c0.)

PoS tag list in Chinese

Etiquetar Descrición
ANUNCIO Adverbio
AS Partículas de aspecto
BA ba3 (en ba-construción)
CC Conxunción coordinadora
CD Número cardinal
CS Conxunción subordinante
DEC de5 (complementador/nominalizador)
DEG de5 (xenitivo/asociativo)
DER de5 (Resultado)
DEV de5 (manera)
DT Determinador
ETC Outros
FW Palabra estranxeira
ij Interxección
JJ Outro substantivo modificador
LB bei4 (en long bei-construction)
LC Localizador
M Medir palabra
MSP Outras partículas
NN Outro substantivo
NN-CURTO Outro substantivo (abrev.)
NR Substantivo propio
NR-CURTO Nome propio (abrev.)
NT Substantivo temporal
NT-CURTO Substantivo temporal (abrev.)
OD Número ordinal
ON Onomatopeas
P Preposición
PN Pronome
PU A puntuación
SB bei4 (en resumo bei-construction)
SP Partícula final da frase
URL URL
VA Adxectivo predicativo
VC Cópula
VE you3 (verbo principal)
VV Outro verbo
X Outros

PoS tag list in Japanese and correspondence to BCCWJ tags

Etiquetar Nome orixinal JA inglés
Ac adxectivo-xeral Adxectivo-Común
A-dp adxectivo - posible non autosuficiente Dependente do adxectivo
C recoller palabras Conxunción
D pronome Pronome
E inglés Palabra inglesa
F adverbio Adverbio
I C movemento verbo-xeral Interxección-Común
jc Forma palabra xeral Adxectivo Substantivo-Común
J-tari Forma palabra-タリ Adxectivo Substantivo-Tari
J-xs Forma a palabra auxiliar palabra tronco Substantivo adxectivo-AuxVerb tronco
M-aa Marca de subvención-AA Sinal auxiliar-AA
Mc Subvención marca xeral Signo auxiliar-Común
M-cp Corchetes de marca pechado suplementarios Signo auxiliar-Paréntese aberto
M-op Marca de subvención - corchetes abertos Signo auxiliar-Paréntese pechado
MP Período marca de subvención Signo auxiliar-Período
Nn substantivo - substantivo Substantivo-substantivo
N-nc substantivo - substantivo común Substantivo-Sustantivo común
N-pn substantivo - nome propio Substantivo-Nome propio
N-xs raíz substantivo-auxiliar Tallo substantivo-auxverbo
O そのel Outros
P conector Prefixo
P-fj partícula-adverbio partícula Partícula-Adverbial
P-jj Partícula - partícula cuasi-corpórea Partícula-Frasal
Pk Partícula-caso partícula Marcado de caixas de partículas
P-rj partícula - partícula Unión de partículas
P-sj Partícula - partícula de conexión Partícula-Conxuntivo
Qa sufixo-adxectivo Sufixo-Adxectivo
Qj sufixo - palabra forma Substantivo sufixo-adxectivo
Qn sufixo - substantivo Sufixo-substantivo
Qv sufixo-verbo Sufixo-Verbo
R palabras unidas Adxectivo adnominal
Sc Notación xeral Signo-Común
SL texto-token Signo-Carta
U URL URL
Vc verbo-xeral Verbo-Común
V-dp Verbo - posible non autosuficiente Dependente do verbo
W en branco Espazo en branco
X verbo auxiliar AuxVerb

Agradecementos

Os desenvolvedores queren agradecer a Satoshi Sekine, Satoko Marumoto, Yoichi Yoshimoto, Keiji Shinzato, Keita Yaegashi e Soh Masuko pola súa contribución a este proxecto.

Referencias

Masato Hagiwara e Satoshi Sekine. Analizador morfolóxico lixeiro de chinés/xaponés do lado do cliente baseado na aprendizaxe en liña. Sesión de demostración COLING 2014, páxinas 39-43, 2014. [ PDF ]

Kikuo Maekawa.Compilación do corpus Kotonoha-BCCWJ (en xaponés).Nihongo no kenkyu (Estudos en xaponés), 4(1):82–95, 2008. (Pode atopar algunha información en inglés aquí .) [ Sitio ]

Jialei Wang, Peilin Zhao e Steven C. Hoi. Aprendizaxe exacta e suave ponderada na confianza. En Proc. of ICML 2012, páxinas 121-128, 2012. [ PDF ]

Naiwen Xue, Fei Xia, Fu-dong Chiou e Marta Palmer.The Penn Chinese treebank: Phrase structure annotation of a large corpus.Enxeñería da Linguaxe Natural, 11(2):207–238, 2005. [ PDF ] [ Site ]


© 2014, 2015 Rakuten NLP Project. Todos os dereitos reservados. / Patrocinado por Rakuten, Inc. e Rakuten Institute of Technology .