nickypro commited on
Commit
4a04a38
·
verified ·
1 Parent(s): b72ec31

Upload folder using huggingface_hub

Browse files
sieve_bench/LEADERBOARD.md CHANGED
@@ -12,30 +12,29 @@ Mean `score_vs_baseline` over the SAME set of CORE readout tasks that EVERY eval
12
 
13
  **All-audit-pass intersection (5): t01_lexical_bag, t05_position_order, t08_length_generalization, t13_sae_monosemanticity, t19_crosslingual_readout**
14
 
15
- **LIVE intersection — genuinely discriminating, cross-encoder svb std≥0.02 (4): t01_lexical_bag, t05_position_order, t13_sae_monosemanticity, t19_crosslingual_readout**
16
 
17
  CONSTANT / saturated / non-comparative tasks (≈1.0 for every encoder, or a fixed external grid) are kept in the all-pass column for continuity but are **excluded from the LIVE-task Δ** because they carry no ranking signal. The LIVE-task Δ is the honest comparative headline.
18
 
19
  | Encoder | Δ (LIVE tasks, ↑) | Δ (all-pass) | effective_n LIVE / all |
20
  |---|---|---|---|
21
- | sonar | 0.770 | 0.816 | 4 / 5 |
22
- | st-LaBSE-mean | 0.706 | 0.765 | 4 / 5 |
23
- | st-all-mpnet-base-v2-mean | 0.704 | 0.763 | 4 / 5 |
24
- | st-bert-base-uncased-mean | 0.671 | 0.737 | 4 / 5 |
25
- | st-e5-base-v2-mean | 0.723 | 0.778 | 4 / 5 |
26
- | st-e5-large-v2-mean | 0.684 | 0.747 | 4 / 5 |
27
- | st-e5-small-v2-mean | 0.677 | 0.741 | 4 / 5 |
28
- | st-gte-large-mean | 0.724 | 0.779 | 4 / 5 |
29
- | static-average_word_embeddings_glove.6B.300d | 0.416 | 0.530 | 4 / 5 |
30
 
31
- **LIVE-task ranking:** sonar 0.770 > gte-large 0.724 > e5-base-v2 0.723 > LaBSE 0.706 > all-mpnet-base-v2 0.704 > e5-large-v2 0.684 > e5-small-v2 0.677 > bert-base-uncased 0.671 > static-average_word_embeddings_glove.6B.300d 0.416
32
 
33
- **LIVE-task spread (max−min) = 0.354.** Lead of top over 2nd = 0.046 (INSIDE the spread).
34
 
35
  ### Tasks in the all-pass set but EXCLUDED from the LIVE Δ (constants / non-comparative)
36
 
37
  - **t07_meaning_coverage**: flagged non_comparative (fixed external grid / not encoder-specific) — no cross-encoder ranking signal
38
- - **t08_length_generalization**: cross-encoder svb std=0.005 < 0.02 (saturated/constant — no ranking signal)
39
  - **t21_encoder_pooling_generality**: flagged non_comparative (fixed external grid / not encoder-specific) — no cross-encoder ranking signal
40
 
41
  ### Tasks excluded from the intersection (not all-encoder / not all-pass)
@@ -74,7 +73,7 @@ Cell = score, with an audit flag: `✓` audit-PASS, `✗` audit-FAIL, `·` skipp
74
  | t04_negation_scope | core | 1.000✗ | 1.000✗ | 1.000✗ | 1.000✗ | 1.000✗ | 1.000✗ | 1.000✗ | 1.000✗ | 1.000✗ |
75
  | t05_position_order * | core | 0.840✓ | 0.667✓ | 0.660✓ | 0.798✓ | 0.694✓ | 0.531✓ | 0.512✓ | 0.628✓ | 0.091✓ |
76
  | t07_meaning_coverage | core | 0.014✗ | · | · | · | · | · | · | · | · |
77
- | t08_length_generalization * | core | 1.000✓ | 1.000✓ | 1.000✓ | 1.000✓ | 1.000✓ | 1.000✓ | 1.000✓ | 1.000✓ | 0.992✓ |
78
  | t11_position_unrotation | core | 0.000✗ | 0.000✗ | 0.000✗ | 0.000✓ | 0.000✓ | 0.000✗ | 0.000✓ | 0.000✗ | 0.000✓ |
79
  | t13_sae_monosemanticity * | core | 0.844✓ | 0.683✓ | 0.960✓ | 0.918✓ | 0.859✓ | 0.820✓ | 0.818✓ | 0.963✓ | 0.767✓ |
80
  | t14_capacity_law | core | 0.416✓(probe) | 0.000✗(probe) | -0.615✗(probe) | 0.000✗(probe) | 0.000✗(probe) | 0.000✗(probe) | 0.000✗(probe) | 0.000✗(probe) | 0.000✗(probe) |
