Super module communautaire

Rakuten MA

README japonais (ドキュメント japonais)

Introduction

Rakuten MA (analyseur morphologique) est un analyseur morphologique (segmenteur de mots + PoS Tagger) pour le chinois et le japonais écrit uniquement en JavaScript.

Rakuten MA possède les caractéristiques uniques suivantes :

  • Implémentation pure JavaScript. Fonctionne à la fois sur les navigateurs modernes et sur node.js.
  • Implémente un modèle de balisage de caractères indépendant de la langue. Produit une segmentation des mots et des balises PoS pour le chinois/japonais.
  • Prend en charge la mise à jour incrémentielle des modèles par apprentissage en ligne (Soft Confidence Weighted, Wang et al. ICML 2012).
  • Ensemble de fonctionnalités personnalisables.
  • Prend en charge le hachage, la quantification et l'élagage des fonctionnalités pour une représentation compacte du modèle.
  • Livré avec des modèles chinois et japonais formés à partir de corpus généraux (CTB [Xue et al. 2005] et BCCWJ [Maekawa 2008]) et de corpus de commerce électronique.

Démo

Vous pouvez essayer Rakuten MA sur la page de démonstration (le chargement de cette page peut prendre un certain temps).

Usage

Download & Install

Étant donné que Rakuten MA est une bibliothèque JavaScript, aucune installation n'est nécessaire. Clonez le référentiel git en tant que

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

ou téléchargez l'archive zip à partir d'ici : https://github.com/rakuten-nlp/rakutenma/archive/master.zip

Si vous avez installé Node.js, vous pouvez exécuter la démo en

1
node demo.js

qui est identique à l'exemple d'utilisation ci-dessous.

npm package

Vous pouvez également utiliser Rakuten MA en tant que package npm. Vous pouvez l'installer en :

1
npm install rakutenma

Les fichiers modèles se trouvent sous 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)

Incluez l'extrait de code suivant dans le <head>de votre code 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'analyse et le résultat ressemblent à ceci :

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. Charger un modèle existant, par exemple, model = JSON.parse(fs.readFileSync("model_file"));alors rma = new RakutenMA(model);ourma.set_model(model);
  2. Spécifiez featseten fonction de votre langue (par exemple, rma.featset = RakutenMA.default_featset_zh;pour le chinois et rma.featset = RakutenMA.default_featset_ja;pour le japonais).
  3. N'oubliez pas d'utiliser la fonction de hachage de fonctionnalité 15 bits ( rma.hash_func = RakutenMA.create_hash_func(15);) lorsque vous utilisez les modèles groupés ( model_zh.jsonet model_ja.json).
  4. Utilisez rma.tokenize(input)pour analyser votre entrée.

Training your own analysis model from scratch

  1. Préparez votre corpus de formation (un ensemble de phrases de formation où une phrase est juste un tableau de [token, tag PoS] corrects.)
  2. Initialisez une instance RakutenMA avec new RakutenMA().
  3. Spécifiez featset. (et éventuellement, ctype_func, hash_func, etc.)
  4. Nourrissez vos phrases d'entraînement une par une (de la première à la dernière) à la train_one(sent)méthode.
  5. Habituellement SCW converge suffisamment après un epoch(un passage à travers l'ensemble du corpus de formation), mais vous pouvez répéter l'étape 4. pour obtenir des performances encore meilleures.

Voir scripts/train_zh.js(pour le chinois) et scripts/train_ja.js(pour le japonais) pour voir un exemple montrant comment former votre propre modèle.

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

  1. Charger un modèle existant et initialiser une instance RakutenMA (voir "Utiliser des modèles groupés pour analyser des phrases en chinois/japonais" ci-dessus)
  2. Préparez vos données d'entraînement (il peut s'agir de quelques phrases seulement, en fonction de ce que vous voulez "réentraîner" et de combien vous voulez).
  3. Nourrissez vos phrases d'entraînement une par une à la train_one(sent)méthode.

Reducing the model size

La taille du modèle pourrait toujours être un problème pour la distribution côté client même après l'application du hachage des caractéristiques Nous avons inclus un script scripts/minify.jsqui applique la quantification des caractéristiques (voir [Hagiwara et Sekine COLING 2014] pour les détails) pour réduire la taille du modèle formé.

