🐡
lm-evaluation-harnessの評価指標まとめ
概要
lm-evaluation-harness評価指標(タスク)について、重要と思われる部分のまとめです。
タスクがどの様に動作するかは、こちらのドキュメントが参考になります。
JSQuAD
データセット
評価コード
- 評価のメイン部分はここ
- f1-scoreを出すときはMeCabのラッパーであるfugashiを使って回答と答えの文字列を分割して算出している。
JCommonsenseQA
データセット
評価コード
- ここで質問と選択肢をエンコード
context: 質問文
continuation: 各選択肢
context_enc: トークン化された質問文
continuation_enc: トークン化された各選択肢
- ここでmodelに渡すinputsを生成している
context_enc + continuation_enc
がinputsとなる。
N個の選択肢であればN個のinputsが作成される。
- 推論実行
- 推論結果の内、各選択肢に当たる位置のlogitsを抽出
- 選択肢の完全一致を判定
選択肢が来るはずのトークン位置のlogitsの内、最も重みの大きいトークンのみ抽出。
それが選択肢と全く同じであれば、その選択肢を答えとしたことになる。
- 選択肢の可能性を判定
選択肢が来るはずのトークン位置のlogitsの内、正解のトークンIDの重みを抜き出し合計している。
その選択肢の可能性をどの程度多く見積もったかを表す。
float(logits.sum())はトークン数分の合計値となる。
- 正解との比較
上記で算出した選択肢の可能性と正解を比較している。
acc_normの方はトークン数で割っている。
こちらの方が文字数の長さに影響されないため、より妥当な評価な気がする。
accだとめちゃくちゃ長い文字列が選択肢に入っていた場合、正解と判断してしまいそう。
JNLI
データセット
評価コード
-
基本的にはJCommonsenseQAと同じ様に動作する
-
データセットの正解ラベルは数値で記載されているので文字列に変換している
- balanced_acc、mcc、macro_f1が追加されている
- balanced_acc、mcc、macro_f1を計算するため値を準備
acc: 正解したか
gold: 正解ラベル
pred: 予測ラベル
- balanced_mean
正解ラベルごとの正答率の平均を取ってから、更にそれらの平均を取る
- matthews_corrcoef
MCCによる評価
- f1_score
f1-scoreによる評価
MARC-ja
データセット
評価コード
- 基本的にはJNLIと同じ様に動作する
Discussion