Fantastico modulo comunitario

Rakuten MA

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

introduzione

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

Rakuten MA ha le seguenti caratteristiche uniche:

  • Implementazione JavaScript pura Funziona sia su browser moderni che node.js.
  • Implementa un modello di codifica dei caratteri indipendente dalla lingua e genera 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 di modelli compatti.
  • 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 sulla pagina demo (potrebbe essere necessario del tempo per caricare questa pagina).

uso

Download & Install

Poiché Rakuten MA è una libreria JavaScript, non è necessaria l'installazione. Clonare 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 di

1
node demo.js

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

npm package

È inoltre possibile utilizzare Rakuten MA come pacchetto npm. È possibile installarlo tramite:

1
npm install rakutenma

I file del modello sono disponibili 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 si presentano così:

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 es. 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 caratteristiche 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. Utilizzare rma.tokenize(input) per analizzare l'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 di RakutenMA con il new RakutenMA() .
  3. Specifica featset . (E facoltativamente, ctype_func , hash_func , ecc.)
  4. Alimenta le frasi di allenamento una alla volta (dalla prima all'ultima) al metodo train_one(sent) .
  5. Di solito SCW converge abbastanza dopo epoch (un passaggio attraverso l'intero corpus di allenamento) 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 di 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. Alimenta le frasi di allenamento una per una al metodo train_one(sent) .

Reducing the model size

La dimensione del modello potrebbe essere ancora un problema per la distribuzione sul 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 dimensione.

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ù riutilizzare -train il modello minimizzato. Se necessario, riqualificare 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 facoltativi) sono iper parametri di SCW (impostazione predefinita: 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) usando la risposta data sent (coppie [token, tag PoS]). Il valore restituito è un oggetto con tre proprietà ans , sys e updated , dove ans è la risposta data (uguale a quella sent ) , sys è l'output del sistema che utilizza il modello (vecchio) e updated è un flag binario (Vero / Falso) che indica se il modello è stato aggiornato (perché sys era diverso da ans ) oppure no.
set_model(model) Imposta il modello dell'istanza di Rakuten MA su model .
set_tag_scheme(scheme) Imposta lo schema sequenziale dei tag di etichettatura. Attualmente sono supportati "IOB2" e "SBIEO" . La specifica di altri schemi di tag causa un'eccezione.
Proprietà Descrizione
featset Specifica una matrice di modelli di funzionalità (stringa) utilizzati per l'analisi. È possibile utilizzare RakutenMA.default_featset_ja e RakutenMA.default_featset_zh come set di funzionalità predefiniti rispettivamente per giapponese e cinese. Vedere 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, è possibile chiamare RakutenMA.create_ctype_chardic_func(chardic) per creare una funzione del tipo di carattere che richiede un carattere per guardarlo su 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 di hash da utilizzare per l'hash della funzione Predefinito = undefined (nessun hash della funzione) Una funzione di hash della funzione 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 sia conforme alla Licenza Apache versione 2.0 http://www.apache.org/licenses/LICENSE-2.0.html .

Se si utilizza Rakuten MA a scopo di ricerca, si prega di citare il nostro documento su Rakuten MA [Hagiwara and Sekine 2014]

FAQ (domande frequenti)

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

  • A. We confirmed that Rakuten MA runs in the following environments :
    • Internet Explorer 8 (versione 8.0.7601.17414 o successiva)
    • Google Chrome (versione 35.0.1916.153 o successiva)
    • Firefox (versione 16.0.2 o successiva)
    • Safari (versione 6.1.5 o successiva)
    • Node.js (ver. 0.10.13 o successivo)

D. È consentito l'uso commerciale?

  • A. Yes , fintanto che segui 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. Si prega di creare un problema per i problemi di Github https://github.com/rakuten-nlp/rakutenma/issues .
  • Alternatively , è possibile creare una richiesta pull se si modifica il codice. Rakuten MA ha una suite di test che utilizza Jasmine http://jasmine.github.io/ . Assicurarsi che tutti i test abbiano superato (nessun errore dopo aver eseguito le specifiche jasmine-node spec ) e scrivere il proprio (se necessario) prima di inviare una richiesta pull.
  • Finally , se la tua domanda non è stata ancora risolta, ti preghiamo di contattarci 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)

  • A. Controlla se stai usando lo stesso set di funzioni ( featset ) e la funzione di hashing delle funzionalità ( hash_func ) usata per l'allenamento. Ricorda di usare la funzione di hashing delle caratteristiche a 15 bit ( rma.hash_func = RakutenMA.create_hash_func(15); ) quando usi i modelli in bundle ( model_zh.json e model_ja.json ).