@@ -177,7 +176,6 @@ Raw bag_cos OVERSTATES additivity (a #-matched RANDOM-word bag already explains
177
  | t04_negation_scope | A | core | sonar | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
178
  | t05_position_order | A | core | sonar | 0.840 | -0.014 | - | - | 1.000 | 0.842 | PASS | - |
179
  | t07_meaning_coverage | A | core | sonar | 0.014 | 0.000 | 0.000 | - | 1.000 | 0.014 | FAIL(NOT-z-specific; DEGENERATE) | - |
180
- | t08_length_generalization | A | core | sonar | 1.000 | 0.500 | 0.000 | 0.000 | 1.000 | 1.000 | PASS | - |
181
  | t11_position_unrotation | B | core | sonar | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
182
  | t13_sae_monosemanticity | B | core | sonar | 0.844 | 0.073 | - | - | 1.000 | 0.832 | PASS | - |
183
  | t14_capacity_law | B | core | sonar | 0.901 | 0.000 | - | - | 1.000 | 0.901 | PASS | 0.930 |
@@ -190,12 +188,12 @@ Raw bag_cos OVERSTATES additivity (a #-matched RANDOM-word bag already explains
190
  | t22_word_edit | D | gene | sonar | 1.000 | 1.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
191
  | t23_edit_sentence_2of3 | D | gene | sonar | 0.619 | 0.469 | - | - | 1.000 | 0.282 | PASS | - |
192
  | t25_concept_injection_recovery | D | gene | sonar | 0.744 | 0.787 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
 
193
  | t01_lexical_bag | A | core | st-LaBSE-mean | 0.502 | 0.000 | 1.000 | 0.182 | 1.000 | 0.502 | PASS | - |
194
  | t02_number_exact | A | core | st-LaBSE-mean | 0.000 | 0.000 | 0.635 | 0.285 | 1.000 | 0.000 | FAIL(NOT-z-specific; NOT-z-specific; DEGENERATE) | 0.990 |
195
  | t03_entity_presence | A | core | st-LaBSE-mean | 1.000 | 0.500 | 1.000 | 0.876 | 1.000 | 1.000 | FAIL(NOT-z-specific) | 1.000 |
196
  | t04_negation_scope | A | core | st-LaBSE-mean | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
197
  | t05_position_order | A | core | st-LaBSE-mean | 0.667 | 0.006 | - | - | 1.000 | 0.665 | PASS | - |
198
- | t08_length_generalization | A | core | st-LaBSE-mean | 1.000 | 0.500 | 0.000 | 0.000 | 1.000 | 1.000 | PASS | - |
199
  | t11_position_unrotation | B | core | st-LaBSE-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
200
  | t13_sae_monosemanticity | B | core | st-LaBSE-mean | 0.683 | 0.076 | - | - | 1.000 | 0.657 | PASS | - |
201
  | t14_capacity_law | B | core | st-LaBSE-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
@@ -203,12 +201,12 @@ Raw bag_cos OVERSTATES additivity (a #-matched RANDOM-word bag already explains
203
  | t19_crosslingual_readout | E | core | st-LaBSE-mean | 1.000 | 0.500 | - | - | 1.000 | 1.000 | PASS | 1.000 |
204
  | t21_encoder_pooling_generality | E | core | st-LaBSE-mean | 0.500 | 0.333 | - | - | 1.000 | 0.250 | PASS | 1.000 |
205
  | t25_concept_injection_recovery | D | gene | st-LaBSE-mean | 0.846 | 0.706 | - | - | 1.000 | 0.477 | PASS | - |
 
206
  | t01_lexical_bag | A | core | st-all-mpnet-base-v2-mean | 0.263 | 0.000 | 1.000 | 0.182 | 1.000 | 0.263 | PASS | - |
207
  | t02_number_exact | A | core | st-all-mpnet-base-v2-mean | 0.000 | 0.000 | 0.635 | 0.285 | 1.000 | 0.000 | FAIL(NOT-z-specific; NOT-z-specific; DEGENERATE) | 0.990 |
208
  | t03_entity_presence | A | core | st-all-mpnet-base-v2-mean | 1.000 | 0.500 | 1.000 | 0.876 | 1.000 | 1.000 | FAIL(NOT-z-specific) | 1.000 |
209
  | t04_negation_scope | A | core | st-all-mpnet-base-v2-mean | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
210
  | t05_position_order | A | core | st-all-mpnet-base-v2-mean | 0.660 | -0.005 | - | - | 1.000 | 0.661 | PASS | - |
211
- | t08_length_generalization | A | core | st-all-mpnet-base-v2-mean | 1.000 | 0.500 | 0.000 | 0.000 | 1.000 | 1.000 | PASS | - |
212
  | t11_position_unrotation | B | core | st-all-mpnet-base-v2-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
213
  | t13_sae_monosemanticity | B | core | st-all-mpnet-base-v2-mean | 0.960 | 0.081 | - | - | 1.000 | 0.957 | PASS | - |
214
  | t14_capacity_law | B | core | st-all-mpnet-base-v2-mean | -0.615 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
@@ -216,34 +214,34 @@ Raw bag_cos OVERSTATES additivity (a #-matched RANDOM-word bag already explains
216
  | t19_crosslingual_readout | E | core | st-all-mpnet-base-v2-mean | 0.966 | 0.500 | - | - | 1.000 | 0.933 | PASS | 1.000 |
217
  | t21_encoder_pooling_generality | E | core | st-all-mpnet-base-v2-mean | 0.400 | 0.333 | - | - | 1.000 | 0.100 | PASS | 1.000 |
218
  | t25_concept_injection_recovery | D | gene | st-all-mpnet-base-v2-mean | 0.800 | 0.817 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
 
219
  | t01_lexical_bag | A | core | st-bert-base-uncased-mean | 0.364 | 0.000 | 1.000 | 0.226 | 1.000 | 0.364 | PASS | - |
220
  | t02_number_exact | A | core | st-bert-base-uncased-mean | 0.000 | 0.000 | 0.635 | 0.285 | 1.000 | 0.000 | FAIL(NOT-z-specific; NOT-z-specific; DEGENERATE) | 0.990 |
221
  | t03_entity_presence | A | core | st-bert-base-uncased-mean | 0.990 | 0.500 | 1.000 | 0.876 | 1.000 | 0.980 | FAIL(NOT-z-specific) | 1.000 |
222
  | t04_negation_scope | A | core | st-bert-base-uncased-mean | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
223
  | t05_position_order | A | core | st-bert-base-uncased-mean | 0.798 | -0.024 | - | - | 1.000 | 0.803 | PASS | - |
224
- | t08_length_generalization | A | core | st-bert-base-uncased-mean | 1.000 | 0.500 | 0.000 | 0.000 | 1.000 | 1.000 | PASS | - |
225
  | t13_sae_monosemanticity | B | core | st-bert-base-uncased-mean | 0.918 | 0.080 | - | - | 1.000 | 0.911 | PASS | - |
226
  | t14_capacity_law | B | core | st-bert-base-uncased-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
227
  | t19_crosslingual_readout | E | core | st-bert-base-uncased-mean | 0.803 | 0.500 | - | - | 1.000 | 0.607 | PASS | 1.000 |
228
  | t21_encoder_pooling_generality | E | core | st-bert-base-uncased-mean | 1.000 | 0.333 | - | - | 1.000 | 1.000 | PASS | 1.000 |
229
  | t25_concept_injection_recovery | D | gene | st-bert-base-uncased-mean | 0.817 | 0.589 | - | - | 1.000 | 0.555 | PASS | - |
 
230
  | t01_lexical_bag | A | core | st-e5-base-v2-mean | 0.381 | 0.000 | 1.000 | 0.226 | 1.000 | 0.381 | PASS | - |
231
  | t02_number_exact | A | core | st-e5-base-v2-mean | 0.000 | 0.000 | 0.635 | 0.285 | 1.000 | 0.000 | FAIL(NOT-z-specific; NOT-z-specific; DEGENERATE) | 0.990 |
232
  | t03_entity_presence | A | core | st-e5-base-v2-mean | 1.000 | 0.500 | 1.000 | 0.876 | 1.000 | 1.000 | FAIL(NOT-z-specific) | 1.000 |
233
  | t04_negation_scope | A | core | st-e5-base-v2-mean | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
234
  | t05_position_order | A | core | st-e5-base-v2-mean | 0.694 | -0.024 | - | - | 1.000 | 0.701 | PASS | - |
235
- | t08_length_generalization | A | core | st-e5-base-v2-mean | 1.000 | 0.500 | 0.000 | 0.000 | 1.000 | 1.000 | PASS | - |
236
  | t13_sae_monosemanticity | B | core | st-e5-base-v2-mean | 0.859 | 0.079 | - | - | 1.000 | 0.846 | PASS | - |
237
  | t14_capacity_law | B | core | st-e5-base-v2-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
238
  | t19_crosslingual_readout | E | core | st-e5-base-v2-mean | 0.981 | 0.500 | - | - | 1.000 | 0.962 | PASS | 1.000 |
239
  | t21_encoder_pooling_generality | E | core | st-e5-base-v2-mean | 1.000 | 0.333 | - | - | 1.000 | 1.000 | PASS | 1.000 |
240
  | t25_concept_injection_recovery | D | gene | st-e5-base-v2-mean | 0.884 | 0.593 | - | - | 1.000 | 0.714 | PASS | - |
 
241
  | t01_lexical_bag | A | core | st-e5-large-v2-mean | 0.403 | 0.000 | 1.000 | 0.182 | 1.000 | 0.403 | PASS | - |
242
  | t02_number_exact | A | core | st-e5-large-v2-mean | 0.113 | 0.000 | 0.635 | 0.285 | 1.000 | 0.113 | FAIL(NOT-z-specific; NOT-z-specific) | 0.990 |
243
  | t03_entity_presence | A | core | st-e5-large-v2-mean | 1.000 | 0.500 | 1.000 | 0.876 | 1.000 | 1.000 | FAIL(NOT-z-specific) | 1.000 |
244
  | t04_negation_scope | A | core | st-e5-large-v2-mean | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
245
  | t05_position_order | A | core | st-e5-large-v2-mean | 0.531 | -0.005 | - | - | 1.000 | 0.533 | PASS | - |
246
- | t08_length_generalization | A | core | st-e5-large-v2-mean | 1.000 | 0.500 | 0.000 | 0.000 | 1.000 | 1.000 | PASS | - |
247
  | t11_position_unrotation | B | core | st-e5-large-v2-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
248
  | t13_sae_monosemanticity | B | core | st-e5-large-v2-mean | 0.820 | 0.080 | - | - | 1.000 | 0.804 | PASS | - |
249
  | t14_capacity_law | B | core | st-e5-large-v2-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
@@ -251,23 +249,23 @@ Raw bag_cos OVERSTATES additivity (a #-matched RANDOM-word bag already explains
251
  | t19_crosslingual_readout | E | core | st-e5-large-v2-mean | 0.997 | 0.500 | - | - | 1.000 | 0.994 | PASS | 1.000 |
252
  | t21_encoder_pooling_generality | E | core | st-e5-large-v2-mean | 0.500 | 0.333 | - | - | 1.000 | 0.250 | PASS | 1.000 |
253
  | t25_concept_injection_recovery | D | gene | st-e5-large-v2-mean | 0.946 | 0.641 | - | - | 1.000 | 0.851 | PASS | - |
 
254
  | t01_lexical_bag | A | core | st-e5-small-v2-mean | 0.401 | 0.000 | 1.000 | 0.226 | 1.000 | 0.401 | PASS | - |
255
  | t02_number_exact | A | core | st-e5-small-v2-mean | 0.000 | 0.000 | 0.635 | 0.285 | 1.000 | 0.000 | FAIL(NOT-z-specific; NOT-z-specific; DEGENERATE) | 0.990 |
256
  | t03_entity_presence | A | core | st-e5-small-v2-mean | 1.000 | 0.500 | 1.000 | 0.876 | 1.000 | 1.000 | FAIL(NOT-z-specific) | 1.000 |
257
  | t04_negation_scope | A | core | st-e5-small-v2-mean | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
258
  | t05_position_order | A | core | st-e5-small-v2-mean | 0.512 | -0.024 | - | - | 1.000 | 0.523 | PASS | - |
259
- | t08_length_generalization | A | core | st-e5-small-v2-mean | 1.000 | 0.500 | 0.000 | 0.000 | 1.000 | 1.000 | PASS | - |
260
  | t13_sae_monosemanticity | B | core | st-e5-small-v2-mean | 0.818 | 0.080 | - | - | 1.000 | 0.802 | PASS | - |
261
  | t14_capacity_law | B | core | st-e5-small-v2-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
262
  | t19_crosslingual_readout | E | core | st-e5-small-v2-mean | 0.990 | 0.500 | - | - | 1.000 | 0.980 | PASS | 1.000 |
263
  | t21_encoder_pooling_generality | E | core | st-e5-small-v2-mean | 1.000 | 0.333 | - | - | 1.000 | 1.000 | PASS | 1.000 |
264
  | t25_concept_injection_recovery | D | gene | st-e5-small-v2-mean | 0.871 | 0.520 | - | - | 1.000 | 0.730 | PASS | - |
 
265
  | t01_lexical_bag | A | core | st-gte-large-mean | 0.306 | 0.000 | 1.000 | 0.182 | 1.000 | 0.306 | PASS | - |
266
  | t02_number_exact | A | core | st-gte-large-mean | 0.340 | 0.000 | 0.635 | 0.285 | 1.000 | 0.340 | FAIL(NOT-z-specific) | 0.990 |
267
  | t03_entity_presence | A | core | st-gte-large-mean | 1.000 | 0.500 | 1.000 | 0.876 | 1.000 | 1.000 | FAIL(NOT-z-specific) | 1.000 |
268
  | t04_negation_scope | A | core | st-gte-large-mean | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
269
  | t05_position_order | A | core | st-gte-large-mean | 0.628 | -0.005 | - | - | 1.000 | 0.629 | PASS | - |
270
- | t08_length_generalization | A | core | st-gte-large-mean | 1.000 | 0.500 | 0.000 | 0.000 | 1.000 | 1.000 | PASS | - |
271
  | t11_position_unrotation | B | core | st-gte-large-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
272
  | t13_sae_monosemanticity | B | core | st-gte-large-mean | 0.963 | 0.080 | - | - | 1.000 | 0.960 | PASS | - |
273
  | t14_capacity_law | B | core | st-gte-large-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
@@ -275,17 +273,18 @@ Raw bag_cos OVERSTATES additivity (a #-matched RANDOM-word bag already explains
275
  | t19_crosslingual_readout | E | core | st-gte-large-mean | 1.000 | 0.500 | - | - | 1.000 | 1.000 | PASS | 1.000 |
276
  | t21_encoder_pooling_generality | E | core | st-gte-large-mean | 0.400 | 0.333 | - | - | 1.000 | 0.100 | PASS | 1.000 |
277
  | t25_concept_injection_recovery | D | gene | st-gte-large-mean | 0.894 | 0.673 | - | - | 1.000 | 0.677 | PASS | - |
 
278
  | t01_lexical_bag | A | core | static-average_word_embeddings_glove.6B.300d | 0.326 | 0.000 | 1.000 | 0.226 | 1.000 | 0.326 | PASS | - |
279
  | t02_number_exact | A | core | static-average_word_embeddings_glove.6B.300d | 0.304 | 0.000 | 0.635 | 0.285 | 1.000 | 0.304 | FAIL(NOT-z-specific; NOT-z-specific) | 0.990 |
280
  | t03_entity_presence | A | core | static-average_word_embeddings_glove.6B.300d | 1.000 | 0.500 | 1.000 | 0.876 | 1.000 | 1.000 | FAIL(NOT-z-specific) | 1.000 |
281
  | t04_negation_scope | A | core | static-average_word_embeddings_glove.6B.300d | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
282
  | t05_position_order | A | core | static-average_word_embeddings_glove.6B.300d | 0.091 | 0.004 | - | - | 1.000 | 0.088 | PASS | - |
283
- | t08_length_generalization | A | core | static-average_word_embeddings_glove.6B.300d | 0.992 | 0.500 | 0.000 | 0.000 | 1.000 | 0.984 | PASS | - |
284
  | t13_sae_monosemanticity | B | core | static-average_word_embeddings_glove.6B.300d | 0.767 | 0.086 | - | - | 1.000 | 0.745 | PASS | - |
285
  | t14_capacity_law | B | core | static-average_word_embeddings_glove.6B.300d | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
286
  | t19_crosslingual_readout | E | core | static-average_word_embeddings_glove.6B.300d | 0.690 | 0.500 | - | - | 0.875 | 0.506 | PASS | 1.000 |
287
  | t21_encoder_pooling_generality | E | core | static-average_word_embeddings_glove.6B.300d | 1.000 | 0.333 | - | - | 1.000 | 1.000 | PASS | 1.000 |
288
  | t25_concept_injection_recovery | D | gene | static-average_word_embeddings_glove.6B.300d | 0.652 | 0.510 | - | - | 1.000 | 0.291 | PASS | - |
 
289
 
290
  ## Non-OK tasks (skipped / error)
291
 
@@ -365,4 +364,4 @@ Raw bag_cos OVERSTATES additivity (a #-matched RANDOM-word bag already explains
365
  | t26_causal_identifiability | static-average_word_embeddings_glove.6B.300d | skipped | missing caps {'decode'} |
366
 
367
  ## Key finding: interpretability is MULTI-DIMENSIONAL (not a single score)
368
- Across the 9 encoders, the LIVE discriminating tasks rank encoders almost **independently** mean pairwise Spearman rank-correlation = **+0.10**. Lexical-bag readout (t01) and SAE-monosemanticity (t13) are even **anti-correlated (−0.67)**: encoders best at reading words out (LaBSE) are worst at having monosemantic features (mpnet/gte top t13), while SONAR leads order + cross-lingual but is mid on lexical. **There is no coherent single "interpretability axis"** — which is why SIEVE reports a per-axis profile + heatmap and refuses a single winner column. See `figs/sieve_multidim_interpretability.png`.
 
12
 
13
  **All-audit-pass intersection (5): t01_lexical_bag, t05_position_order, t08_length_generalization, t13_sae_monosemanticity, t19_crosslingual_readout**
14
 
15
+ **LIVE intersection — genuinely discriminating, cross-encoder svb std≥0.02 (5): t01_lexical_bag, t05_position_order, t08_length_generalization, t13_sae_monosemanticity, t19_crosslingual_readout**
16
 
17
  CONSTANT / saturated / non-comparative tasks (≈1.0 for every encoder, or a fixed external grid) are kept in the all-pass column for continuity but are **excluded from the LIVE-task Δ** because they carry no ranking signal. The LIVE-task Δ is the honest comparative headline.
18
 
19
  | Encoder | Δ (LIVE tasks, ↑) | Δ (all-pass) | effective_n LIVE / all |
20
  |---|---|---|---|
21
+ | sonar | 0.762 | 0.762 | 5 / 5 |
22
+ | st-LaBSE-mean | 0.671 | 0.671 | 5 / 5 |
23
+ | st-all-mpnet-base-v2-mean | 0.704 | 0.704 | 5 / 5 |
24
+ | st-bert-base-uncased-mean | 0.565 | 0.565 | 5 / 5 |
25
+ | st-e5-base-v2-mean | 0.690 | 0.690 | 5 / 5 |
26
+ | st-e5-large-v2-mean | 0.644 | 0.644 | 5 / 5 |
27
+ | st-e5-small-v2-mean | 0.644 | 0.644 | 5 / 5 |
28
+ | st-gte-large-mean | 0.719 | 0.719 | 5 / 5 |
29
+ | static-average_word_embeddings_glove.6B.300d | 0.346 | 0.346 | 5 / 5 |
30
 
31
+ **LIVE-task ranking:** sonar 0.762 > gte-large 0.719 > all-mpnet-base-v2 0.704 > e5-base-v2 0.690 > LaBSE 0.671 > e5-large-v2 0.644 > e5-small-v2 0.644 > bert-base-uncased 0.565 > static-average_word_embeddings_glove.6B.300d 0.346
32
 
33
+ **LIVE-task spread (max−min) = 0.416.** Lead of top over 2nd = 0.043 (INSIDE the spread).
34
 
35
  ### Tasks in the all-pass set but EXCLUDED from the LIVE Δ (constants / non-comparative)
36
 
37
  - **t07_meaning_coverage**: flagged non_comparative (fixed external grid / not encoder-specific) — no cross-encoder ranking signal
 
38
  - **t21_encoder_pooling_generality**: flagged non_comparative (fixed external grid / not encoder-specific) — no cross-encoder ranking signal
39
 
40
  ### Tasks excluded from the intersection (not all-encoder / not all-pass)
 
73
  | t04_negation_scope | core | 1.000✗ | 1.000✗ | 1.000✗ | 1.000✗ | 1.000✗ | 1.000✗ | 1.000✗ | 1.000✗ | 1.000✗ |
74
  | t05_position_order * | core | 0.840✓ | 0.667✓ | 0.660✓ | 0.798✓ | 0.694✓ | 0.531✓ | 0.512✓ | 0.628✓ | 0.091✓ |
75
  | t07_meaning_coverage | core | 0.014✗ | · | · | · | · | · | · | · | · |
76
+ | t08_length_generalization * | core | 0.866✓ | 0.771✓ | 0.857✓ | 0.580✓ | 0.785✓ | 0.749✓ | 0.762✓ | 0.853✓ | 0.542✓ |
77
  | t11_position_unrotation | core | 0.000✗ | 0.000✗ | 0.000✗ | 0.000✓ | 0.000✓ | 0.000✗ | 0.000✓ | 0.000✗ | 0.000✓ |
78
  | t13_sae_monosemanticity * | core | 0.844✓ | 0.683✓ | 0.960✓ | 0.918✓ | 0.859✓ | 0.820✓ | 0.818✓ | 0.963✓ | 0.767✓ |
79
  | t14_capacity_law | core | 0.416✓(probe) | 0.000✗(probe) | -0.615✗(probe) | 0.000✗(probe) | 0.000✗(probe) | 0.000✗(probe) | 0.000✗(probe) | 0.000✗(probe) | 0.000✗(probe) |
 
176
  | t04_negation_scope | A | core | sonar | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
177
  | t05_position_order | A | core | sonar | 0.840 | -0.014 | - | - | 1.000 | 0.842 | PASS | - |
178
  | t07_meaning_coverage | A | core | sonar | 0.014 | 0.000 | 0.000 | - | 1.000 | 0.014 | FAIL(NOT-z-specific; DEGENERATE) | - |
 
179
  | t11_position_unrotation | B | core | sonar | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
180
  | t13_sae_monosemanticity | B | core | sonar | 0.844 | 0.073 | - | - | 1.000 | 0.832 | PASS | - |
181
  | t14_capacity_law | B | core | sonar | 0.901 | 0.000 | - | - | 1.000 | 0.901 | PASS | 0.930 |
 
188
  | t22_word_edit | D | gene | sonar | 1.000 | 1.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
189
  | t23_edit_sentence_2of3 | D | gene | sonar | 0.619 | 0.469 | - | - | 1.000 | 0.282 | PASS | - |
190
  | t25_concept_injection_recovery | D | gene | sonar | 0.744 | 0.787 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
191
+ | t08_length_generalization | A | core | sonar | 0.866 | 0.510 | 0.000 | 0.000 | 1.000 | 0.727 | PASS | - |
192
  | t01_lexical_bag | A | core | st-LaBSE-mean | 0.502 | 0.000 | 1.000 | 0.182 | 1.000 | 0.502 | PASS | - |
193
  | t02_number_exact | A | core | st-LaBSE-mean | 0.000 | 0.000 | 0.635 | 0.285 | 1.000 | 0.000 | FAIL(NOT-z-specific; NOT-z-specific; DEGENERATE) | 0.990 |
194
  | t03_entity_presence | A | core | st-LaBSE-mean | 1.000 | 0.500 | 1.000 | 0.876 | 1.000 | 1.000 | FAIL(NOT-z-specific) | 1.000 |
195
  | t04_negation_scope | A | core | st-LaBSE-mean | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
196
  | t05_position_order | A | core | st-LaBSE-mean | 0.667 | 0.006 | - | - | 1.000 | 0.665 | PASS | - |
 
197
  | t11_position_unrotation | B | core | st-LaBSE-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
198
  | t13_sae_monosemanticity | B | core | st-LaBSE-mean | 0.683 | 0.076 | - | - | 1.000 | 0.657 | PASS | - |
199
  | t14_capacity_law | B | core | st-LaBSE-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
 
201
  | t19_crosslingual_readout | E | core | st-LaBSE-mean | 1.000 | 0.500 | - | - | 1.000 | 1.000 | PASS | 1.000 |
202
  | t21_encoder_pooling_generality | E | core | st-LaBSE-mean | 0.500 | 0.333 | - | - | 1.000 | 0.250 | PASS | 1.000 |
203
  | t25_concept_injection_recovery | D | gene | st-LaBSE-mean | 0.846 | 0.706 | - | - | 1.000 | 0.477 | PASS | - |
204
+ | t08_length_generalization | A | core | st-LaBSE-mean | 0.771 | 0.510 | 0.000 | 0.000 | 1.000 | 0.533 | PASS | - |
205
  | t01_lexical_bag | A | core | st-all-mpnet-base-v2-mean | 0.263 | 0.000 | 1.000 | 0.182 | 1.000 | 0.263 | PASS | - |
206
  | t02_number_exact | A | core | st-all-mpnet-base-v2-mean | 0.000 | 0.000 | 0.635 | 0.285 | 1.000 | 0.000 | FAIL(NOT-z-specific; NOT-z-specific; DEGENERATE) | 0.990 |
207
  | t03_entity_presence | A | core | st-all-mpnet-base-v2-mean | 1.000 | 0.500 | 1.000 | 0.876 | 1.000 | 1.000 | FAIL(NOT-z-specific) | 1.000 |
208
  | t04_negation_scope | A | core | st-all-mpnet-base-v2-mean | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
209
  | t05_position_order | A | core | st-all-mpnet-base-v2-mean | 0.660 | -0.005 | - | - | 1.000 | 0.661 | PASS | - |
 
210
  | t11_position_unrotation | B | core | st-all-mpnet-base-v2-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
211
  | t13_sae_monosemanticity | B | core | st-all-mpnet-base-v2-mean | 0.960 | 0.081 | - | - | 1.000 | 0.957 | PASS | - |
212
  | t14_capacity_law | B | core | st-all-mpnet-base-v2-mean | -0.615 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
 
214
  | t19_crosslingual_readout | E | core | st-all-mpnet-base-v2-mean | 0.966 | 0.500 | - | - | 1.000 | 0.933 | PASS | 1.000 |
215
  | t21_encoder_pooling_generality | E | core | st-all-mpnet-base-v2-mean | 0.400 | 0.333 | - | - | 1.000 | 0.100 | PASS | 1.000 |
216
  | t25_concept_injection_recovery | D | gene | st-all-mpnet-base-v2-mean | 0.800 | 0.817 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
217
+ | t08_length_generalization | A | core | st-all-mpnet-base-v2-mean | 0.857 | 0.510 | 0.000 | 0.000 | 1.000 | 0.707 | PASS | - |
218
  | t01_lexical_bag | A | core | st-bert-base-uncased-mean | 0.364 | 0.000 | 1.000 | 0.226 | 1.000 | 0.364 | PASS | - |
219
  | t02_number_exact | A | core | st-bert-base-uncased-mean | 0.000 | 0.000 | 0.635 | 0.285 | 1.000 | 0.000 | FAIL(NOT-z-specific; NOT-z-specific; DEGENERATE) | 0.990 |
220
  | t03_entity_presence | A | core | st-bert-base-uncased-mean | 0.990 | 0.500 | 1.000 | 0.876 | 1.000 | 0.980 | FAIL(NOT-z-specific) | 1.000 |
221
  | t04_negation_scope | A | core | st-bert-base-uncased-mean | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
222
  | t05_position_order | A | core | st-bert-base-uncased-mean | 0.798 | -0.024 | - | - | 1.000 | 0.803 | PASS | - |
 
223
  | t13_sae_monosemanticity | B | core | st-bert-base-uncased-mean | 0.918 | 0.080 | - | - | 1.000 | 0.911 | PASS | - |
224
  | t14_capacity_law | B | core | st-bert-base-uncased-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
225
  | t19_crosslingual_readout | E | core | st-bert-base-uncased-mean | 0.803 | 0.500 | - | - | 1.000 | 0.607 | PASS | 1.000 |
226
  | t21_encoder_pooling_generality | E | core | st-bert-base-uncased-mean | 1.000 | 0.333 | - | - | 1.000 | 1.000 | PASS | 1.000 |
227
  | t25_concept_injection_recovery | D | gene | st-bert-base-uncased-mean | 0.817 | 0.589 | - | - | 1.000 | 0.555 | PASS | - |
228
+ | t08_length_generalization | A | core | st-bert-base-uncased-mean | 0.580 | 0.510 | 0.000 | 0.000 | 1.000 | 0.142 | PASS | - |
229
  | t01_lexical_bag | A | core | st-e5-base-v2-mean | 0.381 | 0.000 | 1.000 | 0.226 | 1.000 | 0.381 | PASS | - |
230
  | t02_number_exact | A | core | st-e5-base-v2-mean | 0.000 | 0.000 | 0.635 | 0.285 | 1.000 | 0.000 | FAIL(NOT-z-specific; NOT-z-specific; DEGENERATE) | 0.990 |
231
  | t03_entity_presence | A | core | st-e5-base-v2-mean | 1.000 | 0.500 | 1.000 | 0.876 | 1.000 | 1.000 | FAIL(NOT-z-specific) | 1.000 |
232
  | t04_negation_scope | A | core | st-e5-base-v2-mean | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
233
  | t05_position_order | A | core | st-e5-base-v2-mean | 0.694 | -0.024 | - | - | 1.000 | 0.701 | PASS | - |
 
234
  | t13_sae_monosemanticity | B | core | st-e5-base-v2-mean | 0.859 | 0.079 | - | - | 1.000 | 0.846 | PASS | - |
235
  | t14_capacity_law | B | core | st-e5-base-v2-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
236
  | t19_crosslingual_readout | E | core | st-e5-base-v2-mean | 0.981 | 0.500 | - | - | 1.000 | 0.962 | PASS | 1.000 |
237
  | t21_encoder_pooling_generality | E | core | st-e5-base-v2-mean | 1.000 | 0.333 | - | - | 1.000 | 1.000 | PASS | 1.000 |
238
  | t25_concept_injection_recovery | D | gene | st-e5-base-v2-mean | 0.884 | 0.593 | - | - | 1.000 | 0.714 | PASS | - |
239
+ | t08_length_generalization | A | core | st-e5-base-v2-mean | 0.785 | 0.510 | 0.000 | 0.000 | 1.000 | 0.561 | PASS | - |
240
  | t01_lexical_bag | A | core | st-e5-large-v2-mean | 0.403 | 0.000 | 1.000 | 0.182 | 1.000 | 0.403 | PASS | - |
241
  | t02_number_exact | A | core | st-e5-large-v2-mean | 0.113 | 0.000 | 0.635 | 0.285 | 1.000 | 0.113 | FAIL(NOT-z-specific; NOT-z-specific) | 0.990 |
242
  | t03_entity_presence | A | core | st-e5-large-v2-mean | 1.000 | 0.500 | 1.000 | 0.876 | 1.000 | 1.000 | FAIL(NOT-z-specific) | 1.000 |
243
  | t04_negation_scope | A | core | st-e5-large-v2-mean | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
244
  | t05_position_order | A | core | st-e5-large-v2-mean | 0.531 | -0.005 | - | - | 1.000 | 0.533 | PASS | - |
 
245
  | t11_position_unrotation | B | core | st-e5-large-v2-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
246
  | t13_sae_monosemanticity | B | core | st-e5-large-v2-mean | 0.820 | 0.080 | - | - | 1.000 | 0.804 | PASS | - |
247
  | t14_capacity_law | B | core | st-e5-large-v2-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
 
249
  | t19_crosslingual_readout | E | core | st-e5-large-v2-mean | 0.997 | 0.500 | - | - | 1.000 | 0.994 | PASS | 1.000 |
250
  | t21_encoder_pooling_generality | E | core | st-e5-large-v2-mean | 0.500 | 0.333 | - | - | 1.000 | 0.250 | PASS | 1.000 |
251
  | t25_concept_injection_recovery | D | gene | st-e5-large-v2-mean | 0.946 | 0.641 | - | - | 1.000 | 0.851 | PASS | - |
252
+ | t08_length_generalization | A | core | st-e5-large-v2-mean | 0.749 | 0.510 | 0.000 | 0.000 | 1.000 | 0.487 | PASS | - |
253
  | t01_lexical_bag | A | core | st-e5-small-v2-mean | 0.401 | 0.000 | 1.000 | 0.226 | 1.000 | 0.401 | PASS | - |
254
  | t02_number_exact | A | core | st-e5-small-v2-mean | 0.000 | 0.000 | 0.635 | 0.285 | 1.000 | 0.000 | FAIL(NOT-z-specific; NOT-z-specific; DEGENERATE) | 0.990 |
255
  | t03_entity_presence | A | core | st-e5-small-v2-mean | 1.000 | 0.500 | 1.000 | 0.876 | 1.000 | 1.000 | FAIL(NOT-z-specific) | 1.000 |
256
  | t04_negation_scope | A | core | st-e5-small-v2-mean | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
257
  | t05_position_order | A | core | st-e5-small-v2-mean | 0.512 | -0.024 | - | - | 1.000 | 0.523 | PASS | - |
 
258
  | t13_sae_monosemanticity | B | core | st-e5-small-v2-mean | 0.818 | 0.080 | - | - | 1.000 | 0.802 | PASS | - |
259
  | t14_capacity_law | B | core | st-e5-small-v2-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
260
  | t19_crosslingual_readout | E | core | st-e5-small-v2-mean | 0.990 | 0.500 | - | - | 1.000 | 0.980 | PASS | 1.000 |
261
  | t21_encoder_pooling_generality | E | core | st-e5-small-v2-mean | 1.000 | 0.333 | - | - | 1.000 | 1.000 | PASS | 1.000 |
262
  | t25_concept_injection_recovery | D | gene | st-e5-small-v2-mean | 0.871 | 0.520 | - | - | 1.000 | 0.730 | PASS | - |
263
+ | t08_length_generalization | A | core | st-e5-small-v2-mean | 0.762 | 0.510 | 0.000 | 0.000 | 1.000 | 0.513 | PASS | - |
264
  | t01_lexical_bag | A | core | st-gte-large-mean | 0.306 | 0.000 | 1.000 | 0.182 | 1.000 | 0.306 | PASS | - |
265
  | t02_number_exact | A | core | st-gte-large-mean | 0.340 | 0.000 | 0.635 | 0.285 | 1.000 | 0.340 | FAIL(NOT-z-specific) | 0.990 |
266
  | t03_entity_presence | A | core | st-gte-large-mean | 1.000 | 0.500 | 1.000 | 0.876 | 1.000 | 1.000 | FAIL(NOT-z-specific) | 1.000 |
267
  | t04_negation_scope | A | core | st-gte-large-mean | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
268
  | t05_position_order | A | core | st-gte-large-mean | 0.628 | -0.005 | - | - | 1.000 | 0.629 | PASS | - |
 
269
  | t11_position_unrotation | B | core | st-gte-large-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | - |
270
  | t13_sae_monosemanticity | B | core | st-gte-large-mean | 0.963 | 0.080 | - | - | 1.000 | 0.960 | PASS | - |
271
  | t14_capacity_law | B | core | st-gte-large-mean | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
 
273
  | t19_crosslingual_readout | E | core | st-gte-large-mean | 1.000 | 0.500 | - | - | 1.000 | 1.000 | PASS | 1.000 |
274
  | t21_encoder_pooling_generality | E | core | st-gte-large-mean | 0.400 | 0.333 | - | - | 1.000 | 0.100 | PASS | 1.000 |
275
  | t25_concept_injection_recovery | D | gene | st-gte-large-mean | 0.894 | 0.673 | - | - | 1.000 | 0.677 | PASS | - |
276
+ | t08_length_generalization | A | core | st-gte-large-mean | 0.853 | 0.510 | 0.000 | 0.000 | 1.000 | 0.700 | PASS | - |
277
  | t01_lexical_bag | A | core | static-average_word_embeddings_glove.6B.300d | 0.326 | 0.000 | 1.000 | 0.226 | 1.000 | 0.326 | PASS | - |
278
  | t02_number_exact | A | core | static-average_word_embeddings_glove.6B.300d | 0.304 | 0.000 | 0.635 | 0.285 | 1.000 | 0.304 | FAIL(NOT-z-specific; NOT-z-specific) | 0.990 |
279
  | t03_entity_presence | A | core | static-average_word_embeddings_glove.6B.300d | 1.000 | 0.500 | 1.000 | 0.876 | 1.000 | 1.000 | FAIL(NOT-z-specific) | 1.000 |
280
  | t04_negation_scope | A | core | static-average_word_embeddings_glove.6B.300d | 1.000 | 0.748 | 1.000 | 1.000 | 1.000 | 1.000 | FAIL(NOT-z-specific; NOT-z-specific) | 0.950 |
281
  | t05_position_order | A | core | static-average_word_embeddings_glove.6B.300d | 0.091 | 0.004 | - | - | 1.000 | 0.088 | PASS | - |
 
282
  | t13_sae_monosemanticity | B | core | static-average_word_embeddings_glove.6B.300d | 0.767 | 0.086 | - | - | 1.000 | 0.745 | PASS | - |
283
  | t14_capacity_law | B | core | static-average_word_embeddings_glove.6B.300d | 0.000 | 0.000 | - | - | 1.000 | 0.000 | FAIL(DEGENERATE) | 0.930 |
284
  | t19_crosslingual_readout | E | core | static-average_word_embeddings_glove.6B.300d | 0.690 | 0.500 | - | - | 0.875 | 0.506 | PASS | 1.000 |
285
  | t21_encoder_pooling_generality | E | core | static-average_word_embeddings_glove.6B.300d | 1.000 | 0.333 | - | - | 1.000 | 1.000 | PASS | 1.000 |
286
  | t25_concept_injection_recovery | D | gene | static-average_word_embeddings_glove.6B.300d | 0.652 | 0.510 | - | - | 1.000 | 0.291 | PASS | - |
287
+ | t08_length_generalization | A | core | static-average_word_embeddings_glove.6B.300d | 0.542 | 0.510 | 0.000 | 0.000 | 1.000 | 0.064 | PASS | - |
288
 
289
  ## Non-OK tasks (skipped / error)
290
 
 
364
  | t26_causal_identifiability | static-average_word_embeddings_glove.6B.300d | skipped | missing caps {'decode'} |
365
 
366
  ## Key finding: interpretability is MULTI-DIMENSIONAL (not a single score)
367
+ Across the 9 encoders, the LIVE discriminating tasks rank encoders largely **independently**. With the hardened **t08 length-generalization** now a 5th LIVE comparative axis, the mean pairwise Spearman rank-correlation over the 5 LIVE tasks (t01 lexical-bag, t05 order, t08 length-gen, t13 SAE-monosemanticity, t19 cross-lingual) is **+0.21** — up from **+0.10** over the prior 4 LIVE tasks, but still far below a single coherent axis. Lexical-bag readout (t01) and SAE-monosemanticity (t13) remain **anti-correlated (−0.67)**: encoders best at reading words out (LaBSE) are worst at monosemantic features (mpnet/gte top t13). **t08 leans toward the binding/compositional cluster** — it correlates with cross-lingual t19 (+0.53), order t05 (+0.50) and SAE t13 (+0.47) — yet stays **orthogonal to raw lexical-bag readout t01 (+0.00)**: an encoder reading words out of a bag is no better at carrying that readout across length. The static GloVe mean-pool bag is the clear length-generalization **floor (0.542 ≈ the surface null)** and the MLM-only bert control is next (0.580), while the contrastive/retrieval encoders (sonar 0.866, mpnet 0.857, gte 0.853) and SONAR's fixed-width bottleneck lead — exactly the pre-registered prediction that compositional binding, not bag-readout, drives length-generalization. **There is still no coherent single "interpretability axis"** — SIEVE keeps the per-axis profile + heatmap and refuses a single winner column. See `figs/sieve_multidim_interpretability.png`.
sieve_bench/common/data.py CHANGED
@@ -744,71 +744,112 @@ def three_sentence_items(seed: int = 0, n: int = 200, smoke: bool = False):
744
  # serves both tracks.
745
  # ---------------------------------------------------------------------------
746
 
747
- # A8 length-generalization (v0.2 paraphrase-robust rework).
748
  #
749
- # The old version used a single LITERAL target token ("Amazon"). A bag-of-words
750
- # probe reads that one token perfectly at ANY length, so score==bag==1.0 and the
751
- # task was vacuous (it measured token presence, not binding-across-length). The
752
- # rework makes the CONTENT TARGET a SEMANTIC CONCEPT (financial/monetary content)
753
- # expressed through MANY paraphrastic trigger words, with the positive trigger
754
- # vocab DISJOINT between the SHORT and LONG bins. So:
755
- # - a literal/bag reader trained on SHORT triggers cannot saturate on LONG
756
- # (LONG uses held-out trigger words it never saw) -> bag short->long is weak;
757
- # - a surface-position reader is weak (concept can appear at any slot);
758
- # - only an encoder that BINDS the concept semantically, robust to length AND
759
- # paraphrase, transfers short->long. That transfer-beyond-bag is the signal.
760
  #
761
- # Each item: {text, label(1=concept present), length_bin('short'|'long')}.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
762
 
763
- # concept = MONEY/FINANCE, trigger vocab split so short-train words != long-test.
764
- _LG_MONEY_SHORT = ["dollars", "salary", "budget", "loan", "profit", "tax"]
 
 
765
  _LG_MONEY_LONG = ["revenue", "investment", "dividend", "mortgage", "earnings",
766
- "funding", "payroll", "subsidy"]
767
- # negative (non-money) content words, also split short/long.
768
- _LG_OTHER_SHORT = ["garden", "mountain", "river", "forest", "harbor", "meadow"]
769
- _LG_OTHER_LONG = ["glacier", "orchard", "canyon", "tundra", "lagoon", "savanna",
770
- "plateau", "estuary"]
771
-
772
- _LG_SHORT_TMPL = [
773
- "The report noted the {W} clearly.",
774
- "Officials discussed the {W} today.",
775
- "Analysts mentioned a large {W}.",
776
- "The team reviewed the {W} again.",
777
- ]
778
- _LG_LONG_TMPL = [
779
- "After a long and detailed session among the senior staff, the committee "
780
- "carefully examined the {W} before any further discussion could continue.",
781
- "Despite repeated concerns raised by several independent observers, the "
782
- "panel returned once more to the question of the {W} during the meeting.",
783
- "While markets remained volatile across most major global regions, the "
784
- "delegates spent considerable time deliberating over the {W} in detail.",
785
- "Following months of careful negotiation behind closed doors, the working "
786
- "group finally turned its attention to the matter of the {W} at length.",
787
  ]
788
 
789
 
790
  def length_generalization_set(seed: int = 0, n: int = 2000, smoke: bool = False):
 
 
 
 
791
  fp = _data_path(f"length_gen_{n}_{seed}.json")
792
  if os.path.exists(fp):
793
  with open(fp) as f:
794
  return json.load(f)
795
  rng = random.Random(seed)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
796
  items = []
797
  while len(items) < n:
798
- # SHORT bin: short triggers + short templates
799
- for label, pool, tmplpool in [
800
- (1, _LG_MONEY_SHORT, _LG_SHORT_TMPL),
801
- (0, _LG_OTHER_SHORT, _LG_SHORT_TMPL)]:
802
- w = rng.choice(pool)
803
- items.append({"text": rng.choice(tmplpool).format(W=w),
804
- "label": label, "length_bin": "short"})
805
- # LONG bin: HELD-OUT triggers (disjoint vocab) + long templates
806
- for label, pool, tmplpool in [
807
- (1, _LG_MONEY_LONG, _LG_LONG_TMPL),
808
- (0, _LG_OTHER_LONG, _LG_LONG_TMPL)]:
809
- w = rng.choice(pool)
810
- items.append({"text": rng.choice(tmplpool).format(W=w),
811
- "label": label, "length_bin": "long"})
812
  rng.shuffle(items)
813
  items = items[:n]
814
  with open(fp, "w") as f:
 
744
  # serves both tracks.
745
  # ---------------------------------------------------------------------------
746
 
747
+ # A8 length-generalization (v0.3 natural-corpus binding-beyond-bag rework).
748
  #
749
+ # HISTORY. v0.1 used one LITERAL token ("Amazon") -> a bag read it at any length
750
+ # so score==bag==1.0 (vacuous). v0.2 used a money-vs-nature CONCEPT with disjoint
751
+ # short/long trigger vocab in 4 fixed TEMPLATES; the bag floor dropped to ~0 (good)
752
+ # but the concept was so cleanly separable in EVERY encoder that the short->long z
753
+ # AUC hit the within-long ceiling for all 9 encoders -> normalized score==1.0 for
754
+ # all (cross-encoder std .005), so the task still carried NO ranking signal and was
755
+ # excluded from the LIVE intersection.
 
 
 
 
756
  #
757
+ # v0.3 keeps the binding-beyond-bag idea but makes the concept LIVE in REAL,
758
+ # lexically-varied corpus context so that LENGTH genuinely DILUTES the concept
759
+ # signal and the short-trained readout direction must GENERALIZE across length:
760
+ # - target = a paraphrase-robust SEMANTIC concept (FINANCE/MONEY topic), labelled
761
+ # by a money lexicon, with the POSITIVE trigger vocab DISJOINT short vs long
762
+ # (short-train words never appear in the long-test bin) -> a bag CANNOT
763
+ # short->long transfer (held-out words) so the bag floor is ~0.5;
764
+ # - the concept clause is EMBEDDED inside REAL corpus sentences drawn from the
765
+ # v2 corpus: SHORT items are a single short corpus sentence carrying (or not)
766
+ # a short money word; LONG items prepend/append 2-3 unrelated long corpus
767
+ # sentences so the money word is ONE content token among ~25-40 -> 1/N
768
+ # dilution. An encoder that BINDS the concept (keeps it salient + in a
769
+ # length-stable direction) transfers short->long; a length-fragile / pure
770
+ # averaging encoder sees the direction rotate/dilute and DEGRADES.
771
+ # - score = short-trained -> LONG z AUC, normalized into [surface-position null,
772
+ # within-long ceiling]: it measures GENERALIZATION-across-length, not raw
773
+ # readability. The within-long ceiling factors OUT how hard the diluted long
774
+ # read is in absolute terms, so the headline is pure length-transfer.
775
+ #
776
+ # Each item: {text, label(1=money concept present), length_bin('short'|'long'),
777
+ # trigger(the money/other word injected), n_words}.
778
 
779
+ # concept = MONEY/FINANCE. Trigger vocab split so short-train words != long-test
780
+ # -> a literal bag trained on SHORT money words cannot fire on LONG money words.
781
+ _LG_MONEY_SHORT = ["dollars", "salary", "budget", "loan", "profit", "tax",
782
+ "wages", "savings"]
783
  _LG_MONEY_LONG = ["revenue", "investment", "dividend", "mortgage", "earnings",
784
+ "funding", "payroll", "subsidy", "capital", "pension"]
785
+ # negative (non-money) injected content words, also split short/long, so the
786
+ # NEGATIVE class is ALSO a held-out content word (not just "no money word"):
787
+ # this keeps the bag from solving negatives by the absence of a known word.
788
+ _LG_OTHER_SHORT = ["garden", "mountain", "river", "forest", "harbor", "meadow",
789
+ "orchard", "valley"]
790
+ _LG_OTHER_LONG = ["glacier", "canyon", "tundra", "lagoon", "savanna",
791
+ "plateau", "estuary", "prairie", "fjord", "marsh"]
792
+
793
+ # Carrier clauses (short, neutral) into which the trigger word is injected at a
794
+ # varied content slot. Real corpus sentences supply the LONG distractor context.
795
+ _LG_CARRIERS = [
796
+ "the {W} was mentioned in the notes",
797
+ "they finally discussed the {W} today",
798
+ "a report described the {W} in brief",
799
+ "everyone kept asking about the {W}",
800
+ "the {W} came up during the review",
801
+ "she wrote a short line about the {W}",
 
 
 
802
  ]
803
 
804
 
805
  def length_generalization_set(seed: int = 0, n: int = 2000, smoke: bool = False):
806
+ """v0.3: money-concept presence embedded in REAL corpus context, binned
807
+ SHORT vs LONG, with DISJOINT short/long trigger vocab. Probe trains short,
808
+ tests long; the score measures whether the concept readout GENERALIZES across
809
+ length (binding-beyond-bag), normalized into the within-long ceiling."""
810
  fp = _data_path(f"length_gen_{n}_{seed}.json")
811
  if os.path.exists(fp):
812
  with open(fp) as f:
813
  return json.load(f)
814
  rng = random.Random(seed)
815
+ # Real corpus distractor sentences for the LONG bin (lexically varied).
816
+ try:
817
+ pool = load_corpus(n=max(n, 1500), seed=seed, min_words=8, max_words=22)
818
+ except Exception:
819
+ pool = []
820
+ if len(pool) < 50:
821
+ # offline fallback: synthetic neutral distractors (still lexically varied)
822
+ pool = [c.format(W=w) for c in _LG_CARRIERS
823
+ for w in ("meeting", "weather", "schedule", "building", "journey",
824
+ "festival", "machine", "lecture", "harvest", "voyage")]
825
+ rng.shuffle(pool)
826
+
827
+ def _make(label, length_bin):
828
+ money = (label == 1)
829
+ if length_bin == "short":
830
+ words = _LG_MONEY_SHORT if money else _LG_OTHER_SHORT
831
+ else:
832
+ words = _LG_MONEY_LONG if money else _LG_OTHER_LONG
833
+ w = rng.choice(words)
834
+ clause = rng.choice(_LG_CARRIERS).format(W=w)
835
+ if length_bin == "short":
836
+ text = clause[0].upper() + clause[1:] + "."
837
+ else:
838
+ # embed the concept clause among 2-3 real corpus distractor sentences
839
+ k = rng.randint(2, 3)
840
+ distractors = [pool[rng.randrange(len(pool))] for _ in range(k)]
841
+ parts = distractors[:]
842
+ insert = rng.randint(0, len(parts)) # varied position of the clause
843
+ parts.insert(insert, clause[0].upper() + clause[1:])
844
+ text = ". ".join(p.rstrip(".") for p in parts) + "."
845
+ return {"text": text, "label": label, "length_bin": length_bin,
846
+ "trigger": w, "n_words": len(text.split())}
847
+
848
  items = []
849
  while len(items) < n:
850
+ for length_bin in ("short", "long"):
851
+ items.append(_make(1, length_bin))
852
+ items.append(_make(0, length_bin))
 
 
 
 
 
 
 
 
 
 
 
853
  rng.shuffle(items)
854
  items = items[:n]
855
  with open(fp, "w") as f:
sieve_bench/results/sonar.json CHANGED
@@ -251,49 +251,6 @@
251
  "task_id": "t07",
252
  "family": "A"
253
  },
254
- {
255
- "task": "t08_length_generalization",
256
- "encoder": "sonar",
257
- "status": "ok",
258
- "tier": "core",
259
- "is_diagnostic": false,
260
- "caps": [
261
- "encode"
262
- ],
263
- "score": 0.9999999980000001,
264
- "baseline": 0.5,
265
- "ceiling": 1.0,
266
- "control": 0.0,
267
- "score_vs_baseline": 0.9999999940000002,
268
- "score_over_ceiling": 0.999999997,
269
- "target": 0.5,
270
- "falsifier": 0.2,
271
- "passed": true,
272
- "falsified": false,
273
- "ref_sonar": null,
274
- "interp": "Semantic-concept probe trained on SHORT, tested on LONG with HELD-OUT trigger vocab. score = transfer beyond surface-position, normalized into the within-long ceiling. Bag CANNOT saturate (disjoint vocab); audit FAILS it if bag/surface null still solves it or no headroom.",
275
- "raw": {
276
- "n_items": 2000,
277
- "n_short": 1000,
278
- "n_long": 1000,
279
- "z_short_to_long_auc": 1.0,
280
- "bag_short_to_long_auc": 0.48605769230769236,
281
- "surface_pos_short_to_long_auc": 0.5,
282
- "within_long_auc": 0.9999999999999999,
283
- "within_short_auc": 1.0,
284
- "shuffled_control_auc": 0.12256410256410256,
285
- "gap": -1.1102230246251565e-16,
286
- "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Disjoint short/long trigger vocab => bag cannot saturate."
287
- },
288
- "surface_position_baseline": 0.0,
289
- "bag_baseline": 0.0,
290
- "audit": {
291
- "status": "PASS",
292
- "reasons": []
293
- },
294
- "task_id": "t08",
295
- "family": "A"
296
- },
297
  {
298
  "task": "t09_coreference",
299
  "encoder": "sonar",
@@ -1362,5 +1319,48 @@
1362
  },
1363
  "task_id": "t06",
1364
  "family": "A"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1365
  }
1366
  ]
 
251
  "task_id": "t07",
252
  "family": "A"
253
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
254
  {
255
  "task": "t09_coreference",
256
  "encoder": "sonar",
 
1319
  },
1320
  "task_id": "t06",
1321
  "family": "A"
1322
+ },
1323
+ {
1324
+ "task": "t08_length_generalization",
1325
+ "encoder": "sonar",
1326
+ "status": "ok",
1327
+ "tier": "core",
1328
+ "is_diagnostic": false,
1329
+ "caps": [
1330
+ "encode"
1331
+ ],
1332
+ "score": 0.8664829782390072,
1333
+ "baseline": 0.51035349090269,
1334
+ "ceiling": 1.0,
1335
+ "control": 0.0,
1336
+ "score_vs_baseline": 0.7273195662428835,
1337
+ "score_over_ceiling": 0.8664829773725242,
1338
+ "target": 0.5,
1339
+ "falsifier": 0.2,
1340
+ "passed": true,
1341
+ "falsified": false,
1342
+ "ref_sonar": null,
1343
+ "interp": "Money-concept probe trained on SHORT, tested on LONG (concept embedded in real corpus context; DISJOINT short/long trigger vocab). score = short->long transfer beyond surface-position, normalized into the within-long ceiling -> pure length-GENERALIZATION. Bag CANNOT saturate (held-out long vocab); audit FAILS it if bag/surface solves it / no headroom.",
1344
+ "raw": {
1345
+ "n_items": 2000,
1346
+ "n_short": 1000,
1347
+ "n_long": 1000,
1348
+ "z_short_to_long_auc": 0.8726856667360101,
1349
+ "bag_short_to_long_auc": 0.4861340032964747,
1350
+ "surface_pos_short_to_long_auc": 0.51035349090269,
1351
+ "within_long_auc": 0.9285177065497432,
1352
+ "within_short_auc": 1.0,
1353
+ "shuffled_control_auc": 0.4220447744475204,
1354
+ "gap": 0.05583203981373308,
1355
+ "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Concept embedded in real corpus context + disjoint short/long trigger vocab => bag cannot saturate."
1356
+ },
1357
+ "surface_position_baseline": 0.0,
1358
+ "bag_baseline": 0.0,
1359
+ "audit": {
1360
+ "status": "PASS",
1361
+ "reasons": []
1362
+ },
1363
+ "task_id": "t08",
1364
+ "family": "A"
1365
  }
1366
  ]
sieve_bench/results/st-LaBSE-mean.json CHANGED
@@ -219,49 +219,6 @@
219
  "task_id": "t07",
220
  "family": "A"
221
  },
222
- {
223
- "task": "t08_length_generalization",
224
- "encoder": "st-LaBSE-mean",
225
- "status": "ok",
226
- "tier": "core",
227
- "is_diagnostic": false,
228
- "caps": [
229
- "encode"
230
- ],
231
- "score": 0.9999999980000001,
232
- "baseline": 0.5,
233
- "ceiling": 1.0,
234
- "control": 0.08048076906980765,
235
- "score_vs_baseline": 0.9999999940000002,
236
- "score_over_ceiling": 0.999999997,
237
- "target": 0.5,
238
- "falsifier": 0.2,
239
- "passed": true,
240
- "falsified": false,
241
- "ref_sonar": null,
242
- "interp": "Semantic-concept probe trained on SHORT, tested on LONG with HELD-OUT trigger vocab. score = transfer beyond surface-position, normalized into the within-long ceiling. Bag CANNOT saturate (disjoint vocab); audit FAILS it if bag/surface null still solves it or no headroom.",
243
- "raw": {
244
- "n_items": 2000,
245
- "n_short": 1000,
246
- "n_long": 1000,
247
- "z_short_to_long_auc": 1.0,
248
- "bag_short_to_long_auc": 0.48605769230769236,
249
- "surface_pos_short_to_long_auc": 0.5,
250
- "within_long_auc": 1.0,
251
- "within_short_auc": 1.0,
252
- "shuffled_control_auc": 0.5402403846153846,
253
- "gap": 0.0,
254
- "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Disjoint short/long trigger vocab => bag cannot saturate."
255
- },
256
- "surface_position_baseline": 0.0,
257
- "bag_baseline": 0.0,
258
- "audit": {
259
- "status": "PASS",
260
- "reasons": []
261
- },
262
- "task_id": "t08",
263
- "family": "A"
264
- },
265
  {
266
  "task": "t09_coreference",
267
  "encoder": "st-LaBSE-mean",
@@ -957,5 +914,48 @@
957
  },
958
  "task_id": "t06",
959
  "family": "A"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
960
  }
