Módulo comunitario incrible

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 puramente en JavaScript.

Rakuten MA ten as seguintes características únicas:

  • Implementación de JavaScript puro. Funciona tanto en navegadores modernos como en node.js.
  • Implementa un modelo de etiquetaxe de caracteres independente do idioma. Produce segmentación de palabras e etiquetas PoS para chinés / xaponés.
  • Admite a actualización incremental de modelos por aprendizaxe en liña (Soft Confidence Weighted, Wang et al. ICML 2012).
  • Función personalizable.
  • Admite hash de funcións, cuantificación e poda para a representación de modelos compactos.
  • Xunto con modelos chineses e xaponeses formados 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 levar un tempo cargar esta páxina).

Uso

Download & Install

Dado que Rakuten MA é unha biblioteca JavaScript, non fai falta instalar. Clonar 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

1
node demo.js

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

npm package

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

1
npm install rakutenma

Os ficheiros 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úa o seguinte fragmento de código no <head>seu 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 son os seguintes:

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. Especifica featsetsegundo a túa lingua (por exemplo, rma.featset = RakutenMA.default_featset_zh;para chinés e rma.featset = RakutenMA.default_featset_ja;para xaponés).
  3. Lembre de usar a función de hash de funcións de 15 bits ( rma.hash_func = RakutenMA.create_hash_func(15);) cando use 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 frase é só unha matriz de [token, etiqueta PoS] correcta.)
  2. Inicialice unha instancia de RakutenMA con new RakutenMA().
  3. Especificar featset. (E opcionalmente ctype_func, hash_funcetc.)
  4. Alimenta as frases de adestramento unha a unha (desde a primeira ata a última) ata o train_one(sent)método.
  5. Normalmente SCW converxe o suficiente despois dun epoch(un paso por todo o corpus de adestramento) pero pode repetir o paso 4. para acadar un mellor rendemento.

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

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

  1. Cargue un modelo existente e inicialice unha instancia de RakutenMA.
  2. Prepare os seus datos de adestramento (pode ser tan pequeno como un par de frases, dependendo de que e canto queira "volver adestrar").
  3. Alimenta as túas frases de adestramento unha por unha ao train_one(sent)método.

Reducing the model size

O tamaño do modelo aínda podería ser un problema para a distribución do lado do cliente incluso despois de aplicar o hash de funcións. scripts/minify.jsIncluímos un script que aplica a cuantificación de funcións (ver [Hagiwara and Sekine COLING 2014] para máis detalles) para reducir o tamaño do modelo adestrado.

Podes executalo node scripts/minify.js [input_model_file] [output_model_file]para facer unha versión minimizada do ficheiro do modelo. Lembra: tamén elimina a parte "sigma" do modelo adestrado, o que significa que xa non podes adestrar de novo o modelo minificado. Se é necesario, volve adestrar primeiro o modelo, logo minifícao.

Documentación API

Construtor Descrición
RakutenMA(model, phi, c) . Crea novas nova instancia RakutenMA A modelespecifica (opcional) para o obxecto instancia Modelo coa arrincar o RakutenMA. phiE c(ambos opcionais) son amiga Parámetros do ACS (por defecto: phi = 2048, c = 0.003906).
Métodos Descrición
tokenize(input) Tokeniza input(cadea) e devolve o resultado tokenizado ([token, etiqueta PoS] pares).
train_one(sent) As actualizacións do modelo actual (se é necesario) a usar a resposta dada sent([xeito, o Tag post] pares). Do valor de retorno é obxecto AN con tres propiedades ans, syse updatedonde ansé a resposta dada (o mesmo que sent), sysIS O sistema dá a saída usando o modelo (antigo) e updatedé unha bandeira binaria (verdadeiro / falso) que significa que se actualizou o modelo (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 etiqueta secuencial. Actualmente, "IOB2"e "SBIEO"son 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. Vexa a continuación ("Modelos de funcións compatibles") para os detalles dos modelos de funcións.
ctype_func Especifica a función usada para converter un carácter ao 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. Alternativamente, pode chamar RakutenMA.create_ctype_chardic_func(chardic)para crear unha función de tipo de carácter que leve un carácter para buscalo chardice devolver o seu valor. (Para por exemplo, RakutenMA.create_ctype_chardic_func({"A": "type1"})devolve unha función fonde f("A")devolve "type1"e []se non.)
hash_func Especifica a función de hash que se usará para o hash de funcións. Predeterminado = undefined(sen hash de funcións). Pódese crear unha función de hash de funcións con bitespazo de hash de bits chamando 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 a licenza Apache versión 2.0 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 and Sekine 2014]

FAQ (preguntas máis frecuentes)

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

  • R. Confirmamos que Rakuten MA funciona nos seguintes contornos:
    • 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. Está permitido o uso comercial?

  • R. Si, sempre que siga os termos e condicións. Consulte "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?

  • A. Por favor, cree 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 executalo jasmine-node spec) e escribe o teu ( se é necesario) antes de enviar unha solicitude de tracción.
  • FinallySe a súa pregunta aínda non se resolve, póñase en contacto connosco en prj-rakutenma [en] mail.rakuten.com.

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

  • A. Comprobe se está a usar o mesmo conxunto de funcións ( featset) e a función de hash de funcións ( hash_func) empregadas para o adestramento. Lembre de usar a función de hash de funcións de 15 bits ( rma.hash_func = RakutenMA.create_hash_func(15);) cando use os modelos incluídos ( model_zh.jsone model_ja.json).

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

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

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

  • A. Si e non. Aínda que a estrutura de datos interna dos modelos é a mesma, cómpre engadir unha tarefa (por exemplo, var model = [JSON representation];) para referila aos navegadores. Vexa 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 a formación de modelos, etc. e logo convertelo para o navegador.

