エンベディングモデルの精度 - 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個のクラスを選ぶと:
正解ラベルと比較:
各データポイントの正解ラベルが上位K個の予測に含まれているかを確認します。
例えば、正解ラベルが次のようなベクトル(サイズ N)だとします:
true_labels=[2,0,…]
比較結果:
correct_preds=1,1,… 精度の計算:
全てのデータポイントに対して、正解ラベルが上位K個に含まれている割合を計算します。
コード例(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}")