D. Quali script (semplificati / tradizionali) sono supportati per il cinese?

  • A. Attualmente è supportato solo il cinese semplificato.

D. È possibile 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 un'assegnazione (ad es. 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). Esiste un mini script scripts/convert_for_browser.js che lo fa per te. Ti consigliamo di lavorare su Node.js per la formazione del modello, ecc., quindi di convertirlo per gli usi del browser .

Appendice

Supported feature templates

Modello di funzionalità Descrizione
w7 Character unigram (c-3)
W8 Character unigram (c-2)
w9 Character unigram (c-1)
w0 Character unigram (c0)
W1 Unigramma di personaggi (c + 1)
w2 Unigramma di personaggi (c + 2)
w3 Unigramma di personaggi (c + 3)
c7 Tipo di carattere unigram (t-3)
c8 Tipo di carattere unigram (t-2)
C9 Tipo di carattere unigram (t-1)
c0 Tipo di carattere unigram (t0)
c1 Tipo di carattere unigram (t + 1)
c2 Tipo di carattere unigram (t + 2)
c3 Tipo di carattere unigram (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 personalizzata nell'array featset , la funzione verrà 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 restituito di quella funzione viene utilizzato come valore della funzione (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 Aspetto Particella
BA ba3 (in ba-construction)
CC Congiunzione coordinativa
CD numero cardinale
CS Congiunzione subordinata
dicembre de5 (integratore / nominalizzatore)
DEG de5 (genitivo / associativo)
DER de5 (risultante)
DEV de5 (Manner)
DT determiner
ECCETERA Altri
FW Parola straniera
IJ Interiezione
JJ Altro modificatore di sostantivo
LIBBRE bei4 (in long bei-construction)
LC localizzatore
M Misura le parole
MSP Altra particella
NN Altro sostantivo
NN-SHORT Altro sostantivo (abbrev.)
NR Nome proprio
NR-SHORT Nome proprio (abbreviato)
NT Sostantivo temporale
NT-SHORT Sostantivo temporale (abbrev.)
OD Numero ordinale
SU onomatopeia
P Preposizione
PN Pronome
PU Punteggiatura
SB bei4 (in breve bei-costruzione)
SP Particella a 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 originale JA inglese
AC Aggettivo generale Aggettivo-Comune
A-dp Aggettivo-non indipendente Aggettivo-Dependent
C Scegli le parole Congiunzione
D sinonimo Pronome
E inglese parola inglese
F avverbio Avverbio
Circuito integrato Spostamento di parole in generale Interiezione-Comune
Jc Forma la parola generale Noug-Adjectival Common
J-tari Forma parola Aggettivo Noun-Tari
J-XS Forma il gambo del verbo ausiliario di parole Stelo aggettivo Noun-AuxVerb
M-aa Simbolo di sovvenzione -AA Segno ausiliario-AA
Mc Simbolo di sovvenzione generale Segno ausiliario-Comune
M-cp Simbolo sussidio-parentesi chiusa Segno ausiliario-parentesi aperta
Mocio Supporto per simbolo aperto Parentesi segno-chiusura ausiliaria
Mp Periodo di sovvenzione simbolo Segno-periodo ausiliario
Nn Noun-nome Noun-Noun
N-nc Sostantivo comune Sostantivo Comune
N-pn Sostantivo intrinseco Noun-Proprio nome
N-XS Verbi ausiliari Stelo Noun-AuxVerb
O そ の 他 Altri
P Discorso congiunto Prefisso
P-fj Parola ausiliaria Particle-Avverbiale
P-jj Parola ausiliaria Particle-Phrasal
Pk Parola ausiliaria Marcatura di particelle
P-rj Parola ausiliaria Particle-Binding
P-sj Parola ausiliaria Particle-Conjunctive
Qa Suffisso aggettivo Suffisso Aggettivo
Qj Parola a forma di suffisso Sostantivo suffissivo-aggettivo
Qn Suffisso sostantivo Suffisso Noun
Qv Suffisso verb Suffisso verbo
R congiunzioni Aggettivo nominale
Sc Simbolo generale Sign-Comune
sl Simbolo-text Sign-Letter
U URL URL
Vc Verbo generale Verbo-Comune
V-dp Verbo-non indipendente Verbo-Dependent
W vuoto Lo 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 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 sono disponibili qui .) [ Sito ]

Jialei Wang, Peilin Zhao e Steven C. Hoi. Apprendimento preciso ponderato sulla fiducia. In Proc. Dell'ICML 2012, pagine 121-128, 2012. [ PDF ]

Naiwen Xue, Fei Xia, Fu-dong Chiou e Marta Palmer La banca di alberi cinese Penn: annotazione della struttura della frase di un grande corpus. Ingegneria del linguaggio naturale, 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 .