| /** | |
| * 惊讶度与信息量的数学基础模块。 | |
| * 颜色映射相关常量见 {@link SurprisalColorConfig}。 | |
| */ | |
| /** | |
| * 零信心概率基准 p₀:surprisal log₂(1/p₀) 视作单 token 的绝对信息量参照。 | |
| * 超过此值视为模型已无法有效预测,各处可视化统一在此封顶。 | |
| * 此处为 18 bit,大致对应模型的词表大小256K时的平均token概率。 | |
| */ | |
| export const ZERO_CONFIDENCE_PROBABILITY_BASELINE = 2 ** -18; | |
| /** 与 p₀ 对应的参照 surprisal 上界(bit);同时作为 token 着色标尺上限。 */ | |
| export const REFERENCE_MAX_SURPRISAL_BITS = Math.log2(1 / ZERO_CONFIDENCE_PROBABILITY_BASELINE); | |
| /** | |
| * 全信心概率阈值 p₁(3 bit,p > 1/8):surprisal 足够低时视为充分自信、DAG 传导节点(非信息来源)。 | |
| * | |
| * 硬截断仅经本文件三个 `dag*` 函数进入 Generate & Attribute DAG: | |
| * - {@link dagCiVisualScaleFromTargetProb} → `genAttributeDagView`:生成节点框/标签不放大(1×) | |
| * - {@link dagStepDownEffectiveCiRatio} → `genAttributeDagViewLinearArcMode`:`linear-arc-step-down` 无竖直台阶 | |
| * - {@link dagPropagationMiRatio} → `genAttributeDagView` `nodePropagationMiRatio`:递归链满额传导、无 stay 描边 | |
| * | |
| * 不用于 tooltip 与边上的 CI/MI 展示(仍 {@link computeMutualInformationRatio} / {@link computeConditionalInformationRatio})。 | |
| */ | |
| export const FULL_CONFIDENCE_PROBABILITY_BASELINE = 2 ** -3; | |
| /** 与 p₁ 对应的 surprisal 上界(bit);surprisal ≤ 此值即满足「充分自信」截断条件。 */ | |
| export const REFERENCE_NO_SURPRISAL_BITS = Math.log2(1 / FULL_CONFIDENCE_PROBABILITY_BASELINE); | |
| function clamp01(n: number): number { | |
| return Math.min(1, Math.max(0, n)); | |
| } | |
| /** | |
| * 互信息率 α:在参照熵 log₂(1/p₀) 下,将「前文与目标 token 的可对齐程度」 | |
| * (log₂(1/p₀) − log₂(1/p)) / log₂(1/p₀) = log₂(p/p₀) / log₂(1/p₀) clamp 到 [0,1]。 | |
| * 低 surprisal → 高 α;仅用于本步入边透明度,不参与边筛选。缺省 `target_prob` 时返回 1(兼容旧缓存)。 | |
| */ | |
| export function computeMutualInformationRatio(targetProb: number | undefined): number { | |
| if (targetProb === undefined) return 1; | |
| if (!Number.isFinite(targetProb) || targetProb <= 0) return 0; | |
| return clamp01( | |
| Math.log2(targetProb / ZERO_CONFIDENCE_PROBABILITY_BASELINE) / REFERENCE_MAX_SURPRISAL_BITS | |
| ); | |
| } | |
| /** | |
| * 条件信息量比率 CI:surprisal/max = (−log₂ p) / log₂(1/p₀) clamp 到 [0,1], | |
| * 与 {@link computeMutualInformationRatio} 对称(同 p 下 CI + MI = 1)。 | |
| * 缺省 `target_prob` 时返回 0;非法或 p≤0 时返回 1。 | |
| */ | |
| export function computeConditionalInformationRatio(targetProb: number | undefined): number { | |
| if (targetProb === undefined) return 0; | |
| if (!Number.isFinite(targetProb) || targetProb <= 0) return 1; | |
| return clamp01(-Math.log2(targetProb) / REFERENCE_MAX_SURPRISAL_BITS); | |
| } | |
| /** | |
| * DAG 生成节点 CI 视觉缩放倍数(约 `[1, 2]`):语义为 `1 +` 有效 CI。 | |
| * `ciVisualScaleEnabled === false` 或 `p > {@link FULL_CONFIDENCE_PROBABILITY_BASELINE}` 时为 `1×`; | |
| * 否则为 `1 + {@link computeConditionalInformationRatio}(p)`。 | |
| */ | |
| export function dagCiVisualScaleFromTargetProb( | |
| targetProb: number | undefined, | |
| ciVisualScaleEnabled: boolean | |
| ): number { | |
| if (!ciVisualScaleEnabled) return 1; | |
| if (targetProb !== undefined && Number.isFinite(targetProb) && targetProb > FULL_CONFIDENCE_PROBABILITY_BASELINE) { | |
| return 1; | |
| } | |
| return 1 + computeConditionalInformationRatio(targetProb); | |
| } | |
| /** | |
| * 仅用于 DAG「下台阶」布局的有效 CI(`[0,1]`):与 {@link computeConditionalInformationRatio} 同源, | |
| * 但 `p > {@link FULL_CONFIDENCE_PROBABILITY_BASELINE}` 时为 0(与节点「高置信 1×」截断一致)。 | |
| * | |
| * 不受「关闭 CI 视觉放大」开关影响——该开关只缩节点框,不应关掉按不确定度的竖直落差。 | |
| */ | |
| export function dagStepDownEffectiveCiRatio(targetProb: number | undefined): number { | |
| if (targetProb !== undefined && Number.isFinite(targetProb) && targetProb > FULL_CONFIDENCE_PROBABILITY_BASELINE) { | |
| return 0; | |
| } | |
| return computeConditionalInformationRatio(targetProb); | |
| } | |
| /** | |
| * DAG 递归归因链的传导系数(`[0,1]`):与 {@link computeMutualInformationRatio} 同源, | |
| * 但 `p > {@link FULL_CONFIDENCE_PROBABILITY_BASELINE}` 时截断为 1(纯传导,不衰减预算、不留 stay)。 | |
| * 与节点视觉(不放大)、下台阶(不下沉)的「充分自信」语义保持一致。 | |
| */ | |
| export function dagPropagationMiRatio(targetProb: number | undefined): number { | |
| if (targetProb !== undefined && Number.isFinite(targetProb) && targetProb > FULL_CONFIDENCE_PROBABILITY_BASELINE) { | |
| return 1; | |
| } | |
| return computeMutualInformationRatio(targetProb); | |
| } | |