Apéndice

Supported feature templates

Modelo de función 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 Tipo de carácter unigrama (t-3)
c8 Tipo de carácter unigrama (t-2)
c9 Tipo de carácter unigrama (t-1)
c0 Tipo de carácter unigrama (t0)
c1 Tipo de carácter unigrama (t + 1)
c2 Tipo de carácter unigrama (t + 2)
c3 Tipo de carácter unigrama (t + 3)
b7 Bigram de personaxes (c-3 c-2)
b8 Bigram de personaxes (c-2 c-1)
b9 Bigram de personaxes (c-1 c0)
b1 Bigram de personaxes (c0 c + 1)
b2 Bigram de personaxes (c + 1 c + 2)
b3 Bigrama de personaxes (c + 2 c + 3)
d7 Tipo de personaxe bigram (t-3 t-2)
d8 Tipo de carácter bigram (t-2 t-1)
d9 Tipo de carácter bigram (t-1 t0)
d1 Tipo de carácter bigram (t0 t + 1)
d2 Tipo de carácter bigram (t + 1 t + 2)
d3 Tipo de carácter bigram (t + 2 t + 3)
outros Se especifica unha función de característica personalizada na featsetmatriz, a función chamarase con dous argumentos _te i, onde _té unha función que toma unha posición je devolve o obxecto de carácter nesa posición e ié a posición actual. Un obxecto de carácter é un obxecto con dúas propiedades ce tque son caracteres e tipo de caracteres, respectivamente. O valor devolto desa función úsase como valor de característica. (Por exemplo, se especifica unha función f(_t, i)que returns _t(i).t;, entón devolve o tipo de carácter da posición actual, que é basicamente o mesmo que o modelo c0.)

PoS tag list in Chinese

Etiqueta Descrición
ANUNCIO Adverbio
AS Partícula de aspecto
BA ba3 (en construción ba)
CC Conxunción coordinadora
CD Número cardeal
CS Conxunción subordinada
DEC de5 (Complementador / Nominalizador)
DEG de5 (xenitivo / asociativo)
DER de5 (resultante)
DEV de5 (Forma)
DT Determinante
ETC Outros
FW Palabra estranxeira
IJ Interxección
JJ Outro modificador de substantivos
LB bei4 (en construción bei longa)
LC Localizador
M Medir palabra
MSP Outra partícula
NN Outro substantivo
NN-CURTO Outro substantivo (abrev.)
NR Nome propio
NR-CURTO Nome propio (abrev.)
NT Substantivo temporal
NT-CURTO Substantivo temporal (abreviatura)
OD Número ordinal
ACTIVADO Onomatopeia
Páx Preposición
PN Pronome
PU Puntuación
SB bei4 (en resumo bei-construction)
SP Partícula frase final
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

Etiqueta Nome orixinal de JA Inglés
Ac Adxectivo xeral Adxectivo-Común
A-dp Os adxectivos non son autosuficientes Adxectivo-Dependente
C Palabras de conexión Conxunción
D sinónimo Pronome
E Inglés Palabra inglesa
F adverbio Adverbio
I C Tocando verbos-Xerais Interxección-Común
Jc Forma palabras-xerais Substantivo adxectivo común
J-tari Forma palabra- タ リ Substantivo adxectivo-Tari
J-xs Forma palabras-tallo do verbo auxiliar Subxectivo substantivo-aux verbo
M-aa Marca de subvención-AA Signo auxiliar-AA
Mc Signo xeral de subvención Signo auxiliar-Común
M-cp Paréntese pechado marca de subvención Signo auxiliar-Paréntese aberto
M-op Marca de subvención aberta entre parénteses Signo auxiliar-Pechar paréntese
Mp Período de marca da subvención Signo auxiliar-Período
Nn Substantivo-substantivo Substantivo-Substantivo
N-nc Substantivo substantivo común Substantivo-Substantivo común
N-pn Substantivo propio Substantivo-Substantivo
N-xs Tallo do verbo substantivo-auxiliar Noun-AuxVerb stem
O そ の 他 Outros
Páx Palabras conxuntas Prefixo
P-fj Auxiliar-Adverbial Partícula-Adverbial
P-jj Palabras auxiliares-Palabras auxiliares case subxectivas Partícula-Frase
Pk Palabras auxiliares-Case Auxiliar Words Marcado de partículas
P-rj Palabras auxiliares-Palabras auxiliares Unión de partículas
P-sj Palabras auxiliares-Palabras auxiliares Partícula-Conxuntivo
Qa Sufixo-adxectivo Sufixo-Adxectivo
Qj Palabras en forma de sufixo Sufixo-Adxectivo Substantivo
Qn Sufixo-substantivo Sufixo-Substantivo
Qv Sufixo-verbal Sufixo-Verbo
R Palabras unidas Adxectivo adnominal
Sc Marca xeral Signo común
Sl Marcar texto Carta de sinatura
U URL URL
Vc Verbo xeral Verbo-Común
V-dp Verbos-Independencia Posibilidade 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 chinés / xaponés do lado do cliente lixeiro baseado na aprendizaxe en liña. Sesión de demostración COLING 2014, páxinas 39-43, 2014. [ PDF ]

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

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

Naiwen Xue, Fei Xia, Fu-dong Chiou e Marta Palmer. O banco de árbores chinés Penn: Anotación de estrutura de frases dun gran corpus. Enxeñaría da linguaxe natural, 11 (2): 207-238, 2005. [ PDF ] [ Sitio ]


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