Fantastico modulo della community

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:

  • Implementazione di JavaScript puro. Funziona sia sui browser moderni che su node.js.
  • Implementa un modello di etichettatura dei caratteri indipendente dalla lingua Emette la segmentazione delle parole e tag PoS per cinese / giapponese.
  • Supports incremental update of models by online learning (Soft Confidence Weighted , Wang et al. ICML 2012).
  • Set di funzionalità personalizzabili.
  • Supports feature hashing , quantizzazione e potatura delle funzionalità per la rappresentazione del modello compatto.
  • 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.

Demo

Puoi provare Rakuten MA nella pagina demo (potrebbe essere necessario del tempo per caricare questa pagina).

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

o 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. Puoi installarlo:

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 frammento di codice nella <head> del tuo 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 hanno questo aspetto:

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 , ad esempio, model = JSON.parse(fs.readFileSync("model_file")); quindi rma = new RakutenMA(model); o rma.set_model(model);
  2. Specifica il featset base alla tua 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.json e model_ja.json ).
  4. Usa rma.tokenize(input) per analizzare il tuo input.

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 , tag PoS] Prepare your training corpus (a set of training sentences where a sentence is just an array of correct [token ).
  2. Inizializza un'istanza RakutenMA con new RakutenMA() .
  3. Specifica il featset (e facoltativamente, ctype_func , hash_func , ecc.)
  4. Alimenta le tue frasi di allenamento una per una (dalla prima all'ultima) al metodo train_one(sent) .
  5. Di solito la SCW converge abbastanza dopo epoch (un passaggio attraverso l'intero corpus di allenamento) ma puoi ripetere il passaggio 4. per ottenere prestazioni ancora migliori.

Vedere scripts/train_zh.js (per il cinese) e scripts/train_ja.js (per il giapponese) per vedere un esempio che mostra come addestrare il proprio 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. Prepare your training data (this could be as few as a couple of sentences , a seconda di cosa e quanto vuoi "riqualificare".)
  3. train_one(sent) le tue frasi di allenamento una per una al metodo train_one(sent) .

Reducing the model size

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

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 sei più in grado di ri -allenare il modello minificato. Se necessario, riadattare prima il modello, quindi minimizzarlo.

Documentazione API

Costruttore Descrizione
RakutenMA(model, phi, c) Crea una nuova istanza RakutenMA model (opzionale) specifica l'oggetto modello per inizializzare l'istanza RakutenMA con phi c (entrambi opzionali) sono iperparametri di SCW (default: phi = 2048 , c = 0.003906 ).
Metodi Descrizione
tokenize(input) Tokenizza l' input (stringa) e restituisce il risultato tokenizzato (coppie [token, tag PoS]).
train_one(sent) Aggiorna il modello corrente (se necessario) utilizzando la risposta data sent ([token, tag PoS] coppie). Il valore restituito è un oggetto con tre proprietà ans , sys e updated , dove ans è la risposta data (uguale a sent ) , sys è l'output di sistema che utilizza il (vecchio) modello e updated è un flag binario (Vero / Falso) che indica se il modello è stato aggiornato (perché sys era diverso da ans ) o meno.
set_model(model) Imposta il modello dell'istanza di 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 causa un'eccezione.
Proprietà Descrizione
featset Specifica un array di modelli di funzionalità (stringa) utilizzati per l'analisi. Puoi utilizzare RakutenMA.default_featset_ja e RakutenMA.default_featset_zh come set di funzionalità predefiniti rispettivamente per giapponese e cinese. Vedi di seguito ("Modelli di funzionalità supportati") per i dettagli dei modelli di funzionalità .
ctype_func Specifica la funzione utilizzata per convertire un carattere nel suo tipo di carattere. RakutenMA.ctype_ja_default_func è la funzione del 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 guardarlo up in chardic e restituisce il suo valore. (Ad esempio, RakutenMA.create_ctype_chardic_func({"A": "type1"}) restituisce una funzione f dove f("A") restituisce "type1" e [] altrimenti).
hash_func Specifica la funzione hash da usare per l'hashing delle caratteristiche. Default = undefined (nessun hashing delle caratteristiche). Una funzione hash delle caratteristiche con spazio hash bit bit può essere creata 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 l'utente sia conforme alla versione 2.0 della licenza Apache 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 e le versioni di Node.js supportati?

  • A. We confirmed that Rakuten MA runs in the following environments :
    • 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?

  • A. Yes , a condizione che tu segua i termini e le condizioni. Vedi "Termini e condizioni" sopra per i dettagli.

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

  • 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 vengano superati (nessun errore dopo aver eseguito la specifica jasmine-node spec ) e scrivi il tuo (se necessario) prima di inviare una richiesta pull.
  • Finally , se la tua domanda non è ancora risolta, contattaci all'indirizzo prj-rakutenma [at] mail.rakuten.com.

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

  • R. Controlla se stai utilizzando lo stesso set di funzionalità ( featset ) e la funzione di hashing delle funzionalità ( hash_func ) utilizzati per l'addestramento. Ricorda di utilizzare la funzione di hashing delle funzionalità a 15 bit ( rma.hash_func = RakutenMA.create_hash_func(15); ) i modelli in bundle ( model_zh.json e 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?

  • A. Yes and no. Although internal data structure of models is the same , è necessario aggiungere l'assegnazione (ad esempio, var model = [JSON representation]; ) per fare riferimento ad essa sui browser. Vedere la differenza tra model_zh.json ( per Node.js) e model_zh.js (per i browser). C'è un mini script scripts/convert_for_browser.js che fa questo per te. Ti consigliamo di lavorare su Node.js per l'addestramento del modello ecc. e poi convertirlo per l'utilizzo del browser .

Appendice

Supported feature templates

Modello di funzionalità Descrizione
w7 Carattere unigramma (c-3)
w8 Carattere unigramma (c-2)
w9 Carattere unigramma (c-1)
w0 Carattere unigramma (c0)
w1 Carattere unigramma (c + 1)
w2 Carattere unigramma (c + 2)
w3 Carattere unigramma (c + 3)
c7 Tipo di carattere unigramma (t-3)
c8 Tipo di carattere unigramma (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 Personaggio bigram (c-3 c-2)
b8 Personaggio bigram (c-2 c-1)
b9 Personaggio bigram (c-1 c0)
b1 Personaggio bigram (c0 c + 1)
b2 Personaggio bigram (c + 1 c + 2)
b3 Personaggio bigram (c + 2 c + 3)
d7 Tipo di carattere bigram (t-3 t-2)
d8 Tipo di carattere bigram (t-2 t-1)
d9 Tipo di carattere bigram (t-1 t0)
d1 Tipo di carattere bigram (t0 t + 1)
d2 Tipo di carattere bigram (t + 1 t + 2)
d3 Tipo di carattere bigram (t + 2 t + 3)
altri Se specifichi una funzione caratteristica personalizzata nell'array featset , la funzione sarà chiamata con due argomenti _t e i , dove _t è una funzione che prende una posizione j e restituisce l'oggetto carattere in quella posizione, e i è la posizione corrente. Un oggetto carattere è un oggetto con due proprietà c e t che sono rispettivamente carattere e tipo di carattere. Il valore di ritorno di quella funzione viene utilizzato come valore della caratteristica. (Ad esempio, se si specifica una funzione f(_t, i) che returns _t(i).t; quindi restituisce il tipo di carattere della posizione corrente, che è sostanzialmente lo stesso del modello c0 .)

PoS tag list in Chinese

Etichetta Descrizione
ANNO DOMINI Avverbio
COME Particella di aspetto
BA ba3 (in costruzione ba)
CC Congiunzione coordinativa
CD numero cardinale
CS Congiunzione subordinata
DEC de5 (Complementizzatore / Nominalizzatore)
DEG de5 (Genitivo / Associativo)
DER de5 (risultativo)
DEV de5 (Manner)
DT Determinatore
ECCETERA Altri
FW Parola straniera
IJ Interiezione
JJ Altro modificatore di nomi
LIBBRE bei4 (in lungo bei-costruzione)
LC Localizzatore
M Misura le parole
MSP Altre particelle
NN Altro sostantivo
NN-SHORT Altro sostantivo (abbrev.)
NR Nome proprio
NR-SHORT Nome proprio (abbrev.)
NT Sostantivo temporale
NT-SHORT Sostantivo temporale (abbrev.)
OD Numero ordinale
SOPRA Onomatopea
P Preposizione
PN Pronome
PU Punteggiatura
SB bei4 (in breve bei-construction)
SP Particella frase finale
URL URL
VA Aggettivo predicativo
VC Copula
VE you3 (verbo principale)
VV Altro verbo
X Altri

PoS tag list in Japanese and correspondence to BCCWJ tags

Etichetta Nome JA originale inglese
Corrente alternata Aggettivo generale Aggettivo-comune
A-dp Aggettivi-indipendenza possibile Aggettivo-dipendente
C Parole di collegamento Congiunzione
D sinonimo Pronome
E inglese parola inglese
F avverbio Avverbio
Circuito integrato Toccando Verbo-Generale Interiezione-comune
Jc Forma parole generali Sostantivo aggettivale-comune
J-tari Forma parola- タ リSostantivo aggettivale-Tari
J-xs Forma le parole-radice del verbo ausiliario Sostantivo aggettivale-AuxVerb stem
M-aa Grant mark-AA Segnale ausiliario-AA
Mc Segno di sovvenzione generale Segno ausiliario-Comune
M-cp Contrassegno di sussidio chiuso parentesi Segno ausiliario-Parentesi aperta
Mocio Sussidi le parentesi aperte Segno ausiliario: parentesi chiusa
Mp Periodo di firma del sussidio Segno-periodo ausiliario
Nn Sostantivo Sostantivo
N-nc Sostantivo-nome comune Sostantivo-Sostantivo comune
N-pn Sostantivo nome proprio Sostantivo-Nome proprio
N-xs Sostantivo-radice della parola ausiliaria Noun-AuxVerb stelo
Oそ の 他Altri
P Parole congiunte Prefisso
P-fj Particle-avverbio Particella-avverbiale
P-jj Particella ausiliaria parola quasi soggettiva Frasale particellare
Pk Particella particellare Marcatura di particelle
P-rj Parole ausiliarie-copulative Legame di particelle
P-sj Parola ausiliaria-Parola ausiliaria Particella-congiuntiva
Qa Suffisso-aggettivo Suffisso-aggettivo
Qj Parole a forma di suffisso Sostantivo suffisso-aggettivale
Qn Suffisso-sostantivo Suffisso-sostantivo
Qv Suffisso-verbo Suffisso-Verbo
R Parole congiunte Aggettivo nominale
Sc Mark generale Segno-comune
Sl Mark-text Lettera di segno
U URL URL
Vc Verbo generale Verbo-comune
V-dp Possibilità di indipendenza dai verbi Verbo-dipendente
W vuoto Spazio bianco
X Verbo ausiliare AuxVerb

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 cliente basato sull'apprendimento online. Sessione demo COLING 2014, pagine 39-43, 2014. [ PDF ]

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

Jialei Wang, Peilin Zhao e Steven C. Hoi. Apprendimento esatto e ponderato in base alla fiducia. In Proc. Di ICML 2012, pagine 121–128, 2012. [ PDF ]

Naiwen Xue, Fei Xia, Fu-dong Chiou e Marta Palmer. The Penn Chinese treebank: annotazione della struttura della frase di un grande corpus. Natural Language Engineering, 11 (2): 207–238, 2005. [ PDF ] [ Sito ]


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