Module communautaire génial

Rakuten MA

README 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 présente les caractéristiques uniques suivantes :

  • Implémentation JavaScript pure. 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 de 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

Puisque 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 Node.js est installé, 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 de modèles peuvent être trouvés 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 <head>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. Précisez 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 des fonctionnalités 15 bits ( rma.hash_func = RakutenMA.create_hash_func(15);) lorsque vous utilisez les modèles fournis ( model_zh.jsonet model_ja.json).
  4. Utilisez-le 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 n'est qu'un tableau de [jeton, balise PoS] corrects).
  2. Initialisez une instance RakutenMA avec new RakutenMA().
  3. Spécifiez featset. (et éventuellement , ctype_func, hash_funcetc.)
  4. Nourrissez vos phrases d'entraînement une à 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 entraîner votre propre modèle.

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

  1. Chargez un modèle existant et initialisez une instance RakutenMA (voir « Utilisation de modèles groupés pour analyser des phrases en chinois/japonais » ci-dessus).
  2. Préparez vos données d'entraînement (cela peut comprendre quelques phrases seulement, selon ce que vous souhaitez "recycler" et dans quelle mesure).
  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 fonctionnalités. Nous avons inclus un script scripts/minify.jsqui applique la quantification des fonctionnalités (voir [Hagiwara et Sekine COLING 2014] pour les détails) pour réduire la taille du modèle entraîné.

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

Documentation API

Constructeur Description
RakutenMA(model, phi, c) Crée une nouvelle instance RakutenMA. model(facultatif) spécifie l'objet modèle avec lequel initialiser l'instance RakutenMA. phiet c(tous deux facultatifs) sont des hyper paramètres de SCW (par défaut : phi = 2048, c = 0.003906).
Méthodes Description
tokenize(input) Tokenise input(chaîne) et renvoie le résultat tokenisé (paires [token, PoS tag]).
train_one(sent) Met à jour le modèle actuel (si nécessaire) en utilisant la réponse donnée sent(paires [token, PoS tag]). 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 utilisant l'(ancien) modèle, et updatedest un indicateur binaire (Vrai/Faux) indiquant si le modèle a été mis à jour (car sysil é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 Description
featset Spécifie un tableau de modèles de fonctionnalités (chaîne) utilisés pour l'analyse. Vous pouvez utiliser RakutenMA.default_featset_jaet RakutenMA.default_featset_zhcomme ensembles de fonctionnalités par défaut pour le japonais et le chinois, respectivement. Voir ci-dessous (« Modèles de fonctionnalités pris en charge ») pour plus de détails sur les modèles de fonctionnalité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 prend 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 []autrement.)
hash_func Spécifie la fonction de hachage à utiliser pour le hachage de fonctionnalités. Par défaut = undefined(pas de hachage de fonctionnalités). Une fonction de hachage de fonctionnalités avec bitun espace 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 et les versions de Node.js pris en charge ?

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

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

  • R. Oui, à condition de respecter les termes et conditions. Voir « Conditions générales » ci-dessus pour plus de détails.

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

  • A. Veuillez créer un problème sur les problèmes Github https://github.com/rakuten-nlp/rakutenma/issues .
  • Alternatively, vous pouvez créer une pull request 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) utilisés 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 fournis ( model_zh.jsonet model_ja.json).

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

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

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

  • R. 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 pouvoir y faire référence 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 fait cela pour vous. Nous vous recommandons de travailler sur Node.js pour la formation du modèle, etc., puis de le convertir pour les utilisations du navigateur.

annexe

Supported feature templates

Modèle de fonctionnalités 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 de caractère (t-3)
c8 Unigramme de type de caractère (t-2)
c9 Unigramme de type de caractère (t-1)
c0 Unigramme de type de caractère (t0)
c1 Unigramme de type de caractère (t+1)
c2 Unigramme de type de caractère (t+2)
c3 Unigramme de type de caractère (t+3)
b7 Bigramme de caractère (c-3 c-2)
b8 Bigramme de caractère (c-2 c-1)
b9 Caractère bigramme (c-1 c0)
b1 Bigramme de caractères (c0 c+1)
b2 Caractère bigramme (c+1 c+2)
b3 Caractère bigramme (c+2 c+3)
d7 Bigramme de type de caractère (t-3 t-2)
d8 Bigramme de type de caractère (t-2 t-1)
d9 Bigramme de type de caractère (t-1 t0)
d1 Bigramme de type de caractère (t0 t+1)
d2 Bigramme de type de caractère (t+1 t+2)
d3 Bigramme de type de caractère (t+2 t+3)
autres Si vous spécifiez une fonction de fonctionnalité 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 respectivement caractère et type de caractère. 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)which 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

