エンベディングモデルの精度 - Shinichi0713/LLM-fundamental-study GitHub Wiki

トップK精度(Top-K Accuracy)は、モデルの予測が正解ラベルの上位K個の予測に含まれているかどうかを評価する指標です。具体的にどのように計測するかを説明します。

トップK精度の計測方法 モデルの予測取得:

入力データに対してモデルを用いて予測を行い、各クラスに対するスコア(確率)を取得します。 上位K個の予測を選択:

各入力データに対して、予測スコアの上位K個のクラスを選びます。 正解ラベルと比較:

正解ラベルが上位K個の予測に含まれているかを確認します。 精度の計算:

全ての入力データに対して、正解ラベルが上位K個に含まれているデータの割合を計算します。 具体的な手順 例: 入力データ: N N個のデータポイント クラス数: C C個のクラス K: トップKの値 手順: モデルの予測取得:

モデルに入力データを与えて、クラスに対する予測スコアを取得します。

例えば、モデルの出力が次のような行列(サイズ N × C N×C)だとします:

predictions

[ 0.1 0.3 0.6 0.4 0.4 0.2 ⋮ ⋮ ⋮ ] predictions= ​

0.1 0.4 ⋮ ​

0.3 0.4 ⋮ ​

0.6 0.2 ⋮ ​

上位K個の予測を選択:

各データポイントに対して、予測スコアの上位K個のクラスを選びます。

例えば、K=2の場合、上位2個のクラスを選ぶと: image

正解ラベルと比較:

各データポイントの正解ラベルが上位K個の予測に含まれているかを確認します。

例えば、正解ラベルが次のようなベクトル(サイズ N)だとします:

true_labels=[2,0,…] 比較結果: image

correct_preds=1,1,… 精度の計算:

全てのデータポイントに対して、正解ラベルが上位K個に含まれている割合を計算します。 image

コード例(Python) 以下に、Pythonを使ってトップK精度を計算する例を示します。

import numpy as np

def top_k_accuracy(predictions, true_labels, k):
    top_k_preds = np.argsort(predictions, axis=1)[:, -k:]
    correct = 0
    for i in range(len(true_labels)):
        if true_labels[i] in top_k_preds[i]:
            correct += 1
    return correct / len(true_labels)

# 例のデータ
predictions = np.array([0.1, 0.3, 0.6], [0.4, 0.4, 0.2](/Shinichi0713/LLM-fundamental-study/wiki/0.1,-0.3,-0.6],-[0.4,-0.4,-0.2))
true_labels = np.array([2, 0])
k = 2

# トップK精度の計算
accuracy = top_k_accuracy(predictions, true_labels, k)
print(f"Top-{k} Accuracy: {accuracy}")