Upload bayesian_engine.py with huggingface_hub
Browse files- bayesian_engine.py +15 -1
bayesian_engine.py
CHANGED
|
@@ -76,13 +76,26 @@ def sigmoid(x: float) -> float:
|
|
| 76 |
return ez / (1.0 + ez)
|
| 77 |
|
| 78 |
|
| 79 |
-
|
|
|
|
|
|
|
|
|
|
| 80 |
"""
|
| 81 |
Compute P(evidence | Fake) and P(evidence | Real) for one agent.
|
| 82 |
|
| 83 |
From paper Eq. 1:
|
| 84 |
P(e_i | Fake, r_i, c_i) = r_i 路 sigmoid(s_i 路 c_i) + (1 - r_i) 路 0.5
|
|
|
|
|
|
|
|
|
|
| 85 |
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
l_fake = reliability * sigmoid(score * confidence * 5.0) + (1 - reliability) * 0.5
|
| 87 |
l_real = reliability * sigmoid(-score * confidence * 5.0) + (1 - reliability) * 0.5
|
| 88 |
return l_fake, l_real
|
|
@@ -213,6 +226,7 @@ def bayesian_synthesis(agent_results: List[AgentEvidence]) -> ForensicVerdict:
|
|
| 213 |
evidence.violation_score,
|
| 214 |
evidence.confidence,
|
| 215 |
effective_reliability,
|
|
|
|
| 216 |
)
|
| 217 |
|
| 218 |
likelihoods.append((l_fake, l_real))
|
|
|
|
| 76 |
return ez / (1.0 + ez)
|
| 77 |
|
| 78 |
|
| 79 |
+
VLM_AGENT_NAMES = {"Semantic Consistency Agent", "Text & Typography Agent"}
|
| 80 |
+
|
| 81 |
+
def compute_likelihood(score: float, confidence: float, reliability: float,
|
| 82 |
+
is_vlm_agent: bool = False) -> Tuple[float, float]:
|
| 83 |
"""
|
| 84 |
Compute P(evidence | Fake) and P(evidence | Real) for one agent.
|
| 85 |
|
| 86 |
From paper Eq. 1:
|
| 87 |
P(e_i | Fake, r_i, c_i) = r_i 路 sigmoid(s_i 路 c_i) + (1 - r_i) 路 0.5
|
| 88 |
+
|
| 89 |
+
For VLM agents: applies additional confidence compression because
|
| 90 |
+
VLMs systematically overstate confidence (see review feedback).
|
| 91 |
"""
|
| 92 |
+
if is_vlm_agent:
|
| 93 |
+
# Temperature-scale VLM confidence to prevent Eq.1 corruption
|
| 94 |
+
# This compresses extreme VLM confidence values toward 0.5
|
| 95 |
+
if 0 < confidence < 1:
|
| 96 |
+
logit = np.log(confidence / (1 - confidence))
|
| 97 |
+
confidence = float(sigmoid(logit / 2.0)) # 蟿=2.0
|
| 98 |
+
|
| 99 |
l_fake = reliability * sigmoid(score * confidence * 5.0) + (1 - reliability) * 0.5
|
| 100 |
l_real = reliability * sigmoid(-score * confidence * 5.0) + (1 - reliability) * 0.5
|
| 101 |
return l_fake, l_real
|
|
|
|
| 226 |
evidence.violation_score,
|
| 227 |
evidence.confidence,
|
| 228 |
effective_reliability,
|
| 229 |
+
is_vlm_agent=evidence.agent_name in VLM_AGENT_NAMES,
|
| 230 |
)
|
| 231 |
|
| 232 |
likelihoods.append((l_fake, l_real))
|