Module communautaire génial

MA Rakuten

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 possède 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 marquage 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.
  • Regroupé 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 <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. Chargez un modèle existant, par exemple, model = JSON.parse(fs.readFileSync("model_file"));puis rma = new RakutenMA(model);ourma.set_model(model);
  2. Spécifiez en featsetfonction 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 rma.tokenize(input)pour analyser votre entrée.

Training your own analysis model from scratch

  1. Préparez votre corpus d'entraînement (un ensemble de phrases d'entraînement où une phrase n'est qu'un tableau de [jeton, balise PoS] corrects).
  2. Initialisez une instance RakutenMA avec new RakutenMA().
  3. Le Spécifier featset(Et FACULTATIVEMENT, ctype_func, hash_func, etc.)
  4. Alimentez 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 dans l'ensemble du corpus d'apprentissage), 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 "Utiliser des modèles groupés pour analyser des phrases chinoises/japonaises" ci-dessus)
  2. Préparez vos données d'entraînement (cela peut être aussi peu que quelques phrases, selon ce que vous voulez "ré-entraîner" et combien vous voulez).
  3. Alimentez vos phrases d'entraînement une par une à la train_one(sent)méthode.

Reducing the model size

La taille du modèle peut 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 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 de modèle. N'oubliez pas : il supprime également la partie « sigma » du modèle formé, ce qui signifie que vous n'êtes plus en mesure de ré-entraîner le modèle minifié. Si nécessaire, ré-entraîner le modèle d'abord, puis le minifier.

Documentation API

Constructeur La description
RakutenMA(model, phi, c) . Une nouvelle RakutenMA crée une nouvelle instance model( en option) précise à l'instance Object Model avec initialize Le RakutenMA. phiEt c(tous deux en option) sont Hyper Paramètres du SCW ( par défaut: phi = 2048, c = 0.003906).
Méthodes La description
tokenize(input) Tokenize input(chaîne) et renvoie le résultat tokenisé (paires [token, PoS tag]).
train_one(sent) Les mises à jour le modèle actuel (SI nécessaire) l'utilisation de la réponse DONNÉE sent(paires [token, the PoS Tag]).De la valeur de retour EST UN objet avec trois propriétés ans, sys, et updated, O ansEST LA réponse DONNÉE (Idem sent), sysEST La sortie système utilise l' (ancien) modèle et updatedest un indicateur binaire (True/False) indiquant si le modèle a été mis à jour (car sysdiffé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 balise d'étiquetage séquentiel. Actuellement, "IOB2"et "SBIEO"sont pris en charge. La spécification d'autres schémas de balise 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 plus d'informations sur les 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 prend un caractère pour le rechercher chardicet renvoyer sa valeur. (Pour par 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 des fonctionnalités. Par défaut = undefined(pas de hachage des fonctionnalités). Une fonction de hachage des fonctionnalités avec un bitespace de hachage -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 (version 16.0.2 ou supérieure)
    • Safari (version 6.1.5 ou supérieure)
    • Node.js (version 0.10.13 ou supérieure)

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 signaler ?

  • A. Veuillez créer un problème sur Github issues https://github.com/rakuten-nlp/rakutenma/issues .
  • Alternatively, vous pouvez créer une pull request si vous modifiez le code. Rakuten MA a 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 fonction de hachage des fonctionnalités ( hash_func) utilisés pour la formation. 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).

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 vous 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.

appendice

Supported feature templates

Modèle de fonctionnalité La description
w7 Caractère unigramme (c-3)
w8 Caractère unigramme (c-2)
w9 Caractère unigramme (c-1)
w0 Caractère unigramme (c0)
w1 Caractère unigramme (c+1)
w2 Caractère unigramme (c+2)
w3 Caractère unigramme (c+3)
c7 Type de caractère unigramme (t-3)
c8 Type de caractère unigramme (t-2)
c9 Type de caractère unigramme (t-1)
c0 Type de caractère unigramme (t0)
c1 Type de caractère unigramme (t+1)
c2 Type de caractère unigramme (t+2)
c3 Type de caractère unigramme (t+3)
b7 Bigramme de caractères (c-3 c-2)
b8 Bigramme de caractères (c-2 c-1)
b9 Bigramme de caractères (c-1 c0)
b1 Bigramme de caractères (c0 c+1)
b2 Bigramme de caractères (c+1 c+2)
b3 Bigramme de caractères (c+2 c+3)
d7 Type de caractère bigramme (t-3 t-2)
d8 Type de caractère bigramme (t-2 t-1)
d9 Type de caractère bigramme (t-1 t0)
d1 Type de caractère bigramme (t0 t+1)
d2 Type de caractère bigramme (t+1 t+2)
d3 Type de caractère bigramme (t+2 t+3)
autres Si vous spécifiez une fonction d'entité 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)qui returns _t(i).t;, alors elle renvoie le type de caractère de la position actuelle, qui est essentiellement le même que le modèle c0.)