961
  ]
 
219
  "task_id": "t07",
220
  "family": "A"
221
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  {
223
  "task": "t09_coreference",
224
  "encoder": "st-LaBSE-mean",
 
914
  },
915
  "task_id": "t06",
916
  "family": "A"
917
+ },
918
+ {
919
+ "task": "t08_length_generalization",
920
+ "encoder": "st-LaBSE-mean",
921
+ "status": "ok",
922
+ "tier": "core",
923
+ "is_diagnostic": false,
924
+ "caps": [
925
+ "encode"
926
+ ],
927
+ "score": 0.7712365369933855,
928
+ "baseline": 0.51035349090269,
929
+ "ceiling": 1.0,
930
+ "control": 0.0,
931
+ "score_vs_baseline": 0.5327987450351659,
932
+ "score_over_ceiling": 0.7712365362221488,
933
+ "target": 0.5,
934
+ "falsifier": 0.2,
935
+ "passed": true,
936
+ "falsified": false,
937
+ "ref_sonar": null,
938
+ "interp": "Money-concept probe trained on SHORT, tested on LONG (concept embedded in real corpus context; DISJOINT short/long trigger vocab). score = short->long transfer beyond surface-position, normalized into the within-long ceiling -> pure length-GENERALIZATION. Bag CANNOT saturate (held-out long vocab); audit FAILS it if bag/surface solves it / no headroom.",
939
+ "raw": {
940
+ "n_items": 2000,
941
+ "n_short": 1000,
942
+ "n_long": 1000,
943
+ "z_short_to_long_auc": 0.7619177161511259,
944
+ "bag_short_to_long_auc": 0.4861340032964747,
945
+ "surface_pos_short_to_long_auc": 0.51035349090269,
946
+ "within_long_auc": 0.8365364612504199,
947
+ "within_short_auc": 1.0,
948
+ "shuffled_control_auc": 0.4939591301147365,
949
+ "gap": 0.074618745099294,
950
+ "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Concept embedded in real corpus context + disjoint short/long trigger vocab => bag cannot saturate."
951
+ },
952
+ "surface_position_baseline": 0.0,
953
+ "bag_baseline": 0.0,
954
+ "audit": {
955
+ "status": "PASS",
956
+ "reasons": []
957
+ },
958
+ "task_id": "t08",
959
+ "family": "A"
960
  }
