You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python统计对比二分类相似度标识列的差异

二值相似度指标统计对比实现方案

你可以从以下几个维度落地分析,所有代码基于你给出的DataFrame结构实现:

  • 基础占比统计
    直接计算各方法判定为相似(取值为1)的样本占总样本的比例,快速了解不同方法的松紧程度:

    sim_cols = ["cos_sim", "jac_sim", "sentrf_sim", "gensim_sim"]
    # 计算1的占比,等价于列均值
    sim_positive_rate = df[sim_cols].mean().rename("positive_rate").reset_index()
    print(sim_positive_rate)
    # 也可以输出完整描述统计
    print(df[sim_cols].describe())
    

    输出结果中占比越高,说明该方法越容易把两个句子判定为相似。

  • 两两方法一致性对比
    计算不同方法判定结果的匹配度,判断哪些方法的判定逻辑更接近:

    # 1. 两两匹配率:取值相同的样本占总样本的比例
    pairwise_agreement = pd.DataFrame(index=sim_cols, columns=sim_cols)
    for col1 in sim_cols:
        for col2 in sim_cols:
            pairwise_agreement.loc[col1, col2] = (df[col1] == df[col2]).mean()
    print(pairwise_agreement)
    
    # 2. 交叉表看具体分歧分布,示例为cos_sim和jac_sim的对比
    print(pd.crosstab(df["cos_sim"], df["jac_sim"], rownames=["cos_sim"], colnames=["jac_sim"]))
    
  • 多方法投票分布统计
    统计每个样本被多少个方法判定为相似,看整体分歧情况:

    df["vote_count"] = df[sim_cols].sum(axis=1)
    # 统计不同投票数的样本占比
    vote_dist = df["vote_count"].value_counts(normalize=True).sort_index()
    print(vote_dist)
    # 筛选全一致的样本:要么所有方法都判1,要么都判0
    full_agreement = df[(df["vote_count"] == 0) | (df["vote_count"] == len(sim_cols))]
    # 筛选分歧大的样本:不同方法判定结果差异大
    high_disagreement = df[(df["vote_count"] > 0) & (df["vote_count"] < len(sim_cols))]
    
  • 分场景效果验证
    如果你有真实的相似度人工标注,可以进一步计算每个方法的准确率、召回率、F1值;没有标注的话可以拉取分歧大的样本人工核验,判断不同方法的适用场景:

    # 假设已有真实标注列label,取值同样为0/1
    # from sklearn.metrics import f1_score
    # for col in sim_cols:
    #     print(f"{col} F1值: {f1_score(df['label'], df[col]):.3f}")
    

内容的提问来源于stack exchange,提问作者Nishant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:09:03