Repository: modelscope/evalscope
Issue: embedding和reranker模型自定义文本评测问题
Root cause: Documentation Deficiency

大佬，想请问两个问题如下：
> **问题一**
任务cfg为：
```python
 one_stage_task_cfg = {  # noqa
        'eval_backend': 'RAGEval',
        'eval_config': {
            'tool': 'MTEB',
            'model': [
                {
                    'model_name_or_path': '/home/xiezizhe/zhaofengshun/Conan-embedding-v1',
#                     'pooling_mode': 'cls',  # if not set, load from model config; use `cls` for bge series model
                    'max_seq_length': 512,
                    'prompt': '为这个句子生成表示以用于检索相关文章：',
                    'encode_kwargs': {
                        'batch_size': 512,
                    },
                }
            ],
            'eval': {
                'tasks': [
                    'CustomRetrieval'
                ],
                "dataset_path": "/home/xiezizhe/.jupyter/zhaofengshun/evalscope/custom_eval/text/retrieval",
                'verbosity': 2,
                'output_folder': 'outputs',
                'overwrite_results': True,
#                 'top_k': 10,
#                 'limits': 1000,  # don't limit for retrieval task
            },
        },
    }
```

数据结构
```
{"_id": "query1", "text": "怎么才能申请小纸条功能"}
{"_id": "query2", "text": "如何拥有小纸条功能"}
```
corpus.jsonl结构的同上
```
{"_id": "doc1", "text": "想要小纸条功能，怎么办"}
{"_id": "doc2", "text": "啥办法可以申请小纸条功能"}
```
qrels为
```
query-id	corpus-id	score
query1	doc1	1
query2	doc2	1
```
评测一阶段结果为：
<img width="556" alt="截屏2024-12-20 15 50 36" src="https://github.com/user-attachments/assets/17a9b8c8-6686-40d6-9087-bfb7927a745c" />
wei为什么这个结果这么小而且还有负数？总数据量为364648条，是因为qrels的score都为1的缘故吗？还是说corpus太简单？

> **问题二**
一二阶段同时评测，因为想要测评reranker模型
config为：
```python
two_stage_task_cfg = {
        'eval_backend': 'RAGEval',
        'eval_config': {
            'tool': 'MTEB',
            'model': [
                {
                    'model_name_or_path': '/home/xiezizhe/zhaofengshun/Conan-embedding-v1',
                    'is_cross_encoder': False,
                    'max_seq_length': 512,
                    'prompt': '',
                    'model_kwargs': {'torch_dtype': 'auto'},
                    'encode_kwargs': {
                        'batch_size': 64,
                    },
                },
                {
                    'model_name_or_path': '/home/xiezizhe/.jupyter/bge/bge-reranker-v2-m3',
                    'is_cross_encoder': True,
                    'max_seq_length': 512,
                    'prompt': '为这个问题生成一个检索用的表示',
                    'model_kwargs': {'torch_dtype': 'auto'},
                    'encode_kwargs': {
                        'batch_size': 32,
                    },
                },
            ],
            'eval': {
                'tasks': ['CustomRetrieval'],
                "dataset_path": "/home/xiezizhe/.jupyter/zhaofengshun/evalscope/custom_eval/text/retrieval",
                'verbosity': 2,
                'output_folder': 'outputs',
                'overwrite_results': True,
#                 'limits': 100,
            },
        },
    }
```
执行文件CUDA_VISIBLE_DEVICES=6 python example_eval_mteb.py 报错
<img width="1854" alt="截屏2024-12-20 15 54 37" src="https://github.com/user-attachments/assets/62b535a6-a0f1-41c8-b7f7-8d509540d10d" />
是同一份自定义数据，数据路径也是一样的，为什么会报错呢？


我们后面复现一下

问一下，用官方文档里的示例可以运行成功吗，数据在本仓库的custom_eval/text/retrieval下面

> 我们后面复现一下
> 
> 问一下，用官方文档里的示例可以运行成功吗，数据在本仓库的custom_eval/text/retrieval下面

<img width="1508" alt="截屏2024-12-21 12 59 36" src="https://github.com/user-attachments/assets/feb6d8dd-c04b-4570-b92d-a5aae79c24c0" />

您好，试了一下官方示例在一二阶段同时评测，因为想要测评reranker模型时执行也是会报这个错误（这个路径下evalscope/custom_eval/text/retrieval）

