コンテンツにスキップ

ベンチマーク

toiro は以下の3つの観点でトークナイザを比較するユーティリティを提供します。

1. 処理速度の比較

複数のトークナイザで同じテキストを処理し、実行時間を計測します。

from toiro import tokenizers
from toiro import datadownloader

# コーパスをダウンロード
datadownloader.download_corpus("livedoor_news_corpus")
train_df, dev_df, test_df = datadownloader.load_corpus("livedoor_news_corpus")
texts = train_df[1].tolist()

# 速度比較を実行
report = tokenizers.compare(texts)
print(report)

出力例:

{
  'execution_environment': {
    'python_version': '3.10.0',
    'arch': 'X86_64',
    'brand_raw': 'Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz',
    'count': 8
  },
  'data': {
    'number_of_sentences': 5900,
    'average_length': 37.69
  },
  'janome': {'elapsed_time': 9.11},
  'nagisa': {'elapsed_time': 15.87},
  'sudachipy': {'elapsed_time': 9.05}
}

2. 分割結果の比較

同一テキストに対して各トークナイザがどのように分割するかを視覚的に比較します。

from toiro import tokenizers

text = "都庁所在地は新宿区。"
tokenizers.print_words(text, delimiter="|")

出力例:

       janome: 都庁|所在地|は|新宿|区|。
       nagisa: 都庁|所在|地|は|新宿|区|。
    sudachipy: 都庁|所在地|は|新宿区|。

より詳細な比較

特定のトークナイザを選択して、詳細な分析を行うことも可能です:

from toiro.tokenizers import SelectTokenizer

# 特定のトークナイザを選択
tokenizer = SelectTokenizer("sudachipy")
tokens = tokenizer.tokenize("都庁所在地は新宿区。")
print(tokens)

3. アプリケーションタスクでの性能比較

実際のアプリケーションタスク(例: テキスト分類)でトークナイザの性能を評価します。

SVM を使った分類

from toiro import tokenizers, datadownloader
from toiro.classifiers import SVMClassificationModel

# データの準備
train_df, dev_df, test_df = datadownloader.load_corpus("livedoor_news_corpus")

# トークナイザを選択
tokenizer = tokenizers.SelectTokenizer("janome")

# SVM モデルで学習・評価
model = SVMClassificationModel(tokenizer)
model.train(train_df)
metrics = model.evaluate(test_df)
print(metrics)

BERT を使った分類

from toiro.classifiers import BERTClassificationModel

# BERT モデルで学習・評価(要: torch, transformers, catalyst)
model = BERTClassificationModel("cl-tohoku/bert-base-japanese")
model.train(train_df, dev_df, epochs=3)
metrics = model.evaluate(test_df)
print(metrics)

ベンチマーク結果の保存

ファイルから直接比較することも可能です:

from toiro import tokenizers

# ファイルから読み込んで比較
report = tokenizers.compare_from_file("path/to/textfile.txt")
print(report)

パフォーマンスのヒント

  • 大量のテキストを処理する場合、MeCab、fugashi、SudachiPy が高速です
  • メモリ効率を重視する場合は Janome や TinySegmenter がおすすめです
  • 精度重視の場合は GiNZA や BERT ベースのモデルを検討してください

詳細な例

より詳しい使用例は、GitHub リポジトリの examples ディレクトリを参照してください。