如何从BinaryClassificationEvaluator评估结果中提取误分类标签并生成混淆矩阵?
Sentence Transformers:误分类提取与混淆矩阵生成方案
核心逻辑说明
不用额外调用encode()重新计算,BinaryClassificationEvaluator在评估时已经自动生成包含真实标签、预测标签、相似度得分的CSV文件。默认规则是:以余弦相似度×100作为得分,阈值设为50——得分≥50预测为1(相似),<50预测为0(不相似),和你预想的判定逻辑一致。
一、提取误分类样本
- 找到评估生成的CSV文件(默认命名是
dev_sample_evaluation_results.csv,文件名里的dev_sample对应你设置的name参数值) - 用以下代码筛选并导出误分类样本:
import pandas as pd # 读取评估结果文件 eval_result_df = pd.read_csv(f"{cwd}/dev_sample_evaluation_results.csv") # 筛选真实标签和预测标签不一致的行 misclassified_df = eval_result_df[eval_result_df['gold_label'] != eval_result_df['prediction']] # 关联原数据集的句子内容(确保原df和评估结果的行顺序完全一致) misclassified_full = pd.concat([df, misclassified_df], axis=1).dropna(subset=['gold_label']) # 保存误分类样本到文件 misclassified_full.to_csv(f"{cwd}/misclassified_samples.csv", index=False)
二、生成混淆矩阵
借助sklearn的工具快速生成,代码如下:
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay import matplotlib.pyplot as plt # 从评估结果中提取真实标签和预测标签 y_true = eval_result_df['gold_label'] y_pred = eval_result_df['prediction'] # 计算混淆矩阵 cm = confusion_matrix(y_true, y_pred) # 可视化并保存(可选) disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=['不相似(0)', '相似(1)']) disp.plot(cmap=plt.cm.Blues) plt.savefig(f"{cwd}/confusion_matrix.png") plt.show()
自定义阈值的处理(可选)
如果不想用默认的50作为阈值,可基于CSV里的score列重新计算预测标签:
# 示例:设置阈值为45 custom_threshold = 45 eval_result_df['custom_pred'] = (eval_result_df['score'] >= custom_threshold).astype(int) # 之后用custom_pred替代y_pred即可生成对应混淆矩阵
内容的提问来源于stack exchange,提问作者Jonathan Lam
相关产品推荐
相关产品推荐