961
  ]
sieve_bench/results/st-all-mpnet-base-v2-mean.json CHANGED
@@ -219,49 +219,6 @@
219
  "task_id": "t07",
220
  "family": "A"
221
  },
222
- {
223
- "task": "t08_length_generalization",
224
- "encoder": "st-all-mpnet-base-v2-mean",
225
- "status": "ok",
226
- "tier": "core",
227
- "is_diagnostic": false,
228
- "caps": [
229
- "encode"
230
- ],
231
- "score": 0.9999999980000001,
232
- "baseline": 0.5,
233
- "ceiling": 1.0,
234
- "control": 0.3760897428375642,
235
- "score_vs_baseline": 0.9999999940000002,
236
- "score_over_ceiling": 0.999999997,
237
- "target": 0.5,
238
- "falsifier": 0.2,
239
- "passed": true,
240
- "falsified": false,
241
- "ref_sonar": null,
242
- "interp": "Semantic-concept probe trained on SHORT, tested on LONG with HELD-OUT trigger vocab. score = transfer beyond surface-position, normalized into the within-long ceiling. Bag CANNOT saturate (disjoint vocab); audit FAILS it if bag/surface null still solves it or no headroom.",
243
- "raw": {
244
- "n_items": 2000,
245
- "n_short": 1000,
246
- "n_long": 1000,
247
- "z_short_to_long_auc": 1.0,
248
- "bag_short_to_long_auc": 0.48605769230769236,
249
- "surface_pos_short_to_long_auc": 0.5,
250
- "within_long_auc": 1.0,
251
- "within_short_auc": 1.0,
252
- "shuffled_control_auc": 0.6880448717948718,
253
- "gap": 0.0,
254
- "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Disjoint short/long trigger vocab => bag cannot saturate."
255
- },
256
- "surface_position_baseline": 0.0,
257
- "bag_baseline": 0.0,
258
- "audit": {
259
- "status": "PASS",
260
- "reasons": []
261
- },
262
- "task_id": "t08",
263
- "family": "A"
264
- },
265
  {
266
  "task": "t09_coreference",
267
  "encoder": "st-all-mpnet-base-v2-mean",
@@ -942,5 +899,48 @@
942
  },
