Fantastico modulo comunitario

Rakuten MA

README giapponese (日本语ドキュメント)

introduzione

Rakuten MA (analizzatore morfologico) è un analizzatore morfologico (segmentatore di parole + Tagger PoS) per cinese e giapponese scritto esclusivamente in JavaScript.

Rakuten MA ha le seguenti caratteristiche uniche:

  • Pura implementazione JavaScript. Funziona sia su browser moderni che su node.js.
  • Implementa un modello di codifica dei caratteri indipendente dalla lingua. Produce segmentazione delle parole e tag PoS per cinese/giapponese.
  • Supporta l'aggiornamento incrementale dei modelli mediante l'apprendimento online (Soft Confidence Weighted, Wang et al. ICML 2012).
  • Set di funzionalità personalizzabili.
  • Supporta l'hashing, la quantizzazione e l'eliminazione delle funzionalità per la rappresentazione compatta del modello.
  • In bundle con modelli cinesi e giapponesi formati da corpora generali (CTB [Xue et al. 2005] e BCCWJ [Maekawa 2008]) e corpora di e-commerce.

Dimostrazione

Puoi provare Rakuten MA nella pagina demo (il caricamento di questa pagina potrebbe richiedere del tempo).

Utilizzo

Download & Install

Poiché Rakuten MA è una libreria JavaScript, non è necessaria l'installazione. Clona il repository git come

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

oppure scarica l'archivio zip da qui: https://github.com/rakuten-nlp/rakutenma/archive/master.zip

Se hai installato Node.js, puoi eseguire la demo tramite

1
node demo.js

che è identico all'esempio di utilizzo riportato di seguito.

npm package

Puoi anche utilizzare Rakuten MA come pacchetto npm e installarlo tramite:

1
npm install rakutenma

I file del modello possono essere trovati in 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)

Includi il seguente snippet di codice nel <head>codice 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'analisi e il risultato sono simili a questi:

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. Caricare un modello esistente, ad esempio, model = JSON.parse(fs.readFileSync("model_file"));quindi rma = new RakutenMA(model);orma.set_model(model);
  2. Specificare featsetin base alla lingua (ad esempio rma.featset = RakutenMA.default_featset_zh;per il cinese e rma.featset = RakutenMA.default_featset_ja;per il giapponese).
  3. Ricordarsi di utilizzare la funzione di hashing delle funzionalità a 15 bit ( rma.hash_func = RakutenMA.create_hash_func(15);) quando si utilizzano i modelli in bundle ( model_zh.jsone model_ja.json).
  4. Utilizzare rma.tokenize(input)per analizzare l'input.