PoS tag list in Chinese

Étiqueter La description
UN D Adverbe
COMME Aspect particule
BA ba3 (en construction ba)
CC Conjonction de coordination
CD nombre cardinal
CS Conjonction de subordination
DÉC de5 (Complémenteur/Nominaliseur)
DEG de5 (génitif/associatif)
DER de5 (Résultatif)
DEV de5 (Manière)
DT Déterminant
ETC Autres
FW Mot étranger
IJ Interjection
JJ Autre substantif
KG bei4 (en long bei-construction)
CL Localisateur
M Mot de mesure
MSP Autre particule
NN Autre nom
NN-COURT Autre nom (abréviation)
NR Nom propre
NR-COURT Nom propre (abréviation)
NT Nom temporel
NT-COURT Nom temporel (abréviation)
OD Nombre ordinal
AU Onomatopée
P Préposition
PN Pronom
UE Ponctuation
SB bei4 (en bref bei-construction)
SP Particule de phrase finale
URL URL
Virginie Adjectif prédicatif
CV Copule
VE you3 (Verbe principal)
VV Autre verbe
X Autres

PoS tag list in Japanese and correspondence to BCCWJ tags

Étiqueter Nom JA d'origine Anglais
c.a. Adjectif général Adjectif-Commun
A-dp Adjectifs non autonomes Adjectif-dépendant
C Mots de connexion Conjonction
synonyme Pronom
E Anglais mot anglais
F adverbe Adverbe
je Verbes touchants-général Interjection-Commun
Jc Mots de forme-général Adjectival Nom-Commun
J-tari Mot de forme-タリ Adjectival Nom-Tari
J-x Forme des mots-tige du verbe auxiliaire Racine Adjectival Nom-AuxVerbe
M-aa Subvention Mark-AA Signe auxiliaire-AA
Mc Signe de subvention-général Signe auxiliaire-Commun
M-cp Marque de subvention-parenthèse fermée Signe auxiliaire-Open Parenthèse
Serpillière Subvention marque-ouvert entre parenthèses Signe auxiliaire-Fermer la parenthèse
député Période de subventionnement Signe auxiliaire-Période
Nn Nom-nom Nom-Nom
N-nc Nom-nom commun Nom-nom commun
N-pn nom-propre Nom-propre
N-x Racine du verbe nom-auxiliaire Racine Nom-AuxVerbe
O そ の 他 Autres
P Mots communs Préfixe
P-fj Auxiliaire-Adverbial Particule-Adverbial
P-jj Particule mot-quasi-subjective auxiliaire Particule-Phrasal
Paquet Particule-cas des particules Marquage de cas de particules
P-rj Mots auxiliaires-Mots auxiliaires Liaison de particules
P-sj Mot auxiliaire-mot auxiliaire Particule-Conjonctif
Qa Suffixe-adjectif Suffixe-Adjectif
Qj Mots en forme de suffixe Nom suffixe-adjectival
Qn Suffixe-nom Suffixe-Nom
Qv Suffixe-verbal Suffixe-Verbe
R Mots conjoints Adjectif adnominatif
Sc Mark-général Signe-Commun
SL Marquer-texte Signe-Lettre
U URL URL
Vc Verbe-général Verbe-Commun
V-dp Verbes-Indépendance Possibilité Dépendant du verbe
W Vide Espace blanc
X Verbe auxiliaire AuxVerb

Remerciements

Les développeurs souhaitent 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 of the Kotonoha-BCCWJ corpus (en japonais). Nihongo no kenkyu (Studies in Japanese), 4(1):82–95, 2008. (Des 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 ]

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 .