[PYTHON] Verwenden wir Juman ++ im Servermodus

Inhalt dieses Artikels

Was ist Juman ++?

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.

Ein wenig besorgniserregender Punkt von Juman ++

  1. Sie müssen die abhängigen Bibliotheken aktualisieren. Besonders um gcc
  2. Langsam

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?

Verwenden wir den Servermodus!

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 __

Verwenden Sie den Human ++ - Servermodus von Python

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.

Was du tun kannst

Wie installiert man

  1. Installieren Sie Mecab, Juman, Juman ++. Siehe Diese README-Datei.
  2. Starten Sie Juman ++ im Servermodus. Verwenden Sie die im Lieferumfang von Juman ++ enthaltene Datei "server.rb".
  3. pip install JapaneseTokenizer

Das ist es.

Wie benutzt man

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.

Verbesserungen gegenüber Vorheriger Artikel

Recommended Posts

Verwenden wir Juman ++ im Servermodus
Führen Sie den uwsgi-Server im uwsgi-gevent-Modus aus
Verwenden Sie config.ini mit Python
Verwenden Sie DataFrame in Java
Verwenden Sie Datumsangaben in Python
Verwenden Sie Mean mit DataFrame
Verwenden Sie Valgrind mit Python
Verwenden Sie ujson in Anfragen
Verwenden Sie den Profiler in Python
DNS-Server in Python ....
Mal sehen, wie def in Python verwendet wird
Verwenden Sie den let-Ausdruck in Python
Verwenden Sie Anaconda in einer Pyenv-Umgebung
Verwenden Sie das Messprotokoll mit Python
Verwenden Sie die Rückruffunktion in Python
Verwenden Sie den Parameterspeicher in Python
Verwenden Sie den HTTP-Cache in Python
Verwenden Sie reguläre Ausdrücke in C.
Verwenden Sie in Python ein Diktat mit Listenschlüssel
Verwenden Sie Random Forest mit Python
-Lösung für bereits verwendete Adresse
Verwenden des Python-Modus in der Verarbeitung
Verwenden Sie <input type = "date"> mit Flask
Verwenden Sie die jinja2-Vorlage in einer Excel-Datei
Verwenden Sie Stoff wie in Python (Stoff3)
Verwendung von Klassen in Theano
Mock in Python-Wie man Mox benutzt
Verwenden Sie Watchdog (Watchmedo) in der testgetriebenen Entwicklung
Schreiben Sie einen HTTP / 2-Server in Python
Verwendung von SQLite in Python
[Numpy] Rufen Sie savetxt () im Append-Modus auf
Verwenden Sie rospy mit virtualenv in Python3
Verwenden Sie APIs, die nicht in Twython implementiert sind
Wie man MySQL mit Python benutzt
Verwenden Sie Python in pyenv mit NeoVim
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
Verwenden Sie die django-debug-Symbolleiste in der VirtualBox / Vagrant-Umgebung
Verwenden Sie OpenCV mit Python 3 in Window
Stellen Sie das in Python unter SQL Server erstellte Vorhersagemodell bereit und verwenden Sie es
Verwendung von VS Code (Codeserver) mit Google Colab in nur 3 Zeilen