Fingerpoint Detector
原理

排名与校准

频率排名和位置/顺序判别各占一半,决定候选顺序;温度 softmax 给出参考库内的置信度。

排名器

排名器对参考库中的每个模型计算两组分数:频率排名 ff 和位置/顺序判别 qq。每组分数先在候选之间标准化,再各取一半相加:

s=0.5 z(f)+0.5 z(q),f=0.5 zLDA+0.25 zkNN+0.25 zcentroids = 0.5\, z(f) + 0.5\, z(q), \qquad f = 0.5\, z_{\text{LDA}} + 0.25\, z_{\text{kNN}} + 0.25\, z_{\text{centroid}}

频率排名 ff 由三项分数组成:

  • LDA:对前 128 个整数的特征做线性判别投影,多条回答取平均。
  • 近邻:取与该模型参考回答最近的 7 个平方距离的平均值,多条回答取中位数。
  • 去干扰中心:提示环境会让同一模型的分布整体偏移。建库时,SVD 从各环境的均值偏移中估计至多 2 维的干扰子空间;评分时先投影掉该子空间,再计算与各模型中心的余弦相似度。位置分段特征还会与各环境下的模型模板比较。

位置/顺序判别 qq 是收缩系数为 0.5 的 LDA,使用 4 块共 751 维特征:

特征块维数权重内容
数值分布3550.6与频率排名相同的 Hellinger 嵌入
位置与末位740.15与频率排名相同的分段分布
位置核1020.12524 个数值 RBF 与 10 个末位指示,分别乘以 3 个相对位置多项式后取平均,描述某类数字更常出现在开头、中间还是结尾
序列2200.1258 种滞后下的相关、跳幅与相等比例;8 个取值区间的转移矩阵和末位转移矩阵(去掉边际);涨跌延续;短窗口内的区间覆盖率

每块特征分别标准化并单位化,再按权重拼接。每条回答的判别值先在候选之间标准化,多条回答再取平均。

排名分数 ss 决定候选顺序。两组分数的权重和收缩系数由参考库按环境留一交叉验证选定,固定评估集不参与选择。

置信度校准

置信度只在三条回答都有效、且 data/shared_detector.bin 中的校准与检测器匹配时计算。它是参考库内的温度 softmax:

pk=exp⁡(τsk)∑jexp⁡(τsj)p_k = \frac{\exp(\tau s_k)}{\sum_j \exp(\tau s_j)}

fpd retrain 离线拟合温度 τ\tau:先逐一留出 12 种环境,再两两留出,共重新拟合 78 次排名器,用留出结果估计 τ\tau。嵌套留出的二元 NLL 必须低于常数基线,且 AUC 必须大于 0.75;否则,重训不替换现有检测器。pkp_k 只在参考库模型之间分配,所有候选合计 100%,不包括库外模型,不代表“确实是该模型”的概率。校准与检测器不匹配时,只给出排名,没有置信度。

参考库与检测器

文件内容
data/unified_reference.jsonl参考批次,每行包含模型、渠道、请求参数和回答
data/unified_bank.json由参考批次派生的统计库
data/shared_detector.bin冻结的排名器和校准参数(二进制),用 SHA-256 绑定参考数据;CLI 与网站都通过 shared/detector-codec.ts 解码
data/enrollment-suite.json36 道固定采样挑战

如果参考库与检测器不匹配(例如用 --bank 指定自定义库),检测报错停止,需要先运行 fpd retrain --data-dir DIR。数据文件的格式与变更记录见数据文件。

最后更新于

本页目录