目次
背景
- オラクルスコアは便利な考え方
- 学習させる前に学習による効果検証が可能
- JavaとかのOracleではないので注意
オラクルとは
- 機械学習の評価の文脈における「オラクル(Oracle)」は、正解をあらかじめ知っている理想的・仮想的な存在を指す
- 実際のシステムの出力が、このオラクルと比較してどれだけ理想に近いかを測るための基準として使われる
オラクルスコアとは
- あらかじめ理想的な状態を仮定して性能の上限を見極めるスコアの事
- 機械翻訳・音声認識・テキスト生成などで、1つの入力に対してビームサーチなどで複数の候補(N-best list)を生成するシステムにおいて、その候補群の中から正解(reference)に最も近い候補だけを選んだ場合に得られるスコア
- モデルが実際に出力する1位の候補のスコアではなく、候補群の中に存在する最良の候補を常に選べたらという、あらかじめ理想的な状態を仮定した上限値
- 実際の出力(top-1)のスコアとオラクルスコアの差が大きいほど、1位選択(デコーディング・リランキング)の改善余地が大きいことを示す
具体例:
- 音声認識のOracle WER: N-best候補の中で最も正解に近いものを選んだ場合の誤り率
- 機械翻訳のOracle BLEU: N-best候補の中で最も参照訳に近いものを選んだ場合のBLEU
オラクルスコアの活用例
上限(Sup)と下限(Inf)
オラクルスコアは、N-bestのような候補群の評価だけでなく、複数のコンポーネントが組み合わさったシステムのボトルネック特定や、特徴量の効果検証にも応用できる。
| - | 何を測るか | 対象 |
|---|---|---|
| 追加の場合 | 追加がもたらす効用の上限(supremum) | 新しい特徴量など、まだ無いもの |
| 変更の場合 | 残りのコンポーネントが全体の性能の下限(infimum)になっているか | 既存のコンポーネント(ランカーなど) |
複数コンポーネントのボトルネック特定
- 検索・推薦のランカーのように、候補生成(Retrieval)とランキング(Ranking)など複数のコンポーネントが直列につながっているシステムでは、性能が悪いときにどのコンポーネントが原因か分かりにくい
- 候補生成の結果に対してオラクルスコアを計算する(候補群の中に正解が含まれているか、含まれていれば理想的に並べ替えた場合のスコアはどうなるか)ことで、候補生成とランキングのどちらが性能のボトルネックになっているかを切り分けられる
- 候補生成のオラクルスコアが低ければ、そもそも正解が候補群に入っていないということなので、ランキングをいくら改善しても無駄で、候補生成側の改善が必要だと分かる
特徴量の効果の事前検証
- 新しい特徴量を追加する前に、その特徴量の理想的な値(正解ラベルや、本来計算したいが未実装の値)をマニュアルで差し込んで学習・評価し、性能がどれだけ改善するかを事前に見積もることができる
- この改善幅が小さければ、実際にその特徴量を計算するパイプラインを実装する前に、投資する価値が低いと判断できる
- 逆に改善幅が大きければ、実装コストをかける根拠になる。いずれも、実際に特徴量を計算する仕組みを作る前に、効果の上限を検証できるのが利点
まとめ
- オラクルスコアは、候補群の中の最良解を選べたと仮定した場合の、評価指標上の性能上限
- 実際の出力とオラクルスコアとのギャップが、デコーディング・リランキングの改善余地を示す指標になる
- 複数コンポーネントのシステムではボトルネックの切り分けに、新規特徴量の検討では実装前の効果検証に、それぞれ応用できる