Vous pouvez l'exécuter node scripts/minify.js [input_model_file] [output_model_file]pour créer une version réduite du fichier de modèle. N'oubliez pas : cela supprime également la partie "sigma" du modèle entraîné, ce qui signifie que vous ne pouvez plus réentraîner le modèle réduit. Si nécessaire, réentraînez le modèle d'abord, puis minifiez-le.

Documentation API

Constructeur La description
RakutenMA(model, phi, c) Crée une nouvelle instance de RakutenMA. model(facultatif) spécifie l'objet modèle avec lequel initialiser l'instance de RakutenMA. phiet c(tous deux facultatifs) sont des hyper paramètres de SCW (par défaut : phi = 2048, c = 0.003906).
Méthodes La description
tokenize(input) Tokenizes input(string) et renvoie le résultat tokenisé ([token, PoS tag] paires).
train_one(sent) Met à jour le modèle actuel (si nécessaire) en utilisant la réponse donnée sent([jeton, balise PoS] paires). La valeur de retour est un objet avec trois propriétés ans, sys, et updated, où ansest la réponse donnée (identique à sent), sysest la sortie du système en utilisant l'(ancien) modèle, et updatedest un indicateur binaire (Vrai/Faux) signifiant si le modèle a été mis à jour (parce qu'il sysétait différent de ans) ou non.
set_model(model) Définit le modèle de l'instance Rakuten MA sur model.
set_tag_scheme(scheme) Définit le schéma de balises d'étiquetage séquentiel. Actuellement, "IOB2"et "SBIEO"sont pris en charge. La spécification d'autres schémas de balises provoque une exception.
Propriétés La description
featset Spécifie un tableau de modèles d'entités (chaîne) utilisés pour l'analyse. Vous pouvez utiliser RakutenMA.default_featset_jaet RakutenMA.default_featset_zhcomme ensembles d'entités par défaut pour le japonais et le chinois, respectivement. Voir ci-dessous ("Modèles d'entités pris en charge") pour les détails des modèles d'entités.
ctype_func Spécifie la fonction utilisée pour convertir un caractère en son type de caractère. RakutenMA.ctype_ja_default_funcest la fonction de type de caractère par défaut utilisée pour le japonais. Vous pouvez également appeler RakutenMA.create_ctype_chardic_func(chardic)pour créer une fonction de type de caractère qui utilise un caractère pour le rechercher chardicet renvoyer sa valeur. (Pour exemple, RakutenMA.create_ctype_chardic_func({"A": "type1"})renvoie une fonction ff("A")renvoie "type1"et []sinon.)
hash_func Spécifie la fonction de hachage à utiliser pour le hachage de fonctionnalité. Par défaut = undefined(pas de hachage de fonctionnalité). Une fonction de hachage de fonctionnalité avec un bitespace de hachage de -bit peut être créée en appelant RakutenMA.create_hash_func(bit).

Termes et conditions

La distribution, la modification et l'utilisation académique/commerciale de Rakuten MA sont autorisées, à condition que vous vous conformiez à la licence Apache version 2.0 http://www.apache.org/licenses/LICENSE-2.0.html .

Si vous utilisez Rakuten MA à des fins de recherche, veuillez citer notre article sur Rakuten MA [Hagiwara et Sekine 2014]

FAQ (Foire Aux Questions)

Q. Quels sont les navigateurs pris en charge et les versions de Node.js ?

  • R. Nous avons confirmé que Rakuten MA fonctionne dans les environnements suivants :
    • Internet Explorer 8 (version 8.0.7601.17414 ou supérieure)
    • Google Chrome (version 35.0.1916.153 ou supérieure)
    • Firefox (ver. 16.0.2 ou supérieur)
    • Safari (ver. 6.1.5 ou supérieur)
    • Node.js (ver. 0.10.13 ou supérieur)

Q. L'utilisation commerciale est-elle autorisée ?

  • R. Oui, tant que vous respectez les termes et conditions. Voir « Termes et conditions » ci-dessus pour plus de détails.