Étiqueter Description
ANNONCE Adverbe
COMME Particules d'aspect
BA ba3 (en ba-construction)
CC Conjonction de coordination
CD nombre cardinal
CS Conjonction de subordination
DÉC de5 (Complémentateur/Nominaliseur)
DEG de5 (génitif/associatif)
DER de5 (Résultatif)
DÉVELOPPEUR de5 (Manière)
DT Déterminant
ETC Autres
FW Mot étranger
je Interjection
JJ Autre nom-modificateur
KG bei4 (en longue bei-construction)
CL Localisateur
M Mesurer le mot
MSP Autres particules
N.N. Autre nom
NN-COURT Autre nom (abrév.)
NR Nom propre
NR-COURT Nom propre (abrév.)
NT nom temporel
NT-COURT Nom temporel (abrév.)
DO Nombre ordinal
SUR Onomatopée
P. Préposition
PN Pronom
Unité centrale Ponctuation
SB bei4 (en bref bei-construction)
PS Particule finale de la phrase
URL URL
Virginie Adjectif prédicatif
Capital-risque Copule
VE you3 (verbe principal)
VV Autre verbe
X Autres

PoS tag list in Japanese and correspondence to BCCWJ tags

Étiqueter Nom JA original Anglais
Ac adjectif général Adjectif-Commun
A-dp adjectif - non autonome possible Adjectif-dépendant
C ramasser des mots Conjonction
D pronom Pronom
E Anglais mot anglais
F adverbe Adverbe
IC émouvoir verbe-général Interjection-commune
jc Forme du mot-général Nom adjectival-commun
J-tari Forme du mot-タリ Nom adjectival-Tari
J-xs Forme du mot-tige du mot auxiliaire Adjectival Nom-AuxVerbe radical
M-aa Marque de subvention-AA Signe auxiliaire-AA
Mc Subvention générale Signe auxiliaire-Commun
M-cp Supports supplémentaires fermés par marque Signe auxiliaire-Parenthèse ouverte
Serpillière Marque 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-tige auxiliaire Tige Nom-AuxVerbe
Ô そのlui Autres
P. connecteur Préfixe
P-fj particule-adverbe particule Particule-Adverbiale
P-jj Particule - particule quasi-corps Phrase de particules
Pk Particule de cas de particules Marquage des cas de particules
P-rj particule - particule Liaison des particules
P-sj Particule - particule de connexion Particule-Conjonctive
Qa suffixe-adjectif Suffixe-Adjectif
Qj suffixe - forme du mot Suffixe-Adjectival Nom
Qn suffixe - nom Suffixe-Nom
Qv suffixe-verbe Suffixe-Verbe
R. mots conjoints Adjectif adnominal
Sc Notation générale Signe-Commun
SL texte-jeton Lettre-signature
U URL URL
Vc verbe-général Verbe-Commun
V-dp Verbe - non autonome possible Dépendant du verbe
W vide Espaces
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.

Les 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 du corpus Kotonoha-BCCWJ (en japonais), Nihongo no kenkyu (Études en japonais), 4(1):82–95, 2008. (Certaines informations en anglais peuvent être trouvées ici .) [ Site ]

Jialei Wang, Peilin Zhao et Steven C. Hoi. Apprentissage exact pondéré en termes de confiance, dans Proc. of ICML 2012, pages 121-128, 2012. [ PDF ]

Naiwen Xue, Fei Xia, Fu-dong Chiou et Marta Palmer. The Penn Chinese Treebank: Phrase structure annotation of a large corpus. Natural Language Engineering, 11(2):207–238, 2005. [ PDF ] [ Site ]


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