> 大佬，想请问两个问题如下：
> 
> > **问题一**
> > 任务cfg为：
> 
> ```python
>  one_stage_task_cfg = {  # noqa
>         'eval_backend': 'RAGEval',
>         'eval_config': {
>             'tool': 'MTEB',
>             'model': [
>                 {
>                     'model_name_or_path': '/home/xiezizhe/zhaofengshun/Conan-embedding-v1',
> #                     'pooling_mode': 'cls',  # if not set, load from model config; use `cls` for bge series model
>                     'max_seq_length': 512,
>                     'prompt': '为这个句子生成表示以用于检索相关文章：',
>                     'encode_kwargs': {
>                         'batch_size': 512,
>                     },
>                 }
>             ],
>             'eval': {
>                 'tasks': [
>                     'CustomRetrieval'
>                 ],
>                 "dataset_path": "/home/xiezizhe/.jupyter/zhaofengshun/evalscope/custom_eval/text/retrieval",
>                 'verbosity': 2,
>                 'output_folder': 'outputs',
>                 'overwrite_results': True,
> #                 'top_k': 10,
> #                 'limits': 1000,  # don't limit for retrieval task
>             },
>         },
>     }
> ```
> 
> 数据结构
> 
> ```
> {"_id": "query1", "text": "怎么才能申请小纸条功能"}
> {"_id": "query2", "text": "如何拥有小纸条功能"}
> ```
> 
> corpus.jsonl结构的同上
> 
> ```
> {"_id": "doc1", "text": "想要小纸条功能，怎么办"}
> {"_id": "doc2", "text": "啥办法可以申请小纸条功能"}
> ```
> 
> qrels为
> 
> ```
> query-id	corpus-id	score
> query1	doc1	1
> query2	doc2	1
> ```
> 
> 评测一阶段结果为： <img alt="截屏2024-12-20 15 50 36" width="556" src="https://private-user-images.githubusercontent.com/66624774/397657628-17a9b8c8-6686-40d6-9087-bfb7927a745c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzQ5MjUwOTAsIm5iZiI6MTczNDkyNDc5MCwicGF0aCI6Ii82NjYyNDc3NC8zOTc2NTc2MjgtMTdhOWI4YzgtNjY4Ni00MGQ2LTkwODctYmZiNzkyN2E3NDVjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMjMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjIzVDAzMzMxMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTM5ZTM2YjVlNTBjOTM2MWMzODNkM2NiNzVmOTA0MDZiN2Y0YWJkMWVkZmRkZmU3M2NhOWFiMjJkMWYwODA3NzAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.G3Ug3gxq21nDN6yG-WTwUbaY37Lh53-LWQjZLTMTb7s"> wei为什么这个结果这么小而且还有负数？总数据量为364648条，是因为qrels的score都为1的缘故吗？还是说corpus太简单？
> 
> > **问题二**
> > 一二阶段同时评测，因为想要测评reranker模型
> > config为：
> 
> ```python
> two_stage_task_cfg = {
>         'eval_backend': 'RAGEval',
>         'eval_config': {
>             'tool': 'MTEB',
>             'model': [
>                 {
>                     'model_name_or_path': '/home/xiezizhe/zhaofengshun/Conan-embedding-v1',
>                     'is_cross_encoder': False,
>                     'max_seq_length': 512,
>                     'prompt': '',
>                     'model_kwargs': {'torch_dtype': 'auto'},
>                     'encode_kwargs': {
>                         'batch_size': 64,
>                     },
>                 },
>                 {
>                     'model_name_or_path': '/home/xiezizhe/.jupyter/bge/bge-reranker-v2-m3',
>                     'is_cross_encoder': True,
>                     'max_seq_length': 512,
>                     'prompt': '为这个问题生成一个检索用的表示',
>                     'model_kwargs': {'torch_dtype': 'auto'},
>                     'encode_kwargs': {
>                         'batch_size': 32,
>                     },
>                 },
>             ],
>             'eval': {
>                 'tasks': ['CustomRetrieval'],
>                 "dataset_path": "/home/xiezizhe/.jupyter/zhaofengshun/evalscope/custom_eval/text/retrieval",
>                 'verbosity': 2,
>                 'output_folder': 'outputs',
>                 'overwrite_results': True,
> #                 'limits': 100,
>             },
>         },
>     }
> ```
> 
> 执行文件CUDA_VISIBLE_DEVICES=6 python example_eval_mteb.py 报错 <img alt="截屏2024-12-20 15 54 37" width="1854" src="https://private-user-images.githubusercontent.com/66624774/397658767-62b535a6-a0f1-41c8-b7f7-8d509540d10d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzQ5MjUwOTAsIm5iZiI6MTczNDkyNDc5MCwicGF0aCI6Ii82NjYyNDc3NC8zOTc2NTg3NjctNjJiNTM1YTYtYTBmMS00MWM4LWI3ZjctOGQ1MDk1NDBkMTBkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMjMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjIzVDAzMzMxMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWNmODgyYmE0NGM0YjYzYTFlNTdkNWU2OGYzM2VkODI5M2I4ZDUwMzdiZjA4NjM0NTQyOTIzN2YyYWRjZDgxYmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.nxb2P1Yi3QvT2v4EVwBRWPYc3c4j3IdAnOi2p8qiKbQ"> 是同一份自定义数据，数据路径也是一样的，为什么会报错呢？

