J'ai écrit un pur Python Rakuten MA, c'est donc un article d'introduction.
Rakuten MA est un analyseur morphologique JavaScript par Rakuten NLP Project. Je pense que les fonctionnalités sont que vous pouvez apprendre en ligne de manière séquentielle et mettre à jour le modèle facilement, et que vous pouvez effectuer une analyse morphologique du côté client via le navigateur.
Pour plus de détails, l'explication de l'article suivant est facile à comprendre.
Je voulais utiliser Rakuten MA avec Python, j'ai donc écrit la version Python!
Vous pouvez l'installer avec $ pip install rakutenma
.
https://pypi.python.org/pypi/rakutenma
from rakutenma import RakutenMA
rma = RakutenMA(phi=1024, c=0.007812)
rma.load("model_ja.json")
rma.hash_func = rma.create_hash_func(15)
print(rma.tokenize("Il y a un écureuil dans le dos"))
print(rma.train_one(
[["Uraniwa","N-nc"],
["À","P-k"],
["Est","P-rj"],
["jardin","N-n"],
["Niwatori","N-nc"],
["Mais","P-k"],
["Est","V-c"]]))
Avec ce genre de sentiment, vous pouvez utiliser l'API de la même manière que la version originale de JS. Voir PyPI ci-dessus pour plus de détails.
Je voulais vraiment supporter Python 2.7, mais comme je suis épuisé, je ne supporte que Python 3 pour le moment. </ del>
À partir de la version 0.2, il fonctionne avec Python 2.6 et 2.7 en plus de Python 3.3 et 3.4. </ ins>
Le modèle Rakuten MA gère la valeur d'une chaîne numérisée par une fonction de hachage. Le comportement de cette fonction de hachage étant le même que celui de la version JS, le même fichier modèle que la version JS peut être réutilisé dans la version Python.
Ce paquet n'inclut pas les fichiers de modèle, veuillez donc l'obtenir séparément du Référentiel original de Rakuten MA.
J'ai essayé de comparer le temps de traitement avec la version originale de JS en tournant tokenize et en apprenant 1000 fois chacun.
CPU: Core i7 2GHz
Memory: 8GB
OS: Mac OSX 10.8.5
Python: 3.4.2
Node.js: 0.10.33
Pypy: 2.4.0 (Python 3.2.5)
Rakuten MA Python: 0.2
Rakuten MA (JS): 1.0.0
rakutenma_benchmark.py
# -*- coding: utf-8 -*-
from rakutenma import RakutenMA
rma = RakutenMA()
for i in range(1000):
rma.tokenize("Je n'ai plus peur de rien")
rma.train_one(
[["Déjà","F"],
["quoi","D"],
["Aussi","P-rj"],
["Effrayé","A-c"],
["Absent","X"]])
rakutenma_benchmark.js
var RakutenMA = require('./rakutenma');
var rma = new RakutenMA();
rma.featset = RakutenMA.default_featset_ja;
for (var i = 0; i < 1000; i++) {
rma.tokenize("Je n'ai plus peur de rien");
rma.train_one(
[["Déjà","F"],
["quoi","D"],
["Aussi","P-rj"],
["Effrayé","A-c"],
["Absent","X"]]);
}
J'ai remesuré avec une marge dans l'ordinateur. (2015/01/15) </ ins>
$ time python rakutenma_benchmark.py
real 0m3.583s
user 0m3.573s
sys 0m0.009s
$ time node rakutenma_benchmark.js
real 0m1.852s
user 0m1.831s
sys 0m0.027s
Cela prend presque deux fois plus de temps que la version JS originale (; ´Д`)
Je l'ai aussi essayé avec Pypy.
$ time pypy3 test.py
real 0m1.908s
user 0m1.859s
sys 0m0.042s
La performance est à égalité avec la famille d'origine.
J'ai écrit Rakuten MA pour Python. C'est presque deux fois plus lent que la famille d'origine, et ce n'est pas bon car cela perd le gros mérite de pouvoir l'utiliser à partir d'un navigateur, mais ce n'est que sur ce point que vous pouvez utiliser Rakuten MA de Python sans écrire de code de colle.
Recommended Posts