最近在研究医疗领域的基于文本嵌入的信息检索,需要一个比较全面的评测数据集,因此找到了《MedEureka: A Medical Domain Benchmark for Multi-Granularity and Multi-Data-Type Embedding-Based Retrieval》一文,发表于NAACL 2025,NAACL是CCF的B类会议,算是不错的会议了,文章质量相信不差。但是在复现学习的时候却发现以下问题,分享出来供高手指点。
1、git上的代码和数据研究
根据摘要,文章的代码和数据在https://github.com/JOHNNY-fans/MedEureka。
下载下来后,总共发现4个文件夹:code、dataset、eval和figure。
1.1dataset文件夹
我对数据最感兴趣,因此研究dataset文件夹。
发现这个文件夹下之后一个Linux下的脚本文件download_medeureka.sh,文件中只有一行内容
huggingface-cli download --repo-type dataset --resume-download Johnnyfans/medeureka_sup_train --local-dir Johnnyfans/medeureka_sup_train
这行命令的功能是从huggingface上下载数据集 Johnnyfans/medeureka_sup_train,然后保持到本地文件夹Johnnyfans/medeureka_sup_train中。我在huggingface的镜像站点(https://hf-mirror.com)上找到了这个数据集,地址为https://hf-mirror.com/datasets/Johnnyfans/medeureka_sup_train
这里面只有一个大小为228M的train-00000-of-00001.parquet文件。
利用以下代码对数据集进行了解析并保持在了MySQL数据库中。
import pyarrow.parquet as pq
import pandas as pd
# 打开Parquet文件
parquet_file = pq.ParquetFile('train-00000-of-00001.parquet')
# 读取数据并转换为pandas DataFrame
data = parquet_file.read().to_pandas()
print(type(data))
# 显示前几行数据
print(data.head())
print(data.iloc[0])
print(len(data))
发现是一个有209164行的数据,表头分别为query、pos 和neg。
query最大长度2170,pos最大长度为114580,neg的最大长度为114580,为表。
到此,我就不知道这个数据集是用来干嘛的了。
1.2code文件夹
code文件夹下有2个子文件夹,分别是Eureka_SBERT和Eureka_SimCSE。
Eureka_SBERT文件夹下的run_sbert.sh脚本主要是调用train.py来训练模型。
传递的数据集路径是/Eureka/eureka_sup_dataset,跟datase中设定的Johnnyfans/medeureka_sup_train路径并不一样。目前,我也没搞清楚训练数据集是从哪里获取的。
没有训练数据集,code文件夹下的训练代码是跑不起来的。
Eureka_SimCSE文件夹下的情况类似,就不赘述。
1.3eval文件夹
毫无疑问,这个文件夹就是在执行评估的了。
里面有usage.py(通过usage.ipynb转换得到)和Toolkit.py。
第33行代码是加载数据集
eureka_unsup = load_from_disk('./dataset/eureka_unsup_dataset')
同样,也没有找到。
现在看来,是作者没有在git上完整上传所需的数据。