Training your own analysis model from scratch

  1. Prepara il tuo corpus di addestramento (una serie di frasi di addestramento in cui una frase è solo un array di [token, tag PoS] corretti).
  2. Inizializza un'istanza RakutenMA con new RakutenMA().
  3. Specificare featset. (e facoltativamente, ctype_func, hash_func, ecc.)
  4. Inserisci le tue frasi di allenamento una per una (dalla prima all'ultima) nel train_one(sent)metodo.
  5. In genere, la procedura SCW converge abbastanza dopo un passaggio epoch(un passaggio attraverso l'intero corpus di training), ma è possibile ripetere il passaggio 4 per ottenere prestazioni ancora migliori.

Vedi scripts/train_zh.js(per il cinese) e scripts/train_ja.js(per il giapponese) per vedere un esempio che mostra come addestrare il tuo modello.

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

  1. Carica un modello esistente e inizializza un'istanza RakutenMA (vedi "Utilizzo di modelli in bundle per analizzare frasi cinesi/giapponesi" sopra)
  2. Prepara i tuoi dati di allenamento (potrebbero essere anche solo un paio di frasi, a seconda di cosa e quanto vuoi "riqualificarti".)
  3. Inserisci le tue frasi di allenamento una per una nel train_one(sent)metodo.

Reducing the model size

La dimensione del modello potrebbe ancora rappresentare un problema per la distribuzione lato client anche dopo aver applicato l'hashing delle funzionalità. Abbiamo incluso uno script scripts/minify.jsche applica la quantizzazione delle funzionalità (vedere [Hagiwara e Sekine COLING 2014] per i dettagli) per ridurre la dimensione del modello addestrato.

Puoi eseguirlo node scripts/minify.js [input_model_file] [output_model_file]per creare una versione minimizzata del file del modello. Ricorda: elimina anche la parte "sigma" del modello addestrato, il che significa che non puoi più addestrare nuovamente il modello minimizzato. Se necessario, addestra nuovamente prima il modello e poi minimizzarlo.

Documentazione dell'API

Costruttore Descrizione
RakutenMA(model, phi, c) Crea una nuova istanza RakutenMA. model(facoltativo) specifica l'oggetto del modello con cui inizializzare l'istanza RakutenMA. phie c(entrambi facoltativi) sono parametri iper di SCW (impostazione predefinita: phi = 2048, c = 0.003906).
Metodi Descrizione
tokenize(input) Tokenizza input(stringa) e restituisce il risultato tokenizzato (coppie [token, tag PoS]).
train_one(sent) Aggiorna il modello corrente (se necessario) utilizzando la risposta fornita sent(coppie [token, tag PoS]). Il valore restituito è un oggetto con tre proprietà ans, sys, e updated, dove ansè la risposta fornita (uguale a sent), sysè l'output del sistema utilizzando il (vecchio) modello ed updatedè un flag binario (Vero/Falso) che indica se il modello è stato aggiornato (perché sysera diverso da ans) oppure no.
set_model(model) Imposta il modello dell'istanza Rakuten MA su model.
set_tag_scheme(scheme) Imposta lo schema di tag di etichettatura sequenziale. Attualmente, "IOB2"e "SBIEO"sono supportati. La specifica di altri schemi di tag provoca un'eccezione.
Proprietà Descrizione
featset Specifica un array di modelli di funzionalità (stringa) utilizzati per l'analisi. È possibile utilizzare RakutenMA.default_featset_jae RakutenMA.default_featset_zhcome set di funzionalità predefiniti rispettivamente per giapponese e cinese. Per i dettagli sui modelli di funzionalità, vedere di seguito ("Modelli di funzionalità supportati").
ctype_func Specifica la funzione utilizzata per convertire un carattere nel suo tipo di carattere. RakutenMA.ctype_ja_default_funcè la funzione di tipo di carattere predefinita utilizzata per il giapponese. In alternativa, puoi chiamare RakutenMA.create_ctype_chardic_func(chardic)per creare una funzione di tipo di carattere che accetta un carattere per cercarlo chardice restituirne il valore. (Per esempio, RakutenMA.create_ctype_chardic_func({"A": "type1"})restituisce una funzione fdove f("A")restituisce "type1"e []altrimenti.)
hash_func Specifica la funzione hash da utilizzare per l'hashing delle funzionalità. Impostazione predefinita = undefined(nessun hashing delle funzionalità). È possibile creare una funzione hash delle funzionalità con bitspazio hash a -bit chiamando RakutenMA.create_hash_func(bit).

Termini e Condizioni

La distribuzione, la modifica e l'uso accademico/commerciale di Rakuten MA sono consentiti, a condizione che tu sia conforme alla licenza Apache versione 2.0 http://www.apache.org/licenses/LICENSE-2.0.html .

Se utilizzi Rakuten MA per scopi di ricerca, cita il nostro articolo su Rakuten MA [Hagiwara e Sekine 2014]

FAQ (domande frequenti)

D. Quali sono i browser supportati e le versioni di Node.js?

  • R. Abbiamo confermato che Rakuten MA funziona nei seguenti ambienti:
    • Internet Explorer 8 (ver. 8.0.7601.17414 o successiva)
    • Google Chrome (ver. 35.0.1916.153 o successiva)
    • Firefox (ver. 16.0.2 o successiva)
    • Safari (ver. 6.1.5 o successiva)
    • Node.js (ver. 0.10.13 o successiva)

D. È consentito l'uso commerciale?

  • R. Sì, purché si rispettino i termini e le condizioni. Per i dettagli vedere "Termini e condizioni" sopra.

D. Ho trovato un bug/errore di analisi/ecc. Dove devo segnalarlo?

  • R. Crea un problema su Github Issues https://github.com/rakuten-nlp/rakutenma/issues .
  • Alternatively, puoi creare una richiesta pull se modifichi il codice. Rakuten MA ha una suite di test che utilizza Jasmine http://jasmine.github.io/ . Assicurati che tutti i test passino (nessun errore dopo l'esecuzione jasmine-node spec) e scrivi il tuo ( se necessario) prima di inviare una richiesta pull.
  • Finally, se la tua domanda non è ancora stata risolta, contattaci all'indirizzo prj-rakutenma [at] mail.rakuten.com.

D. I risultati della tokenizzazione sembrano strani (nello specifico, la frase è suddivisa in singoli caratteri senza tag PoS)

  • A. Controllare se si sta utilizzando lo stesso set di funzionalità ( featset) e la stessa funzione di hashing delle funzionalità ( hash_func) utilizzati per l'addestramento. Ricordarsi di utilizzare la funzione di hashing delle funzionalità a 15 bit ( rma.hash_func = RakutenMA.create_hash_func(15);) quando si utilizzano i modelli in bundle ( model_zh.jsone model_ja.json).

D. Quali script (semplificato/tradizionale) sono supportati per il cinese?

  • R. Attualmente è supportato solo il cinese semplificato.

D. Possiamo utilizzare lo stesso file modello nel formato JSON per i browser?

  • R. Sì e no. Sebbene la struttura dei dati interni dei modelli sia la stessa, è necessario aggiungere l'assegnazione (ad esempio, var model = [JSON representation];) per farvi riferimento nei browser. Vedere la differenza tra model_zh.json(per Node.js) e model_zh.js(per i browser). Esiste un mini script scripts/convert_for_browser.jsche fa questo per te. Ti consigliamo di lavorare su Node.js per l'addestramento del modello, ecc., e quindi di convertirlo per l'utilizzo nel browser.

Appendice

Supported feature templates

Modello di funzionalità Descrizione
w7 Unigramma di caratteri (c-3)
w8 Unigramma di caratteri (c-2)
w9 Unigramma di caratteri (c-1)
w0 Unigramma di caratteri (c0)
w1 Unigramma di caratteri (c+1)
w2 Unigramma di caratteri (c+2)
w3 Unigramma di caratteri (c+3)
c7 Tipo di carattere unigramma (t-3)
c8 Unigramma di tipo carattere (t-2)
c9 Tipo di carattere unigramma (t-1)
c0 Tipo di carattere unigramma (t0)
c1 Tipo di carattere unigramma (t+1)
c2 Tipo di carattere unigramma (t+2)
c3 Tipo di carattere unigramma (t+3)
b7 Bigramma di caratteri (c-3 c-2)
b8 Bigramma di caratteri (c-2 c-1)
b9 Bigramma di caratteri (c-1 c0)
b1 Bigramma di caratteri (c0 c+1)
b2 Bigramma di caratteri (c+1 c+2)
b3 Bigramma di caratteri (c+2 c+3)
d7 Tipo di carattere bigramma (t-3 t-2)
d8 Tipo di carattere bigramma (t-2 t-1)
d9 Tipo di carattere bigramma (t-1 t0)
d1 Tipo di carattere bigramma (t0 t+1)
d2 Tipo di carattere bigramma (t+1 t+2)
d3 Tipo di carattere bigramma (t+2 t+3)
altri Se si specifica una funzione caratteristica personalizzata nell'array featset, la funzione verrà chiamata con due argomenti _te i, dove _tè una funzione che prende una posizione je restituisce l'oggetto carattere in quella posizione ed iè la posizione corrente. Un oggetto carattere è un oggetto con due proprietà ce tche sono rispettivamente carattere e tipo di carattere. Il valore restituito di tale funzione viene utilizzato come valore della caratteristica. (Ad esempio, se specifichi una funzione f(_t, i)quale returns _t(i).t;, restituisce il tipo di carattere della posizione corrente, che è sostanzialmente uguale al modello c0.)

PoS tag list in Chinese

Etichetta Descrizione
ANNO DOMINI Avverbio
COME Particelle d'aspetto
BA ba3 (nella costruzione ba)
CC Congiunzione coordinativa
CD numero cardinale
CS Congiunzione subordinata
DIC de5 (Complementatore/Nominalizzatore)
GRADO de5 (genitivo/associativo)
DER de5 (Risultativo)
DEV de5 (Modo)
DT Determinante
ECCETERA Altri
FW Parola straniera
ij Interiezione
JJ Altro modificatore di sostantivo
LIBBRE bei4 (nella costruzione bei lunga)
LC Localizzatore
M Misura le parole
MSP Altre particelle
NN Altro sostantivo
NN-CORTO Altro sostantivo (abbrev.)
NR Nome proprio
NR-CORTO Nome proprio (abbrev.)
NT Sostantivo temporale
NT-CORTO Sostantivo temporale (abbrev.)
OD Numero ordinale
SU Onomatopea
P Preposizione
PN Pronome
PU Punteggiatura
SB bei4 (in breve bei-costruzione)
SP Particella finale della frase
URL URL
VA Aggettivo predicativo
V.C Copula
VE tu3 (verbo principale)
VV Altro verbo
X Altri

PoS tag list in Japanese and correspondence to BCCWJ tags

Etichetta Nome originale JA Inglese
AC aggettivo generale Aggettivo-Comune
A-dp aggettivo - possibile non autosufficiente Dipendente dall'aggettivo
C raccogliere le parole Congiunzione
D pronome Pronome
E Inglese parola inglese
F avverbio Avverbio
Circuito integrato verbo mobile generale Interiezione-Comune
jc Forma parola-generale Sostantivo aggettivale-comune
J-tari Forma parola-タリ Sostantivo aggettivale-Tari
J-xs Forma la radice della parola ausiliaria Sostantivo aggettivale-AuxVerbo radice
M-aa Marchio di sovvenzione-AA Segno ausiliario-AA
Mc Sovvenzione generale Segno ausiliario-comune
M-cp Parentesi chiuse con segno supplementare Segno ausiliario: parentesi aperta
Mocio Marchio di sovvenzione - parentesi aperte Segno ausiliario: chiudi parentesi
deputato Periodo di riferimento del sussidio Segno-periodo ausiliario
Non sostantivo - sostantivo Sostantivo-Sostantivo
N-nc sostantivo - nome comune Sostantivo-sostantivo comune
N-pn sostantivo - nome proprio Sostantivo-nome proprio
N-x radice sostantivo-ausiliaria Sostantivo-AuxVerbo stelo
O そのlui Altri
P connettore Prefisso
P-fj particella-avverbio particella Particella-Avverbiale
P-jj Particella - particella quasi-corpo Frasale particellare
Pk Particella-caso di particelle Marcatura di casi di particelle
P-rj particella - particella Legame di particelle
P-sj Particella: particella connettiva Congiuntivo particellare
Qa aggettivo-suffisso Aggettivo-suffisso
Qj suffisso: parola di forma Sostantivo suffisso-aggettivale
Qn suffisso - sostantivo Suffisso-sostantivo
Qv suffisso-verbo Suffisso-Verbo
R parole congiunte Aggettivo adnominale
SC Notazione generale Segno-comune
SL testo-token Lettera-segno
U URL URL
Vc verbo generale Verbo-comune
V-dp Verbo: possibile non autosufficiente Dipendente dal verbo
W vuoto Spazio bianco
X verbo ausiliare AuxVerbo

Ringraziamenti

Gli sviluppatori desiderano ringraziare Satoshi Sekine, Satoko Marumoto, Yoichi Yoshimoto, Keiji Shinzato, Keita Yaegashi e Soh Masuko per il loro contributo a questo progetto.

Riferimenti

Masato Hagiwara e Satoshi Sekine. Analizzatore morfologico cinese/giapponese leggero lato client basato sull'apprendimento online. Sessione dimostrativa COLING 2014, pagine 39-43, 2014. [ PDF ]

Kikuo Maekawa. Compilazione del corpus Kotonoha-BCCWJ (in giapponese). Nihongo no kenkyu (Studi in giapponese), 4(1):82–95, 2008. (Alcune informazioni in inglese possono essere trovate qui .) [ Sito ]

Jialei Wang, Peilin Zhao e Steven C. Hoi. Apprendimento esatto ponderato con confidenza morbida. In Proc. di ICML 2012, pagine 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. Natural Language Engineering, 11(2):207–238, 2005. [ PDF ] [ Sito ]


© 2014, 2015 Rakuten NLP Project. Tutti i diritti riservati. / Sponsorizzato da Rakuten, Inc. e Rakuten Institute of Technology .