您好，问题二解决啦～是因为路径问题，把报错的路径中CustomTask.py中的相对路径改为绝对路径之后就可以加载啦～
问题一还是想问一下是为什么？我的数据量不小 一阶段检索评估为什么会出现这个情况

运行其他的检索评测集是正常的吗，比如 T2Retrieval

> 运行其他的检索评测集是正常的吗，比如 T2Retrieval

是的 运行 T2Retrieval是正常的.
并且发现一个新问题 T2Reranking任务会爆显存，但是T2Retrieval不会爆显存（batch_size都修改为1也是），用的是一张3090

运行命令是什么

> 运行命令是什么

CUDA_VISIBLE_DEVICES=7 python example_eval_mteb.py

[CustomRetrieval.json](https://github.com/user-attachments/files/18226504/CustomRetrieval.json)
这是自定义数据集上的结果，我的自定义数据集都是一对一，query0-doc0、query1-doc1这样

example_eval_mteb.py 里面具体的配置是什么样的呢，示例代码能正常运行，自定义的应该也没问题

> example_eval_mteb.py 里面具体的配置是什么样的呢，示例代码能正常运行，自定义的应该也没问题
**配置：**
```
two_stage_task_cfg = {
        'eval_backend': 'RAGEval',
        'eval_config': {
            'tool': 'MTEB',
            'model': [
                {
                    'model_name_or_path': '/home/xiezizhe/zhaofengshun/Conan-embedding-v1',
                    'is_cross_encoder': False,
                    'max_seq_length': 512,
                    'prompt': '',
                    'model_kwargs': {'torch_dtype': 'auto'},
                    'encode_kwargs': {
                        'batch_size': 64,
                    },
                },
                {
                    'model_name_or_path': '/home/xiezizhe/.jupyter/bge/bge-reranker-v2-m3',
                    'is_cross_encoder': True,
                    'max_seq_length': 512,
                    'prompt': '为这个问题生成一个检索用的表示',
                    'model_kwargs': {'torch_dtype': 'auto'},
                    'encode_kwargs': {
                        'batch_size': 32,
                    },
                },
            ],
            'eval': {
                'tasks': ['CustomRetrieval'],
                "dataset_path": "/home/xiezizhe/.jupyter/zhaofengshun/evalscope/custom_eval/text/retrieval",
                'verbosity': 2,
                'output_folder': 'outputs',
                'overwrite_results': True,
#                 'limits': 100,
            },
```
**修改了一下数据集格式 可能是之前评估数据集有问题，之前是一对一** 
query2	doc2	1
query3	doc3	1
query4	doc4	1
**现在是**
query3	doc57	1
query3	doc58	1
query3	doc59	1
query3	doc60	1
query4	doc61	1
query4	doc62	1
query4	doc63	1
query4	doc64	1
query4	doc65	1
query4	doc66	1
以下是结果，比之前的结果正常多了不过还是有负数，可能是评估数据集数量级不够（目前18000多条）？或者数据集有问题
[CustomRetrieval (1).json](https://github.com/user-attachments/files/18229100/CustomRetrieval.1.json)


看结果没什么问题，默认配置里top_k = 5
```
"ndcg_at_1": 0.91673,
"ndcg_at_3": 0.90347,
"ndcg_at_5": 0.88952,
```
有负数是计算的diff差值

> 看结果没什么问题，默认配置里top_k = 5
> 
> ```
> "ndcg_at_1": 0.91673,
> "ndcg_at_3": 0.90347,
> "ndcg_at_5": 0.88952,
> ```
> 
> 有负数是计算的diff差值

嗯呐 辛苦您啦～这个结果应该是对的 后面我再优化一下评估数据集

If you find EvalScope helpful, please feel free to STAR our project. Thank YOU!
如果EvalScope对您有帮助，请给我们加个STAR鼓励，谢谢！