943
  "task_id": "t06",
944
  "family": "A"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
945
  }
946
  ]
 
219
  "task_id": "t07",
220
  "family": "A"
221
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  {
223
  "task": "t09_coreference",
224
  "encoder": "st-all-mpnet-base-v2-mean",
 
899
  },
900
  "task_id": "t06",
901
  "family": "A"
902
+ },
903
+ {
904
+ "task": "t08_length_generalization",
905
+ "encoder": "st-all-mpnet-base-v2-mean",
906
+ "status": "ok",
907
+ "tier": "core",
908
+ "is_diagnostic": false,
909
+ "caps": [
910
+ "encode"
911
+ ],
912
+ "score": 0.8565105172004784,
913
+ "baseline": 0.51035349090269,
914
+ "ceiling": 1.0,
915
+ "control": 0.0,
916
+ "score_vs_baseline": 0.7069529122733762,
917
+ "score_over_ceiling": 0.8565105163439678,
918
+ "target": 0.5,
919
+ "falsifier": 0.2,
920
+ "passed": true,
921
+ "falsified": false,
922
+ "ref_sonar": null,
923
+ "interp": "Money-concept probe trained on SHORT, tested on LONG (concept embedded in real corpus context; DISJOINT short/long trigger vocab). score = short->long transfer beyond surface-position, normalized into the within-long ceiling -> pure length-GENERALIZATION. Bag CANNOT saturate (held-out long vocab); audit FAILS it if bag/surface solves it / no headroom.",
924
+ "raw": {
925
+ "n_items": 2000,
926
+ "n_short": 1000,
927
+ "n_long": 1000,
928
+ "z_short_to_long_auc": 0.9113472340016963,
929
+ "bag_short_to_long_auc": 0.4861340032964747,
930
+ "surface_pos_short_to_long_auc": 0.51035349090269,
931
+ "within_long_auc": 0.9785249075866925,
932
+ "within_short_auc": 1.0,
933
+ "shuffled_control_auc": 0.49741562785041044,
934
+ "gap": 0.06717767358499627,
935
+ "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Concept embedded in real corpus context + disjoint short/long trigger vocab => bag cannot saturate."
936
+ },
937
+ "surface_position_baseline": 0.0,
938
+ "bag_baseline": 0.0,
939
+ "audit": {
940
+ "status": "PASS",
941
+ "reasons": []
942
+ },
943
+ "task_id": "t08",
944
+ "family": "A"
945
  }
