Juman ++ ist ein morphologischer Analysator, der am Kurohashi Laboratory der Universität Kyoto entwickelt wurde. Der Punkt ist: "Was ist der Unterschied zu Mecab?", Aber der Unterschied ist, dass Human ++ "das RNN-Sprachmodell (sogenanntes Deep Learning System) verwendet".
Einführungsartikel in Qiita nehmen allmählich zu, und ich freue mich darauf, dass sie in Zukunft weit verbreitet sein werden.
Es besteht die Sorge, dass das Problem mit der Abhängigkeitsbibliothek gcc aktualisiert und andere Codegruppen möglicherweise hängen bleiben ... Verwenden Sie in diesem Fall die coole Lösung Docker-Umgebung vorbereiten.
Das Problem ist nun der Geschwindigkeitsaspekt von 2. Dieser Artikel
Mecab dauerte ungefähr 10 Sekunden, während JUMAN ++ mehr als 10 Stunden dauerte
Es ist also sicher, dass es Bedenken hinsichtlich der Geschwindigkeit gibt.
Ich habe auch einen Messvergleich in meiner Umgebung durchgeführt.
time echo "Die Ausländerregierung wurde genehmigt. Ich bin auch der letzte Tag des Sonntags." | mecab
echo 0.00s user 0.00s system 26% cpu 0.005 total
mecab 0.00s user 0.00s system 49% cpu 0.007 total
time echo "Die Ausländerregierung wurde genehmigt. Ich bin auch der letzte Tag des Sonntags." | jumanpp
echo 0.00s user 0.00s system 31% cpu 0.004 total
jumanpp 0.14s user 0.35s system 53% cpu 0.931 total
Im Vergleich zu Mecab ist die Nummer 3-stellig unterschiedlich.
Dieser Faktor ist nicht auf das Design zurückzuführen, sondern darauf, dass das Laden des Modells einige Zeit in Anspruch nimmt (es scheint, dass es sich um eine Geschichte von einem bestimmten Ort handelt). Mit anderen Worten, es bleibt keine andere Wahl, als das RNN-Sprachmodell zu verwenden.
Was soll ich dann tun?
Die Lösung ist einfach, mehr als "ein Serverskript verwenden"! ist.
Tatsächlich ist dies im ver.1.0.1-Handbuch richtig geschrieben. Siehe Seite 5.
Verwenden Sie das im Tar von Juman ++ enthaltene __Ruby-Skript und lassen Sie es im Servermodus laufen.
Nach dem Handbuch
$ ruby script/server.rb --cmd "jumanpp -B 5" --host host.name --port 1234
Starten Sie den Server mit. Als Kunde anrufen
echo "Kuchen essen" | ruby script/client.rb --host host.name --port 1234
ist.
Wie viel Zeit können Sie im Servermodus sparen?
time echo "Die Ausländerregierung wurde genehmigt. Ich bin auch der letzte Tag des Sonntags." | ruby client.rb --host localhost
echo 0.00s user 0.00s system 21% cpu 0.006 total
ruby client.rb --host localhost 0.04s user 0.01s system 47% cpu 0.092 total
Es ist ungefähr ein Zehntel der Zeit! Es ist erstaunlich! Was passiert übrigens mit Human ++ über das Netzwerk? Ich habe den Human ++ - Server auf einem Server gestartet, der im lokalen Netzwerk vorhanden ist, und ihn gemessen.
time echo "Die Ausländerregierung wurde genehmigt. Ich bin auch der letzte Tag des Sonntags." | ruby client.rb --host sever.hogehoge
echo 0.00s user 0.00s system 22% cpu 0.005 total
ruby client.rb --host sever.hogehoge 0.03s user 0.01s system 26% cpu 0.167 total
.. .. .. .. Nun, angesichts der Netzwerkantwort, ist es so etwas? Wie auch immer, wir haben festgestellt, dass die Verwendung des Servermodus den Engpass beheben kann.
__ Alle, lasst uns Human ++ im Servermodus verwenden __
Das obige Client-Skript ist in Ruby geschrieben. Also, ich denke Ruby Leute sollten es einfach so benutzen wie es ist (Nasenscheiße)
Ich bin jedoch ein normaler Python-Benutzer, daher möchte ich es von Python aus aufrufen. (Wenn Sie "client.rb" als Python verwenden möchten, geben Sie den Code unten ein. Schauen Sie also bitte dort nach.) Offiziell wurde ein Python-Paket namens pyknp veröffentlicht, aber tatsächlich werden nur Unterprozessaufrufe für juman ++ vorbereitet. Ist nicht ... (Geschichte in pyknp-0.3) Dadurch können Sie nicht vom Servermodus profitieren.
Ich habe ein Python-Paket namens [Japanese Tokenizers] veröffentlicht (https://github.com/Kensuke-Mitsuzawa/JapaneseTokenizers). Ich habe es in dieses Python-Paket integriert.
Verfügbar für Python 2x und Python 3x.
pip install JapaneseTokenizer
Das ist es.
Es dauert nur eine Zeile, um Juman ++ im Servermodus aufzurufen.
>>> from JapaneseTokenizer import JumanppWrapper
>>> sentence = 'Teheran (Persisch): تهران ; Tehrān Tehran.ogg Aussprache[Hilfe/Datei]/teɦˈrɔːn/,Englisch:Teheran) ist die Hauptstadt von Westasien, Iran und die Hauptstadt von Teheran. Bevölkerung 12,223,598 Personen. Die Stadtbevölkerung beträgt 13 Jahre,413,Erreichen Sie 348 Personen.'
>>> list_result = JumanppWrapper(server='localhost', port=12000).tokenize(sentence, return_list=True)
>>> print(list_result)
['Teheran', 'Persien', 'Wort', 'Aussprache', 'Hilfe', 'Datei', '英Wort', 'Tehran', 'Westen', 'Asien', 'Iran', 'Hauptstadt', 'Teheran', 'Landeshauptstadt', 'Population', '12,223,598', 'Stadt', 'Bereich', 'Population', '13,413,348']
Um eine Morphologie nach Teilen auszuwählen, übergeben Sie das gewünschte Teil mit List [Tuple [str]]
.
Siehe diese Seite für das partizipative System von Juman ++.
>>> from JapaneseTokenizer import JumanppWrapper
>>> sentence = 'Teheran (Persisch): تهران ; Tehrān Tehran.ogg Aussprache[Hilfe/Datei]/teɦˈrɔːn/,Englisch:Teheran) ist die Hauptstadt von Westasien, Iran und die Hauptstadt von Teheran. Bevölkerung 12,223,598 Personen. Die Stadtbevölkerung beträgt 13 Jahre,413,Erreichen Sie 348 Personen.'
>>> pos_condition = [('Substantiv', 'Ortsname')]
>>> JumanppWrapper(server='localhost', port=12000).tokenize(sentence, return_list=False).filter(pos_condition=pos_condition).convert_list_object()
['Teheran', 'Asien', 'Iran', 'Teheran']
Darüber hinaus können Sie auch Textinformationen, Oberflächensysteme und andere von Human ++ ausgegebene Informationen abrufen.
Weitere Informationen finden Sie unter examples.py.
Recommended Posts