Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

モデルの評価

モデルの品質を理解することは、良好な分割結果を得るために不可欠です。

メトリクス

train コマンドは学習後に3つの主要なメトリクスを出力します。これらは in-sample 指標(学習データ自身で測った値)であり、未知のテキストに対する 性能を過大評価します。実際の品質を知るには、必ず学習に使用していない held-out コーパスで評価してください(後述のベンチマークを参照)。

Accuracy(正解率)

Accuracy = (TP + TN) / Total Instances

すべての文字位置のうち、正しく分類された割合(境界と非境界の両方を含む)です。モデル品質の最も広範な指標です。

Precision(適合率)

Precision = TP / (TP + FP)

モデルが予測した境界のうち、正しかった割合です。高い適合率は、誤った境界(過分割)が少ないことを意味します。

Recall(再現率)

Recall = TP / (TP + FN)

実際の境界のうち、モデルが検出した割合です。高い再現率は、見逃された境界(不足分割)が少ないことを意味します。

混同行列

境界と予測 (+1)非境界と予測 (-1)
実際の境界True Positive (TP)False Negative (FN)
実際の非境界False Positive (FP)True Negative (TN)

事前学習済みモデルのベンチマーク

同梱の japanese.modelchinese.modelkorean.modelenglish.model は、 通常の AdaBoost -t/-i 学習ではなく binary-perceptron 畳み込み手順で 学習しています – 正確な手順は学習手順を参照してください。 いずれも学習コーパスの held-out テスト分割で評価しています。単語 F1 は 単語の完全一致、境界 F1 は個々の境界判定のスコアです。

モデル単語 F1境界 F1学習コーパス
japanese.model96.70%98.59%UD Japanese-GSD
korean.model99.91%99.96%UD Korean-GSD
chinese.model90.69%95.64%UD Chinese-GSD
english.model98.31%99.18%UD English-EWT

韓国語と英語は、元の空白を保持したテキスト(空白保持 TSV コーパス。空白 トークンは F1 の計算から除外)で学習・評価しています。この 2 言語では空白が ほとんどの語境界を示すため、空白を使わずに表記される日本語・中国語に比べて タスクが容易になります — このスコアは言語間で直接比較できません。韓国語の ほぼ決定論的な 99.91% と、それより低い英語の 98.31% はどちらもこの同じ 空白保持プロトコルによるものですが、両者の差は空白があってもなお英語に残る 曖昧性(短縮形、ハイフン付き複合語、省略語)に由来します。

ベンチマークの再現

上の表のすべての数値は、同梱のゴールドデータ(resources/eval/、UD GSD の test 分割から変換。同梱モデルは train 分割で学習しているため held-out に あたります)を使って、それぞれ 1 コマンドで再現できます:

litsea evaluate -l japanese models/japanese.model resources/eval/japanese_gsd_test.txt
litsea evaluate -l korean --format tsv models/korean.model resources/eval/korean_gsd_test.tsv
litsea evaluate -l chinese models/chinese.model resources/eval/chinese_gsd_test.txt
litsea evaluate -l english --format tsv models/english.model resources/eval/english_ewt_test.tsv

コマンドリファレンスは evaluate を参照して ください。POS モデルは --pos で評価し、その held-out の数値は 事前学習済みモデルに記載しています。

どのゴールドファイルを使うかはモデルの学習方法によって決まり、2 つの グループで異なります:

# 日本語・中国語: 実際のテキストにスペースがないため、スペース区切りの
# `word/POS` ゴールドがそのまま実運用のプロトコルになります。
litsea evaluate --pos -l japanese models/japanese_pos.model resources/eval/japanese_gsd_test_pos.txt

# 韓国語・英語: 空白保持コーパスで学習しているため(issue #198)、
# --format tsv で空白保持の POS ゴールドに対して評価します。
litsea evaluate --pos --format tsv -l korean models/korean_pos.model resources/eval/korean_gsd_test_pos_spaced.tsv
litsea evaluate --pos --format tsv -l english models/english_pos.model resources/eval/english_ewt_test_pos_spaced.tsv

韓国語・英語向けの *_test_pos.txt ファイル(空白トークンなし)も引き続き 同梱しています。これらは #198 以前にこれらのモデルが学習していた空白非保持 プロトコルを測定するものなので、以前公開していた数値を再現する用途にのみ 有用です – 現在の品質を測るには、上記の *_pos_spaced.tsv ゴールドを 使用してください。こちらはモデルの学習方法と、segment --pos が実際に 受け取る入力の双方に一致します。

モデル品質の改善

精度が不十分な場合は、以下を検討してください:

  1. より多くの学習データ – より大規模で多様なコーパスを用意する
  2. 閾値を下げる-t 0.0001 を試して、より多くのブースティング反復を許可する
  3. 反復回数を増やす-i 20000 以上を試す。AdaBoost は 1 反復につき弱学習器 (特徴)を 1 つ選択するため、反復回数がモデルの特徴数の上限になります。CLI の デフォルト(-i 100)では非常に小さいモデルになり、held-out 精度が大幅に 低くなります
  4. コーパスの品質向上 – 一貫したトークン化とクリーンなテキストを確保する
  5. 再学習 – 既存のモデルから開始し、追加データで学習する(モデルの再学習を参照)

上記の閾値・反復回数のチューニングは、通常の AdaBoost 学習 (--perceptron/--pos を付けない litsea train)に適用されるものです。 同梱モデル自身が通常の AdaBoost に対して達成している +5〜13pt の held-out 品質向上は、-t/-i のチューニングによるものではなく、2 クラスの Averaged Perceptron を学習してから無損失に AdaBoost の重みへ畳み込む手順に よるものです。段階的な改善ではなく同梱モデルと同水準の品質を目指す場合は、 学習手順のレシピを参照してください。