FlagOpen / FlagEmbedding

Retrieval and Retrieval-augmented LLMs
MIT License
6.6k stars 471 forks source link

请问BGE embedding中eval_msmarco里为什么要用train和dev两个数据集测试 #399

Open 128Ghe980 opened 7 months ago

128Ghe980 commented 7 months ago

在eval_msmarco中出现:

eval_data = datasets.load_dataset("namespace-Pt/msmarco", split="dev") corpus = datasets.load_dataset("namespace-Pt/msmarco-corpus", split="train")

之后将corpus作为faiss_index,eval_data 作为query。 为什么会这样验证呢? 我自己的理解的验证应该是一个QA对数据,将Q作为query,A作为corpus,然后检索,计算各个指标。应该使用一个数据集就够了,为什么不只使用namespace-Pt/msmarco呢?它有query和positive。 还是说以下这些指标就是需要两个数据集这么算。

{ 'MRR@1': 0.2330945558739255, 'MRR@10': 0.35786976395142633, 'MRR@100': 0.3692618036917553, 'Recall@1': 0.22606255969436478, 'Recall@10': 0.6412965616045848, 'Recall@100': 0.9012774594078318 }

staoxiao commented 7 months ago

参考评估代码:https://github.com/FlagOpen/FlagEmbedding/blob/master/FlagEmbedding/baai_general_embedding/finetune/eval_msmarco.py#L146

排序指标的测试逻辑:给定一个query, 从候选集corpus中找到相似度最大的k条文本,判断positive是否在这k条样本中。 因此需要一个corpus。没有的话,也可以把所有query的positive都合在一起作为候选集。

128Ghe980 commented 7 months ago

参考评估代码:https://github.com/FlagOpen/FlagEmbedding/blob/master/FlagEmbedding/baai_general_embedding/finetune/eval_msmarco.py#L146

排序指标的测试逻辑:给定一个query, 从候选集corpus中找到相似度最大的k条文本,判断positive是否在这k条样本中。 因此需要一个corpus。没有的话,也可以把所有query的positive都合在一起作为候选集。

明白喽。谢谢