はじめに
つい先日GiNZAというNLPライブラリが公開されたので、既存のライブラリと性能を比較してみました。
比較対象はJanome。
サンプルテキスト
比較に用いた文字列はWikipediaにある原子力発電のページ
上記のページでページ全体を選択してコピペして利用しました。
Janome
インストールは以下のコマンドを実行。
pip install janome
テストコードは以下のとおり。
from time import time
txt = """
原子力発電
出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動検索に移動
〜中略〜
最終更新 2019年4月30日 (火) 14:38 (日時は個人設定で未設定ならばUTC)。
テキストはクリエイティブ・コモンズ 表示-継承ライセンスの下で利用可能です。追加の条件が適用される場合があります。詳細は利用規約を参照してください。
プライバシー・ポリシーウィキペディアについて免責事項開発者Cookieに関する声明モバイルビュー
Wikimedia Foundation Powered by MediaWiki
"""
t1 = time()
from janome.tokenizer import Tokenizer
t2 = time()
t = Tokenizer()
tokens = t.tokenize(txt.replace(' ',' '))
t_janome = ""
i = 0
for token in tokens:
if token.surface != "\n":
t_janome += " " + token.surface
i += 1
print(i, time() - t1, time() - t2)
実行結果は以下のとおり。
27935, 3.574777126312256, 3.574641227722168
検出した形態素は27,935個で、経過時間は3.57秒。
GiNZA
インストールは以下のコマンドを実行。
pip install "https://github.com/megagonlabs/ginza/releases/download/v1.0.2/ja_ginza_nopn-1.0.2.tgz"
テストコードは以下のとおり。
from time import time
txt = """
原子力発電
出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動検索に移動
〜中略〜
最終更新 2019年4月30日 (火) 14:38 (日時は個人設定で未設定ならばUTC)。
テキストはクリエイティブ・コモンズ 表示-継承ライセンスの下で利用可能です。追加の条件が適用される場合があります。詳細は利用規約を参照してください。
プライバシー・ポリシーウィキペディアについて免責事項開発者Cookieに関する声明モバイルビュー
Wikimedia Foundation Powered by MediaWiki
"""
t1 = time()
import spacy
nlp = spacy.load('ja_ginza_nopn')
t2 = time()
doc = nlp(txt)
t_ginza = ""
i = 0
for sent in doc.sents:
for token in sent:
if token.orth_ != "\n":
t_ginza += " " + token.orth_
i += 1
print(i, time() - t1, time() - t2)
実行結果は以下のとおり。
25665, 18.349574089050293, 17.297925233840942
検出した形態素は25,665個で、経過時間は18.34秒。
考察
圧倒的にJanomeが早いです。
ただ、単語の分析はGiNZAの方が良いような印象をうけました。
例えば、「経済産業省」という単語をJanomeは「経済 産業 省」と分けましたが、GiNZAは「経済産業省」という一つの単語として認識していました。
文章に依存する話ではありますが、目的に応じて使い分けると良いかなと感じます。
ということで、次は何するかな(^-^)