Q. J'ai trouvé un bogue / une erreur d'analyse / etc. Où dois-je le signaler ?

  • A. Veuillez créer un problème sur les problèmes de Github https://github.com/rakuten-nlp/rakutenma/issues .
  • Alternatively, vous pouvez créer une demande d'extraction si vous modifiez le code. Rakuten MA dispose d'une suite de tests utilisant Jasmine http://jasmine.github.io/ . Veuillez vous assurer que tous les tests réussissent (aucune erreur après l'exécution jasmine-node spec) et écrivez le vôtre ( si nécessaire) avant de soumettre une pull request.
  • Finally, si votre question n'est toujours pas résolue, veuillez nous contacter à prj-rakutenma [at] mail.rakuten.com.

Q. Les résultats de la tokenisation semblent étranges (en particulier, la phrase est divisée en caractères individuels sans balises PoS)

  • A. Vérifiez si vous utilisez le même ensemble de fonctionnalités ( featset) et la même fonction de hachage de fonctionnalités ( hash_func) que celles utilisées pour la formation. N'oubliez pas d'utiliser la fonction de hachage de fonctionnalités 15 bits ( rma.hash_func = RakutenMA.create_hash_func(15);) lorsque vous utilisez les modèles groupés ( model_zh.jsonet model_ja.json).

Q. Quels scripts (simplifiés/traditionnels) sont pris en charge pour le chinois ?

  • A. Actuellement, seul le chinois simplifié est pris en charge.

Q. Pouvons-nous utiliser le même fichier de modèle au format JSON pour les navigateurs ?

  • A. Oui et non. Bien que la structure de données interne des modèles soit la même, vous devez ajouter une affectation (par exemple, var model = [JSON representation];) afin de s'y référer sur les navigateurs. Voir la différence entre model_zh.json(pour Node.js) et model_zh.js(pour les navigateurs). Il existe un mini script scripts/convert_for_browser.jsqui le fait pour vous. Nous vous recommandons de travailler sur Node.js pour la formation de modèles, etc., puis de le convertir pour les utilisations du navigateur.

annexe

Supported feature templates

Modèle de fonctionnalité La description
w7 Unigramme de caractère (c-3)
w8 Unigramme de caractère (c-2)
w9 Unigramme de caractère (c-1)
w0 Unigramme de caractère (c0)
w1 Unigramme de caractère (c+1)
w2 Unigramme de caractère (c+2)
w3 Unigramme de caractère (c+3)
c7 Unigramme de type caractère (t-3)
c8 Unigramme de type caractère (t-2)
c9 Unigramme de type caractère (t-1)
c0 Unigramme de type caractère (t0)
c1 Unigramme de type caractère (t+1)
c2 Unigramme de type caractère (t+2)
c3 Unigramme de type caractère (t+3)
b7 Bigramme de caractère (c-3 c-2)
b8 Bigramme de caractère (c-2 c-1)
b9 Bigramme de caractère (c-1 c0)
b1 Bigramme de caractère (c0 c+1)
b2 Bigramme de caractère (c+1 c+2)
b3 Bigramme de caractère (c+2 c+3)
d7 Bigramme de type caractère (t-3 t-2)
d8 Bigramme de type caractère (t-2 t-1)
d9 Bigramme de type caractère (t-1 t0)
d1 Bigramme de type caractère (t0 t+1)
d2 Bigramme de type caractère (t+1 t+2)
d3 Bigramme de type caractère (t+2 t+3)
les autres Si vous spécifiez une fonction de fonction personnalisée dans le featsettableau, la fonction sera appelée avec deux arguments _tet i, où _test une fonction qui prend une position jet renvoie l'objet caractère à cette position, et iest la position actuelle. Un objet caractère est un objet avec deux propriétés cet tqui sont caractère et type de caractère, respectivement. La valeur de retour de cette fonction est utilisée comme valeur de caractéristique. (Par exemple, si vous spécifiez une fonction f(_t, i)qui returns _t(i).t;, elle renvoie le type de caractère de la position actuelle, qui est fondamentalement le même que le modèle c0.)

PoS tag list in Chinese