946
  ]
sieve_bench/results/st-bert-base-uncased-mean.json CHANGED
@@ -219,49 +219,6 @@
219
  "task_id": "t07",
220
  "family": "A"
221
  },
222
- {
223
- "task": "t08_length_generalization",
224
- "encoder": "st-bert-base-uncased-mean",
225
- "status": "ok",
226
- "tier": "core",
227
- "is_diagnostic": false,
228
- "caps": [
229
- "encode"
230
- ],
231
- "score": 0.9999999980000001,
232
- "baseline": 0.5,
233
- "ceiling": 1.0,
234
- "control": 0.08391025624243578,
235
- "score_vs_baseline": 0.9999999940000002,
236
- "score_over_ceiling": 0.999999997,
237
- "target": 0.5,
238
- "falsifier": 0.2,
239
- "passed": true,
240
- "falsified": false,
241
- "ref_sonar": null,
242
- "interp": "Semantic-concept probe trained on SHORT, tested on LONG with HELD-OUT trigger vocab. score = transfer beyond surface-position, normalized into the within-long ceiling. Bag CANNOT saturate (disjoint vocab); audit FAILS it if bag/surface null still solves it or no headroom.",
243
- "raw": {
244
- "n_items": 2000,
245
- "n_short": 1000,
246
- "n_long": 1000,
247
- "z_short_to_long_auc": 1.0,
248
- "bag_short_to_long_auc": 0.48605769230769236,
249
- "surface_pos_short_to_long_auc": 0.5,
250
- "within_long_auc": 1.0,
251
- "within_short_auc": 1.0,
252
- "shuffled_control_auc": 0.5419551282051281,
253
- "gap": 0.0,
254
- "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Disjoint short/long trigger vocab => bag cannot saturate."
255
- },
256
- "surface_position_baseline": 0.0,
257
- "bag_baseline": 0.0,
258
- "audit": {
259
- "status": "PASS",
260
- "reasons": []
261
- },
262
- "task_id": "t08",
263
- "family": "A"
264
- },
265
  {
266
  "task": "t09_coreference",
267
  "encoder": "st-bert-base-uncased-mean",
@@ -990,5 +947,48 @@
990
  },
991
  "task_id": "t06",
992
  "family": "A"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
993
  }
994
  ]
 
219
  "task_id": "t07",
220
  "family": "A"
221
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  {
223
  "task": "t09_coreference",
224
  "encoder": "st-bert-base-uncased-mean",
 
947
  },
948
  "task_id": "t06",
949
  "family": "A"
950
+ },
951
+ {
952
+ "task": "t08_length_generalization",
953
+ "encoder": "st-bert-base-uncased-mean",
954
+ "status": "ok",
955
+ "tier": "core",
956
+ "is_diagnostic": false,
957
+ "caps": [
958
+ "encode"
959
+ ],
960
+ "score": 0.5797783361402702,
961
+ "baseline": 0.51035349090269,
962
+ "ceiling": 1.0,
963
+ "control": 0.0,
964
+ "score_vs_baseline": 0.14178564291979334,
965
+ "score_over_ceiling": 0.5797783355604919,
966
+ "target": 0.5,
967
+ "falsifier": 0.2,
968
+ "passed": true,
969
+ "falsified": false,
970
+ "ref_sonar": null,
971
+ "interp": "Money-concept probe trained on SHORT, tested on LONG (concept embedded in real corpus context; DISJOINT short/long trigger vocab). score = short->long transfer beyond surface-position, normalized into the within-long ceiling -> pure length-GENERALIZATION. Bag CANNOT saturate (held-out long vocab); audit FAILS it if bag/surface solves it / no headroom.",
972
+ "raw": {
973
+ "n_items": 2000,
974
+ "n_short": 1000,
975
+ "n_long": 1000,
976
+ "z_short_to_long_auc": 0.7183754460642332,
977
+ "bag_short_to_long_auc": 0.4861340032964747,
978
+ "surface_pos_short_to_long_auc": 0.51035349090269,
979
+ "within_long_auc": 0.8691491574786769,
980
+ "within_short_auc": 1.0,
981
+ "shuffled_control_auc": 0.47822886495655376,
982
+ "gap": 0.15077371141444373,
983
+ "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Concept embedded in real corpus context + disjoint short/long trigger vocab => bag cannot saturate."
984
+ },
985
+ "surface_position_baseline": 0.0,
986
+ "bag_baseline": 0.0,
987
+ "audit": {
988
+ "status": "PASS",
989
+ "reasons": []
990
+ },
991
+ "task_id": "t08",
992
+ "family": "A"
993
  }
994
  ]
sieve_bench/results/st-e5-base-v2-mean.json CHANGED
@@ -219,49 +219,6 @@
219
  "task_id": "t07",
220
  "family": "A"
221
  },
222
- {
223
- "task": "t08_length_generalization",
224
- "encoder": "st-e5-base-v2-mean",
225
- "status": "ok",
226
- "tier": "core",
227
- "is_diagnostic": false,
228
- "caps": [
229
- "encode"
230
- ],
231
- "score": 0.9999999980000001,
232
- "baseline": 0.5,
233
- "ceiling": 1.0,
234
- "control": 0.1681410253047436,
235
- "score_vs_baseline": 0.9999999940000002,
236
- "score_over_ceiling": 0.999999997,
237
- "target": 0.5,
238
- "falsifier": 0.2,
239
- "passed": true,
240
- "falsified": false,
241
- "ref_sonar": null,
242
- "interp": "Semantic-concept probe trained on SHORT, tested on LONG with HELD-OUT trigger vocab. score = transfer beyond surface-position, normalized into the within-long ceiling. Bag CANNOT saturate (disjoint vocab); audit FAILS it if bag/surface null still solves it or no headroom.",
243
- "raw": {
244
- "n_items": 2000,
245
- "n_short": 1000,
246
- "n_long": 1000,
247
- "z_short_to_long_auc": 1.0,
248
- "bag_short_to_long_auc": 0.48605769230769236,
249
- "surface_pos_short_to_long_auc": 0.5,
250
- "within_long_auc": 0.9999999999999999,
251
- "within_short_auc": 1.0,
252
- "shuffled_control_auc": 0.5840705128205128,
253
- "gap": -1.1102230246251565e-16,
254
- "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Disjoint short/long trigger vocab => bag cannot saturate."
255
- },
256
- "surface_position_baseline": 0.0,
257
- "bag_baseline": 0.0,
258
- "audit": {
259
- "status": "PASS",
260
- "reasons": []
261
- },
262
- "task_id": "t08",
263
- "family": "A"
264
- },
265
  {
266
  "task": "t09_coreference",
267
  "encoder": "st-e5-base-v2-mean",
@@ -990,5 +947,48 @@
990
  },
991
  "task_id": "t06",
992
  "family": "A"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
993
  }
994
  ]
 
219
  "task_id": "t07",
220
  "family": "A"
221
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  {
223
  "task": "t09_coreference",
224
  "encoder": "st-e5-base-v2-mean",
 
947
  },
948
  "task_id": "t06",
949
  "family": "A"
950
+ },
951
+ {
952
+ "task": "t08_length_generalization",
953
+ "encoder": "st-e5-base-v2-mean",
954
+ "status": "ok",
955
+ "tier": "core",
956
+ "is_diagnostic": false,
957
+ "caps": [
958
+ "encode"
959
+ ],
960
+ "score": 0.7848129272647348,
961
+ "baseline": 0.51035349090269,
962
+ "ceiling": 1.0,
963
+ "control": 0.1703819754211495,
964
+ "score_vs_baseline": 0.5605256663781798,
965
+ "score_over_ceiling": 0.7848129264799218,
966
+ "target": 0.5,
967
+ "falsifier": 0.2,
968
+ "passed": true,
969
+ "falsified": false,
970
+ "ref_sonar": null,
971
+ "interp": "Money-concept probe trained on SHORT, tested on LONG (concept embedded in real corpus context; DISJOINT short/long trigger vocab). score = short->long transfer beyond surface-position, normalized into the within-long ceiling -> pure length-GENERALIZATION. Bag CANNOT saturate (held-out long vocab); audit FAILS it if bag/surface solves it / no headroom.",
972
+ "raw": {
973
+ "n_items": 2000,
974
+ "n_short": 1000,
975
+ "n_long": 1000,
976
+ "z_short_to_long_auc": 0.8790865884687394,
977
+ "bag_short_to_long_auc": 0.4861340032964747,
978
+ "surface_pos_short_to_long_auc": 0.51035349090269,
979
+ "within_long_auc": 0.9801891472372022,
980
+ "within_short_auc": 1.0,
981
+ "shuffled_control_auc": 0.5904050183226385,
982
+ "gap": 0.10110255876846275,
983
+ "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Concept embedded in real corpus context + disjoint short/long trigger vocab => bag cannot saturate."
984
+ },
985
+ "surface_position_baseline": 0.0,
986
+ "bag_baseline": 0.0,
987
+ "audit": {
988
+ "status": "PASS",
989
+ "reasons": []
990
+ },
991
+ "task_id": "t08",
992
+ "family": "A"
993
  }
994
  ]
sieve_bench/results/st-e5-large-v2-mean.json CHANGED
@@ -218,49 +218,6 @@
218
  "task_id": "t07",
219
  "family": "A"
220
  },
221
- {
222
- "task": "t08_length_generalization",
223
- "encoder": "st-e5-large-v2-mean",
224
- "status": "ok",
225
- "tier": "core",
226
- "is_diagnostic": false,
227
- "caps": [
228
- "encode"
229
- ],
230
- "score": 0.9999999979999998,
231
- "baseline": 0.5,
232
- "ceiling": 1.0,
233
- "control": 0.009871794852051204,
234
- "score_vs_baseline": 0.9999999939999997,
235
- "score_over_ceiling": 0.9999999969999998,
236
- "target": 0.5,
237
- "falsifier": 0.2,
238
- "passed": true,
239
- "falsified": false,
240
- "ref_sonar": null,
241
- "interp": "Semantic-concept probe trained on SHORT, tested on LONG with HELD-OUT trigger vocab. score = transfer beyond surface-position, normalized into the within-long ceiling. Bag CANNOT saturate (disjoint vocab); audit FAILS it if bag/surface null still solves it or no headroom.",
242
- "raw": {
243
- "n_items": 2000,
244
- "n_short": 1000,
245
- "n_long": 1000,
246
- "z_short_to_long_auc": 0.9999999999999999,
247
- "bag_short_to_long_auc": 0.48605769230769236,
248
- "surface_pos_short_to_long_auc": 0.5,
249
- "within_long_auc": 1.0,
250
- "within_short_auc": 1.0,
251
- "shuffled_control_auc": 0.5049358974358974,
252
- "gap": 1.1102230246251565e-16,
253
- "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Disjoint short/long trigger vocab => bag cannot saturate."
254
- },
255
- "surface_position_baseline": 0.0,
256
- "bag_baseline": 0.0,
257
- "audit": {
258
- "status": "PASS",
259
- "reasons": []
260
- },
261
- "task_id": "t08",
262
- "family": "A"
263
- },
264
  {
265
  "task": "t09_coreference",
266
  "encoder": "st-e5-large-v2-mean",
@@ -956,5 +913,48 @@
956
  },
957
  "task_id": "t06",
958
  "family": "A"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
959
  }
960
  ]
 
218
  "task_id": "t07",
219
  "family": "A"
220
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  {
222
  "task": "t09_coreference",
223
  "encoder": "st-e5-large-v2-mean",
 
913
  },
