问题出现得很突然,日志倒是留得挺全。ragas 0.2 跑 context_recall,数据集里只有 question answer contexts 三列,指标返回 NaN,日志提示需要 reference 字段,补上之后分数才出来。
刚开始盯着「空字符串被当成缺失值跳过」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。context_recall 依赖参考答案做比对。也可能是0.2 版本把列名统一成了 reference。
不容易想到的是,数据集用 pandas 读入时列类型不对。
上来先把数据集的列名与类型打出来
python -c "import pandas as pd;d=pd.read_json('ds.json');print(d.columns.tolist(), d.dtypes.to_dict())"
补上 reference 列并去掉空值
python -c "import pandas as pd;d=pd.read_json('ds.json');d=d.dropna(subset=['reference']);print(len(d))"
再往下按新列名重跑指标
python -c "from ragas import evaluate;print('run with reference column')"
等前面都确认过,再核对每条样本的 reference 是否真的有内容
python -c "import pandas as pd;print(pd.read_json('ds.json')['reference'].str.len().min())"
手上没有现成的复现脚本,就照着线上请求手工拼了一个。
怎么算真的好了,看的是同一批现象。指标返回 0 到 1 之间的数值,NaN 条数为 0,样本数与输入一致。
先确认指标需要哪些列再准备数据,ragas 各版本列名变过好几次,报 NaN 时先看列而不是看模型。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
