Ich habe einen Pure Python Rakuten MA geschrieben, daher ist dies ein Einführungsartikel.
Rakuten MA ist ein morphologischer JavaScript-Analysator von Rakuten NLP Project. Ich denke, dass die Funktionen darin bestehen, dass Sie online sequentiell lernen und das Modell einfach aktualisieren können und dass Sie morphologische Analysen von der Client-Seite über den Browser durchführen können.
Für Details ist die Erklärung im folgenden Artikel leicht zu verstehen.
Ich wollte Rakuten MA mit Python verwenden, also habe ich die Python-Version geschrieben!
Sie können es mit $ pip install rakutenma
installieren.
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("Hinten ist ein Eichhörnchen"))
print(rma.train_one(
[["Uraniwa","N-nc"],
["Zu","P-k"],
["Ist","P-rj"],
["Garten","N-n"],
["Niwatori","N-nc"],
["Aber","P-k"],
["Ist","V-c"]]))
Mit diesem Gefühl können Sie die API auf die gleiche Weise wie die ursprüngliche JS-Version verwenden. Siehe PyPI oben für Details.
Ich wollte eigentlich Python 2.7 unterstützen, bin aber erschöpft, daher unterstütze ich vorerst nur die Python 3-Serie. </ del>
Ab Version 0.2 funktioniert es zusätzlich zu Python 3.3 und 3.4 mit Python 2.6 und 2.7. </ ins>
Das Rakuten MA-Modell verarbeitet den Wert einer Zeichenfolge, die durch eine Hash-Funktion digitalisiert wurde. Da das Verhalten dieser Hash-Funktion mit der JS-Version identisch ist, kann dieselbe Modelldatei wie die JS-Version in der Python-Version wiederverwendet werden.
Dieses Paket enthält keine Modelldateien. Bitte beziehen Sie es separat aus dem Original Rakuten MA Repository.
Ich habe versucht, die Verarbeitungszeit mit der ursprünglichen JS-Version zu vergleichen, indem ich Tokenize gedreht und jeweils 1000 Mal gelernt habe.
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("Ich habe vor nichts mehr Angst")
rma.train_one(
[["Bereits","F"],
["Was","D"],
["Ebenfalls","P-rj"],
["erschrocken","A-c"],
["Abwesend","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("Ich habe vor nichts mehr Angst");
rma.train_one(
[["Bereits","F"],
["Was","D"],
["Ebenfalls","P-rj"],
["erschrocken","A-c"],
["Abwesend","X"]]);
}
Ich habe mit einem Rand im Computer erneut gemessen. (15.01.2015) </ 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
Es dauert fast doppelt so lange wie die ursprüngliche JS-Version (; ´Д`)
Ich habe es auch mit Pypy versucht.
$ time pypy3 test.py
real 0m1.908s
user 0m1.859s
sys 0m0.042s
Die Leistung entspricht der ursprünglichen Familie.
Ich habe Rakuten MA für Python geschrieben. Es ist fast doppelt so langsam wie die ursprüngliche Familie, und es ist nicht gut, weil es den großen Vorteil verliert, es über einen Browser verwenden zu können, aber nur diesen einen Punkt können Sie Rakuten MA von Python verwenden, ohne Klebercode zu schreiben.
Recommended Posts