Tiered corroboration: origins, pickups and depth scored separately
Connor's point: "several outlets carried this" covers situations that carry
different amounts of information, and origin_count() flattened them all to one
number. Splitting on same/different newsroom and same/different text gives four
cases:
same newsroom, same text -> pure duplicate (BBC World + BBC top). Zero
signal; the front-page placement it does carry is
already captured by sources.prominence.
same newsroom, diff text -> DEPTH. A newsroom filing four pieces on one story
is a real editorial judgement, previously
discarded entirely.
diff newsroom, same text -> PICKUPS. Syndicated copy; each carrier chose to
run it. Weak but non-zero.
diff newsroom, diff text -> ORIGINS. Independent judgement and independent
newsgathering. Strongest.
score = origins + 0.3*log1p(pickups) + 0.2*log1p(depth), weights in config.
Origins stay dominant; the others break ties among the many two- and
three-origin clusters, and log damping stops a high-volume feed inflating depth.
Measuring first changed the design. Depth outnumbers pickups 78 to 11 across 91
real clusters, because these sources are mostly national outlets writing their
own copy rather than local papers running wire -- so the more valuable half was
the one not originally proposed. UK settlements scores 10.55 from 10 origins
plus 15 same-newsroom pieces; AfD scores 5.55 from 5 origins plus 15.
Tests assert the four-case ordering directly, and that twenty pieces from one
newsroom still rank below two independent ones. Both needed a helper generating
vectors with exact pairwise cosine: the band between the 0.82 clustering
threshold and the 0.97 syndication threshold is narrow, and two earlier drafts
of these tests used ad-hoc vectors that fell outside it and asserted nothing.
This commit is contained in:
1 parent
d57b9e092c
commit
a2c812794d
5 files changed
+230
-46
No files matched your search
@@ -57,3 +57,13 @@ normalize = "zscore-per-block"
|
||||
# similarity OR when the veto signal beats the best interest signal by a margin.
|
||||
veto_absolute = 0.60
|
||||
veto_margin_over_interest = 0.3
|
||||
|
||||
# Corroboration = origins + pickup_weight*log1p(pickups) + depth_weight*log1p(depth).
|
||||
# "Several outlets carried this" covers four different situations; see
|
||||
# news/cluster.py:Corroboration. Origins (independent newsrooms doing their own
|
||||
# reporting) dominate; the other two break ties among the many two- and
|
||||
# three-origin clusters. Measured on a real corpus: 163 origins, 90 depth,
|
||||
# 11 pickups -- depth matters far more here because these sources mostly write
|
||||
# their own copy. Raise pickup_weight if you add local papers running wire.
|
||||
corroboration_pickup_weight = 0.3
|
||||
corroboration_depth_weight = 0.2
|
||||
Reference in new issue
Block a user