Étiquette La description
UN D Adverbe
COMME Particule d'aspect
BA ba3 (en construction ba)
CC Conjonction de coordination
CD nombre cardinal
CS Conjonction de subordination
DÉC de5 (Complémentateur/Nominalisateur)
DEG de5 (génitif/associatif)
DER de5 (résultant)
DEV de5 (Manière)
DT Déterminant
ETC Les autres
FW mot étranger
JE Interjection
JJ Autre modificateur de nom
KG bei4 (en long bei-construction)
CL Localisateur
M Mot de mesure
MSP Autres particules
NN Autre nom
NN-COURT Autre nom (abrév.)
NR Nom propre
NR-COURT Nom propre (abrév.)
NT Nom temporel
NT-SHORT Nom temporel (abrév.)
OD Nombre ordinal
SUR Onomatopée
P Préposition
PN Pronom
PU Ponctuation
SB bei4 (en abrégé bei-construction)
PS Particule de fin de phrase
URL URL
Virginie Adjectif prédictif
CV Copule
VE you3 (verbe principal)
VV autre verbe
X Les autres

PoS tag list in Japanese and correspondence to BCCWJ tags

Étiquette Nom JA d'origine Anglais
CA adjectif - général Adjectif-Commun
A-dp adjectif - pas autonome possible Dépendant de l'adjectif
C Mots consécutifs Conjonction
synonyme Pronom
E Anglais mot anglais
F adverbe Adverbe
IC verbe de sens - général Interjection-Commun
JC Mots de forme - Général Nom adjectival-Commun
J-tari Mot de forme - タ リ Nom adjectival-Tari
J-xs Shape Words - Tige de verbe auxiliaire Adjectif Nom-AuxVerbe radical
M-aa Grant Mark - AA Signe auxiliaire-AA
Mc Grant Mark - Général Signe auxiliaire-Commun
M-cp Symbole de subvention - parenthèse fermée Signe auxiliaire - Parenthèse ouverte
Serpillière Symbole de subvention - parenthèses ouvertes Signe auxiliaire-Fermer la parenthèse
Député Période de subvention Signe auxiliaire-Période
Nn nom-nom Nom-nom
N-nc nom - nom commun Nom-nom commun
N-pn nom-nom propre Nom-nom propre
N-xs nom-racine auxiliaire Racines Nom-AuxVerbe
O そ の il Les autres
P connecteur Préfixe
P-fj Particules - Adverbes Particule-adverbe
P-jj Auxiliaire - Quasi-Auxiliaire Particule-Phrasal
Paquet Auxiliaire - Auxiliaire de cas Marquage de cas de particules
P-rj Auxiliaire-Corrélatif Auxiliaire Liaison aux particules
P-sj Auxiliaire - Conjonction Auxiliaire Particule-conjonctif
Qa suffixe - adjectif Suffixe-Adjectif
Qj mot en forme de suffixe Nom suffixe-adjectif
Qn suffixe - nom Nom suffixe
Qv suffixe-verbe Suffixe-Verbe
R Mots conjoints Adjectif adnominal
Se Notation - Général Signe-Commun
Sl texte-jeton Signe-Lettre
tu URL URL
Vc verbe - général Verbe-Commun
V-dp verbe - pas autonome possible Dépendant du verbe
O Vide Espace blanc
X verbe auxiliaire AuxVerbe

Remerciements

Les développeurs tiennent à remercier Satoshi Sekine, Satoko Marumoto, Yoichi Yoshimoto, Keiji Shinzato, Keita Yaegashi et Soh Masuko pour leur contribution à ce projet.

Références

Masato Hagiwara et Satoshi Sekine. Analyseur morphologique chinois/japonais léger côté client basé sur l'apprentissage en ligne. Session de démonstration COLING 2014, pages 39-43, 2014. [ PDF ]

Kikuo Maekawa. Compilation of the Kotonoha-BCCWJ corpus (in Japanese). Nihongo no kenkyu (Studies in Japanese), 4(1):82–95, 2008. (Certaines informations en anglais peuvent être trouvées ici .) [ Site ]

Jialei Wang, Peilin Zhao et Steven C. Hoi. Exact soft confidence-weighted learning. In Proc. of ICML 2012, pages 121–128, 2012. [ PDF ]

[ PDF ] [ Site ]


© 2014, 2015 Rakuten NLP Project. Tous droits réservés. / Sponsorisé par Rakuten, Inc. et Rakuten Institute of Technology .