THUIR / T2Ranking

T2Ranking: A large-scale Chinese benchmark for passage ranking.
https://huggingface.co/datasets/THUIR/T2Ranking
147 stars 9 forks source link

关于nDCG的指标计算 #2

Closed TccccD closed 1 year ago

TccccD commented 1 year ago

最近正在用你们的数据做一些实验,在计算nDCG的时候,发现sklearn的ndcg_score结果不太对,它的计算方式貌似会先做一个排序再计算ndcg。我按照你论文的公式,重新实现了一个,可以帮忙看看是不是正确的吗?感谢! @Deriq-Qian-Dong y_true为测试集中的rel,y_pred为我预测的p对应rel的排序列表,如果在测试集对应q存在这个p,则标上对应的rel,如果不存在则为0。

def get_dcg_my(y, k):
    y = y[:k]
    dcg = (2 ** np.array(y) - 1) / np.log2(np.arange(1, len(y) + 1) + 1)
    dcg = np.sum(dcg)
    return dcg

def get_ndcg_my(y_true, y_pred, k=10):
    dcg = get_dcg_my(y_pred, k)
    idcg = get_dcg_my(y_true, k)
    print(dcg, idcg)
    ndcg = dcg / idcg
    return ndcg
Deriq-Qian-Dong commented 1 year ago

你的实现看起来没有问题,但是建议用trec的脚本来计算对比一下,看看结果是否一样。

TccccD commented 1 year ago

trec的脚本

你的实现看起来没有问题,但是建议用trec的脚本来计算对比一下,看看结果是否一样。

trec的脚本是什么

Deriq-Qian-Dong commented 1 year ago

trec_eval