914
  "task_id": "t06",
915
  "family": "A"
916
+ },
917
+ {
918
+ "task": "t08_length_generalization",
919
+ "encoder": "st-e5-large-v2-mean",
920
+ "status": "ok",
921
+ "tier": "core",
922
+ "is_diagnostic": false,
923
+ "caps": [
924
+ "encode"
925
+ ],
926
+ "score": 0.7487559235913531,
927
+ "baseline": 0.51035349090269,
928
+ "ceiling": 1.0,
929
+ "control": 0.0,
930
+ "score_vs_baseline": 0.4868868209461641,
931
+ "score_over_ceiling": 0.7487559228425972,
932
+ "target": 0.5,
933
+ "falsifier": 0.2,
934
+ "passed": true,
935
+ "falsified": false,
936
+ "ref_sonar": null,
937
+ "interp": "Money-concept probe trained on SHORT, tested on LONG (concept embedded in real corpus context; DISJOINT short/long trigger vocab). score = short->long transfer beyond surface-position, normalized into the within-long ceiling -> pure length-GENERALIZATION. Bag CANNOT saturate (held-out long vocab); audit FAILS it if bag/surface solves it / no headroom.",
938
+ "raw": {
939
+ "n_items": 2000,
940
+ "n_short": 1000,
941
+ "n_long": 1000,
942
+ "z_short_to_long_auc": 0.8655006320910212,
943
+ "bag_short_to_long_auc": 0.4861340032964747,
944
+ "surface_pos_short_to_long_auc": 0.51035349090269,
945
+ "within_long_auc": 0.9846697924501128,
946
+ "within_short_auc": 1.0,
947
+ "shuffled_control_auc": 0.5006480933254388,
948
+ "gap": 0.11916916035909153,
949
+ "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Concept embedded in real corpus context + disjoint short/long trigger vocab => bag cannot saturate."
950
+ },
951
+ "surface_position_baseline": 0.0,
952
+ "bag_baseline": 0.0,
953
+ "audit": {
954
+ "status": "PASS",
955
+ "reasons": []
956
+ },
957
+ "task_id": "t08",
958
+ "family": "A"
959
  }
960
  ]
sieve_bench/results/st-e5-small-v2-mean.json CHANGED
@@ -219,49 +219,6 @@
219
  "task_id": "t07",
220
  "family": "A"
221
  },
222
- {
223
- "task": "t08_length_generalization",
224
- "encoder": "st-e5-small-v2-mean",
225
- "status": "ok",
226
- "tier": "core",
227
- "is_diagnostic": false,
228
- "caps": [
229
- "encode"
230
- ],
231
- "score": 0.9999999980000001,
232
- "baseline": 0.5,
233
- "ceiling": 1.0,
234
- "control": 0.0,
235
- "score_vs_baseline": 0.9999999940000002,
236
- "score_over_ceiling": 0.999999997,
237
- "target": 0.5,
238
- "falsifier": 0.2,
239
- "passed": true,
240
- "falsified": false,
241
- "ref_sonar": null,
242
- "interp": "Semantic-concept probe trained on SHORT, tested on LONG with HELD-OUT trigger vocab. score = transfer beyond surface-position, normalized into the within-long ceiling. Bag CANNOT saturate (disjoint vocab); audit FAILS it if bag/surface null still solves it or no headroom.",
243
- "raw": {
244
- "n_items": 2000,
245
- "n_short": 1000,
246
- "n_long": 1000,
247
- "z_short_to_long_auc": 1.0,
248
- "bag_short_to_long_auc": 0.48605769230769236,
249
- "surface_pos_short_to_long_auc": 0.5,
250
- "within_long_auc": 0.9999999999999999,
251
- "within_short_auc": 1.0,
252
- "shuffled_control_auc": 0.4963942307692308,
253
- "gap": -1.1102230246251565e-16,
254
- "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Disjoint short/long trigger vocab => bag cannot saturate."
255
- },
256
- "surface_position_baseline": 0.0,
257
- "bag_baseline": 0.0,
258
- "audit": {
259
- "status": "PASS",
260
- "reasons": []
261
- },
262
- "task_id": "t08",
263
- "family": "A"
264
- },
265
  {
266
  "task": "t09_coreference",
267
  "encoder": "st-e5-small-v2-mean",
@@ -990,5 +947,48 @@
990
  },
991
  "task_id": "t06",
992
  "family": "A"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
993
  }
994
  ]
 
219
  "task_id": "t07",
220
  "family": "A"
221
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  {
223
  "task": "t09_coreference",
224
  "encoder": "st-e5-small-v2-mean",
 
947
  },
948
  "task_id": "t06",
949
  "family": "A"
950
+ },
951
+ {
952
+ "task": "t08_length_generalization",
953
+ "encoder": "st-e5-small-v2-mean",
954
+ "status": "ok",
955
+ "tier": "core",
956
+ "is_diagnostic": false,
957
+ "caps": [
958
+ "encode"
959
+ ],
960
+ "score": 0.7616208535594768,
961
+ "baseline": 0.51035349090269,
962
+ "ceiling": 1.0,
963
+ "control": 0.0,
964
+ "score_vs_baseline": 0.5131607342751225,
965
+ "score_over_ceiling": 0.761620852797856,
966
+ "target": 0.5,
967
+ "falsifier": 0.2,
968
+ "passed": true,
969
+ "falsified": false,
970
+ "ref_sonar": null,
971
+ "interp": "Money-concept probe trained on SHORT, tested on LONG (concept embedded in real corpus context; DISJOINT short/long trigger vocab). score = short->long transfer beyond surface-position, normalized into the within-long ceiling -> pure length-GENERALIZATION. Bag CANNOT saturate (held-out long vocab); audit FAILS it if bag/surface solves it / no headroom.",
972
+ "raw": {
973
+ "n_items": 2000,
974
+ "n_short": 1000,
975
+ "n_long": 1000,
976
+ "z_short_to_long_auc": 0.8670688579155398,
977
+ "bag_short_to_long_auc": 0.4861340032964747,
978
+ "surface_pos_short_to_long_auc": 0.51035349090269,
979
+ "within_long_auc": 0.9787169352386743,
980
+ "within_short_auc": 1.0,
981
+ "shuffled_control_auc": 0.4911747291609992,
982
+ "gap": 0.11164807732313453,
983
+ "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Concept embedded in real corpus context + disjoint short/long trigger vocab => bag cannot saturate."
984
+ },
985
+ "surface_position_baseline": 0.0,
986
+ "bag_baseline": 0.0,
987
+ "audit": {
988
+ "status": "PASS",
989
+ "reasons": []
990
+ },
991
+ "task_id": "t08",
992
+ "family": "A"
993
  }
994
  ]
sieve_bench/results/st-gte-large-mean.json CHANGED
@@ -217,49 +217,6 @@
217
  "task_id": "t07",
218
  "family": "A"
219
  },
220
- {
221
- "task": "t08_length_generalization",
222
- "encoder": "st-gte-large-mean",
223
- "status": "ok",
224
- "tier": "core",
225
- "is_diagnostic": false,
226
- "caps": [
227
- "encode"
228
- ],
229
- "score": 0.9999999980000001,
230
- "baseline": 0.5,
231
- "ceiling": 1.0,
232
- "control": 0.17596153810961543,
233
- "score_vs_baseline": 0.9999999940000002,
234
- "score_over_ceiling": 0.999999997,
235
- "target": 0.5,
236
- "falsifier": 0.2,
237
- "passed": true,
238
- "falsified": false,
239
- "ref_sonar": null,
240
- "interp": "Semantic-concept probe trained on SHORT, tested on LONG with HELD-OUT trigger vocab. score = transfer beyond surface-position, normalized into the within-long ceiling. Bag CANNOT saturate (disjoint vocab); audit FAILS it if bag/surface null still solves it or no headroom.",
241
- "raw": {
242
- "n_items": 2000,
243
- "n_short": 1000,
244
- "n_long": 1000,
245
- "z_short_to_long_auc": 1.0,
246
- "bag_short_to_long_auc": 0.48605769230769236,
247
- "surface_pos_short_to_long_auc": 0.5,
248
- "within_long_auc": 1.0,
249
- "within_short_auc": 0.9999999999999999,
250
- "shuffled_control_auc": 0.5879807692307693,
251
- "gap": 0.0,
252
- "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Disjoint short/long trigger vocab => bag cannot saturate."
253
- },
254
- "surface_position_baseline": 0.0,
255
- "bag_baseline": 0.0,
256
- "audit": {
257
- "status": "PASS",
258
- "reasons": []
259
- },
260
- "task_id": "t08",
261
- "family": "A"
262
- },
263
  {
264
  "task": "t09_coreference",
265
  "encoder": "st-gte-large-mean",
@@ -940,5 +897,48 @@
940
  },
941
  "task_id": "t06",
942
  "family": "A"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
943
  }
944
  ]
 
217
  "task_id": "t07",
218
  "family": "A"
219
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
220
  {
221
  "task": "t09_coreference",
222
  "encoder": "st-gte-large-mean",
 
897
  },
898
  "task_id": "t06",
899
  "family": "A"
900
+ },
901
+ {
902
+ "task": "t08_length_generalization",
903
+ "encoder": "st-gte-large-mean",
904
+ "status": "ok",
905
+ "tier": "core",
906
+ "is_diagnostic": false,
907
+ "caps": [
908
+ "encode"
909
+ ],
910
+ "score": 0.8528773511431307,
911
+ "baseline": 0.51035349090269,
912
+ "ceiling": 1.0,
913
+ "control": 0.23700102562583694,
914
+ "score_vs_baseline": 0.6995329348357229,
915
+ "score_over_ceiling": 0.8528773502902532,
916
+ "target": 0.5,
917
+ "falsifier": 0.2,
918
+ "passed": true,
919
+ "falsified": false,
920
+ "ref_sonar": null,
921
+ "interp": "Money-concept probe trained on SHORT, tested on LONG (concept embedded in real corpus context; DISJOINT short/long trigger vocab). score = short->long transfer beyond surface-position, normalized into the within-long ceiling -> pure length-GENERALIZATION. Bag CANNOT saturate (held-out long vocab); audit FAILS it if bag/surface solves it / no headroom.",
922
+ "raw": {
923
+ "n_items": 2000,
924
+ "n_short": 1000,
925
+ "n_long": 1000,
926
+ "z_short_to_long_auc": 0.9160199068665889,
927
+ "bag_short_to_long_auc": 0.4861340032964747,
928
+ "surface_pos_short_to_long_auc": 0.51035349090269,
929
+ "within_long_auc": 0.9859979837096542,
930
+ "within_short_auc": 0.9999999999999999,
931
+ "shuffled_control_auc": 0.6230817237682226,
932
+ "gap": 0.06997807684306534,
933
+ "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Concept embedded in real corpus context + disjoint short/long trigger vocab => bag cannot saturate."
934
+ },
935
+ "surface_position_baseline": 0.0,
936
+ "bag_baseline": 0.0,
937
+ "audit": {
938
+ "status": "PASS",
939
+ "reasons": []
940
+ },
941
+ "task_id": "t08",
942
+ "family": "A"
943
  }
944
  ]
sieve_bench/results/static-average_word_embeddings_glove.6B.300d.json CHANGED
@@ -218,49 +218,6 @@
218
  "task_id": "t07",
219
  "family": "A"
220
  },
221
- {
222
- "task": "t08_length_generalization",
223
- "encoder": "static-average_word_embeddings_glove.6B.300d",
224
- "status": "ok",
225
- "tier": "core",
226
- "is_diagnostic": false,
227
- "caps": [
228
- "encode"
229
- ],
230
- "score": 0.992147433913141,
231
- "baseline": 0.5,
232
- "ceiling": 1.0,
233
- "control": 0.0,
234
- "score_vs_baseline": 0.9842948658576923,
235
- "score_over_ceiling": 0.9921474329209935,
236
- "target": 0.5,
237
- "falsifier": 0.2,
238
- "passed": true,
239
- "falsified": false,
240
- "ref_sonar": null,
241
- "interp": "Semantic-concept probe trained on SHORT, tested on LONG with HELD-OUT trigger vocab. score = transfer beyond surface-position, normalized into the within-long ceiling. Bag CANNOT saturate (disjoint vocab); audit FAILS it if bag/surface null still solves it or no headroom.",
242
- "raw": {
243
- "n_items": 2000,
244
- "n_short": 1000,
245
- "n_long": 1000,
246
- "z_short_to_long_auc": 0.9960737179487179,
247
- "bag_short_to_long_auc": 0.48605769230769236,
248
- "surface_pos_short_to_long_auc": 0.5,
249
- "within_long_auc": 1.0,
250
- "within_short_auc": 1.0,
251
- "shuffled_control_auc": 0.3524038461538461,
252
- "gap": 0.003926282051282093,
253
- "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Disjoint short/long trigger vocab => bag cannot saturate."
254
- },
255
- "surface_position_baseline": 0.0,
256
- "bag_baseline": 0.0,
257
- "audit": {
258
- "status": "PASS",
259
- "reasons": []
260
- },
261
- "task_id": "t08",
262
- "family": "A"
263
- },
264
  {
265
  "task": "t09_coreference",
266
  "encoder": "static-average_word_embeddings_glove.6B.300d",
@@ -989,5 +946,48 @@
989
  },
990
  "task_id": "t06",
991
  "family": "A"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
992
  }
993
  ]
 
218
  "task_id": "t07",
219
  "family": "A"
220
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  {
222
  "task": "t09_coreference",
223
  "encoder": "static-average_word_embeddings_glove.6B.300d",
 
946
  },
947
  "task_id": "t06",
948
  "family": "A"
949
+ },
950
+ {
951
+ "task": "t08_length_generalization",
952
+ "encoder": "static-average_word_embeddings_glove.6B.300d",
953
+ "status": "ok",
954
+ "tier": "core",
955
+ "is_diagnostic": false,
956
+ "caps": [
957
+ "encode"
958
+ ],
959
+ "score": 0.5418366037309732,
960
+ "baseline": 0.51035349090269,
961
+ "ceiling": 1.0,
962
+ "control": 0.0,
963
+ "score_vs_baseline": 0.06429763549632243,
964
+ "score_over_ceiling": 0.5418366031891365,
965
+ "target": 0.5,
966
+ "falsifier": 0.2,
967
+ "passed": true,
968
+ "falsified": false,
969
+ "ref_sonar": null,
970
+ "interp": "Money-concept probe trained on SHORT, tested on LONG (concept embedded in real corpus context; DISJOINT short/long trigger vocab). score = short->long transfer beyond surface-position, normalized into the within-long ceiling -> pure length-GENERALIZATION. Bag CANNOT saturate (held-out long vocab); audit FAILS it if bag/surface solves it / no headroom.",
971
+ "raw": {
972
+ "n_items": 2000,
973
+ "n_short": 1000,
974
+ "n_long": 1000,
975
+ "z_short_to_long_auc": 0.6814901345793793,
976
+ "bag_short_to_long_auc": 0.4861340032964747,
977
+ "surface_pos_short_to_long_auc": 0.51035349090269,
978
+ "within_long_auc": 0.8261989726520619,
979
+ "within_short_auc": 1.0,
980
+ "shuffled_control_auc": 0.49619945272119187,
981
+ "gap": 0.14470883807268253,
982
+ "note": "score = (z short->long AUC - surface-pos)/(within-long - surface-pos). bag/surf in normalized space; gap = within-long - short->long. Concept embedded in real corpus context + disjoint short/long trigger vocab => bag cannot saturate."
983
+ },
984
+ "surface_position_baseline": 0.0,
985
+ "bag_baseline": 0.0,
986
+ "audit": {
987
+ "status": "PASS",
988
+ "reasons": []
989
+ },
990
+ "task_id": "t08",
991
+ "family": "A"
992
  }
993
  ]
sieve_bench/tasks/t08_length_generalization.py CHANGED
@@ -1,28 +1,50 @@
1
- """A8 length-generalization — core readout, T0 (v0.2 paraphrase-robust rework).
2
-
3
- Train a SEMANTIC-concept probe (money/finance present) on SHORT sentences, test
4
- on LONG sentences whose trigger vocab is HELD OUT (disjoint from the short
5
- triggers). Does the readout BIND the concept beyond a literal bag AND across
6
- length (compositional / dilution-robust)?
7
-
8
- The old version used one literal token ("Amazon") so a bag read it perfectly at
9
- any length -> score==baseline==1.0, vacuous. The rework (a) makes the target a
10
- paraphrase-robust concept with DISJOINT short/long trigger vocab so a literal
11
- bag CANNOT saturate, and (b) sets the baseline to the SURFACE-POSITION null
12
- (~0.5) and scores the transfer-beyond-surface, normalized into the within-long
13
- ceiling. We also report the length-generalization GAP = within-long short→long.
 
 
 
 
 
 
 
14
 
15
  score = short-trained -> LONG z AUC, normalized into
16
- [surface_position_baseline, within-long ceiling] (binding beyond
17
- surface, robust to length+paraphrase). Raw AUC in raw.
 
 
18
  baseline = surface-position short->long AUC (the null we must beat)
19
- ceiling = WITHIN-LONG z AUC (probe trained AND tested on long)
20
- control = shuffled-label null (short-train -> long) AUC -> ~0.5
21
- bag_baseline = bag-of-words short->long AUC (held-out vocab ->
22
- weak; if it saturates, the audit FAILS the task)
23
- surface_position_baseline = fixed-slot word features short->long AUC
24
- raw.gap = within-long ceiling shortlong z AUC
25
- raw.*_auc = the raw AUCs behind the normalized score
 
 
 
 
 
 
 
 
 
 
 
 
 
26
 
27
  A literal-entity bag can no longer saturate this; the audit rejects it if the
28
  bag/surface null still solves it or if there is no headroom.
@@ -41,10 +63,11 @@ IS_DIAGNOSTIC = False
41
  TARGET = 0.5
42
  FALSIFIER = 0.2
43
  REF_SONAR = None
44
- INTERP = ("Semantic-concept probe trained on SHORT, tested on LONG with HELD-OUT "
45
- "trigger vocab. score = transfer beyond surface-position, normalized "
46
- "into the within-long ceiling. Bag CANNOT saturate (disjoint vocab); "
47
- "audit FAILS it if bag/surface null still solves it or no headroom.")
 
48
 
49
 
50
  def build_data(seed: int = 0, n: int = None, smoke: bool = False):
@@ -67,13 +90,15 @@ def run(encoder, data):
67
  short_idx = np.where(is_short)[0]
68
  long_idx = np.where(~is_short)[0]
69
 
70
- # within-long ceiling: split long into train/test
 
 
71
  rng = np.random.RandomState(seed)
72
  perm_l = rng.permutation(long_idx)
73
  cut = int(len(perm_l) * 0.5)
74
  l_tr, l_te = perm_l[:cut], perm_l[cut:]
75
 
76
- # short-trained -> evaluate on the SAME held-out long test set (l_te)
77
  z_auc = _probe.logistic_auc(Z[short_idx], y[short_idx], Z[l_te], y[l_te])
78
  bag_b = _probe.logistic_auc(Xbag[short_idx], y[short_idx], Xbag[l_te], y[l_te])
79
  pos_b = _probe.logistic_auc(Xpos[short_idx], y[short_idx], Xpos[l_te], y[l_te])
@@ -82,15 +107,15 @@ def run(encoder, data):
82
 
83
  within_long = _probe.logistic_auc(Z[l_tr], y[l_tr], Z[l_te], y[l_te])
84
 
85
- # sanity: within-short AUC
86
  perm_s = rng.permutation(short_idx)
87
  cs = int(len(perm_s) * 0.6)
88
  within_short = _probe.logistic_auc(Z[perm_s[:cs]], y[perm_s[:cs]],
89
  Z[perm_s[cs:]], y[perm_s[cs:]])
90
 
91
  # SCORE = transfer beyond the surface-position null, normalized into the
92
- # within-long ceiling. baseline = surface-position (NOT bag), so the
93
- # headline measures binding-beyond-surface that survives length+paraphrase.
94
  base = pos_b
95
  ceil = max(within_long, z_auc, base + 1e-3)
96
  score = float(np.clip((z_auc - base) / (ceil - base + 1e-9), 0.0, 1.0))
@@ -115,7 +140,7 @@ def run(encoder, data):
115
  "gap": float(within_long - z_auc),
116
  "note": ("score = (z short->long AUC - surface-pos)/(within-long - "
117
  "surface-pos). bag/surf in normalized space; gap = within-long "
118
- "- short->long. Disjoint short/long trigger vocab => bag cannot "
119
- "saturate."),
120
  },
121
  }
 
1
+ """A8 length-generalization — core readout, T0 (v0.3 natural-corpus rework).
2
+
3
+ Train a MONEY/FINANCE concept probe on SHORT sentences (a short corpus-style
4
+ clause carrying, or not, a money word), test on LONG sentences (the same concept
5
+ clause EMBEDDED among 2-3 real, unrelated corpus sentences so the money token is
6
+ ONE content word among ~25-40 -> 1/N dilution). The positive trigger vocab is
7
+ DISJOINT short vs long, so a literal bag trained on the SHORT money words CANNOT
8
+ fire on the held-out LONG money words. The question: does the readout BIND the
9
+ concept beyond a literal bag AND GENERALIZE the readout direction across length?
10
+
11
+ Why the old versions saturated:
12
+ v0.1 used one literal token ("Amazon") -> a bag read it at any length, score==1.
13
+ v0.2 used a money-vs-nature concept in 4 fixed TEMPLATES -> the concept was so
14
+ cleanly separable in every encoder that short->long z AUC hit the
15
+ within-long ceiling for ALL 9 (normalized score==1.0, cross-enc std .005),
16
+ so it carried no ranking signal and was excluded from the LIVE intersection.
17
+ v0.3 embeds the concept in REAL, lexically-varied corpus context so LENGTH
18
+ genuinely DILUTES the signal: a binding encoder transfers short->long; a
19
+ length-fragile / pure-averaging one sees the direction rotate/dilute and
20
+ DEGRADES -> the score now SPREADS across encoders.
21
 
22
  score = short-trained -> LONG z AUC, normalized into
23
+ [surface-position null, within-long ceiling]. Measures
24
+ GENERALIZATION across length (binding-beyond-bag), NOT raw
25
+ readability: the within-long ceiling factors out absolute difficulty
26
+ so the headline is pure length-transfer. Raw AUCs in raw.
27
  baseline = surface-position short->long AUC (the null we must beat)
28
+ ceiling = WITHIN-LONG z AUC (probe trained AND tested on long) -> headroom
29
+ control = shuffled-label null (short-train -> long) AUC -> ~0.5
30
+ bag_baseline = bag-of-words short->long AUC. Held-out LONG money
31
+ vocab => the bag CANNOT transfer -> ~0.5 (floor).
32
+ surface_position_baseline = fixed-slot word features short->long AUC -> ~0.5
33
+ raw.gap = within-long ceiling - short->long z AUC (the
34
+ length-generalization GAP; 0 = perfect transfer)
35
+
36
+ PRE-REGISTRATION.
37
+ Prediction: encoders trained with sentence-level contrastive / retrieval
38
+ objectives on varied-length data (gte, e5, mpnet, LaBSE, SONAR) GENERALIZE
39
+ the concept readout across length better than a static mean-of-GloVe bag,
40
+ which has NO compositional binding and dilutes the concept ~1/N, so it should
41
+ be the WORST length-generalizer. SONAR (fixed-width bottleneck, length-robust
42
+ by design) should be at or near the top.
43
+ Falsifier: if the task is STILL saturated (cross-encoder std < 0.02) or the
44
+ bag/surface null still solves it, the task is STILL BROKEN -> report so
45
+ honestly rather than forcing a spread. If instead every encoder generalizes
46
+ EQUALLY well at high score (std < 0.02 but scores high), the honest finding
47
+ is "length-generalization of this concept is UNIVERSAL".
48
 
49
  A literal-entity bag can no longer saturate this; the audit rejects it if the
50
  bag/surface null still solves it or if there is no headroom.
 
63
  TARGET = 0.5
64
  FALSIFIER = 0.2
65
  REF_SONAR = None
66
+ INTERP = ("Money-concept probe trained on SHORT, tested on LONG (concept embedded "
67
+ "in real corpus context; DISJOINT short/long trigger vocab). score = "
68
+ "short->long transfer beyond surface-position, normalized into the "
69
+ "within-long ceiling -> pure length-GENERALIZATION. Bag CANNOT saturate "
70
+ "(held-out long vocab); audit FAILS it if bag/surface solves it / no headroom.")
71
 
72
 
73
  def build_data(seed: int = 0, n: int = None, smoke: bool = False):
 
90
  short_idx = np.where(is_short)[0]
91
  long_idx = np.where(~is_short)[0]
92
 
93
+ # within-long ceiling: split long into train/test; the short->long probe is
94
+ # evaluated on the SAME held-out long test set (l_te) so ceiling and transfer
95
+ # are measured on identical items.
96
  rng = np.random.RandomState(seed)
97
  perm_l = rng.permutation(long_idx)
98
  cut = int(len(perm_l) * 0.5)
99
  l_tr, l_te = perm_l[:cut], perm_l[cut:]
100
 
101
+ # short-trained -> evaluate on the held-out long test set (l_te)
102
  z_auc = _probe.logistic_auc(Z[short_idx], y[short_idx], Z[l_te], y[l_te])
103
  bag_b = _probe.logistic_auc(Xbag[short_idx], y[short_idx], Xbag[l_te], y[l_te])
104
  pos_b = _probe.logistic_auc(Xpos[short_idx], y[short_idx], Xpos[l_te], y[l_te])
 
107
 
108
  within_long = _probe.logistic_auc(Z[l_tr], y[l_tr], Z[l_te], y[l_te])
109
 
110
+ # sanity: within-short AUC (probe trained AND tested on short)
111
  perm_s = rng.permutation(short_idx)
112
  cs = int(len(perm_s) * 0.6)
113
  within_short = _probe.logistic_auc(Z[perm_s[:cs]], y[perm_s[:cs]],
114
  Z[perm_s[cs:]], y[perm_s[cs:]])
115
 
116
  # SCORE = transfer beyond the surface-position null, normalized into the
117
+ # within-long ceiling. baseline = surface-position (NOT bag), so the headline
118
+ # measures length-GENERALIZATION (binding-beyond-surface that survives length).
119
  base = pos_b
120
  ceil = max(within_long, z_auc, base + 1e-3)
121
  score = float(np.clip((z_auc - base) / (ceil - base + 1e-9), 0.0, 1.0))
 
140
  "gap": float(within_long - z_auc),
141
  "note": ("score = (z short->long AUC - surface-pos)/(within-long - "
142
  "surface-pos). bag/surf in normalized space; gap = within-long "
143
+ "- short->long. Concept embedded in real corpus context + "
144
+ "disjoint short/long trigger vocab => bag cannot saturate."),
145
  },
146
  }