Endikavi commited on
Commit
ed926f1
·
verified ·
1 Parent(s): 965c51b

BTZSC-22 external zero-shot classification evaluation (eval/btzsc22/) and README section (release commit 329aac4)

Browse files
CHANGELOG_CLAIMS.md CHANGED
@@ -29,3 +29,4 @@ Each is kept here with what replaced it and how it was found.
29
  | 22 | `pipeline_tag: text-classification` | No `pipeline_tag`: on the private staging repo the Hub attached a generic text-classification widget that no inference provider can run with this custom interface; descriptive tags kept | Hub metadata of the private repo |
30
  | 23 | Licence scope: weights/config/tokenizer Apache-2.0 and code MIT, other files unstated | Every file is assigned: Apache-2.0 also for documentation, `paper/`, training records, the model's own eval outputs and SHA256SUMS; MIT also for environment/build files; test-set gold labels and teacher distributions in `eval/` keep their datasets' licences | README, NOTICE, LICENSING_NOTES.md |
31
  | 24 | Paper as a draft, not in the repository | Technical report v1 (`paper/Ines-1.pdf`, LaTeX sources included); only change from the frozen draft: the date line now reads "Ines-1 Technical Report, October 2026" | `paper/` |
 
 
29
  | 22 | `pipeline_tag: text-classification` | No `pipeline_tag`: on the private staging repo the Hub attached a generic text-classification widget that no inference provider can run with this custom interface; descriptive tags kept | Hub metadata of the private repo |
30
  | 23 | Licence scope: weights/config/tokenizer Apache-2.0 and code MIT, other files unstated | Every file is assigned: Apache-2.0 also for documentation, `paper/`, training records, the model's own eval outputs and SHA256SUMS; MIT also for environment/build files; test-set gold labels and teacher distributions in `eval/` keep their datasets' licences | README, NOTICE, LICENSING_NOTES.md |
31
  | 24 | Paper as a draft, not in the repository | Technical report v1 (`paper/Ines-1.pdf`, LaTeX sources included); only change from the frozen draft: the date line now reads "Ines-1 Technical Report, October 2026" | `paper/` |
32
+ | 25 | No evaluation on tasks absent from training | BTZSC-22 (extension of the jev-benchmarks protocol): 22 datasets, 15 absent from the decision fine-tuning mixture; Ines-1 lowest mean macro-F1 under the model-specific track, resolved only against GLiNER2.5; one-vs-rest does not help Ines-1, pairwise knockout (descriptive ablation) improves 6/9 multiclass datasets | `eval/btzsc22/` |
LICENSING_NOTES.md CHANGED
@@ -7,7 +7,7 @@ below were read on 2026-10-02 from the official Hugging Face dataset cards (revi
7
  ## 1. Code — MIT
8
 
9
  The modelling code (`mini_v41/`), the decision reader (`mini_v41_jev/`) and the scripts (`scripts/`, `examples/`,
10
- `training/code/`) are released under the MIT License; the text is in [LICENSE-CODE](LICENSE-CODE)
11
  (Copyright (c) 2026 Endikavi). The environment and build files (`Dockerfile`, `.dockerignore`, `requirements.txt`,
12
  `requirements.lock`, `.gitattributes`, `.gitignore`) are MIT as well.
13
 
@@ -30,7 +30,8 @@ material below. Facts considered:
30
  **Other files under Apache-2.0** (scope set on 2026-10-02, same LICENSE and NOTICE): the documentation (`README.md` and
31
  the other `.md` files, `paper/`, `tasksource_license_audit.csv`), the training records (`training/*.json`), the model's own
32
  evaluation outputs in `eval/` and `SHA256SUMS`. **Not relicensed:** the gold labels and teacher distributions of public
33
- test sets included in `eval/items/` and `eval/reference_rows.json` keep the licences of their datasets.
 
34
 
35
  These notes do not conclude whether trained weights are a derivative work of their training data; the licence of the
36
  weights does not change the terms of that data.
 
7
  ## 1. Code — MIT
8
 
9
  The modelling code (`mini_v41/`), the decision reader (`mini_v41_jev/`) and the scripts (`scripts/`, `examples/`,
10
+ `training/code/`, `eval/btzsc22/code/`) are released under the MIT License; the text is in [LICENSE-CODE](LICENSE-CODE)
11
  (Copyright (c) 2026 Endikavi). The environment and build files (`Dockerfile`, `.dockerignore`, `requirements.txt`,
12
  `requirements.lock`, `.gitattributes`, `.gitignore`) are MIT as well.
13
 
 
30
  **Other files under Apache-2.0** (scope set on 2026-10-02, same LICENSE and NOTICE): the documentation (`README.md` and
31
  the other `.md` files, `paper/`, `tasksource_license_audit.csv`), the training records (`training/*.json`), the model's own
32
  evaluation outputs in `eval/` and `SHA256SUMS`. **Not relicensed:** the gold labels and teacher distributions of public
33
+ test sets included in `eval/items/` and `eval/reference_rows.json`, and the BTZSC label texts and targets in
34
+ `eval/btzsc22/`, keep the licences of their datasets.
35
 
36
  These notes do not conclude whether trained weights are a derivative work of their training data; the licence of the
37
  weights does not change the terms of that data.
NOTICE CHANGED
@@ -7,12 +7,12 @@ Licensed under the Apache License, Version 2.0 (see LICENSE):
7
  - the training records (training/*.json), the model's own evaluation outputs in eval/, and SHA256SUMS.
8
 
9
  Licensed under the MIT License (see LICENSE-CODE):
10
- - the code: mini_v41/, mini_v41_jev/, scripts/, examples/, training/code/;
11
  - the environment and build files: Dockerfile, .dockerignore, requirements.txt, requirements.lock,
12
  .gitattributes, .gitignore.
13
 
14
  Not relicensed: the gold labels and teacher distributions of public test sets included in eval/items/ and
15
- eval/reference_rows.json keep the licences of their datasets.
16
 
17
  The model was trained on third-party data, which is not redistributed here and remains under its own terms.
18
  Attribution and provenance: THIRD_PARTY_DATA_NOTICE.md. In particular:
 
7
  - the training records (training/*.json), the model's own evaluation outputs in eval/, and SHA256SUMS.
8
 
9
  Licensed under the MIT License (see LICENSE-CODE):
10
+ - the code: mini_v41/, mini_v41_jev/, scripts/, examples/, training/code/, eval/btzsc22/code/;
11
  - the environment and build files: Dockerfile, .dockerignore, requirements.txt, requirements.lock,
12
  .gitattributes, .gitignore.
13
 
14
  Not relicensed: the gold labels and teacher distributions of public test sets included in eval/items/ and
15
+ eval/reference_rows.json, and the BTZSC label texts and targets in eval/btzsc22/, keep the licences of their datasets.
16
 
17
  The model was trained on third-party data, which is not redistributed here and remains under its own terms.
18
  Attribution and provenance: THIRD_PARTY_DATA_NOTICE.md. In particular:
README.md CHANGED
@@ -36,10 +36,11 @@ datasets:
36
  > `tokenizer/`; the documentation (`README.md` and the other `.md` files, `paper/`, `tasksource_license_audit.csv`); the
37
  > training records (`training/*.json`); the model's own evaluation outputs in `eval/`; `SHA256SUMS`.
38
  > - **MIT** ([LICENSE-CODE](LICENSE-CODE)): the code — `mini_v41/`, `mini_v41_jev/`, `scripts/`, `examples/`,
39
- > `training/code/` — and the environment and build files: `Dockerfile`, `.dockerignore`, `requirements.txt`,
40
  > `requirements.lock`, `.gitattributes`, `.gitignore`.
41
  > - **Third-party terms, not relicensed:** the gold labels and teacher distributions of the public test sets that
42
- > `eval/items/` and `eval/reference_rows.json` include keep their datasets' licences. The training data is not
 
43
  > redistributed and remains under its own terms, including attribution, share-alike and copyleft ones: see
44
  > [THIRD_PARTY_DATA_NOTICE.md](THIRD_PARTY_DATA_NOTICE.md) and [LICENSING_NOTES.md](LICENSING_NOTES.md).
45
 
@@ -166,7 +167,7 @@ generalisation.**
166
 
167
  - **tasksource held-out** (2,206 questions, 350 sources): **new examples of tasks seen in training.** Every source of
168
  this test is also in the Stage 2 mix (from its train split); no example group is shared. Accuracy 49.5 % [47.4–51.6]
169
- (Stage 1: 38.5 %; paired p = 1e-14). It is not an unseen-task evaluation; there is none.
170
  - No typed-decisions test case, state, normalised state text or state structure appears in any training file.
171
 
172
  ### External figures, kept apart (no leaderboard ranking)
@@ -182,6 +183,30 @@ whole cases. Specialists trained on typed-decisions `train` have a separate tabl
182
  self-reported, 0.483 to 0.801); the card also notes that scores above its teacher self-agreement (0.735) indicate
183
  learning the teacher's quirks.
184
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
185
  ### Private domain benchmark
186
 
187
  On an internal held-out domain benchmark (9 Spanish subtasks, 1,026 questions; not released), generic typed-decision
@@ -284,7 +309,9 @@ mix (no family above ~29 %):
284
  Prior); API batching does not change that the model sees one question at a time.
285
  - **Specialist exposure to the benchmark.** The typed-decisions results are in-distribution for a model trained on
286
  its train split; they are not comparable with zero-shot results.
287
- - **No unseen-task evaluation.** tasksource measures new examples of tasks seen in training.
 
 
288
  - **Uneven zero-shot domain transfer** (0.558 macro balanced accuracy on a private domain), including a class-prior
289
  shift on yes/no questions over long texts after Stage 2.
290
  - **Specialisation forgetting.** Domain fine-tuning cost 6–9 points of typed-decisions accuracy.
@@ -327,7 +354,7 @@ sacrificing single-question performance.
327
 
328
  `model.safetensors` (bf16), `config.json` (configuration + provenance), `tokenizer/`, `mini_v41/` (modelling code),
329
  `mini_v41_jev/` (reading decisions, `Decider`), `scripts/` (HTTP server, load test), `examples/`, `training/` (recipe,
330
- manifests, data audit, scripts), `eval/` (reports, per-item outputs, speed protocol), [ENVIRONMENT.md](ENVIRONMENT.md),
331
  `requirements.txt`, `requirements.lock`, `Dockerfile`, [CHANGELOG_CLAIMS.md](CHANGELOG_CLAIMS.md),
332
  [THIRD_PARTY_DATA_NOTICE.md](THIRD_PARTY_DATA_NOTICE.md), [LICENSING_NOTES.md](LICENSING_NOTES.md),
333
  [TASKSOURCE_LICENSE_AUDIT.md](TASKSOURCE_LICENSE_AUDIT.md) + `tasksource_license_audit.csv`,
 
36
  > `tokenizer/`; the documentation (`README.md` and the other `.md` files, `paper/`, `tasksource_license_audit.csv`); the
37
  > training records (`training/*.json`); the model's own evaluation outputs in `eval/`; `SHA256SUMS`.
38
  > - **MIT** ([LICENSE-CODE](LICENSE-CODE)): the code — `mini_v41/`, `mini_v41_jev/`, `scripts/`, `examples/`,
39
+ > `training/code/`, `eval/btzsc22/code/` — and the environment and build files: `Dockerfile`, `.dockerignore`, `requirements.txt`,
40
  > `requirements.lock`, `.gitattributes`, `.gitignore`.
41
  > - **Third-party terms, not relicensed:** the gold labels and teacher distributions of the public test sets that
42
+ > `eval/items/`, `eval/reference_rows.json` and `eval/btzsc22/` (BTZSC label texts and targets) include keep their
43
+ > datasets' licences. The training data is not
44
  > redistributed and remains under its own terms, including attribution, share-alike and copyleft ones: see
45
  > [THIRD_PARTY_DATA_NOTICE.md](THIRD_PARTY_DATA_NOTICE.md) and [LICENSING_NOTES.md](LICENSING_NOTES.md).
46
 
 
167
 
168
  - **tasksource held-out** (2,206 questions, 350 sources): **new examples of tasks seen in training.** Every source of
169
  this test is also in the Stage 2 mix (from its train split); no example group is shared. Accuracy 49.5 % [47.4–51.6]
170
+ (Stage 1: 38.5 %; paired p = 1e-14). It is not an evaluation on tasks absent from training; for that, see BTZSC-22 below.
171
  - No typed-decisions test case, state, normalised state text or state structure appears in any training file.
172
 
173
  ### External figures, kept apart (no leaderboard ranking)
 
183
  self-reported, 0.483 to 0.801); the card also notes that scores above its teacher self-agreement (0.735) indicate
184
  learning the teacher's quirks.
185
 
186
+ ### External zero-shot classification: BTZSC-22
187
+
188
+ We evaluated Ines-1 on 22 public BTZSC classification datasets (100 examples per dataset), using an extension of the
189
+ jev-benchmarks protocol. Fifteen of the 22 datasets are absent from Ines-1's decision fine-tuning mixture.
190
+
191
+ Under the model-specific classification track, mean macro-F1 across datasets was 0.474 for Ines-1, 0.525 for Julia-1,
192
+ 0.530 for laya-multilingual, and 0.537 for GLiNER2.5. Using a paired hierarchical bootstrap with datasets as the unit of
193
+ inference, the difference relative to Ines-1 was resolved for GLiNER2.5 (+0.063, 95% CI +0.014 to +0.107), but not for
194
+ Julia-1 (+0.051, 95% CI −0.026 to +0.126) or laya-multilingual (+0.056, 95% CI −0.040 to +0.163). On the 15 datasets
195
+ absent from Ines-1's decision fine-tuning mixture, none of the pairwise differences was resolved.
196
+
197
+ For datasets with at most 20 labels, native ECE was 0.127 for Ines-1, 0.298 for Julia-1, 0.093 for laya-multilingual,
198
+ and 0.159 for GLiNER2.5.
199
+
200
+ We also tested alternative decompositions of multiclass decisions. A common one-vs-rest protocol did not improve Ines-1
201
+ (mean macro-F1 0.457 overall, and 0.489 → 0.283 on the 3–20-label subset). In contrast, a descriptive pairwise-knockout
202
+ ablation improved Ines-1 on 6 of 9 multiclass datasets (accuracy). This suggests that Ines-1's current interface benefits
203
+ more from comparing a small set of competing alternatives than from independently scoring each label as a yes/no
204
+ decision. The knockout result is order-dependent and is reported as an ablation rather than a general classification
205
+ protocol.
206
+
207
+ Full protocol, manifests, prediction hashes, per-dataset results, calibration details, and reproducibility notes are
208
+ available in [`eval/btzsc22/`](eval/btzsc22/).
209
+
210
  ### Private domain benchmark
211
 
212
  On an internal held-out domain benchmark (9 Spanish subtasks, 1,026 questions; not released), generic typed-decision
 
309
  Prior); API batching does not change that the model sees one question at a time.
310
  - **Specialist exposure to the benchmark.** The typed-decisions results are in-distribution for a model trained on
311
  its train split; they are not comparable with zero-shot results.
312
+ - **Limited evaluation on tasks absent from training.** tasksource measures new examples of tasks seen in training;
313
+ BTZSC-22 includes 15 datasets absent from the decision fine-tuning mixture (100 examples each; pretraining exposure
314
+ not excluded), where no difference against the three classifiers is resolved.
315
  - **Uneven zero-shot domain transfer** (0.558 macro balanced accuracy on a private domain), including a class-prior
316
  shift on yes/no questions over long texts after Stage 2.
317
  - **Specialisation forgetting.** Domain fine-tuning cost 6–9 points of typed-decisions accuracy.
 
354
 
355
  `model.safetensors` (bf16), `config.json` (configuration + provenance), `tokenizer/`, `mini_v41/` (modelling code),
356
  `mini_v41_jev/` (reading decisions, `Decider`), `scripts/` (HTTP server, load test), `examples/`, `training/` (recipe,
357
+ manifests, data audit, scripts), `eval/` (reports, per-item outputs, speed protocol, `btzsc22/` external classification evaluation), [ENVIRONMENT.md](ENVIRONMENT.md),
358
  `requirements.txt`, `requirements.lock`, `Dockerfile`, [CHANGELOG_CLAIMS.md](CHANGELOG_CLAIMS.md),
359
  [THIRD_PARTY_DATA_NOTICE.md](THIRD_PARTY_DATA_NOTICE.md), [LICENSING_NOTES.md](LICENSING_NOTES.md),
360
  [TASKSOURCE_LICENSE_AUDIT.md](TASKSOURCE_LICENSE_AUDIT.md) + `tasksource_license_audit.csv`,
SHA256SUMS CHANGED
@@ -1,17 +1,41 @@
1
  97ad8982da911d928c3423f164a38f80608b98289ac4f4b3f292d90ae0ef2262 .dockerignore
2
  026b23285c5d5e2b117ee5065229bf984d6ae6fad6b21ee1f04c934b7cad1d57 .gitattributes
3
  862263fa1f46c20f0d1e4dac5ffcc75abd55c08211b2c3864c5f8764b9d87793 .gitignore
4
- 39a6b4be19209aad5b756bfcc4895783ee78e3dc1d20418bfada7b9bd1147b4c CHANGELOG_CLAIMS.md
5
  e4a1aeafc1f6c01f8fff69aef8a2518631428f3ec96db4a9a56d7bb296cce95f Dockerfile
6
  5e98ea3d3045927158b597521fcf127ac5569e656e4e665f0c94a35e2a191980 ENVIRONMENT.md
7
  cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE
8
  6a7ddcad077839a44697c005ea7e6f455caecaa8054412913108d6e21a1c9dbe LICENSE-CODE
9
- d371047b330ef8dbeb22847ba1da6d2d3a0a8c37f74e5b5aa5164a566422fd02 LICENSING_NOTES.md
10
- b1e43b9261ff12e9040fa4b1a36f5b357324e31385640de5cabd0f652e236dc3 NOTICE
11
- 8de965bdd1acc8af7bc75db6a28356241227897632a6c04ce4559ab0d66b3a30 README.md
12
  6ec8a2bb55f9331d77b9adbeae7fd71eeb5614a988cd21eee18c7bde775df5ba TASKSOURCE_LICENSE_AUDIT.md
13
- 058dc5687ddb161d4dbfcf1703ae059e78698714b4ce2ddf1783262c10b95142 THIRD_PARTY_DATA_NOTICE.md
14
- fbdcb006a93dfc3f384b4c6b713ed33215b72409bf5500b9d6c209cf889e4e38 config.json
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  da9bad7608ad2fd759e0e9088fd55a60a22d11ea6b8cb720040594a2b0fc556f eval/fullcase_report.json
16
  60e288cf88dfdf189fa7582daaad8a274911ce47db6cf47f3dfe0367760fa353 eval/fullcase_report.md
17
  a8e81da13d548c4dac0d26ecab081c4640429f1493eb607015bbca8008000d29 eval/items/v3-engram_off__tasksource.jsonl
@@ -91,7 +115,7 @@ fb24a4241b3649948bcf4392ad7e553fbb271baa9bfb80d92260f590f7817977 training/code/
91
  156ddb49b6a8d3c7a4bb6369f5269359d5110f19b30087a578bbe6bbc29153d1 training/code/prepare_mix.py
92
  94f85491a03b57cb43693237813d461edc8be1363844f9bd295bce5ab28a8cbe training/code/prepare_public.py
93
  c9fb2b03d023f961b9de00b4b5d458c0215c27d1a081f9ab708fa0ced664f5a8 training/code/reference_rows.py
94
- d06c63d039f7e10ebe4fe8c7f410a1f1219f89adff5c87ad3875fa52e8ed5dc2 training/code/release/build_release.py
95
  11448761b33a78703239d651e61d45f2e2ffe61c222ed5d9be15a33805f31398 training/code/train_decisions.py
96
  0c680ad5db1cd7867c64c50b742512897ab645d693cda4f66bb69eec84916b8c training/data_audit.json
97
  79b091a8a4d542ba546254fe7123e4c458ac6a566a88f761d3c54f49eea49a1d training/stage1_typed_jev.manifest.json
 
1
  97ad8982da911d928c3423f164a38f80608b98289ac4f4b3f292d90ae0ef2262 .dockerignore
2
  026b23285c5d5e2b117ee5065229bf984d6ae6fad6b21ee1f04c934b7cad1d57 .gitattributes
3
  862263fa1f46c20f0d1e4dac5ffcc75abd55c08211b2c3864c5f8764b9d87793 .gitignore
4
+ 4463cc803842f7fe2406ce4e15039ff73842826d0f0c222f6857f73f8da7f54a CHANGELOG_CLAIMS.md
5
  e4a1aeafc1f6c01f8fff69aef8a2518631428f3ec96db4a9a56d7bb296cce95f Dockerfile
6
  5e98ea3d3045927158b597521fcf127ac5569e656e4e665f0c94a35e2a191980 ENVIRONMENT.md
7
  cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE
8
  6a7ddcad077839a44697c005ea7e6f455caecaa8054412913108d6e21a1c9dbe LICENSE-CODE
9
+ 121b31536257bd7147d9c9b054f6fb4e2bb68734024415c081ac0b50c7cf48f1 LICENSING_NOTES.md
10
+ 1faada60db1ccfc073ae063fc474d9f75cba0c9d2683d03ad66b2074efeb166a NOTICE
11
+ d74ebe08f28c4f95dbf275fa9ff015c4f6ca7aacf59e3f65add1e15c8572de3c README.md
12
  6ec8a2bb55f9331d77b9adbeae7fd71eeb5614a988cd21eee18c7bde775df5ba TASKSOURCE_LICENSE_AUDIT.md
13
+ 1a4df8f10bd30b01e6acc19ef2d935faee5485f0c25452ff64ba6c8598fabd97 THIRD_PARTY_DATA_NOTICE.md
14
+ 757003b29ec1d935f236c06ea1e39cf9362c43de358f8b3df74326f8bfdbd40d config.json
15
+ 8f296d2c1dbe85d285bb45cd80d841e733f84168ff130daf825933917684993b eval/btzsc22/PROTOCOL.md
16
+ 5cc7f2cd08668abe6ac5dd5455e61bc2315e556e26c45906150426810fd49455 eval/btzsc22/REPORT.md
17
+ 95a4d4c459940195f03c6b937d750cd8e678527c4e2acaee1f7f2f3a9adc512c eval/btzsc22/btzsc_test_files.json
18
+ bb7dbba94cc130a09c77226e51cb7b72e5228685fbf8c2f78522290f485eff1e eval/btzsc22/code/README.md
19
+ afac77fa429f2f37c45e6cf46d0201551e9c98ddf9c01e7ba0cf1ac1feca0ef7 eval/btzsc22/code/btzsc22.yaml
20
+ 324bf63e3dad253faebaaa8a7a208f046e5f6e53872e1cf8dc925b0b049db1f7 eval/btzsc22/code/make_report.py
21
+ a9b670b4bdaa77f878c31617407a7a8255cc5152fcc4196917390862cb536bb4 eval/btzsc22/code/prepare.py
22
+ 6ff68021abdf7957601a327e8fe7e1bca2c1148bdec3778f4afe1f5eb7d8f5d3 eval/btzsc22/code/run_model.py
23
+ 3f3fb8320cf6547cc359d64548adcd409b7d7c337c41773ff048e4f1ab8f6f15 eval/btzsc22/code/run_track.py
24
+ 12402f588a6ef7d0ca6202e6184330ace0de7474b9e529d0d0517f08c194c89a eval/btzsc22/code/run_tracks.sh
25
+ 49d9f9abe284e3571251c655607ab3b3f49a0896febb92cbf3733af57a6803ad eval/btzsc22/code/score_final.py
26
+ 8a2db365220f8fe59663fadfa6698c9117d38bf00a2a44beb462feead72af573 eval/btzsc22/manifest_ids.jsonl
27
+ 00da1891b1700fa327716f4c7e53d8c2ce1a23d3a20c5712972fdcc07db7952e eval/btzsc22/per_dataset.csv
28
+ 2862d2a7c65571586b7b8b607fe0daafe758c37fcccd51e00c2db7fa84bf5e4c eval/btzsc22/predictions/ablation_ines.knockout_2.jsonl
29
+ e715c918b8a3b94a09661f51dad9df07c23d1b1dd468648a107cf435b408dd7d eval/btzsc22/predictions/ablation_ines.knockout_20.jsonl
30
+ b24c521b251795d3ec90d4d31fe0b2aa15856248afe588243207b8ef1ed98a1e eval/btzsc22/predictions/trackA_native.gliner.jsonl
31
+ 673bb5373d0010481dbfc9f911cd85bebfed877d6ea759e2e3c0c7f10bb50873 eval/btzsc22/predictions/trackA_native.ines.jsonl
32
+ 914245b7b3545549998081b6df30e7b51f9ed725abffd36f9719ecf4044f548b eval/btzsc22/predictions/trackA_native.julia.jsonl
33
+ f65cd55dce20a876eb6ab366d6b5414528c302e357c71f3e1b14450a9eeab6bd eval/btzsc22/predictions/trackA_native.laya.jsonl
34
+ 951aef27d70fed182d86381cb50bb7f0edb7c01c14fb9305fc2b67a423c5bba7 eval/btzsc22/predictions/trackB_ovr.gliner.jsonl
35
+ 102ddda9d71db407d6d519dd82dc691c76800584bfed7c5fd58dd12aa3559866 eval/btzsc22/predictions/trackB_ovr.ines.jsonl
36
+ d0ca40988b8ad697223f7ccfc18ac35840c1390a5d46fabc219dab0c02069ed3 eval/btzsc22/predictions/trackB_ovr.julia.jsonl
37
+ 3c38c8a6e8afd8b80d0a66afa3fd8ae6c0f744e3f52b9cddc6d35d9c01c6ea4f eval/btzsc22/predictions/trackB_ovr.laya.jsonl
38
+ 707f23cd6b4ae30a38573d4f29ce852a82878b23ee062c61a8025d4bae1360ff eval/btzsc22/results.json
39
  da9bad7608ad2fd759e0e9088fd55a60a22d11ea6b8cb720040594a2b0fc556f eval/fullcase_report.json
40
  60e288cf88dfdf189fa7582daaad8a274911ce47db6cf47f3dfe0367760fa353 eval/fullcase_report.md
41
  a8e81da13d548c4dac0d26ecab081c4640429f1493eb607015bbca8008000d29 eval/items/v3-engram_off__tasksource.jsonl
 
115
  156ddb49b6a8d3c7a4bb6369f5269359d5110f19b30087a578bbe6bbc29153d1 training/code/prepare_mix.py
116
  94f85491a03b57cb43693237813d461edc8be1363844f9bd295bce5ab28a8cbe training/code/prepare_public.py
117
  c9fb2b03d023f961b9de00b4b5d458c0215c27d1a081f9ab708fa0ced664f5a8 training/code/reference_rows.py
118
+ 380e125fe024c921ebaf49b4ca55b36dbaa46b9c1087988dd7819a7a2b6fc8a7 training/code/release/build_release.py
119
  11448761b33a78703239d651e61d45f2e2ffe61c222ed5d9be15a33805f31398 training/code/train_decisions.py
120
  0c680ad5db1cd7867c64c50b742512897ab645d693cda4f66bb69eec84916b8c training/data_audit.json
121
  79b091a8a4d542ba546254fe7123e4c458ac6a566a88f761d3c54f49eea49a1d training/stage1_typed_jev.manifest.json
THIRD_PARTY_DATA_NOTICE.md CHANGED
@@ -38,6 +38,10 @@ published.
38
 
39
  ## Evaluation-only data
40
 
 
 
 
 
41
  The private domain benchmark mentioned in the model card is not part of this repository, and none of its data, labels
42
  or examples are included.
43
 
 
38
 
39
  ## Evaluation-only data
40
 
41
+ | Dataset / source | Project / author | URL / identifier | Licence / note | Used for |
42
+ |---|---|---|---|---|
43
+ | BTZSC (22 base datasets) | BTZSC authors (btzsc) | `btzsc/btzsc` @ `fef2a2ac` — https://huggingface.co/datasets/btzsc/btzsc | No licence in the HF metadata; the 22 underlying datasets keep their own terms. `eval/btzsc22/` contains example IDs, text hashes, BTZSC label texts and targets, not the example texts | External evaluation only (BTZSC-22), not training |
44
+
45
  The private domain benchmark mentioned in the model card is not part of this repository, and none of its data, labels
46
  or examples are included.
47
 
config.json CHANGED
@@ -95,7 +95,7 @@
95
  "engram_backend_identity": "token_id:65536:65536:197f7a314b356f70",
96
  "training_code_commit": "0b5e63e3da05c1a51eb9f0ea1758f8d53d200a80-dirty",
97
  "bundle_model_code_commit": "5d1ad97",
98
- "bundle_release_code_commit": "248b774",
99
  "torch_version_at_training": "2.14.0+cu130"
100
  }
101
  }
 
95
  "engram_backend_identity": "token_id:65536:65536:197f7a314b356f70",
96
  "training_code_commit": "0b5e63e3da05c1a51eb9f0ea1758f8d53d200a80-dirty",
97
  "bundle_model_code_commit": "5d1ad97",
98
+ "bundle_release_code_commit": "329aac4",
99
  "torch_version_at_training": "2.14.0+cu130"
100
  }
101
  }
eval/btzsc22/PROTOCOL.md ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # BTZSC-22 evaluation using an extension of the jev-benchmarks protocol
2
+
3
+ > **Amendment (2026-10-02, after the run; documentation only — nothing executed was changed).** Track A is renamed from
4
+ > "native" to **model-specific classification track**, because above their limits Julia-1 uses its Router and Ines-1 the
5
+ > knockout fallback of this protocol. Added: BTZSC file hashes and manifest regeneration, full model revisions, the
6
+ > Julia-1 Router build (Bend 2.0.27), the laya-multilingual option condition, Ines-1's > 26-label handling and the exact
7
+ > definition of the paired hierarchical bootstrap. The original frozen text follows, with only the track name changed.
8
+
9
+ Protocol revision `btzsc22-ext-v1`, frozen on 2026-10-02 **before** any Track A rerun, Track B run or final analysis.
10
+ This is our own protocol. It extends the public jev-benchmarks pilot (`btzsc-pilot-v1`, frozen on AG News, DAIR
11
+ Emotion and Banking77) to all 22 BTZSC base datasets; it is not the public pilot, and results on the 19 added datasets
12
+ are not jev-benchmarks results.
13
+
14
+ ## Data
15
+
16
+ | item | value |
17
+ |---|---|
18
+ | dataset | `btzsc/btzsc` @ `fef2a2ac62b69c58670047dddf045c53d7c3cb5e`, split `test`, BTZSC label descriptions (`hypothesis`) |
19
+ | sampling | jev-benchmarks @ `0d610cc53e79bcbec691312b0c4adb4a0e371642`, `load_examples` unchanged: 100 examples per dataset, target-balanced, seed 20260917 + dataset position; rows with no single positive label excluded (Banking77 out-of-scope) |
20
+ | datasets (order) | agnews, emotiondair, banking77, amazonpolarity, imdb, appreviews, yelpreviews, rottentomatoes, financialphrasebank, empathetic, biasframes_intent, massive, yahootopics, trueteacher, manifesto, capsotu, biasframes_offensive, biasframes_sex, wikitoxic_insult, wikitoxic_obscene, wikitoxic_threat, wikitoxic_toxicaggregated |
21
+ | manifest | `manifest.jsonl`, 2,200 examples, sha256 `3edcd991c97fa3cf561367adf14351ea5b6c484fd317a4a2dab564d9ab2a37c8` (example IDs, text hashes, labels, targets) |
22
+ | pilot identity | the first three datasets keep the pilot's order, so their 300 examples are the pilot's: rebuilding the pilot manifest with jev-benchmarks gives its published sha256 `ec064c52b149de458344cd4b4a44c158460f30b3bbb7fe8b2e7ec72d0abf3ba5`, and its IDs equal our first 300 |
23
+
24
+ Label cardinality: 2 labels (13 datasets), 3–20 (agnews 4, emotiondair 6, financialphrasebank 3, yahootopics 10),
25
+ over 20 (banking77 72, massive 59, manifesto 56, empathetic 32, capsotu 21). Public checkpoints may have seen these
26
+ datasets; results measure benchmark performance, not uncontaminated generalisation.
27
+
28
+ **Relation to Ines-1's training.** 15 datasets are **absent from Ines-1's decision fine-tuning mixture**. 7 belong to
29
+ source families used in it (tasksource sources): amazonpolarity (`amazon_polarity`), banking77 (`banking77`), massive
30
+ (`multilingual/massive`) and the four `wikitoxic_*` (`jigsaw_toxicity`, the same Jigsaw/Wikipedia comments). Nothing is
31
+ claimed about pretraining, whose web corpora may contain any of them. The other models' training data is not known to us.
32
+
33
+ ## Models (weights hashed on the evaluation machine)
34
+
35
+ | model | revision | weights sha256 | runtime |
36
+ |---|---|---|---|
37
+ | Ines-1 | `Endikavi/Ines-1` @ `965c51b8` | `7fa38ab3…c555` | `mini_v41_jev.Decider`, bf16 + autocast (canonical), one prompt per question |
38
+ | Julia-1 | `SupersonicLabs/Julia-1` @ `a85b1273` | `df853bf7…5b72` | `julia.load_model(device="cuda", strict_encoding=True, max_length=8192, head_length=512)` (package `supersonic-julia` 0.1.0 from the model repo) |
39
+ | laya-multilingual | `convaiinnovations/laya-multilingual` @ `e4e9ddf2` | `9d628fd9…f204` | `laya` 0.3.24, `laya.load(<local snapshot>)`, `predict(..., max_len=8192)` |
40
+ | GLiNER2.5 | `fastino/gliner2.5-multi-v1` @ `235cf92d` | `c1ff4ec0…5395` | `gliner2` 2.0.0, `Classifier.from_pretrained(revision=…)` as in jev-benchmarks. gliner2 resolves only `config.json` at the pinned revision and the weights/tokenizer from `main` (`2ca71aaf`); `model.safetensors`, tokenizer and configs are byte-identical at both revisions (Hub file listings), only README/SKILL differ |
41
+
42
+ Execution: one shared H200 (GPU also used by an unrelated training job: no latency is reported). PyTorch 2.14.0 in
43
+ every environment. Julia-1 and laya run with `TORCHDYNAMO_DISABLE=1` and `TORCH_DISABLE_NATIVE_JIT=1` (PyTorch's eager
44
+ Triton overrides need Python headers absent on the machine; aten kernels are used instead). GLiNER runs on GPU in fp32
45
+ instead of the pilot's CPU: same argmax on 50/50 examples and max |Δp| 1.4e-5 against CPU.
46
+
47
+ ## Track A — model-specific classification track (frozen as "native")
48
+
49
+ Each model receives the full label set through its normal, published interface. One request:
50
+ `state = {"text": <text>}`, one Choice question `"Which single label best describes the input text?"`; GLiNER gets one
51
+ exclusive classification schema over the label texts (as in jev-benchmarks).
52
+
53
+ | model | ≤ limit | above its limit |
54
+ |---|---|---|
55
+ | Ines-1 | ≤ 26 labels (letters A–Z): one request, criteria `label_NNN → label text` (only the text is shown) | **no published interface.** Reported from the knockout ablation (groups of 20 in BTZSC order, each group's argmax advances), marked as such |
56
+ | Julia-1 | ≤ 20: one request (`predict`), criteria `label_NNN → label text` | its documented `Router(engine, width=20, survivors=2)`: grouped narrowing and reranking; final probabilities cover the final candidates only (not a global distribution) |
57
+ | laya-multilingual | no hard limit: one `predict` with criteria given **as the list of label texts** (laya renders a list label as itself, so no `label_NNN` appears; the runtime is unchanged). The README recommends ≤ ~20 options; its large-set path (`laya.shortlist.predict_shortlist`) needs an external embedding model and is **not** used |
58
+ | GLiNER2.5 | no limit: one schema with all labels |
59
+
60
+ ## Track B — common one-vs-rest binary decomposition
61
+
62
+ The same reduction for every model. For each label i, one independent yes/no question:
63
+ `Does this text belong to the label "<label text>"?` — a `noul` question with no criteria for Ines-1, Julia-1 and laya;
64
+ for GLiNER, an exclusive schema whose task name is that question and whose labels are `yes`, `no`.
65
+ `s_i = log(P_yes / P_no)` with P clipped to [1e-12, 1 − 1e-12]; prediction `argmax_i s_i`, ties → lowest label index
66
+ (ties counted and reported). `softmax(s)` is stored as a **derived multiclass probability**, never as the model's native
67
+ probability. No temperature or threshold is fitted. The K questions are independent: Julia-1 and laya answer them in one
68
+ batched call (checked equal to one-at-a-time on a made-up example, within 1e-4), Ines-1 one prompt each (canonical),
69
+ GLiNER one call each.
70
+
71
+ ## Ablation (Ines-1)
72
+
73
+ native (≤ 26) · knockout in groups of 20 · pairwise knockout (groups of 2, BTZSC order) · one-vs-rest (Track B). The two
74
+ knockouts were run before this freeze with the exploratory runner `run_model.py` (same Choice request as Track A); they
75
+ are reused, not rerun. Exploratory knockouts for the other models and laya runs with `label_NNN` keys are kept as records.
76
+
77
+ ## Metrics and statistics
78
+
79
+ - Per dataset: accuracy and macro-F1 (`jev_benchmarks.metrics._macro_f1`); failures count as wrong.
80
+ - Global: equal-weight mean of per-dataset macro-F1 over the 22 datasets; groups by cardinality and by fine-tuning
81
+ membership.
82
+ - **Paired hierarchical bootstrap** (2,000 resamples, seed 20260917): resample the 22 datasets with replacement; within
83
+ each drawn dataset resample examples stratified by target; macro-F1 per dataset; equal-weight mean; paired difference
84
+ between two models on the same draws. 95 % percentile interval. The unit of inference is the dataset.
85
+ - Probability quality, kept apart:
86
+ - *native* (Track A single requests): Brier, NLL, top-label ECE (10 bins), coverage at ≤ 5 % empirical error (jev-benchmarks `score_predictions`),
87
+ only on datasets where every model returns a full native distribution (≤ 20 labels, single request);
88
+ - *derived* (Track B, softmax of log-odds): the same metrics, labelled derived.
89
+ - High-cardinality datasets (21–72 labels, 100 examples) give noisy per-dataset macro-F1: no per-dataset winner is claimed
90
+ there without a clear interval; they stay in the global mean.
91
+
92
+ ## Sanity anchors (reported with values)
93
+
94
+ GLiNER2.5 Track A on the pilot's 300 examples vs the published pilot (accuracy 0.70 / 0.44 / 0.61); Julia-1 Track A vs
95
+ its model card under shared conditions (AG News 94/100, DAIR Emotion 86/100, Banking77 64/100 with 1 abstention).
96
+
97
+ ## Frozen code
98
+
99
+ `run_track.py` sha256 `3f3fb8320cf6547cc359d64548adcd409b7d7c337c41773ff048e4f1ab8f6f15` (templates are constants of
100
+ that file); `score_final.py` hashed when written, before reading Track B results: sha256
101
+ `49d9f9abe284e3571251c655607ab3b3f49a0896febb92cbf3733af57a6803ad` (recorded on the evaluation machine before the analysis ran).
102
+
103
+
104
+ ---
105
+
106
+ ## Amendment details (documentation only)
107
+
108
+ ### BTZSC source files
109
+
110
+ `btzsc/btzsc` @ `fef2a2ac62b69c58670047dddf045c53d7c3cb5e`, one test Parquet per dataset; sha256 as published by the
111
+ Hub (LFS oid) for that revision. Machine-readable copy: `btzsc_test_files.json`.
112
+
113
+ | dataset | file | sha256 | bytes |
114
+ |---|---|---|---:|
115
+ | agnews | `agnews/test-00000-of-00001.parquet` | `b51a89341546018960b5724596ad3192f12d0649c5e45e91a06c0cee4253510f` | 1,280,949 |
116
+ | emotiondair | `emotiondair/test-00000-of-00001.parquet` | `779970bb63817275a9d4004e4114ed00f2d86dc7670c36e13b4d018f85dc18ae` | 158,115 |
117
+ | banking77 | `banking77/test-00000-of-00001.parquet` | `f42b14bddca9455891438e5e03ad2626e9de908eac0b65dbee4d5fa9eff8a776` | 804,682 |
118
+ | amazonpolarity | `amazonpolarity/test-00000-of-00001.parquet` | `69dd2b714829e7aa44c15eb3e26e8773b16c1076b3f7de2dd5abde03c26783e9` | 2,974,010 |
119
+ | imdb | `imdb/test-00000-of-00001.parquet` | `5f2e538b4c3fe71543ba661bdde6dd0c9b07e12cab5da3f170a1e254e61f237e` | 8,559,151 |
120
+ | appreviews | `appreviews/test-00000-of-00001.parquet` | `085aaf8b64b36619f8e2b243a42d16c0959170b70627209b180fce89adc72a09` | 566,905 |
121
+ | yelpreviews | `yelpreviews/test-00000-of-00001.parquet` | `f640df1fc45beccaa5f7c4a76419530bd6b7dc569200302469e006f34f738248` | 4,505,433 |
122
+ | rottentomatoes | `rottentomatoes/test-00000-of-00001.parquet` | `e611f582e7357ea5a1ae5bd19e6eef0d7f7bbf233aad3c4c7e4800fbee163945` | 95,622 |
123
+ | financialphrasebank | `financialphrasebank/test-00000-of-00001.parquet` | `af946f94e5dc2f5479ae8da33b70624a31f66e28e02d98d9426d399e6195401a` | 65,448 |
124
+ | empathetic | `empathetic/test-00000-of-00001.parquet` | `c16923bdf05d2a2223ce9c8a696c8db1cfed83156e3b300eba5a547d6f42f078` | 1,092,730 |
125
+ | biasframes_intent | `biasframes_intent/test-00000-of-00001.parquet` | `82a6da7eff047ac43fde1fdcc1d9b1b986cde08718d324f04af901607f585941` | 310,428 |
126
+ | massive | `massive/test-00000-of-00001.parquet` | `ad109e13b5204ca4b80545d15d9f81167516b1e4ebd834f9d8e870039c9b8b96` | 558,077 |
127
+ | yahootopics | `yahootopics/test-00000-of-00001.parquet` | `c51a3f3de236cc897f5328c39c0946455d82c7465ffb4d3b0ad52b83d56e9b50` | 19,108,728 |
128
+ | trueteacher | `trueteacher/test-00000-of-00001.parquet` | `5e84c9d12755f2de3c40bf2e24b321f161db126bba12d0a6ba19b2da6587af46` | 6,972,936 |
129
+ | manifesto | `manifesto/test-00000-of-00001.parquet` | `78169ff647e0218ef3959c7837a53c3e1e1b65731efdeb22752a1da31ae02a38` | 8,569,698 |
130
+ | capsotu | `capsotu/test-00000-of-00001.parquet` | `33e1d9262a8923d35cb2e92c7b72f56a6caf2f55049165896e2b27d5934b39a2` | 723,183 |
131
+ | biasframes_offensive | `biasframes_offensive/test-00000-of-00001.parquet` | `5b4df757e7241d8fd5456fe04545eea2bfc171b9462069ea369991c9b4cef10e` | 327,567 |
132
+ | biasframes_sex | `biasframes_sex/test-00000-of-00001.parquet` | `7cb2a305f07378708941d792d858577eb552faded64958d91b6da3d7360c5057` | 379,857 |
133
+ | wikitoxic_insult | `wikitoxic_insult/test-00000-of-00001.parquet` | `16701455c8c71451ba98a7ffc9b26af8d0a0a2d34da7c1b30e78d598cb60cda3` | 1,724,127 |
134
+ | wikitoxic_obscene | `wikitoxic_obscene/test-00000-of-00001.parquet` | `733d7dd830d2fbb30c7b1f2261f68029f6889d2196349eb728350ea46a074298` | 1,847,410 |
135
+ | wikitoxic_threat | `wikitoxic_threat/test-00000-of-00001.parquet` | `f088d3cd21c895a7d27cbacf901c1873cb5aca21576ff345d05c43f22ce0ac6a` | 1,332,140 |
136
+ | wikitoxic_toxicaggregated | `wikitoxic_toxicaggregated/test-00000-of-00001.parquet` | `bc706516c9f218e57de4e418691fdfd956cb0baa34574811bfdb692bf28e1b5f` | 2,024,344 |
137
+
138
+ ### Regenerating the manifest
139
+
140
+ ```bash
141
+ git clone https://github.com/AbdelStark/jev-benchmarks && git -C jev-benchmarks checkout 0d610cc53e79bcbec691312b0c4adb4a0e371642
142
+ pip install -e "./jev-benchmarks[data]" # datasets>=4,<5
143
+ python code/prepare.py code/btzsc22.yaml manifest.jsonl
144
+ sha256sum manifest.jsonl # 3edcd991c97fa3cf561367adf14351ea5b6c484fd317a4a2dab564d9ab2a37c8
145
+ ```
146
+
147
+ `manifest.jsonl` contains the example texts and is not shipped; `manifest_ids.jsonl` is the same file without the `text`
148
+ field (IDs, `text_sha256`, labels, targets), so a regenerated manifest can be checked row by row.
149
+
150
+ ### Exact model revisions
151
+
152
+ | model | Hub repository @ revision | weights file sha256 |
153
+ |---|---|---|
154
+ | Ines-1 | `Endikavi/Ines-1` @ `965c51b8211a08a8d91c4f078eb7ffbf55e8d29e` | `model.safetensors` `7fa38ab3adf37530c5b150b0527d8cc9c24350b402cd2d8bf727e736b78ac555` |
155
+ | Julia-1 | `SupersonicLabs/Julia-1` @ `a85b127321d580d65176c89ced8273f305745d85` | `model.safetensors` `df853bf7fe424420011f3d0c47a05d7341aa9eefa7fb9f203ea4aada4ad95b72` |
156
+ | laya-multilingual | `convaiinnovations/laya-multilingual` @ `e4e9ddf21a7b1903b7acffd8814ad4307bf63a67` | `model.safetensors` `9d628fd971b700382ac6f65920a86f149777b2e748e0c955fb3b19695aa8f204` |
157
+ | GLiNER2.5 | `fastino/gliner2.5-multi-v1` @ `235cf92d6d4318da9bfca0d08975c8fa7250d13b` (weights resolved from `main` = `2ca71aafb3446d9014e1c55c7ff51c9bc7209c47`, byte-identical files) | `model.safetensors` `c1ff4ec0bc00031c15530b8f3c33d3677f27949e6a0cb52e1247a6224b6c5395` |
158
+
159
+ Runtimes: `mini_v41_jev` from the Ines-1 repository; `supersonic-julia` 0.1.0 (the Julia-1 repository, editable install);
160
+ `laya` 0.3.24; `gliner2` 2.0.0; PyTorch 2.14.0 in every environment.
161
+
162
+ ### Julia-1 Router (Track A above 20 labels)
163
+
164
+ `julia.router.Router(engine, width=20, survivors=2)` around the same engine as the single requests
165
+ (`load_model(device="cuda", strict_encoding=True, max_length=8192, head_length=512)`). The Router loads a native
166
+ reducer, `julia/router/build/libjulia_router.so`, which is not distributed with the model and is built by
167
+ `julia/router/build.py` with Bend **2.0.27** and Clang:
168
+
169
+ | item | value |
170
+ |---|---|
171
+ | Bend | official release `v2.0.27`, asset `bend-2.0.27-linux-x64.tar.gz`, sha256 `58adc86af6605ed0c48f7d84e4c23028f78893ce4a867a20a4f004b11582687b` (verified against the release digest) |
172
+ | compiler | Ubuntu clang 18.1.3 (Ubuntu 24.04, glibc 2.39), portable build (no `--native-cpu`) |
173
+ | `libjulia_router.so` | sha256 `79a346cc9166fa46d0a3a9583de1ca033e1299b8f38d61f4af2c207c58d95e96` |
174
+ | check | the build script's own checks of the generated code passed; `python -m unittest discover -s julia/router/tests`: 30 tests OK |
175
+
176
+ ### laya-multilingual option condition
177
+
178
+ Choice criteria are passed as a **list of label texts**, so laya renders each option as the label text itself; no
179
+ `label_NNN` identifier reaches the model. This is laya's published API (`criteria` may be a list of labels) with the
180
+ runtime unchanged. A discarded exploratory pilot used `label_NNN → text` dicts (rendered as `label_NNN: text`); see
181
+ REPORT.md.
182
+
183
+ ### Ines-1 above 26 labels
184
+
185
+ Ines-1 reads at most 26 options (letters A–Z) and has no published interface for more. In Track A, datasets with more
186
+ than 26 labels (banking77 72, massive 59, manifesto 56, empathetic 32) use this protocol's fallback: labels split in
187
+ BTZSC order into consecutive groups of at most 20; one Choice request per group; each group's argmax advances; repeated
188
+ until one label remains. capsotu (21 labels) uses a single request.
189
+
190
+ ### Paired hierarchical bootstrap (as implemented in `code/score_final.py`)
191
+
192
+ 1. One generator, `numpy.random.default_rng(20260917)`, used sequentially for the groups in this order: all 22
193
+ (2,000 resamples), 2 labels, 3–20 labels, 21–72 labels, absent from the Ines-1 decision fine-tuning mixture,
194
+ families in that mixture (1,000 resamples each).
195
+ 2. Each resample draws n datasets with replacement from the group's n datasets (`integers(0, n, n)`).
196
+ 3. For each drawn dataset, in draw order, examples are resampled with replacement **within each target class** (same
197
+ class sizes; classes in increasing index), giving one index vector shared by every model and track.
198
+ 4. Macro-F1 is computed per model and track on that vector (`jev_benchmarks.metrics._macro_f1`, number of classes = the
199
+ dataset's label count; failed predictions count as wrong).
200
+ 5. For each pair, the difference (B − A) is averaged with equal weight over the drawn datasets (repeats count).
201
+ 6. The interval is the 2.5th and 97.5th percentiles (`numpy.quantile`, linear) of the resampled mean differences; the
202
+ point estimate is the mean per-dataset difference on the original data.
eval/btzsc22/REPORT.md ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # BTZSC-22 evaluation using an extension of the jev-benchmarks protocol — results
2
+
3
+ **Main conclusion (this benchmark only).** Independent one-vs-rest binarization does not explain Ines-1's behavior.
4
+ Ines-1 instead appears to benefit from reducing a multiclass decision to comparisons among a small number of competing
5
+ alternatives. Under the model-specific classification track, Ines-1 has the lowest mean macro-F1 of the four models; the
6
+ difference is resolved only against GLiNER2.5. Nothing here is generalised beyond these 22 datasets × 100 examples.
7
+
8
+ **Tracks.** *Track A — model-specific classification track*: each model's own interface for the full label set, including
9
+ Julia-1's Router above 20 labels and, for Ines-1 above 26 labels, the knockout fallback defined by this protocol (Ines-1
10
+ has no published interface there). *Track B — common one-vs-rest*: the same binary decomposition for every model. In
11
+ `results.json` and `per_dataset.csv`, keys `A` and `B` denote these two tracks.
12
+
13
+ Protocol `btzsc22-ext-v1` ([PROTOCOL.md](PROTOCOL.md)). 22 BTZSC datasets × 100 examples (2,200; full manifest sha256 `3edcd991…37c8`, rebuilt by `code/prepare.py`; `manifest_ids.jsonl` here keeps IDs, text sha256, labels and targets but not the texts, which are not redistributed). Every number below comes from the frozen analysis script (`score_final.py`, sha256 `49d9f9ab…03ad`, hashed before Track B was read) over the saved predictions. Macro-F1 is per dataset; global values are equal-weight means over datasets. Intervals: paired hierarchical bootstrap (datasets resampled, then examples stratified by target), 95 %.
14
+
15
+ ## Sanity anchors
16
+
17
+ | check | ours | reference |
18
+ |---|---:|---:|
19
+ | GLiNER2.5, agnews (pilot examples) | 70/100 | 70/100 (jev-benchmarks pilot) |
20
+ | GLiNER2.5, emotiondair (pilot examples) | 44/100 | 44/100 (jev-benchmarks pilot) |
21
+ | GLiNER2.5, banking77 (pilot examples) | 61/100 | 61/100 (jev-benchmarks pilot) |
22
+ | Julia-1, agnews (single request) | 94/100 | 94/100 (model card) |
23
+ | Julia-1, emotiondair (single request) | 86/100 | 86/100 (model card) |
24
+ | Julia-1, banking77 (Router(width=20, survivors=2)) | 63/100 | 64/100 (model card, 1 abstention) |
25
+
26
+ The pilot manifest rebuilt with jev-benchmarks has the published sha256 `ec064c52…3ba5` and its 300 IDs equal our first 300.
27
+
28
+ ## Track A — model-specific classification track
29
+
30
+ | model | ≤ its limit | above its limit |
31
+ |---|---|---|
32
+ | Ines-1 | single request (≤ 26 labels) | knockout in groups of 20 (protocol fallback; banking77, empathetic, massive, manifesto) |
33
+ | Julia-1 | single request (≤ 20 labels) | `Router(width=20, survivors=2)` (banking77, empathetic, massive, manifesto, capsotu) |
34
+ | laya-multilingual | single request, all labels (label texts as options) | same |
35
+ | GLiNER2.5 | single schema, all labels | same |
36
+
37
+ Mean macro-F1 | Ines-1 | Julia-1 | laya-multilingual | GLiNER2.5
38
+ |---|---:|---:|---:|---:|
39
+ | all 22 | 0.474 | 0.525 | 0.530 | 0.537 |
40
+ | 2 labels (13) | 0.562 | 0.583 | 0.722 | 0.627 |
41
+ | 3-20 labels (4) | 0.489 | 0.634 | 0.559 | 0.541 |
42
+ | 21-72 labels (5) | 0.234 | 0.287 | 0.008 | 0.297 |
43
+ | absent from Ines-1 decision FT mixture (15) | 0.486 | 0.536 | 0.515 | 0.528 |
44
+ | families in Ines-1 decision FT mixture (7) | 0.448 | 0.500 | 0.562 | 0.555 |
45
+
46
+ Paired differences vs Ines-1 (other − Ines-1, mean macro-F1):
47
+
48
+ | group | Julia-1 | laya-multilingual | GLiNER2.5 |
49
+ |---|---:|---:|---:|
50
+ | all 22 | +0.051 [-0.026, +0.126] | +0.056 [-0.040, +0.163] | +0.063 [+0.014, +0.107] |
51
+ | 2 labels (13) | +0.021 [-0.061, +0.107] | +0.160 [+0.059, +0.272] | +0.066 [+0.005, +0.126] |
52
+ | 3-20 labels (4) | +0.145 [-0.129, +0.426] | +0.070 [-0.230, +0.353] | +0.052 [-0.056, +0.160] |
53
+ | 21-72 labels (5) | +0.053 [-0.043, +0.158] | -0.226 [-0.300, -0.122] | +0.063 [-0.039, +0.169] |
54
+ | absent from Ines-1 decision FT mixture (15) | +0.050 [-0.029, +0.150] | +0.030 [-0.081, +0.144] | +0.042 [-0.007, +0.094] |
55
+ | families in Ines-1 decision FT mixture (7) | +0.052 [-0.100, +0.178] | +0.113 [-0.125, +0.330] | +0.107 [+0.019, +0.191] |
56
+
57
+ ## Track B — common one-vs-rest binary decomposition
58
+
59
+ Mean macro-F1 over the 22 datasets: Ines-1 0.457, Julia-1 0.357, laya-multilingual 0.629, GLiNER2.5 0.450. Paired
60
+ intervals below.
61
+
62
+ Mean macro-F1 | Ines-1 | Julia-1 | laya-multilingual | GLiNER2.5
63
+ |---|---:|---:|---:|---:|
64
+ | all 22 | 0.457 | 0.357 | 0.629 | 0.450 |
65
+ | 2 labels (13) | 0.630 | 0.517 | 0.776 | 0.572 |
66
+ | 3-20 labels (4) | 0.283 | 0.235 | 0.648 | 0.378 |
67
+ | 21-72 labels (5) | 0.146 | 0.039 | 0.234 | 0.188 |
68
+ | absent from Ines-1 decision FT mixture (15) | 0.409 | 0.332 | 0.611 | 0.428 |
69
+ | families in Ines-1 decision FT mixture (7) | 0.558 | 0.411 | 0.668 | 0.495 |
70
+
71
+ Paired differences vs Ines-1 (other − Ines-1, mean macro-F1):
72
+
73
+ | group | Julia-1 | laya-multilingual | GLiNER2.5 |
74
+ |---|---:|---:|---:|
75
+ | all 22 | -0.100 [-0.146, -0.050] | +0.173 [+0.113, +0.237] | -0.007 [-0.070, +0.051] |
76
+ | 2 labels (13) | -0.112 [-0.181, -0.043] | +0.146 [+0.095, +0.206] | -0.058 [-0.143, +0.030] |
77
+ | 3-20 labels (4) | -0.048 [-0.162, +0.058] | +0.365 [+0.183, +0.554] | +0.095 [+0.019, +0.174] |
78
+ | 21-72 labels (5) | -0.108 [-0.153, -0.049] | +0.088 [+0.011, +0.148] | +0.042 [-0.020, +0.111] |
79
+ | absent from Ines-1 decision FT mixture (15) | -0.078 [-0.141, -0.014] | +0.202 [+0.127, +0.290] | +0.019 [-0.032, +0.072] |
80
+ | families in Ines-1 decision FT mixture (7) | -0.147 [-0.199, -0.087] | +0.110 [+0.032, +0.194] | -0.064 [-0.219, +0.081] |
81
+
82
+ ## Effect of the binary decomposition within each model (Track B − Track A)
83
+
84
+ For Ines-1 the one-vs-rest decomposition lowers mean macro-F1 on the 3–20-label subset (0.489 → 0.283, difference −0.206 [−0.316, −0.092]) and on the 21–72-label subset; over all 22 datasets the change is unresolved (−0.017 [−0.099, +0.070]).
85
+
86
+ | group | Ines-1 | Julia-1 | laya-multilingual | GLiNER2.5 |
87
+ |---|---:|---:|---:|---:|
88
+ | all 22 | -0.017 [-0.099, +0.070] | -0.167 [-0.255, -0.088] | +0.099 [+0.045, +0.144] | -0.087 [-0.132, -0.041] |
89
+ | 2 labels (13) | +0.068 [-0.049, +0.198] | -0.065 [-0.125, -0.013] | +0.054 [-0.001, +0.107] | -0.056 [-0.116, +0.008] |
90
+ | 3-20 labels (4) | -0.206 [-0.316, -0.092] | -0.398 [-0.576, -0.208] | +0.089 [-0.009, +0.194] | -0.163 [-0.256, -0.072] |
91
+ | 21-72 labels (5) | -0.088 [-0.126, -0.048] | -0.248 [-0.399, -0.099] | +0.226 [+0.128, +0.286] | -0.109 [-0.170, -0.032] |
92
+ | absent from Ines-1 decision FT mixture (15) | -0.076 [-0.150, -0.009] | -0.204 [-0.300, -0.116] | +0.096 [+0.046, +0.144] | -0.100 [-0.146, -0.050] |
93
+ | families in Ines-1 decision FT mixture (7) | +0.110 [-0.076, +0.293] | -0.089 [-0.245, +0.034] | +0.107 [-0.016, +0.208] | -0.061 [-0.150, +0.033] |
94
+
95
+ ## Ines-1 ablation (accuracy / macro-F1), datasets with more than 2 labels
96
+
97
+ **Descriptive ablation, not the main protocol.** Pairwise knockout (two labels compared at a time, winners advancing in
98
+ BTZSC label order) has higher accuracy than Ines-1's Track A result on 6 of the 9 multiclass datasets (agnews, banking77,
99
+ massive, yahootopics, manifesto, capsotu), equal on 1 (emotiondair) and lower on 2 (financialphrasebank, empathetic). The
100
+ result depends on the label order (bracket); no interval or test was computed and no statistical superiority is claimed.
101
+ One-vs-rest has the lowest accuracy among the variants run on 7 of the 9 datasets (not on financialphrasebank or empathetic, where pairwise knockout is lower).
102
+
103
+ | dataset | labels | native (≤ 26) | knockout groups of 20 | pairwise knockout | one-vs-rest |
104
+ |---|---:|---|---|---|---|
105
+ | agnews | 4 | 0.59 / 0.58 | – | 0.64 / 0.64 | 0.42 / 0.33 |
106
+ | emotiondair | 6 | 0.43 / 0.39 | – | 0.43 / 0.39 | 0.34 / 0.29 |
107
+ | banking77 | 72 | – | 0.39 / 0.34 | 0.45 / 0.40 | 0.29 / 0.22 |
108
+ | financialphrasebank | 3 | 0.51 / 0.49 | – | 0.44 / 0.37 | 0.45 / 0.39 |
109
+ | empathetic | 32 | – | 0.25 / 0.19 | 0.16 / 0.10 | 0.18 / 0.14 |
110
+ | massive | 59 | – | 0.35 / 0.25 | 0.41 / 0.30 | 0.20 / 0.15 |
111
+ | yahootopics | 10 | 0.50 / 0.49 | – | 0.57 / 0.56 | 0.18 / 0.12 |
112
+ | manifesto | 56 | – | 0.11 / 0.08 | 0.18 / 0.15 | 0.05 / 0.03 |
113
+ | capsotu | 21 | 0.36 / 0.31 | 0.37 / 0.33 | 0.39 / 0.37 | 0.21 / 0.18 |
114
+
115
+ Knockouts were run with the exploratory runner before the freeze (same Choice request as Track A) and are reused, not rerun.
116
+
117
+ ## Probability quality (kept apart)
118
+
119
+ **native (Track A, full native distributions, <=20 labels, 17 datasets)**
120
+
121
+ | model | Brier | NLL | ECE | coverage at ≤ 5 % error | mean confidence |
122
+ |---|---:|---:|---:|---:|---:|
123
+ | Ines-1 | 0.501 | 0.800 | 0.127 | 0.089 | 0.612 |
124
+ | Julia-1 | 0.645 | 1.662 | 0.298 | 0.129 | 0.894 |
125
+ | laya-multilingual | 0.401 | 0.693 | 0.093 | 0.256 | 0.687 |
126
+ | GLiNER2.5 | 0.485 | 0.860 | 0.159 | 0.197 | 0.731 |
127
+
128
+ **derived (Track B softmax of log-odds, same 17 datasets)**
129
+
130
+ | model | Brier | NLL | ECE | coverage at ≤ 5 % error | mean confidence |
131
+ |---|---:|---:|---:|---:|---:|
132
+ | Ines-1 | 0.527 | 0.863 | 0.119 | 0.134 | 0.492 |
133
+ | Julia-1 | 0.769 | 1.572 | 0.313 | 0.014 | 0.777 |
134
+ | laya-multilingual | 0.359 | 0.681 | 0.127 | 0.382 | 0.769 |
135
+ | GLiNER2.5 | 0.587 | 1.031 | 0.203 | 0.037 | 0.702 |
136
+
137
+ **derived (Track B softmax of log-odds, all 22 datasets)**
138
+
139
+ | model | Brier | NLL | ECE | coverage at ≤ 5 % error | mean confidence |
140
+ |---|---:|---:|---:|---:|---:|
141
+ | Ines-1 | 0.623 | 1.452 | 0.124 | 0.106 | 0.392 |
142
+ | Julia-1 | 0.855 | 2.468 | 0.317 | 0.011 | 0.688 |
143
+ | laya-multilingual | 0.479 | 1.204 | 0.123 | 0.297 | 0.669 |
144
+ | GLiNER2.5 | 0.664 | 1.567 | 0.187 | 0.031 | 0.566 |
145
+
146
+ Derived probabilities are `softmax(log(P_yes/P_no))` over the K binary answers, not the models' native multiclass probabilities.
147
+
148
+ On the 17 datasets with full native distributions, Ines-1 has lower native ECE than Julia-1 (0.127 vs 0.298) and
149
+ GLiNER2.5 (0.159) and higher native ECE than laya-multilingual (0.093). Native and derived values are not compared with
150
+ each other.
151
+
152
+ ## Notes
153
+
154
+ - **One-vs-rest ties.** Deterministic rule, frozen before the run: prediction = argmax of `s_i = log(P_yes/P_no)` (P clipped to [1e-12, 1 − 1e-12]); when several labels share the maximum, the lowest label index in BTZSC order wins. Examples with a tie at the maximum: Ines-1 268/2200 (12 %; 95 of them correct), Julia-1 4, laya-multilingual 11, GLiNER2.5 0. Ines-1's ties are not saturation (no P_yes equals 0 or 1): its canonical bf16 readout gives P(yes) with coarse resolution, so different labels share the same value, mostly on high-cardinality datasets. They are reported as measured and not corrected post hoc.
155
+ - **Discarded pilot (laya-multilingual).** A first exploratory run passed laya-multilingual the same `label_NNN → description` criteria as the other decision models; laya's runtime renders a dict criterion as `key: description`, so the IDs were shown to the model. Passing the label texts as a list instead — within laya's published API, runtime unchanged — raised its mean macro-F1 on the 17 datasets with ≤ 20 labels from 0.626 to 0.684. That pilot is discarded; all final results use the corrected protocol (label texts as options). Its predictions are not part of this package.
156
+ - Julia-1's Router needs a native reducer built with Bend 2.0.27 + Clang (`julia/router/build.py`); built from the official Bend v2.0.27 linux-x64 release (sha256 verified) with Ubuntu clang 18.1.3; `libjulia_router.so` sha256 `79a346cc…5e96`; the Router's own 30 unit tests pass.
157
+ - Other exploratory runs made before the freeze (knockouts for the other three models) are not part of the reported comparison.
158
+ - High-cardinality datasets (21–72 labels) have 100 examples each; per-dataset macro-F1 there is noisy and no per-dataset winner is claimed.
159
+ - The GPU was shared with an unrelated training job; no latency is reported.
eval/btzsc22/SHA256SUMS ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 95a4d4c459940195f03c6b937d750cd8e678527c4e2acaee1f7f2f3a9adc512c ./btzsc_test_files.json
2
+ afac77fa429f2f37c45e6cf46d0201551e9c98ddf9c01e7ba0cf1ac1feca0ef7 ./code/btzsc22.yaml
3
+ 324bf63e3dad253faebaaa8a7a208f046e5f6e53872e1cf8dc925b0b049db1f7 ./code/make_report.py
4
+ a9b670b4bdaa77f878c31617407a7a8255cc5152fcc4196917390862cb536bb4 ./code/prepare.py
5
+ bb7dbba94cc130a09c77226e51cb7b72e5228685fbf8c2f78522290f485eff1e ./code/README.md
6
+ 6ff68021abdf7957601a327e8fe7e1bca2c1148bdec3778f4afe1f5eb7d8f5d3 ./code/run_model.py
7
+ 3f3fb8320cf6547cc359d64548adcd409b7d7c337c41773ff048e4f1ab8f6f15 ./code/run_track.py
8
+ 12402f588a6ef7d0ca6202e6184330ace0de7474b9e529d0d0517f08c194c89a ./code/run_tracks.sh
9
+ 49d9f9abe284e3571251c655607ab3b3f49a0896febb92cbf3733af57a6803ad ./code/score_final.py
10
+ 8a2db365220f8fe59663fadfa6698c9117d38bf00a2a44beb462feead72af573 ./manifest_ids.jsonl
11
+ 00da1891b1700fa327716f4c7e53d8c2ce1a23d3a20c5712972fdcc07db7952e ./per_dataset.csv
12
+ e715c918b8a3b94a09661f51dad9df07c23d1b1dd468648a107cf435b408dd7d ./predictions/ablation_ines.knockout_20.jsonl
13
+ 2862d2a7c65571586b7b8b607fe0daafe758c37fcccd51e00c2db7fa84bf5e4c ./predictions/ablation_ines.knockout_2.jsonl
14
+ b24c521b251795d3ec90d4d31fe0b2aa15856248afe588243207b8ef1ed98a1e ./predictions/trackA_native.gliner.jsonl
15
+ 673bb5373d0010481dbfc9f911cd85bebfed877d6ea759e2e3c0c7f10bb50873 ./predictions/trackA_native.ines.jsonl
16
+ 914245b7b3545549998081b6df30e7b51f9ed725abffd36f9719ecf4044f548b ./predictions/trackA_native.julia.jsonl
17
+ f65cd55dce20a876eb6ab366d6b5414528c302e357c71f3e1b14450a9eeab6bd ./predictions/trackA_native.laya.jsonl
18
+ 951aef27d70fed182d86381cb50bb7f0edb7c01c14fb9305fc2b67a423c5bba7 ./predictions/trackB_ovr.gliner.jsonl
19
+ 102ddda9d71db407d6d519dd82dc691c76800584bfed7c5fd58dd12aa3559866 ./predictions/trackB_ovr.ines.jsonl
20
+ d0ca40988b8ad697223f7ccfc18ac35840c1390a5d46fabc219dab0c02069ed3 ./predictions/trackB_ovr.julia.jsonl
21
+ 3c38c8a6e8afd8b80d0a66afa3fd8ae6c0f744e3f52b9cddc6d35d9c01c6ea4f ./predictions/trackB_ovr.laya.jsonl
22
+ 8f296d2c1dbe85d285bb45cd80d841e733f84168ff130daf825933917684993b ./PROTOCOL.md
23
+ 5cc7f2cd08668abe6ac5dd5455e61bc2315e556e26c45906150426810fd49455 ./REPORT.md
24
+ 707f23cd6b4ae30a38573d4f29ce852a82878b23ee062c61a8025d4bae1360ff ./results.json
eval/btzsc22/btzsc_test_files.json ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "agnews": [
3
+ [
4
+ "agnews/test-00000-of-00001.parquet",
5
+ "b51a89341546018960b5724596ad3192f12d0649c5e45e91a06c0cee4253510f",
6
+ 1280949
7
+ ]
8
+ ],
9
+ "emotiondair": [
10
+ [
11
+ "emotiondair/test-00000-of-00001.parquet",
12
+ "779970bb63817275a9d4004e4114ed00f2d86dc7670c36e13b4d018f85dc18ae",
13
+ 158115
14
+ ]
15
+ ],
16
+ "banking77": [
17
+ [
18
+ "banking77/test-00000-of-00001.parquet",
19
+ "f42b14bddca9455891438e5e03ad2626e9de908eac0b65dbee4d5fa9eff8a776",
20
+ 804682
21
+ ]
22
+ ],
23
+ "amazonpolarity": [
24
+ [
25
+ "amazonpolarity/test-00000-of-00001.parquet",
26
+ "69dd2b714829e7aa44c15eb3e26e8773b16c1076b3f7de2dd5abde03c26783e9",
27
+ 2974010
28
+ ]
29
+ ],
30
+ "imdb": [
31
+ [
32
+ "imdb/test-00000-of-00001.parquet",
33
+ "5f2e538b4c3fe71543ba661bdde6dd0c9b07e12cab5da3f170a1e254e61f237e",
34
+ 8559151
35
+ ]
36
+ ],
37
+ "appreviews": [
38
+ [
39
+ "appreviews/test-00000-of-00001.parquet",
40
+ "085aaf8b64b36619f8e2b243a42d16c0959170b70627209b180fce89adc72a09",
41
+ 566905
42
+ ]
43
+ ],
44
+ "yelpreviews": [
45
+ [
46
+ "yelpreviews/test-00000-of-00001.parquet",
47
+ "f640df1fc45beccaa5f7c4a76419530bd6b7dc569200302469e006f34f738248",
48
+ 4505433
49
+ ]
50
+ ],
51
+ "rottentomatoes": [
52
+ [
53
+ "rottentomatoes/test-00000-of-00001.parquet",
54
+ "e611f582e7357ea5a1ae5bd19e6eef0d7f7bbf233aad3c4c7e4800fbee163945",
55
+ 95622
56
+ ]
57
+ ],
58
+ "financialphrasebank": [
59
+ [
60
+ "financialphrasebank/test-00000-of-00001.parquet",
61
+ "af946f94e5dc2f5479ae8da33b70624a31f66e28e02d98d9426d399e6195401a",
62
+ 65448
63
+ ]
64
+ ],
65
+ "empathetic": [
66
+ [
67
+ "empathetic/test-00000-of-00001.parquet",
68
+ "c16923bdf05d2a2223ce9c8a696c8db1cfed83156e3b300eba5a547d6f42f078",
69
+ 1092730
70
+ ]
71
+ ],
72
+ "biasframes_intent": [
73
+ [
74
+ "biasframes_intent/test-00000-of-00001.parquet",
75
+ "82a6da7eff047ac43fde1fdcc1d9b1b986cde08718d324f04af901607f585941",
76
+ 310428
77
+ ]
78
+ ],
79
+ "massive": [
80
+ [
81
+ "massive/test-00000-of-00001.parquet",
82
+ "ad109e13b5204ca4b80545d15d9f81167516b1e4ebd834f9d8e870039c9b8b96",
83
+ 558077
84
+ ]
85
+ ],
86
+ "yahootopics": [
87
+ [
88
+ "yahootopics/test-00000-of-00001.parquet",
89
+ "c51a3f3de236cc897f5328c39c0946455d82c7465ffb4d3b0ad52b83d56e9b50",
90
+ 19108728
91
+ ]
92
+ ],
93
+ "trueteacher": [
94
+ [
95
+ "trueteacher/test-00000-of-00001.parquet",
96
+ "5e84c9d12755f2de3c40bf2e24b321f161db126bba12d0a6ba19b2da6587af46",
97
+ 6972936
98
+ ]
99
+ ],
100
+ "manifesto": [
101
+ [
102
+ "manifesto/test-00000-of-00001.parquet",
103
+ "78169ff647e0218ef3959c7837a53c3e1e1b65731efdeb22752a1da31ae02a38",
104
+ 8569698
105
+ ]
106
+ ],
107
+ "capsotu": [
108
+ [
109
+ "capsotu/test-00000-of-00001.parquet",
110
+ "33e1d9262a8923d35cb2e92c7b72f56a6caf2f55049165896e2b27d5934b39a2",
111
+ 723183
112
+ ]
113
+ ],
114
+ "biasframes_offensive": [
115
+ [
116
+ "biasframes_offensive/test-00000-of-00001.parquet",
117
+ "5b4df757e7241d8fd5456fe04545eea2bfc171b9462069ea369991c9b4cef10e",
118
+ 327567
119
+ ]
120
+ ],
121
+ "biasframes_sex": [
122
+ [
123
+ "biasframes_sex/test-00000-of-00001.parquet",
124
+ "7cb2a305f07378708941d792d858577eb552faded64958d91b6da3d7360c5057",
125
+ 379857
126
+ ]
127
+ ],
128
+ "wikitoxic_insult": [
129
+ [
130
+ "wikitoxic_insult/test-00000-of-00001.parquet",
131
+ "16701455c8c71451ba98a7ffc9b26af8d0a0a2d34da7c1b30e78d598cb60cda3",
132
+ 1724127
133
+ ]
134
+ ],
135
+ "wikitoxic_obscene": [
136
+ [
137
+ "wikitoxic_obscene/test-00000-of-00001.parquet",
138
+ "733d7dd830d2fbb30c7b1f2261f68029f6889d2196349eb728350ea46a074298",
139
+ 1847410
140
+ ]
141
+ ],
142
+ "wikitoxic_threat": [
143
+ [
144
+ "wikitoxic_threat/test-00000-of-00001.parquet",
145
+ "f088d3cd21c895a7d27cbacf901c1873cb5aca21576ff345d05c43f22ce0ac6a",
146
+ 1332140
147
+ ]
148
+ ],
149
+ "wikitoxic_toxicaggregated": [
150
+ [
151
+ "wikitoxic_toxicaggregated/test-00000-of-00001.parquet",
152
+ "bc706516c9f218e57de4e418691fdfd956cb0baa34574811bfdb692bf28e1b5f",
153
+ 2024344
154
+ ]
155
+ ]
156
+ }
eval/btzsc22/code/README.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Code of the BTZSC-22 evaluation
2
+
3
+ | file | role | sha256 recorded in PROTOCOL.md |
4
+ |---|---|---|
5
+ | `btzsc22.yaml` | dataset list, seed and BTZSC revision (jev-benchmarks config format) | – |
6
+ | `prepare.py` | builds `manifest.jsonl` with jev-benchmarks `load_examples`, unchanged | – |
7
+ | `run_track.py` | Track A (model-specific classification) and Track B (one-vs-rest) for one model; templates are constants of this file | yes, frozen before the runs |
8
+ | `run_tracks.sh` | runs both tracks for the four models (paths generalised, see header) | – |
9
+ | `run_model.py` | exploratory runner used before the freeze; produced the Ines-1 knockout ablations in `../predictions/` | – |
10
+ | `score_final.py` | the analysis (metrics, paired hierarchical bootstrap, calibration, ablation, anchors) | yes, frozen before Track B was read |
11
+ | `make_report.py` | first draft of `../REPORT.md` and the package layout; the report text was then edited by hand | – |
12
+
13
+ Only `btzsc22.yaml` (`output_dir`) and `run_tracks.sh` (machine paths) differ from the executed copies.
eval/btzsc22/code/btzsc22.yaml ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Extension of jev-benchmarks pilot-v1 to all 22 BTZSC base datasets. The first three keep the pilot's order,
2
+ # so their 100-example samples are exactly the pilot's (same seed + dataset offset).
3
+ experiment_id: btzsc22-ines1-v1
4
+ protocol_revision: pilot-v1-extended
5
+ seed: 20260917
6
+ dataset:
7
+ repository: btzsc/btzsc
8
+ revision: fef2a2ac62b69c58670047dddf045c53d7c3cb5e
9
+ samples_per_dataset: 100
10
+ datasets:
11
+ - {name: agnews, task: topic}
12
+ - {name: emotiondair, task: emotion}
13
+ - {name: banking77, task: intent}
14
+ - {name: amazonpolarity, task: sentiment}
15
+ - {name: imdb, task: sentiment}
16
+ - {name: appreviews, task: sentiment}
17
+ - {name: yelpreviews, task: sentiment}
18
+ - {name: rottentomatoes, task: sentiment}
19
+ - {name: financialphrasebank, task: sentiment}
20
+ - {name: empathetic, task: emotion}
21
+ - {name: biasframes_intent, task: intent}
22
+ - {name: massive, task: intent}
23
+ - {name: yahootopics, task: topic}
24
+ - {name: trueteacher, task: topic}
25
+ - {name: manifesto, task: topic}
26
+ - {name: capsotu, task: topic}
27
+ - {name: biasframes_offensive, task: topic}
28
+ - {name: biasframes_sex, task: topic}
29
+ - {name: wikitoxic_insult, task: topic}
30
+ - {name: wikitoxic_obscene, task: topic}
31
+ - {name: wikitoxic_threat, task: topic}
32
+ - {name: wikitoxic_toxicaggregated, task: topic}
33
+ models:
34
+ gliner: {model_id: fastino/gliner2.5-multi-v1, revision: 235cf92d6d4318da9bfca0d08975c8fa7250d13b, device: cuda, batch_size: 1}
35
+ jev: {model_id: none, question: "Which single label best describes the input text?"}
36
+ metrics: {ece_bins: 10, error_budget: 0.05, bootstrap_resamples: 2000}
37
+ output_dir: runs/btzsc22
eval/btzsc22/code/make_report.py ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Assemble eval/btzsc22 (report tables + files). argv: btzsc22_dir out_dir"""
2
+ import hashlib, json, shutil, sys
3
+ from pathlib import Path
4
+ B, O = Path(sys.argv[1]), Path(sys.argv[2]); O.mkdir(parents=True, exist_ok=True)
5
+ R = json.load(open(B / "v1/analysis/results.json"))
6
+ M = ["ines", "julia", "laya", "gliner"]; N = {"ines": "Ines-1", "julia": "Julia-1", "laya": "laya-multilingual", "gliner": "GLiNER2.5"}
7
+ man = [json.loads(l) for l in open(B / "manifest.jsonl")]
8
+ def mf1(t, p, k):
9
+ s = []
10
+ for c in range(k):
11
+ tp = sum(1 for a, b in zip(t, p) if a == c and b == c); fp = sum(1 for a, b in zip(t, p) if a != c and b == c); fn = sum(1 for a, b in zip(t, p) if a == c and b != c)
12
+ s.append(0 if 2 * tp + fp + fn == 0 else 2 * tp / (2 * tp + fp + fn))
13
+ return sum(s) / k
14
+ # laya label_NNN (exploratory) vs label-text (v1) on the 17 datasets <= 20 labels, same single request otherwise
15
+ old = {json.loads(l)["example_id"]: json.loads(l) for l in open(B / "laya.native.jsonl")}
16
+ new = {json.loads(l)["example_id"]: json.loads(l) for l in open(B / "v1/laya.native.jsonl")}
17
+ ds17 = [d for d, x in R["per_dataset"].items() if x["labels"] <= 20]
18
+ def mean_f1(src):
19
+ v = []
20
+ for d in ds17:
21
+ es = [e for e in man if e["dataset"] == d]
22
+ v.append(mf1([e["target_index"] for e in es], [src[e["example_id"]]["predicted_index"] for e in es], len(es[0]["labels"])))
23
+ return sum(v) / len(v)
24
+ asym = {"label_NNN keys (exploratory)": mean_f1(old), "label texts (v1, Track A)": mean_f1(new)}
25
+ f = lambda x: "%.3f" % x
26
+ ci = lambda v: "%+.3f [%+.3f, %+.3f]" % (v["difference"], *v["ci95"])
27
+ L = []
28
+ L.append("# BTZSC-22 evaluation using an extension of the jev-benchmarks protocol — results\n")
29
+ L.append("Protocol `btzsc22-ext-v1` ([PROTOCOL.md](PROTOCOL.md)). 22 BTZSC datasets × 100 examples (2,200; manifest sha256 `3edcd991…37c8`). Every number below comes from the frozen analysis script (`score_final.py`, sha256 `49d9f9ab…03ad`, hashed before Track B was read) over the saved predictions. Macro-F1 is per dataset; global values are equal-weight means over datasets. Intervals: paired hierarchical bootstrap (datasets resampled, then examples stratified by target), 95 %.\n")
30
+ L.append("## Sanity anchors\n")
31
+ L.append("| check | ours | reference |\n|---|---:|---:|")
32
+ for d, v in R["anchors"]["GLiNER2.5 Track A vs published pilot (accuracy)"].items():
33
+ L.append("| GLiNER2.5, %s (pilot examples) | %d/100 | %d/100 (jev-benchmarks pilot) |" % (d, round(v["ours"] * 100), round(v["published"] * 100)))
34
+ for d, v in R["anchors"]["Julia-1 Track A vs its model card (accuracy)"].items():
35
+ L.append("| Julia-1, %s (%s) | %d/100 | %d/100 (model card%s) |" % (d, v["ours_strategy"], round(v["ours"] * 100), round(v["card"] * 100), ", 1 abstention" if d == "banking77" else ""))
36
+ L.append("\nThe pilot manifest rebuilt with jev-benchmarks has the published sha256 `ec064c52…3ba5` and its 300 IDs equal our first 300.\n")
37
+ for tr, title in (("A", "Track A — native interfaces"), ("B", "Track B — common one-vs-rest binary decomposition")):
38
+ L.append("## %s\n" % title)
39
+ L.append("Mean macro-F1 | " + " | ".join(N[m] for m in M) + "\n|---|" + "---:|" * 4)
40
+ for g, x in R["global"].items():
41
+ L.append("| %s | %s |" % (g, " | ".join(f(x[tr][m]) for m in M)))
42
+ L.append("\nPaired differences vs Ines-1 (other − Ines-1, mean macro-F1):\n")
43
+ L.append("| group | " + " | ".join(N[m] for m in M[1:]) + " |\n|---|---:|---:|---:|")
44
+ for g, b in R["bootstrap"].items():
45
+ L.append("| %s | %s |" % (g, " | ".join(ci(b["%s:%s - %s:ines" % (tr, m, tr)]) for m in M[1:])))
46
+ L.append("")
47
+ L.append("## Effect of the binary decomposition within each model (Track B − Track A)\n")
48
+ L.append("| group | " + " | ".join(N[m] for m in M) + " |\n|---|---:|---:|---:|---:|")
49
+ for g, b in R["bootstrap"].items():
50
+ L.append("| %s | %s |" % (g, " | ".join(ci(b["B:%s - A:%s" % (m, m)]) for m in M)))
51
+ L.append("\n## Ines-1 ablation (accuracy / macro-F1), datasets with more than 2 labels\n")
52
+ L.append("| dataset | labels | native (≤ 26) | knockout groups of 20 | pairwise knockout | one-vs-rest |\n|---|---:|---|---|---|---|")
53
+ g = lambda a, b: "–" if a is None else "%.2f / %.2f" % (a, b)
54
+ for d, x in R["ines_ablation"].items():
55
+ a, m_ = x["accuracy"], x["macro_f1"]
56
+ L.append("| %s | %d | %s | %s | %s | %s |" % (d, x["labels"], g(a["native(<=26)"], m_["native(<=26)"]), g(a["knockout-20"], m_["knockout-20"]), g(a["knockout-2"], m_["knockout-2"]), g(a["one-vs-rest"], m_["one-vs-rest"])))
57
+ L.append("\nKnockouts were run with the exploratory runner before the freeze (same Choice request as Track A) and are reused, not rerun.\n")
58
+ L.append("## Probability quality (kept apart)\n")
59
+ for k, c in R["calibration"].items():
60
+ L.append("**%s**\n\n| model | Brier | NLL | ECE | coverage at ≤ 5 %% error | mean confidence |\n|---|---:|---:|---:|---:|---:|" % k)
61
+ for m in M:
62
+ if m in c:
63
+ v = c[m]; L.append("| %s | %.3f | %.3f | %.3f | %.3f | %.3f |" % (N[m], v["brier"], v["nll"], v["ece"], v["coverage_at_error_budget"], v["mean_confidence"]))
64
+ L.append("")
65
+ L.append("Derived probabilities are `softmax(log(P_yes/P_no))` over the K binary answers, not the models' native multiclass probabilities.\n")
66
+ L.append("## Notes\n")
67
+ L.append("- One-vs-rest ties at the maximum (lowest label index wins, as frozen): " + ", ".join("%s %d/2200" % (N[m], v["examples_with_tie_at_max"]) for m, v in R["ovr_ties"].items()) + ". Ines-1's ties are not saturation (no P = 0 or 1): its canonical bf16 readout gives P(yes) with coarse resolution, so different labels share the same value, mostly on high-cardinality datasets.")
68
+ L.append("- laya-multilingual with `label_NNN` keys (exploratory runs, keys shown before each description) vs label texts as options (v1): mean macro-F1 on the 17 datasets with ≤ 20 labels %.3f → %.3f. The v1 Track A uses label texts; the asymmetry is removed." % (asym["label_NNN keys (exploratory)"], asym["label texts (v1, Track A)"]))
69
+ L.append("- Julia-1's Router needs a native reducer built with Bend 2.0.27 + Clang (`julia/router/build.py`); built from the official Bend v2.0.27 linux-x64 release (sha256 verified) with Ubuntu clang 18.1.3; `libjulia_router.so` sha256 `79a346cc…5e96`; the Router's own 30 unit tests pass.")
70
+ L.append("- High-cardinality datasets (21–72 labels) have 100 examples each; per-dataset macro-F1 there is noisy and no per-dataset winner is claimed.")
71
+ L.append("- The GPU was shared with an unrelated training job; no latency is reported.")
72
+ (O / "REPORT.md").write_text("\n".join(L) + "\n")
73
+ for src, dst in (("manifest.jsonl", "manifest.jsonl"), ("v1/PROTOCOL.md", None), ("PROTOCOL.md", "PROTOCOL.md")):
74
+ p = B / src
75
+ if p.exists() and dst: shutil.copy(p, O / dst)
76
+ (O / "predictions").mkdir(exist_ok=True)
77
+ for m in M:
78
+ for t in ("native", "ovr"):
79
+ shutil.copy(B / ("v1/%s.%s.jsonl" % (m, t)), O / "predictions" / ("trackA_native.%s.jsonl" % m if t == "native" else "trackB_ovr.%s.jsonl" % m))
80
+ for k in ("k20", "k2"):
81
+ shutil.copy(B / ("ines.%s.jsonl" % k), O / "predictions" / ("ablation_ines.knockout_%s.jsonl" % k[1:]))
82
+ for x in ("results.json", "per_dataset.csv"):
83
+ shutil.copy(B / "v1/analysis" / x, O / x)
84
+ print(json.dumps(asym))
eval/btzsc22/code/prepare.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Manifest of the BTZSC examples (jev-benchmarks load_examples, unchanged). argv: config out.jsonl"""
2
+ import json, sys
3
+ from jev_benchmarks.config import load_config
4
+ from jev_benchmarks.data import load_examples
5
+ cfg = load_config(sys.argv[1])
6
+ ex = load_examples(cfg)
7
+ with open(sys.argv[2], "w") as f:
8
+ for e in ex:
9
+ f.write(json.dumps(e.to_dict(), ensure_ascii=False) + "\n")
10
+ import collections
11
+ c = collections.Counter(e.dataset for e in ex); n = {e.dataset: len(e.labels) for e in ex}
12
+ print(len(ex), {k: (c[k], n[k]) for k in c})
eval/btzsc22/code/run_model.py ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """One backend over the manifest. argv: backend manifest out.jsonl mode [group]
2
+ mode native: one Choice with all labels (skipped where the backend's limit is exceeded)
3
+ mode knockout: groups of <= group labels in BTZSC order, each group's winner advances, until one remains
4
+ Same request for every decision backend: state={"text": text}, one Choice question, options label_000...
5
+ """
6
+ import json, os, sys, time
7
+ BACKEND, MAN, OUT, MODE = sys.argv[1:5]
8
+ G = int(sys.argv[5]) if len(sys.argv) > 5 else 0
9
+ Q = "Which single label best describes the input text?"
10
+ LIMIT = {"ines": 26, "julia": 20, "laya": 20, "gliner": 10 ** 9}[BACKEND]
11
+
12
+ if BACKEND == "ines":
13
+ sys.path.insert(0, os.environ["INES"])
14
+ from mini_v41_jev import Decider
15
+ d = Decider(os.environ["INES"], device="cuda")
16
+ def call(text, labels):
17
+ crit = {"label_%03d" % i: l for i, l in enumerate(labels)}
18
+ a = d.decide({"text": text}, {"label": {"type": "choice", "instructions": Q, "criteria": crit}}, lang="en")["label"]
19
+ return [float(a["probabilities"][k]) for k in crit]
20
+ elif BACKEND == "julia":
21
+ from julia import load_model
22
+ eng = load_model(os.environ["JULIA"], device="cuda", strict_encoding=True, max_length=8192, head_length=512)
23
+ def call(text, labels):
24
+ crit = {"label_%03d" % i: l for i, l in enumerate(labels)}
25
+ a = eng.predict(state={"text": text}, questions={"label": {"type": "choice", "instructions": Q, "criteria": crit}})["answers"]["label"]
26
+ return [float(a["probabilities"][k]) for k in crit]
27
+ elif BACKEND == "laya":
28
+ import laya
29
+ ag = laya.load(os.environ.get("LAYA", "convaiinnovations/laya-multilingual"))
30
+ def call(text, labels):
31
+ crit = {"label_%03d" % i: l for i, l in enumerate(labels)}
32
+ a = ag.predict({"text": text}, {"label": {"type": "choice", "instructions": Q, "criteria": crit}}, max_len=8192)["answers"]["label"]
33
+ return [float(a["probabilities"][k]) for k in crit]
34
+ elif BACKEND == "gliner":
35
+ from gliner2.classification import ClassificationSchema, Classifier
36
+ clf = Classifier.from_pretrained("fastino/gliner2.5-multi-v1", revision="235cf92d6d4318da9bfca0d08975c8fa7250d13b", device="cpu").eval() # protocol: CPU
37
+ if os.environ.get("GLINER_DEVICE") == "cuda": # checked: same argmax on 50/50 examples, max |dp| 1.4e-5 vs CPU
38
+ import torch
39
+ clf = clf.to("cuda")
40
+ cache = {}
41
+ def call(text, labels):
42
+ k = tuple(labels)
43
+ if k not in cache:
44
+ cache[k] = ClassificationSchema().single("label", list(labels))
45
+ r = clf.classify(text, cache[k])
46
+ return [float(r.probabilities("label")[l]) for l in labels]
47
+
48
+ def knockout(text, labels, g):
49
+ alive = list(range(len(labels))); calls = 0
50
+ while len(alive) > 1:
51
+ nxt = []
52
+ for i in range(0, len(alive), g):
53
+ grp = alive[i:i + g]
54
+ if len(grp) == 1:
55
+ nxt.append(grp[0]); continue
56
+ p = call(text, [labels[j] for j in grp]); calls += 1
57
+ nxt.append(grp[max(range(len(grp)), key=p.__getitem__)])
58
+ alive = nxt
59
+ return alive[0], calls
60
+
61
+ done = set()
62
+ if os.path.exists(OUT):
63
+ done = {json.loads(l)["example_id"] for l in open(OUT)}
64
+ ex = [json.loads(l) for l in open(MAN)]
65
+ call(ex[0]["text"], ex[0]["labels"][:2]) # warm-up, not timed
66
+ with open(OUT, "a") as f:
67
+ for e in ex:
68
+ if e["example_id"] in done:
69
+ continue
70
+ L = e["labels"]
71
+ if MODE == "native" and len(L) > LIMIT:
72
+ continue
73
+ if MODE == "knockout" and len(L) <= G and G != 2:
74
+ continue
75
+ if MODE == "knockout" and G == 2 and len(L) <= 2:
76
+ continue
77
+ t = time.perf_counter()
78
+ try:
79
+ if MODE == "native":
80
+ p = call(e["text"], L); pred = max(range(len(p)), key=p.__getitem__); calls = 1
81
+ else:
82
+ pred, calls = knockout(e["text"], L, G); p = None
83
+ err = None
84
+ except Exception as x: # failures stay in the denominator
85
+ p, pred, calls, err = None, -1, 0, repr(x)[:300]
86
+ f.write(json.dumps({"backend": BACKEND, "mode": MODE, "group": G, "dataset": e["dataset"], "example_id": e["example_id"],
87
+ "target_index": e["target_index"], "predicted_index": pred, "n_labels": len(L), "probabilities": p,
88
+ "calls": calls, "latency_seconds": time.perf_counter() - t, "error": err}) + "\n")
89
+ f.flush()
90
+ print("done", BACKEND, MODE, G)
eval/btzsc22/code/run_track.py ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """BTZSC-22 extension, frozen tracks. argv: backend manifest out.jsonl track
2
+ track native : the backend's published interface for the full label set (see PROTOCOL.md, Track A)
3
+ track ovr : common one-vs-rest binary decomposition, the same for every backend (Track B)
4
+ Templates are constants of this file; PROTOCOL.md records its sha256.
5
+ """
6
+ import json, math, os, sys, time
7
+ BACKEND, MAN, OUT, TRACK = sys.argv[1:5]
8
+ Q_CHOICE = "Which single label best describes the input text?" # Track A, decision models
9
+ Q_BINARY = 'Does this text belong to the label "{label}"?' # Track B, every model
10
+ EPS = 1e-12
11
+
12
+ if BACKEND == "ines":
13
+ sys.path.insert(0, os.environ["INES"])
14
+ from mini_v41_jev import Decider
15
+ d = Decider(os.environ["INES"], device="cuda")
16
+ def choice(text, labels): # <= 26 options (letters A-Z)
17
+ crit = {"label_%03d" % i: l for i, l in enumerate(labels)}
18
+ a = d.decide({"text": text}, {"label": {"type": "choice", "instructions": Q_CHOICE, "criteria": crit}}, lang="en")["label"]
19
+ return [float(a["probabilities"][k]) for k in crit]
20
+ def binary(text, labels): # one prompt per question (canonical path)
21
+ qs = {"q%03d" % i: {"type": "noul", "instructions": Q_BINARY.format(label=l)} for i, l in enumerate(labels)}
22
+ a = d.decide({"text": text}, qs, lang="en")
23
+ return [float(a["q%03d" % i]["noul"]) for i in range(len(labels))]
24
+ elif BACKEND == "julia":
25
+ from julia import load_model
26
+ from julia.router import Router
27
+ eng = load_model(os.environ["JULIA"], device="cuda", strict_encoding=True, max_length=8192, head_length=512)
28
+ router = Router(eng, width=20, survivors=2) # the README's documented setting for > 20 options
29
+ def choice(text, labels):
30
+ crit = {"label_%03d" % i: l for i, l in enumerate(labels)}
31
+ a = eng.predict(state={"text": text}, questions={"label": {"type": "choice", "instructions": Q_CHOICE, "criteria": crit}})["answers"]["label"]
32
+ return [float(a["probabilities"][k]) for k in crit]
33
+ def routed(text, labels):
34
+ r = router.route({"state": {"text": text}, "question": Q_CHOICE, "options": list(labels), "type": "choice"})
35
+ return r.index, {"candidates": list(r.candidates), "candidate_probabilities": list(r.probabilities), "rounds": r.rounds,
36
+ "model_rows": r.model_rows, "probability_scope": r.probability_scope}
37
+ def binary(text, labels): # independent questions batched in one call
38
+ qs = {"q%03d" % i: {"type": "noul", "instructions": Q_BINARY.format(label=l)} for i, l in enumerate(labels)}
39
+ a = eng.predict(state={"text": text}, questions=qs)["answers"]
40
+ return [float(a["q%03d" % i]["noul"]) for i in range(len(labels))]
41
+ elif BACKEND == "laya":
42
+ import laya
43
+ ag = laya.load(os.environ["LAYA"])
44
+ def choice(text, labels): # criteria as a list: options are the label texts themselves
45
+ a = ag.predict({"text": text}, {"label": {"type": "choice", "instructions": Q_CHOICE, "criteria": list(labels)}}, max_len=8192)["answers"]["label"]
46
+ return [float(a["probabilities"][l]) for l in labels]
47
+ def binary(text, labels):
48
+ qs = {"q%03d" % i: {"type": "noul", "instructions": Q_BINARY.format(label=l)} for i, l in enumerate(labels)}
49
+ a = ag.predict({"text": text}, qs, max_len=8192)["answers"]
50
+ return [float(a["q%03d" % i]["noul"]) for i in range(len(labels))]
51
+ elif BACKEND == "gliner":
52
+ from gliner2.classification import ClassificationSchema, Classifier
53
+ clf = Classifier.from_pretrained("fastino/gliner2.5-multi-v1", revision="235cf92d6d4318da9bfca0d08975c8fa7250d13b", device="cpu").eval()
54
+ if os.environ.get("GLINER_DEVICE") == "cuda":
55
+ clf = clf.to("cuda")
56
+ def choice(text, labels):
57
+ r = clf.classify(text, ClassificationSchema().single("label", list(labels)))
58
+ return [float(r.probabilities("label")[l]) for l in labels]
59
+ def binary(text, labels): # task name = the binary question, labels yes / no
60
+ out = []
61
+ for l in labels:
62
+ q = Q_BINARY.format(label=l)
63
+ out.append(float(clf.classify(text, ClassificationSchema().single(q, ["yes", "no"])).probabilities(q)["yes"]))
64
+ return out
65
+
66
+ LIMIT = {"ines": 26, "julia": 20, "laya": None, "gliner": None}[BACKEND]
67
+
68
+ def native(text, labels):
69
+ if LIMIT is None or len(labels) <= LIMIT:
70
+ p = choice(text, labels)
71
+ return max(range(len(p)), key=p.__getitem__), {"probabilities": p, "strategy": "single request", "calls": 1}
72
+ if BACKEND == "julia":
73
+ i, meta = routed(text, labels)
74
+ return i, dict(meta, strategy="julia Router(width=20, survivors=2)")
75
+ raise SystemExit("no native strategy for %s with %d labels (Ines-1 > 26 uses the knockout ablation)" % (BACKEND, len(labels)))
76
+
77
+ def ovr(text, labels):
78
+ p = binary(text, labels)
79
+ s = [math.log(min(max(x, EPS), 1 - EPS)) - math.log(1 - min(max(x, EPS), 1 - EPS)) for x in p]
80
+ best = max(s); ties = sum(1 for v in s if v == best)
81
+ pred = s.index(best) # ties -> lowest label index (counted)
82
+ z = [math.exp(v - best) for v in s]; tot = sum(z)
83
+ return pred, {"p_yes": p, "log_odds": s, "derived_probabilities": [v / tot for v in z], "ties_at_max": ties, "calls": len(labels)}
84
+
85
+ done = set()
86
+ if os.path.exists(OUT):
87
+ done = {json.loads(l)["example_id"] for l in open(OUT)}
88
+ ex = [json.loads(l) for l in open(MAN)]
89
+ with open(OUT, "a") as f:
90
+ for e in ex:
91
+ if e["example_id"] in done:
92
+ continue
93
+ L = e["labels"]
94
+ if TRACK == "native" and BACKEND == "ines" and len(L) > 26:
95
+ continue # Ines-1 has no native > 26 interface: see ablation (knockout)
96
+ t = time.perf_counter()
97
+ try:
98
+ pred, meta = (native if TRACK == "native" else ovr)(e["text"], L); err = None
99
+ except SystemExit:
100
+ raise
101
+ except Exception as x: # failures stay in the denominator
102
+ pred, meta, err = -1, {}, repr(x)[:300]
103
+ f.write(json.dumps({"backend": BACKEND, "track": TRACK, "dataset": e["dataset"], "example_id": e["example_id"],
104
+ "target_index": e["target_index"], "predicted_index": pred, "n_labels": len(L),
105
+ "latency_seconds": time.perf_counter() - t, "error": err, **meta}) + "\n")
106
+ f.flush()
107
+ print("done", BACKEND, TRACK)
eval/btzsc22/code/run_tracks.sh ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ # btzsc22-ext-v1: Track A (model-specific classification) and Track B (one-vs-rest) with the frozen run_track.py.
3
+ # Set by the caller (paths generalised for publication; the executed script differed only in these locations):
4
+ # INES, JULIA, LAYA local snapshots of the three decision models (GLiNER2.5 is fetched by gliner2)
5
+ # PY_INES PY_JULIA PY_LAYA PY_GLINER python of each isolated environment (see ../PROTOCOL.md)
6
+ # INES_PYTHONPATH extra path giving Ines-1's environment the `safetensors` package, if needed
7
+ M=runs/btzsc22/manifest.jsonl; O=runs/btzsc22/v1; mkdir -p $O
8
+ export USE_TF=0
9
+ run() { local b=$1; shift; "$@" run_track.py $b $M $O/$b.native.jsonl native && "$@" run_track.py $b $M $O/$b.ovr.jsonl ovr; echo "$b-DONE"; }
10
+ ( PYTHONPATH=$INES_PYTHONPATH run ines $PY_INES ) > $O/ines.log 2>&1 &
11
+ ( TORCHDYNAMO_DISABLE=1 TORCH_DISABLE_NATIVE_JIT=1 run julia $PY_JULIA ) > $O/julia.log 2>&1 &
12
+ ( TORCHDYNAMO_DISABLE=1 TORCH_DISABLE_NATIVE_JIT=1 run laya $PY_LAYA ) > $O/laya.log 2>&1 &
13
+ ( GLINER_DEVICE=cuda run gliner $PY_GLINER ) > $O/gliner.log 2>&1 &
14
+ wait; echo ALL-DONE
eval/btzsc22/code/score_final.py ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """btzsc22-ext-v1 analysis (frozen before reading Track B). argv: run_dir(v1) exploratory_dir out_dir
2
+ Run with the gliner venv (uses jev_benchmarks.metrics unchanged)."""
3
+ import csv, json, sys
4
+ from pathlib import Path
5
+ import numpy as np
6
+ from jev_benchmarks.metrics import score_predictions, _macro_f1
7
+ from jev_benchmarks.models import Prediction
8
+
9
+ V1, EXP, OUT = Path(sys.argv[1]), Path(sys.argv[2]), Path(sys.argv[3]); OUT.mkdir(parents=True, exist_ok=True)
10
+ MODELS = ["ines", "julia", "laya", "gliner"]
11
+ NAME = {"ines": "Ines-1", "julia": "Julia-1", "laya": "laya-multilingual", "gliner": "GLiNER2.5"}
12
+ IN_MIX = {"amazonpolarity", "banking77", "massive", "wikitoxic_insult", "wikitoxic_obscene", "wikitoxic_threat", "wikitoxic_toxicaggregated"}
13
+ man = [json.loads(l) for l in open(EXP / "manifest.jsonl")]
14
+ DS = list(dict.fromkeys(e["dataset"] for e in man)); K = {e["dataset"]: len(e["labels"]) for e in man}
15
+ IDS = {d: [e["example_id"] for e in man if e["dataset"] == d] for d in DS}
16
+ T = {d: np.array([e["target_index"] for e in man if e["dataset"] == d]) for d in DS}
17
+ LAB = {e["example_id"]: tuple(e["labels"]) for e in man}
18
+ rd = lambda p: {json.loads(l)["example_id"]: json.loads(l) for l in open(p)} if Path(p).exists() else {}
19
+ native = {m: rd(V1 / ("%s.native.jsonl" % m)) for m in MODELS}
20
+ ovr = {m: rd(V1 / ("%s.ovr.jsonl" % m)) for m in MODELS}
21
+ ines_k20, ines_k2 = rd(EXP / "ines.k20.jsonl"), rd(EXP / "ines.k2.jsonl")
22
+
23
+ def preds(src, d):
24
+ return np.array([(src[i]["predicted_index"] if i in src and not src[i].get("error") else -1) for i in IDS[d]])
25
+ def trackA(m, d):
26
+ if m == "ines" and K[d] > 26:
27
+ return preds(ines_k20, d), "knockout-20 (no native > 26 interface)"
28
+ r = native[m]; s = "single request"
29
+ if m == "julia" and K[d] > 20: s = "Router(width=20, survivors=2)"
30
+ return preds(r, d), s
31
+ P = {"A": {m: {d: trackA(m, d)[0] for d in DS} for m in MODELS}, "B": {m: {d: preds(ovr[m], d) for d in DS} for m in MODELS}}
32
+ missing = {tr: {m: int(sum((P[tr][m][d] < 0).sum() for d in DS)) for m in MODELS} for tr in P}
33
+ f1 = lambda tr, m, d, idx=None: _macro_f1(T[d] if idx is None else T[d][idx], P[tr][m][d] if idx is None else P[tr][m][d][idx], K[d])
34
+ acc = lambda tr, m, d: float(np.mean(P[tr][m][d] == T[d]))
35
+
36
+ GROUPS = {"all 22": DS, "2 labels (13)": [d for d in DS if K[d] == 2], "3-20 labels (4)": [d for d in DS if 2 < K[d] <= 20],
37
+ "21-72 labels (5)": [d for d in DS if K[d] > 20], "absent from Ines-1 decision FT mixture (15)": [d for d in DS if d not in IN_MIX],
38
+ "families in Ines-1 decision FT mixture (7)": [d for d in DS if d in IN_MIX]}
39
+ rng = np.random.default_rng(20260917)
40
+ STRATA = {d: [np.where(T[d] == c)[0] for c in np.unique(T[d])] for d in DS}
41
+ def hboot(sel, pairs, B=2000):
42
+ """paired hierarchical bootstrap: resample datasets, then examples stratified by target; equal-weight mean macro-F1"""
43
+ out = {p: [] for p in pairs}
44
+ for _ in range(B):
45
+ draw = rng.integers(0, len(sel), len(sel))
46
+ acc_ = {p: [] for p in pairs}
47
+ for j in draw:
48
+ d = sel[j]; idx = np.concatenate([rng.choice(c, len(c)) for c in STRATA[d]])
49
+ cache = {}
50
+ for p in pairs:
51
+ (ta, ma), (tb, mb) = p
52
+ for key in ((ta, ma), (tb, mb)):
53
+ if key not in cache: cache[key] = f1(key[0], key[1], d, idx)
54
+ acc_[p].append(cache[(tb, mb)] - cache[(ta, ma)])
55
+ for p in pairs: out[p].append(np.mean(acc_[p]))
56
+ res = {}
57
+ for p, v in out.items():
58
+ (ta, ma), (tb, mb) = p
59
+ obs = float(np.mean([f1(tb, mb, d) - f1(ta, ma, d) for d in sel]))
60
+ res["%s:%s - %s:%s" % (tb, mb, ta, ma)] = {"difference": obs, "ci95": [float(np.quantile(v, .025)), float(np.quantile(v, .975))]}
61
+ return res
62
+
63
+ R = {"protocol": "btzsc22-ext-v1", "missing_predictions": missing, "per_dataset": {}, "global": {}, "bootstrap": {}, "calibration": {},
64
+ "ines_ablation": {}, "anchors": {}, "ovr_ties": {}}
65
+ for d in DS:
66
+ R["per_dataset"][d] = {"labels": K[d], "in_ines_ft_mixture": d in IN_MIX,
67
+ **{tr: {m: {"accuracy": acc(tr, m, d), "macro_f1": f1(tr, m, d)} for m in MODELS} for tr in ("A", "B")},
68
+ "trackA_strategy": {m: trackA(m, d)[1] for m in MODELS}}
69
+ for g, sel in GROUPS.items():
70
+ R["global"][g] = {tr: {m: float(np.mean([f1(tr, m, d) for d in sel])) for m in MODELS} for tr in ("A", "B")}
71
+ cross = [(("A", "ines"), ("A", m)) for m in MODELS[1:]] + [(("B", "ines"), ("B", m)) for m in MODELS[1:]] + [(("A", m), ("B", m)) for m in MODELS]
72
+ for g, sel in GROUPS.items():
73
+ R["bootstrap"][g] = hboot(sel, cross, B=2000 if g == "all 22" else 1000)
74
+
75
+ def calib(srcs, field, sel):
76
+ out = {}
77
+ for m in MODELS:
78
+ per = []
79
+ for d in sel:
80
+ rows = []
81
+ for i in IDS[d]:
82
+ r = srcs[m].get(i)
83
+ if not r or r.get("error") or not r.get(field): break
84
+ rows.append(Prediction(experiment_id="x", backend=m, model_requested=m, model_resolved=m, dataset=d, example_id=i,
85
+ target_index=int(T[d][IDS[d].index(i)]), predicted_index=r["predicted_index"], labels=LAB[i],
86
+ probabilities=tuple(r[field]), latency_seconds=0.0))
87
+ else:
88
+ per.append(score_predictions(rows))
89
+ if per:
90
+ out[m] = {k: float(np.mean([s[k] for s in per])) for k in ("brier", "nll", "ece", "coverage_at_error_budget", "mean_confidence")} | {"datasets": len(per)}
91
+ return out
92
+ native_full = [d for d in DS if K[d] <= 20]
93
+ R["calibration"]["native (Track A, full native distributions, <=20 labels, 17 datasets)"] = calib(native, "probabilities", native_full)
94
+ R["calibration"]["derived (Track B softmax of log-odds, same 17 datasets)"] = calib(ovr, "derived_probabilities", native_full)
95
+ R["calibration"]["derived (Track B softmax of log-odds, all 22 datasets)"] = calib(ovr, "derived_probabilities", DS)
96
+ R["ovr_ties"] = {m: {"examples_with_tie_at_max": sum(1 for r in ovr[m].values() if r.get("ties_at_max", 1) > 1), "n": len(ovr[m])} for m in MODELS}
97
+
98
+ multi = [d for d in DS if K[d] > 2]
99
+ for d in multi:
100
+ row = {"native(<=26)": acc("A", "ines", d) if K[d] <= 26 else None, "knockout-20": float(np.mean(preds(ines_k20, d) == T[d])) if K[d] > 20 else None,
101
+ "knockout-2": float(np.mean(preds(ines_k2, d) == T[d])), "one-vs-rest": acc("B", "ines", d)}
102
+ rowf = {"native(<=26)": _macro_f1(T[d], preds(native["ines"], d), K[d]) if K[d] <= 26 else None,
103
+ "knockout-20": _macro_f1(T[d], preds(ines_k20, d), K[d]) if K[d] > 20 else None,
104
+ "knockout-2": _macro_f1(T[d], preds(ines_k2, d), K[d]), "one-vs-rest": f1("B", "ines", d)}
105
+ R["ines_ablation"][d] = {"labels": K[d], "accuracy": row, "macro_f1": rowf}
106
+
107
+ pub = {"agnews": 0.70, "emotiondair": 0.44, "banking77": 0.61}
108
+ R["anchors"]["GLiNER2.5 Track A vs published pilot (accuracy)"] = {d: {"ours": acc("A", "gliner", d), "published": v} for d, v in pub.items()}
109
+ card = {"agnews": 0.94, "emotiondair": 0.86, "banking77": 0.64}
110
+ R["anchors"]["Julia-1 Track A vs its model card (accuracy)"] = {d: {"ours": acc("A", "julia", d), "card": v, "ours_strategy": trackA("julia", d)[1]} for d, v in card.items()}
111
+
112
+ json.dump(R, open(OUT / "results.json", "w"), indent=1)
113
+ with open(OUT / "per_dataset.csv", "w", newline="") as f:
114
+ w = csv.writer(f); w.writerow(["dataset", "labels", "in_ines1_decision_ft_mixture"] + ["%s_%s_%s" % (tr, m, k) for tr in ("A", "B") for m in MODELS for k in ("accuracy", "macro_f1")] + ["A_strategy_ines", "A_strategy_julia"])
115
+ for d in DS:
116
+ x = R["per_dataset"][d]
117
+ w.writerow([d, K[d], d in IN_MIX] + ["%.4f" % x[tr][m][k] for tr in ("A", "B") for m in MODELS for k in ("accuracy", "macro_f1")] + [x["trackA_strategy"]["ines"], x["trackA_strategy"]["julia"]])
118
+ print("missing", missing)
119
+ for g in GROUPS:
120
+ print("%-45s A %s | B %s" % (g, " ".join("%s %.3f" % (m, R["global"][g]["A"][m]) for m in MODELS), " ".join("%s %.3f" % (m, R["global"][g]["B"][m]) for m in MODELS)))
121
+ for k, v in R["bootstrap"]["all 22"].items(): print(" %-28s %+.3f [%+.3f, %+.3f]" % (k, v["difference"], *v["ci95"]))
eval/btzsc22/manifest_ids.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
eval/btzsc22/per_dataset.csv ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ dataset,labels,in_ines1_decision_ft_mixture,A_ines_accuracy,A_ines_macro_f1,A_julia_accuracy,A_julia_macro_f1,A_laya_accuracy,A_laya_macro_f1,A_gliner_accuracy,A_gliner_macro_f1,B_ines_accuracy,B_ines_macro_f1,B_julia_accuracy,B_julia_macro_f1,B_laya_accuracy,B_laya_macro_f1,B_gliner_accuracy,B_gliner_macro_f1,A_strategy_ines,A_strategy_julia
2
+ agnews,4,False,0.5900,0.5843,0.9400,0.9399,0.9400,0.9393,0.7000,0.6589,0.4200,0.3265,0.4200,0.3995,0.8900,0.8890,0.4500,0.3986,single request,single request
3
+ emotiondair,6,False,0.4300,0.3904,0.8600,0.8557,0.3700,0.3527,0.4400,0.4070,0.3400,0.2948,0.2600,0.2543,0.4300,0.4279,0.3500,0.3193,single request,single request
4
+ banking77,72,True,0.3900,0.3427,0.6300,0.5704,0.0200,0.0006,0.6100,0.5693,0.2900,0.2235,0.0900,0.0472,0.2200,0.1880,0.4100,0.3788,knockout-20 (no native > 26 interface),"Router(width=20, survivors=2)"
5
+ amazonpolarity,2,True,0.7800,0.7756,0.6200,0.6162,0.8400,0.8368,0.8800,0.8800,0.6500,0.6179,0.5800,0.5716,0.9100,0.9098,0.8300,0.8249,single request,single request
6
+ imdb,2,False,0.7500,0.7500,0.6800,0.6799,0.7300,0.7149,0.8000,0.7947,0.6900,0.6808,0.5400,0.5354,0.8100,0.8091,0.7300,0.7175,single request,single request
7
+ appreviews,2,False,0.7700,0.7660,0.6500,0.6396,0.7800,0.7756,0.8900,0.8895,0.8100,0.8095,0.5100,0.4954,0.8900,0.8897,0.8000,0.7960,single request,single request
8
+ yelpreviews,2,False,0.7200,0.6997,0.7300,0.7278,0.9000,0.8996,0.9000,0.8994,0.6800,0.6435,0.5100,0.5088,0.9300,0.9298,0.7400,0.7211,single request,single request
9
+ rottentomatoes,2,False,0.5900,0.5671,0.6600,0.6264,0.6900,0.6808,0.7100,0.7064,0.6400,0.6347,0.4600,0.4325,0.7400,0.7400,0.6700,0.6548,single request,single request
10
+ financialphrasebank,3,False,0.5100,0.4891,0.4500,0.3711,0.8100,0.8085,0.6900,0.6821,0.4500,0.3886,0.2500,0.1744,0.9100,0.9097,0.5500,0.4785,single request,single request
11
+ empathetic,32,False,0.2500,0.1909,0.1700,0.1594,0.0600,0.0255,0.3300,0.2807,0.1800,0.1442,0.0500,0.0390,0.3300,0.2873,0.1400,0.1304,knockout-20 (no native > 26 interface),"Router(width=20, survivors=2)"
12
+ biasframes_intent,2,False,0.6000,0.5998,0.5700,0.5665,0.6100,0.5920,0.5800,0.5739,0.5900,0.5524,0.5900,0.5806,0.6600,0.6550,0.5200,0.3912,single request,single request
13
+ massive,59,True,0.3500,0.2502,0.2700,0.1802,0.0100,0.0010,0.4400,0.3827,0.2000,0.1528,0.0200,0.0122,0.3500,0.3255,0.3000,0.2354,knockout-20 (no native > 26 interface),"Router(width=20, survivors=2)"
14
+ yahootopics,10,False,0.5000,0.4915,0.3900,0.3675,0.1500,0.1369,0.4100,0.4170,0.1800,0.1231,0.1200,0.1127,0.3700,0.3650,0.3200,0.3175,single request,single request
15
+ trueteacher,2,False,0.5600,0.5376,0.5200,0.5152,0.5600,0.4658,0.5300,0.5242,0.5000,0.3333,0.5000,0.4346,0.4800,0.4207,0.5400,0.4524,single request,single request
16
+ manifesto,56,False,0.1100,0.0750,0.1000,0.0789,0.0300,0.0077,0.0200,0.0007,0.0500,0.0329,0.0200,0.0149,0.1100,0.0903,0.0600,0.0136,knockout-20 (no native > 26 interface),"Router(width=20, survivors=2)"
17
+ capsotu,21,False,0.3600,0.3121,0.4500,0.4452,0.0500,0.0050,0.3000,0.2524,0.2100,0.1784,0.1000,0.0799,0.2700,0.2800,0.1700,0.1837,single request,"Router(width=20, survivors=2)"
18
+ biasframes_offensive,2,False,0.5200,0.4956,0.5400,0.5119,0.6200,0.6194,0.4600,0.4375,0.4800,0.4800,0.4500,0.4068,0.6900,0.6885,0.5200,0.3763,single request,single request
19
+ biasframes_sex,2,False,0.3400,0.3389,0.5600,0.5556,0.7200,0.7083,0.5300,0.3967,0.5300,0.5192,0.5600,0.5098,0.7900,0.7900,0.5600,0.4762,single request,single request
20
+ wikitoxic_insult,2,True,0.7700,0.7694,0.5600,0.5593,0.8500,0.8482,0.7000,0.6900,0.6900,0.6900,0.5400,0.5308,0.8000,0.7960,0.5800,0.5000,single request,single request
21
+ wikitoxic_obscene,2,True,0.4400,0.3455,0.5600,0.5572,0.6500,0.6419,0.5200,0.3912,0.7300,0.7300,0.6300,0.6190,0.8300,0.8279,0.6200,0.5703,single request,single request
22
+ wikitoxic_threat,2,True,0.4700,0.3498,0.4700,0.4674,0.9100,0.9100,0.5300,0.3967,0.7300,0.7254,0.5500,0.5423,0.7700,0.7614,0.5200,0.3763,single request,single request
23
+ wikitoxic_toxicaggregated,2,True,0.3300,0.3049,0.5700,0.5502,0.7000,0.6921,0.6200,0.5766,0.7700,0.7681,0.5700,0.5572,0.8700,0.8678,0.6200,0.5766,single request,single request
eval/btzsc22/predictions/ablation_ines.knockout_2.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
eval/btzsc22/predictions/ablation_ines.knockout_20.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
eval/btzsc22/predictions/trackA_native.gliner.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
eval/btzsc22/predictions/trackA_native.ines.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
eval/btzsc22/predictions/trackA_native.julia.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
eval/btzsc22/predictions/trackA_native.laya.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
eval/btzsc22/predictions/trackB_ovr.gliner.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
eval/btzsc22/predictions/trackB_ovr.ines.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
eval/btzsc22/predictions/trackB_ovr.julia.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
eval/btzsc22/predictions/trackB_ovr.laya.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
eval/btzsc22/results.json ADDED
@@ -0,0 +1,1843 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "protocol": "btzsc22-ext-v1",
3
+ "missing_predictions": {
4
+ "A": {
5
+ "ines": 0,
6
+ "julia": 0,
7
+ "laya": 0,
8
+ "gliner": 0
9
+ },
10
+ "B": {
11
+ "ines": 0,
12
+ "julia": 0,
13
+ "laya": 0,
14
+ "gliner": 0
15
+ }
16
+ },
17
+ "per_dataset": {
18
+ "agnews": {
19
+ "labels": 4,
20
+ "in_ines_ft_mixture": false,
21
+ "A": {
22
+ "ines": {
23
+ "accuracy": 0.59,
24
+ "macro_f1": 0.5843451916892106
25
+ },
26
+ "julia": {
27
+ "accuracy": 0.94,
28
+ "macro_f1": 0.9399173646545361
29
+ },
30
+ "laya": {
31
+ "accuracy": 0.94,
32
+ "macro_f1": 0.939271525304066
33
+ },
34
+ "gliner": {
35
+ "accuracy": 0.7,
36
+ "macro_f1": 0.6588522320524076
37
+ }
38
+ },
39
+ "B": {
40
+ "ines": {
41
+ "accuracy": 0.42,
42
+ "macro_f1": 0.32652938961350175
43
+ },
44
+ "julia": {
45
+ "accuracy": 0.42,
46
+ "macro_f1": 0.399474348626891
47
+ },
48
+ "laya": {
49
+ "accuracy": 0.89,
50
+ "macro_f1": 0.8889659795261577
51
+ },
52
+ "gliner": {
53
+ "accuracy": 0.45,
54
+ "macro_f1": 0.39861358684888093
55
+ }
56
+ },
57
+ "trackA_strategy": {
58
+ "ines": "single request",
59
+ "julia": "single request",
60
+ "laya": "single request",
61
+ "gliner": "single request"
62
+ }
63
+ },
64
+ "emotiondair": {
65
+ "labels": 6,
66
+ "in_ines_ft_mixture": false,
67
+ "A": {
68
+ "ines": {
69
+ "accuracy": 0.43,
70
+ "macro_f1": 0.39042230395613853
71
+ },
72
+ "julia": {
73
+ "accuracy": 0.86,
74
+ "macro_f1": 0.8556934538891329
75
+ },
76
+ "laya": {
77
+ "accuracy": 0.37,
78
+ "macro_f1": 0.35268000920174836
79
+ },
80
+ "gliner": {
81
+ "accuracy": 0.44,
82
+ "macro_f1": 0.4070167592505414
83
+ }
84
+ },
85
+ "B": {
86
+ "ines": {
87
+ "accuracy": 0.34,
88
+ "macro_f1": 0.29478472669962036
89
+ },
90
+ "julia": {
91
+ "accuracy": 0.26,
92
+ "macro_f1": 0.25425384800384804
93
+ },
94
+ "laya": {
95
+ "accuracy": 0.43,
96
+ "macro_f1": 0.4279340742423987
97
+ },
98
+ "gliner": {
99
+ "accuracy": 0.35,
100
+ "macro_f1": 0.3193197964297709
101
+ }
102
+ },
103
+ "trackA_strategy": {
104
+ "ines": "single request",
105
+ "julia": "single request",
106
+ "laya": "single request",
107
+ "gliner": "single request"
108
+ }
109
+ },
110
+ "banking77": {
111
+ "labels": 72,
112
+ "in_ines_ft_mixture": true,
113
+ "A": {
114
+ "ines": {
115
+ "accuracy": 0.39,
116
+ "macro_f1": 0.34265873015873016
117
+ },
118
+ "julia": {
119
+ "accuracy": 0.63,
120
+ "macro_f1": 0.5703703703703703
121
+ },
122
+ "laya": {
123
+ "accuracy": 0.02,
124
+ "macro_f1": 0.0005611672278338945
125
+ },
126
+ "gliner": {
127
+ "accuracy": 0.61,
128
+ "macro_f1": 0.569268077601411
129
+ }
130
+ },
131
+ "B": {
132
+ "ines": {
133
+ "accuracy": 0.29,
134
+ "macro_f1": 0.2234898589065256
135
+ },
136
+ "julia": {
137
+ "accuracy": 0.09,
138
+ "macro_f1": 0.04716343327454439
139
+ },
140
+ "laya": {
141
+ "accuracy": 0.22,
142
+ "macro_f1": 0.18796296296296294
143
+ },
144
+ "gliner": {
145
+ "accuracy": 0.41,
146
+ "macro_f1": 0.3787818662818662
147
+ }
148
+ },
149
+ "trackA_strategy": {
150
+ "ines": "knockout-20 (no native > 26 interface)",
151
+ "julia": "Router(width=20, survivors=2)",
152
+ "laya": "single request",
153
+ "gliner": "single request"
154
+ }
155
+ },
156
+ "amazonpolarity": {
157
+ "labels": 2,
158
+ "in_ines_ft_mixture": true,
159
+ "A": {
160
+ "ines": {
161
+ "accuracy": 0.78,
162
+ "macro_f1": 0.7756017951856384
163
+ },
164
+ "julia": {
165
+ "accuracy": 0.62,
166
+ "macro_f1": 0.6161616161616161
167
+ },
168
+ "laya": {
169
+ "accuracy": 0.84,
170
+ "macro_f1": 0.8368013055895553
171
+ },
172
+ "gliner": {
173
+ "accuracy": 0.88,
174
+ "macro_f1": 0.8799519807923168
175
+ }
176
+ },
177
+ "B": {
178
+ "ines": {
179
+ "accuracy": 0.65,
180
+ "macro_f1": 0.6178622120318812
181
+ },
182
+ "julia": {
183
+ "accuracy": 0.58,
184
+ "macro_f1": 0.5716034271725826
185
+ },
186
+ "laya": {
187
+ "accuracy": 0.91,
188
+ "macro_f1": 0.9097744360902256
189
+ },
190
+ "gliner": {
191
+ "accuracy": 0.83,
192
+ "macro_f1": 0.8249407887962105
193
+ }
194
+ },
195
+ "trackA_strategy": {
196
+ "ines": "single request",
197
+ "julia": "single request",
198
+ "laya": "single request",
199
+ "gliner": "single request"
200
+ }
201
+ },
202
+ "imdb": {
203
+ "labels": 2,
204
+ "in_ines_ft_mixture": false,
205
+ "A": {
206
+ "ines": {
207
+ "accuracy": 0.75,
208
+ "macro_f1": 0.74997499749975
209
+ },
210
+ "julia": {
211
+ "accuracy": 0.68,
212
+ "macro_f1": 0.6798719487795117
213
+ },
214
+ "laya": {
215
+ "accuracy": 0.73,
216
+ "macro_f1": 0.7149192271143491
217
+ },
218
+ "gliner": {
219
+ "accuracy": 0.8,
220
+ "macro_f1": 0.7947454844006567
221
+ }
222
+ },
223
+ "B": {
224
+ "ines": {
225
+ "accuracy": 0.69,
226
+ "macro_f1": 0.6807743795695603
227
+ },
228
+ "julia": {
229
+ "accuracy": 0.54,
230
+ "macro_f1": 0.5353535353535354
231
+ },
232
+ "laya": {
233
+ "accuracy": 0.81,
234
+ "macro_f1": 0.8090644156366193
235
+ },
236
+ "gliner": {
237
+ "accuracy": 0.73,
238
+ "macro_f1": 0.7175436761167486
239
+ }
240
+ },
241
+ "trackA_strategy": {
242
+ "ines": "single request",
243
+ "julia": "single request",
244
+ "laya": "single request",
245
+ "gliner": "single request"
246
+ }
247
+ },
248
+ "appreviews": {
249
+ "labels": 2,
250
+ "in_ines_ft_mixture": false,
251
+ "A": {
252
+ "ines": {
253
+ "accuracy": 0.77,
254
+ "macro_f1": 0.7660461804495982
255
+ },
256
+ "julia": {
257
+ "accuracy": 0.65,
258
+ "macro_f1": 0.6395839769333744
259
+ },
260
+ "laya": {
261
+ "accuracy": 0.78,
262
+ "macro_f1": 0.7756017951856384
263
+ },
264
+ "gliner": {
265
+ "accuracy": 0.89,
266
+ "macro_f1": 0.8894583458948849
267
+ }
268
+ },
269
+ "B": {
270
+ "ines": {
271
+ "accuracy": 0.81,
272
+ "macro_f1": 0.8095238095238095
273
+ },
274
+ "julia": {
275
+ "accuracy": 0.51,
276
+ "macro_f1": 0.49541756770672435
277
+ },
278
+ "laya": {
279
+ "accuracy": 0.89,
280
+ "macro_f1": 0.8897243107769424
281
+ },
282
+ "gliner": {
283
+ "accuracy": 0.8,
284
+ "macro_f1": 0.7960016319869441
285
+ }
286
+ },
287
+ "trackA_strategy": {
288
+ "ines": "single request",
289
+ "julia": "single request",
290
+ "laya": "single request",
291
+ "gliner": "single request"
292
+ }
293
+ },
294
+ "yelpreviews": {
295
+ "labels": 2,
296
+ "in_ines_ft_mixture": false,
297
+ "A": {
298
+ "ines": {
299
+ "accuracy": 0.72,
300
+ "macro_f1": 0.6996996996996997
301
+ },
302
+ "julia": {
303
+ "accuracy": 0.73,
304
+ "macro_f1": 0.7277951406391774
305
+ },
306
+ "laya": {
307
+ "accuracy": 0.9,
308
+ "macro_f1": 0.8996386993175431
309
+ },
310
+ "gliner": {
311
+ "accuracy": 0.9,
312
+ "macro_f1": 0.8993558776167472
313
+ }
314
+ },
315
+ "B": {
316
+ "ines": {
317
+ "accuracy": 0.68,
318
+ "macro_f1": 0.64349376114082
319
+ },
320
+ "julia": {
321
+ "accuracy": 0.51,
322
+ "macro_f1": 0.5087719298245614
323
+ },
324
+ "laya": {
325
+ "accuracy": 0.93,
326
+ "macro_f1": 0.9298245614035088
327
+ },
328
+ "gliner": {
329
+ "accuracy": 0.74,
330
+ "macro_f1": 0.7211497211497211
331
+ }
332
+ },
333
+ "trackA_strategy": {
334
+ "ines": "single request",
335
+ "julia": "single request",
336
+ "laya": "single request",
337
+ "gliner": "single request"
338
+ }
339
+ },
340
+ "rottentomatoes": {
341
+ "labels": 2,
342
+ "in_ines_ft_mixture": false,
343
+ "A": {
344
+ "ines": {
345
+ "accuracy": 0.59,
346
+ "macro_f1": 0.5670995670995671
347
+ },
348
+ "julia": {
349
+ "accuracy": 0.66,
350
+ "macro_f1": 0.6263736263736264
351
+ },
352
+ "laya": {
353
+ "accuracy": 0.69,
354
+ "macro_f1": 0.6807743795695603
355
+ },
356
+ "gliner": {
357
+ "accuracy": 0.71,
358
+ "macro_f1": 0.7064480210547626
359
+ }
360
+ },
361
+ "B": {
362
+ "ines": {
363
+ "accuracy": 0.64,
364
+ "macro_f1": 0.6347402597402598
365
+ },
366
+ "julia": {
367
+ "accuracy": 0.46,
368
+ "macro_f1": 0.43253467843631777
369
+ },
370
+ "laya": {
371
+ "accuracy": 0.74,
372
+ "macro_f1": 0.74
373
+ },
374
+ "gliner": {
375
+ "accuracy": 0.67,
376
+ "macro_f1": 0.6547756041426928
377
+ }
378
+ },
379
+ "trackA_strategy": {
380
+ "ines": "single request",
381
+ "julia": "single request",
382
+ "laya": "single request",
383
+ "gliner": "single request"
384
+ }
385
+ },
386
+ "financialphrasebank": {
387
+ "labels": 3,
388
+ "in_ines_ft_mixture": false,
389
+ "A": {
390
+ "ines": {
391
+ "accuracy": 0.51,
392
+ "macro_f1": 0.48911853494169083
393
+ },
394
+ "julia": {
395
+ "accuracy": 0.45,
396
+ "macro_f1": 0.37110209601081806
397
+ },
398
+ "laya": {
399
+ "accuracy": 0.81,
400
+ "macro_f1": 0.8084906388321863
401
+ },
402
+ "gliner": {
403
+ "accuracy": 0.69,
404
+ "macro_f1": 0.6821411017203141
405
+ }
406
+ },
407
+ "B": {
408
+ "ines": {
409
+ "accuracy": 0.45,
410
+ "macro_f1": 0.388558378810103
411
+ },
412
+ "julia": {
413
+ "accuracy": 0.25,
414
+ "macro_f1": 0.17441737846672992
415
+ },
416
+ "laya": {
417
+ "accuracy": 0.91,
418
+ "macro_f1": 0.9096611274030629
419
+ },
420
+ "gliner": {
421
+ "accuracy": 0.55,
422
+ "macro_f1": 0.47845237675746155
423
+ }
424
+ },
425
+ "trackA_strategy": {
426
+ "ines": "single request",
427
+ "julia": "single request",
428
+ "laya": "single request",
429
+ "gliner": "single request"
430
+ }
431
+ },
432
+ "empathetic": {
433
+ "labels": 32,
434
+ "in_ines_ft_mixture": false,
435
+ "A": {
436
+ "ines": {
437
+ "accuracy": 0.25,
438
+ "macro_f1": 0.1909003551273288
439
+ },
440
+ "julia": {
441
+ "accuracy": 0.17,
442
+ "macro_f1": 0.15942460317460316
443
+ },
444
+ "laya": {
445
+ "accuracy": 0.06,
446
+ "macro_f1": 0.02546768707482993
447
+ },
448
+ "gliner": {
449
+ "accuracy": 0.33,
450
+ "macro_f1": 0.2807043650793651
451
+ }
452
+ },
453
+ "B": {
454
+ "ines": {
455
+ "accuracy": 0.18,
456
+ "macro_f1": 0.14416745535166586
457
+ },
458
+ "julia": {
459
+ "accuracy": 0.05,
460
+ "macro_f1": 0.039042207792207795
461
+ },
462
+ "laya": {
463
+ "accuracy": 0.33,
464
+ "macro_f1": 0.2872519841269841
465
+ },
466
+ "gliner": {
467
+ "accuracy": 0.14,
468
+ "macro_f1": 0.13043154761904763
469
+ }
470
+ },
471
+ "trackA_strategy": {
472
+ "ines": "knockout-20 (no native > 26 interface)",
473
+ "julia": "Router(width=20, survivors=2)",
474
+ "laya": "single request",
475
+ "gliner": "single request"
476
+ }
477
+ },
478
+ "biasframes_intent": {
479
+ "labels": 2,
480
+ "in_ines_ft_mixture": false,
481
+ "A": {
482
+ "ines": {
483
+ "accuracy": 0.6,
484
+ "macro_f1": 0.5998399359743898
485
+ },
486
+ "julia": {
487
+ "accuracy": 0.57,
488
+ "macro_f1": 0.5664885573142454
489
+ },
490
+ "laya": {
491
+ "accuracy": 0.61,
492
+ "macro_f1": 0.5920075321686369
493
+ },
494
+ "gliner": {
495
+ "accuracy": 0.58,
496
+ "macro_f1": 0.5738636363636364
497
+ }
498
+ },
499
+ "B": {
500
+ "ines": {
501
+ "accuracy": 0.59,
502
+ "macro_f1": 0.5523528769516323
503
+ },
504
+ "julia": {
505
+ "accuracy": 0.59,
506
+ "macro_f1": 0.5805626598465473
507
+ },
508
+ "laya": {
509
+ "accuracy": 0.66,
510
+ "macro_f1": 0.6550324675324675
511
+ },
512
+ "gliner": {
513
+ "accuracy": 0.52,
514
+ "macro_f1": 0.39117199391172
515
+ }
516
+ },
517
+ "trackA_strategy": {
518
+ "ines": "single request",
519
+ "julia": "single request",
520
+ "laya": "single request",
521
+ "gliner": "single request"
522
+ }
523
+ },
524
+ "massive": {
525
+ "labels": 59,
526
+ "in_ines_ft_mixture": true,
527
+ "A": {
528
+ "ines": {
529
+ "accuracy": 0.35,
530
+ "macro_f1": 0.2502433536331841
531
+ },
532
+ "julia": {
533
+ "accuracy": 0.27,
534
+ "macro_f1": 0.1801721818670971
535
+ },
536
+ "laya": {
537
+ "accuracy": 0.01,
538
+ "macro_f1": 0.0009685230024213075
539
+ },
540
+ "gliner": {
541
+ "accuracy": 0.44,
542
+ "macro_f1": 0.38272522334474407
543
+ }
544
+ },
545
+ "B": {
546
+ "ines": {
547
+ "accuracy": 0.2,
548
+ "macro_f1": 0.15282852740479855
549
+ },
550
+ "julia": {
551
+ "accuracy": 0.02,
552
+ "macro_f1": 0.01224105461393597
553
+ },
554
+ "laya": {
555
+ "accuracy": 0.35,
556
+ "macro_f1": 0.3254640839386602
557
+ },
558
+ "gliner": {
559
+ "accuracy": 0.3,
560
+ "macro_f1": 0.2353510895883777
561
+ }
562
+ },
563
+ "trackA_strategy": {
564
+ "ines": "knockout-20 (no native > 26 interface)",
565
+ "julia": "Router(width=20, survivors=2)",
566
+ "laya": "single request",
567
+ "gliner": "single request"
568
+ }
569
+ },
570
+ "yahootopics": {
571
+ "labels": 10,
572
+ "in_ines_ft_mixture": false,
573
+ "A": {
574
+ "ines": {
575
+ "accuracy": 0.5,
576
+ "macro_f1": 0.4915120854091442
577
+ },
578
+ "julia": {
579
+ "accuracy": 0.39,
580
+ "macro_f1": 0.3675051008447593
581
+ },
582
+ "laya": {
583
+ "accuracy": 0.15,
584
+ "macro_f1": 0.13690074545337702
585
+ },
586
+ "gliner": {
587
+ "accuracy": 0.41,
588
+ "macro_f1": 0.4169864449276214
589
+ }
590
+ },
591
+ "B": {
592
+ "ines": {
593
+ "accuracy": 0.18,
594
+ "macro_f1": 0.12307189542483658
595
+ },
596
+ "julia": {
597
+ "accuracy": 0.12,
598
+ "macro_f1": 0.11272908345326083
599
+ },
600
+ "laya": {
601
+ "accuracy": 0.37,
602
+ "macro_f1": 0.36499120762278653
603
+ },
604
+ "gliner": {
605
+ "accuracy": 0.32,
606
+ "macro_f1": 0.31750090466808734
607
+ }
608
+ },
609
+ "trackA_strategy": {
610
+ "ines": "single request",
611
+ "julia": "single request",
612
+ "laya": "single request",
613
+ "gliner": "single request"
614
+ }
615
+ },
616
+ "trueteacher": {
617
+ "labels": 2,
618
+ "in_ines_ft_mixture": false,
619
+ "A": {
620
+ "ines": {
621
+ "accuracy": 0.56,
622
+ "macro_f1": 0.537620849096259
623
+ },
624
+ "julia": {
625
+ "accuracy": 0.52,
626
+ "macro_f1": 0.5151515151515151
627
+ },
628
+ "laya": {
629
+ "accuracy": 0.56,
630
+ "macro_f1": 0.46576007770762506
631
+ },
632
+ "gliner": {
633
+ "accuracy": 0.53,
634
+ "macro_f1": 0.5242433444680635
635
+ }
636
+ },
637
+ "B": {
638
+ "ines": {
639
+ "accuracy": 0.5,
640
+ "macro_f1": 0.3333333333333333
641
+ },
642
+ "julia": {
643
+ "accuracy": 0.5,
644
+ "macro_f1": 0.43464495703301675
645
+ },
646
+ "laya": {
647
+ "accuracy": 0.48,
648
+ "macro_f1": 0.4206773618538324
649
+ },
650
+ "gliner": {
651
+ "accuracy": 0.54,
652
+ "macro_f1": 0.45238095238095233
653
+ }
654
+ },
655
+ "trackA_strategy": {
656
+ "ines": "single request",
657
+ "julia": "single request",
658
+ "laya": "single request",
659
+ "gliner": "single request"
660
+ }
661
+ },
662
+ "manifesto": {
663
+ "labels": 56,
664
+ "in_ines_ft_mixture": false,
665
+ "A": {
666
+ "ines": {
667
+ "accuracy": 0.11,
668
+ "macro_f1": 0.07504578754578754
669
+ },
670
+ "julia": {
671
+ "accuracy": 0.1,
672
+ "macro_f1": 0.0788690476190476
673
+ },
674
+ "laya": {
675
+ "accuracy": 0.03,
676
+ "macro_f1": 0.007711038961038961
677
+ },
678
+ "gliner": {
679
+ "accuracy": 0.02,
680
+ "macro_f1": 0.0007072135785007072
681
+ }
682
+ },
683
+ "B": {
684
+ "ines": {
685
+ "accuracy": 0.05,
686
+ "macro_f1": 0.032902735562310034
687
+ },
688
+ "julia": {
689
+ "accuracy": 0.02,
690
+ "macro_f1": 0.01488095238095238
691
+ },
692
+ "laya": {
693
+ "accuracy": 0.11,
694
+ "macro_f1": 0.09031507339778015
695
+ },
696
+ "gliner": {
697
+ "accuracy": 0.06,
698
+ "macro_f1": 0.013575543120473996
699
+ }
700
+ },
701
+ "trackA_strategy": {
702
+ "ines": "knockout-20 (no native > 26 interface)",
703
+ "julia": "Router(width=20, survivors=2)",
704
+ "laya": "single request",
705
+ "gliner": "single request"
706
+ }
707
+ },
708
+ "capsotu": {
709
+ "labels": 21,
710
+ "in_ines_ft_mixture": false,
711
+ "A": {
712
+ "ines": {
713
+ "accuracy": 0.36,
714
+ "macro_f1": 0.3120540695728665
715
+ },
716
+ "julia": {
717
+ "accuracy": 0.45,
718
+ "macro_f1": 0.4451588094445238
719
+ },
720
+ "laya": {
721
+ "accuracy": 0.05,
722
+ "macro_f1": 0.005012531328320802
723
+ },
724
+ "gliner": {
725
+ "accuracy": 0.3,
726
+ "macro_f1": 0.2524050024050024
727
+ }
728
+ },
729
+ "B": {
730
+ "ines": {
731
+ "accuracy": 0.21,
732
+ "macro_f1": 0.17844985702128557
733
+ },
734
+ "julia": {
735
+ "accuracy": 0.1,
736
+ "macro_f1": 0.0798883656026513
737
+ },
738
+ "laya": {
739
+ "accuracy": 0.27,
740
+ "macro_f1": 0.2799847801788137
741
+ },
742
+ "gliner": {
743
+ "accuracy": 0.17,
744
+ "macro_f1": 0.18369192344347623
745
+ }
746
+ },
747
+ "trackA_strategy": {
748
+ "ines": "single request",
749
+ "julia": "Router(width=20, survivors=2)",
750
+ "laya": "single request",
751
+ "gliner": "single request"
752
+ }
753
+ },
754
+ "biasframes_offensive": {
755
+ "labels": 2,
756
+ "in_ines_ft_mixture": false,
757
+ "A": {
758
+ "ines": {
759
+ "accuracy": 0.52,
760
+ "macro_f1": 0.49558638083228246
761
+ },
762
+ "julia": {
763
+ "accuracy": 0.54,
764
+ "macro_f1": 0.5118845500848896
765
+ },
766
+ "laya": {
767
+ "accuracy": 0.62,
768
+ "macro_f1": 0.6193910256410255
769
+ },
770
+ "gliner": {
771
+ "accuracy": 0.46,
772
+ "macro_f1": 0.4375
773
+ }
774
+ },
775
+ "B": {
776
+ "ines": {
777
+ "accuracy": 0.48,
778
+ "macro_f1": 0.48
779
+ },
780
+ "julia": {
781
+ "accuracy": 0.45,
782
+ "macro_f1": 0.40675223816201056
783
+ },
784
+ "laya": {
785
+ "accuracy": 0.69,
786
+ "macro_f1": 0.6884735202492211
787
+ },
788
+ "gliner": {
789
+ "accuracy": 0.52,
790
+ "macro_f1": 0.37629937629937626
791
+ }
792
+ },
793
+ "trackA_strategy": {
794
+ "ines": "single request",
795
+ "julia": "single request",
796
+ "laya": "single request",
797
+ "gliner": "single request"
798
+ }
799
+ },
800
+ "biasframes_sex": {
801
+ "labels": 2,
802
+ "in_ines_ft_mixture": false,
803
+ "A": {
804
+ "ines": {
805
+ "accuracy": 0.34,
806
+ "macro_f1": 0.3389423076923077
807
+ },
808
+ "julia": {
809
+ "accuracy": 0.56,
810
+ "macro_f1": 0.5555555555555556
811
+ },
812
+ "laya": {
813
+ "accuracy": 0.72,
814
+ "macro_f1": 0.7083333333333334
815
+ },
816
+ "gliner": {
817
+ "accuracy": 0.53,
818
+ "macro_f1": 0.39673982800667434
819
+ }
820
+ },
821
+ "B": {
822
+ "ines": {
823
+ "accuracy": 0.53,
824
+ "macro_f1": 0.5191815856777494
825
+ },
826
+ "julia": {
827
+ "accuracy": 0.56,
828
+ "macro_f1": 0.5098039215686274
829
+ },
830
+ "laya": {
831
+ "accuracy": 0.79,
832
+ "macro_f1": 0.78997899789979
833
+ },
834
+ "gliner": {
835
+ "accuracy": 0.56,
836
+ "macro_f1": 0.47619047619047616
837
+ }
838
+ },
839
+ "trackA_strategy": {
840
+ "ines": "single request",
841
+ "julia": "single request",
842
+ "laya": "single request",
843
+ "gliner": "single request"
844
+ }
845
+ },
846
+ "wikitoxic_insult": {
847
+ "labels": 2,
848
+ "in_ines_ft_mixture": true,
849
+ "A": {
850
+ "ines": {
851
+ "accuracy": 0.77,
852
+ "macro_f1": 0.7694235588972431
853
+ },
854
+ "julia": {
855
+ "accuracy": 0.56,
856
+ "macro_f1": 0.5592948717948718
857
+ },
858
+ "laya": {
859
+ "accuracy": 0.85,
860
+ "macro_f1": 0.8481627695110842
861
+ },
862
+ "gliner": {
863
+ "accuracy": 0.7,
864
+ "macro_f1": 0.6899545266639107
865
+ }
866
+ },
867
+ "B": {
868
+ "ines": {
869
+ "accuracy": 0.69,
870
+ "macro_f1": 0.6899689968996899
871
+ },
872
+ "julia": {
873
+ "accuracy": 0.54,
874
+ "macro_f1": 0.5308037535699714
875
+ },
876
+ "laya": {
877
+ "accuracy": 0.8,
878
+ "macro_f1": 0.7960016319869441
879
+ },
880
+ "gliner": {
881
+ "accuracy": 0.58,
882
+ "macro_f1": 0.5
883
+ }
884
+ },
885
+ "trackA_strategy": {
886
+ "ines": "single request",
887
+ "julia": "single request",
888
+ "laya": "single request",
889
+ "gliner": "single request"
890
+ }
891
+ },
892
+ "wikitoxic_obscene": {
893
+ "labels": 2,
894
+ "in_ines_ft_mixture": true,
895
+ "A": {
896
+ "ines": {
897
+ "accuracy": 0.44,
898
+ "macro_f1": 0.34548854604955587
899
+ },
900
+ "julia": {
901
+ "accuracy": 0.56,
902
+ "macro_f1": 0.5571658615136876
903
+ },
904
+ "laya": {
905
+ "accuracy": 0.65,
906
+ "macro_f1": 0.6419437340153453
907
+ },
908
+ "gliner": {
909
+ "accuracy": 0.52,
910
+ "macro_f1": 0.39117199391172
911
+ }
912
+ },
913
+ "B": {
914
+ "ines": {
915
+ "accuracy": 0.73,
916
+ "macro_f1": 0.72997299729973
917
+ },
918
+ "julia": {
919
+ "accuracy": 0.63,
920
+ "macro_f1": 0.6189887756152817
921
+ },
922
+ "laya": {
923
+ "accuracy": 0.83,
924
+ "macro_f1": 0.8279178054458953
925
+ },
926
+ "gliner": {
927
+ "accuracy": 0.62,
928
+ "macro_f1": 0.5703301673450927
929
+ }
930
+ },
931
+ "trackA_strategy": {
932
+ "ines": "single request",
933
+ "julia": "single request",
934
+ "laya": "single request",
935
+ "gliner": "single request"
936
+ }
937
+ },
938
+ "wikitoxic_threat": {
939
+ "labels": 2,
940
+ "in_ines_ft_mixture": true,
941
+ "A": {
942
+ "ines": {
943
+ "accuracy": 0.47,
944
+ "macro_f1": 0.3497730339835603
945
+ },
946
+ "julia": {
947
+ "accuracy": 0.47,
948
+ "macro_f1": 0.467390212038991
949
+ },
950
+ "laya": {
951
+ "accuracy": 0.91,
952
+ "macro_f1": 0.90999099909991
953
+ },
954
+ "gliner": {
955
+ "accuracy": 0.53,
956
+ "macro_f1": 0.39673982800667434
957
+ }
958
+ },
959
+ "B": {
960
+ "ines": {
961
+ "accuracy": 0.73,
962
+ "macro_f1": 0.7253585596582239
963
+ },
964
+ "julia": {
965
+ "accuracy": 0.55,
966
+ "macro_f1": 0.54226426609704
967
+ },
968
+ "laya": {
969
+ "accuracy": 0.77,
970
+ "macro_f1": 0.7613860358958398
971
+ },
972
+ "gliner": {
973
+ "accuracy": 0.52,
974
+ "macro_f1": 0.37629937629937626
975
+ }
976
+ },
977
+ "trackA_strategy": {
978
+ "ines": "single request",
979
+ "julia": "single request",
980
+ "laya": "single request",
981
+ "gliner": "single request"
982
+ }
983
+ },
984
+ "wikitoxic_toxicaggregated": {
985
+ "labels": 2,
986
+ "in_ines_ft_mixture": true,
987
+ "A": {
988
+ "ines": {
989
+ "accuracy": 0.33,
990
+ "macro_f1": 0.30490714804440294
991
+ },
992
+ "julia": {
993
+ "accuracy": 0.57,
994
+ "macro_f1": 0.5501621508525996
995
+ },
996
+ "laya": {
997
+ "accuracy": 0.7,
998
+ "macro_f1": 0.6921182266009853
999
+ },
1000
+ "gliner": {
1001
+ "accuracy": 0.62,
1002
+ "macro_f1": 0.5766488413547237
1003
+ }
1004
+ },
1005
+ "B": {
1006
+ "ines": {
1007
+ "accuracy": 0.77,
1008
+ "macro_f1": 0.7681217864704104
1009
+ },
1010
+ "julia": {
1011
+ "accuracy": 0.57,
1012
+ "macro_f1": 0.557203171661003
1013
+ },
1014
+ "laya": {
1015
+ "accuracy": 0.87,
1016
+ "macro_f1": 0.8677652324280338
1017
+ },
1018
+ "gliner": {
1019
+ "accuracy": 0.62,
1020
+ "macro_f1": 0.5766488413547237
1021
+ }
1022
+ },
1023
+ "trackA_strategy": {
1024
+ "ines": "single request",
1025
+ "julia": "single request",
1026
+ "laya": "single request",
1027
+ "gliner": "single request"
1028
+ }
1029
+ }
1030
+ },
1031
+ "global": {
1032
+ "all 22": {
1033
+ "A": {
1034
+ "ines": 0.4739229278426516,
1035
+ "julia": 0.5245951186849342,
1036
+ "laya": 0.5301139532382007,
1037
+ "gliner": 0.536710369477031
1038
+ },
1039
+ "B": {
1040
+ "ines": 0.45679397195871585,
1041
+ "julia": 0.3572179797391928,
1042
+ "laya": 0.6294614568454058,
1043
+ "gliner": 0.44952051094233986
1044
+ }
1045
+ },
1046
+ "2 labels (13)": {
1047
+ "A": {
1048
+ "ines": 0.561538769269558,
1049
+ "julia": 0.5825291987072047,
1050
+ "laya": 0.7219571619118916,
1051
+ "gliner": 0.627447823733444
1052
+ },
1053
+ "B": {
1054
+ "ines": 0.6295911198690077,
1055
+ "julia": 0.5172849909267092,
1056
+ "laya": 0.7758169828614861,
1057
+ "gliner": 0.5718255850749258
1058
+ }
1059
+ },
1060
+ "3-20 labels (4)": {
1061
+ "A": {
1062
+ "ines": 0.48884952899904605,
1063
+ "julia": 0.6335545038498116,
1064
+ "laya": 0.5593357296978444,
1065
+ "gliner": 0.5412491344877212
1066
+ },
1067
+ "B": {
1068
+ "ines": 0.28323609763701546,
1069
+ "julia": 0.23521866463768246,
1070
+ "laya": 0.6478880971986014,
1071
+ "gliner": 0.3784716661760502
1072
+ }
1073
+ },
1074
+ "21-72 labels (5)": {
1075
+ "A": {
1076
+ "ines": 0.23418045920757943,
1077
+ "julia": 0.28679900249512835,
1078
+ "laya": 0.00794418951888898,
1079
+ "gliner": 0.29716197640180464
1080
+ },
1081
+ "B": {
1082
+ "ines": 0.14636768684931714,
1083
+ "julia": 0.03864320273285837,
1084
+ "laya": 0.23419577692104018,
1085
+ "gliner": 0.18836639401064836
1086
+ }
1087
+ },
1088
+ "absent from Ines-1 decision FT mixture (15)": {
1089
+ "A": {
1090
+ "ines": 0.4858805497724014,
1091
+ "julia": 0.5360250230979545,
1092
+ "laya": 0.5154640164128853,
1093
+ "gliner": 0.5280778437879452
1094
+ },
1095
+ "B": {
1096
+ "ines": 0.4094576296280325,
1097
+ "julia": 0.3319018448171922,
1098
+ "laya": 0.6114586574566909,
1099
+ "gliner": 0.4284732740710553
1100
+ }
1101
+ },
1102
+ "families in Ines-1 decision FT mixture (7)": {
1103
+ "A": {
1104
+ "ines": 0.44829945227890217,
1105
+ "julia": 0.500102466371319,
1106
+ "laya": 0.5615066750067336,
1107
+ "gliner": 0.5552086388107859
1108
+ },
1109
+ "B": {
1110
+ "ines": 0.5582289912387514,
1111
+ "julia": 0.411466840286337,
1112
+ "laya": 0.6680388841069373,
1113
+ "gliner": 0.4946217328093781
1114
+ }
1115
+ }
1116
+ },
1117
+ "bootstrap": {
1118
+ "all 22": {
1119
+ "A:julia - A:ines": {
1120
+ "difference": 0.050672190842282465,
1121
+ "ci95": [
1122
+ -0.026197789339992814,
1123
+ 0.12574349835362167
1124
+ ]
1125
+ },
1126
+ "A:laya - A:ines": {
1127
+ "difference": 0.05619102539554903,
1128
+ "ci95": [
1129
+ -0.03957741468351192,
1130
+ 0.16332715413710902
1131
+ ]
1132
+ },
1133
+ "A:gliner - A:ines": {
1134
+ "difference": 0.06278744163437923,
1135
+ "ci95": [
1136
+ 0.014208626140706566,
1137
+ 0.10706083324209556
1138
+ ]
1139
+ },
1140
+ "B:julia - B:ines": {
1141
+ "difference": -0.099575992219523,
1142
+ "ci95": [
1143
+ -0.14637550498902815,
1144
+ -0.05017137416536893
1145
+ ]
1146
+ },
1147
+ "B:laya - B:ines": {
1148
+ "difference": 0.17266748488669,
1149
+ "ci95": [
1150
+ 0.11284488099527132,
1151
+ 0.23744000375671462
1152
+ ]
1153
+ },
1154
+ "B:gliner - B:ines": {
1155
+ "difference": -0.007273461016375937,
1156
+ "ci95": [
1157
+ -0.06982555475121606,
1158
+ 0.05100715361862577
1159
+ ]
1160
+ },
1161
+ "B:ines - A:ines": {
1162
+ "difference": -0.017128955883935842,
1163
+ "ci95": [
1164
+ -0.09913170297625284,
1165
+ 0.07045906519324419
1166
+ ]
1167
+ },
1168
+ "B:julia - A:julia": {
1169
+ "difference": -0.16737713894574127,
1170
+ "ci95": [
1171
+ -0.2550239493204071,
1172
+ -0.08802480974576297
1173
+ ]
1174
+ },
1175
+ "B:laya - A:laya": {
1176
+ "difference": 0.09934750360720516,
1177
+ "ci95": [
1178
+ 0.0454206858231911,
1179
+ 0.14433272375703962
1180
+ ]
1181
+ },
1182
+ "B:gliner - A:gliner": {
1183
+ "difference": -0.087189858534691,
1184
+ "ci95": [
1185
+ -0.13204415683257073,
1186
+ -0.0406803117967699
1187
+ ]
1188
+ }
1189
+ },
1190
+ "2 labels (13)": {
1191
+ "A:julia - A:ines": {
1192
+ "difference": 0.020990429437646712,
1193
+ "ci95": [
1194
+ -0.06061145608979183,
1195
+ 0.10740818043124331
1196
+ ]
1197
+ },
1198
+ "A:laya - A:ines": {
1199
+ "difference": 0.16041839264233365,
1200
+ "ci95": [
1201
+ 0.059458802921318936,
1202
+ 0.27206775011759543
1203
+ ]
1204
+ },
1205
+ "A:gliner - A:ines": {
1206
+ "difference": 0.0659090544638859,
1207
+ "ci95": [
1208
+ 0.004675393764386895,
1209
+ 0.12582906809147268
1210
+ ]
1211
+ },
1212
+ "B:julia - B:ines": {
1213
+ "difference": -0.11230612894229851,
1214
+ "ci95": [
1215
+ -0.18080307502401038,
1216
+ -0.042581067377537536
1217
+ ]
1218
+ },
1219
+ "B:laya - B:ines": {
1220
+ "difference": 0.14622586299247847,
1221
+ "ci95": [
1222
+ 0.09520841847771228,
1223
+ 0.20567775456268422
1224
+ ]
1225
+ },
1226
+ "B:gliner - B:ines": {
1227
+ "difference": -0.057765534794081974,
1228
+ "ci95": [
1229
+ -0.1428996478267053,
1230
+ 0.029876283921421498
1231
+ ]
1232
+ },
1233
+ "B:ines - A:ines": {
1234
+ "difference": 0.06805235059944967,
1235
+ "ci95": [
1236
+ -0.04906521051519053,
1237
+ 0.19755199873107607
1238
+ ]
1239
+ },
1240
+ "B:julia - A:julia": {
1241
+ "difference": -0.06524420778049556,
1242
+ "ci95": [
1243
+ -0.12548066475124145,
1244
+ -0.012510733064128867
1245
+ ]
1246
+ },
1247
+ "B:laya - A:laya": {
1248
+ "difference": 0.05385982094959447,
1249
+ "ci95": [
1250
+ -0.0009695761275055773,
1251
+ 0.1065780484194153
1252
+ ]
1253
+ },
1254
+ "B:gliner - A:gliner": {
1255
+ "difference": -0.0556222386585182,
1256
+ "ci95": [
1257
+ -0.11618959302529945,
1258
+ 0.007571405517821818
1259
+ ]
1260
+ }
1261
+ },
1262
+ "3-20 labels (4)": {
1263
+ "A:julia - A:ines": {
1264
+ "difference": 0.14470497485076556,
1265
+ "ci95": [
1266
+ -0.12895039644581718,
1267
+ 0.42568245069405136
1268
+ ]
1269
+ },
1270
+ "A:laya - A:ines": {
1271
+ "difference": 0.07048620069879838,
1272
+ "ci95": [
1273
+ -0.229964039114142,
1274
+ 0.3531563180395061
1275
+ ]
1276
+ },
1277
+ "A:gliner - A:ines": {
1278
+ "difference": 0.052399605488675075,
1279
+ "ci95": [
1280
+ -0.05581876515491288,
1281
+ 0.1600753585487263
1282
+ ]
1283
+ },
1284
+ "B:julia - B:ines": {
1285
+ "difference": -0.048017432999332976,
1286
+ "ci95": [
1287
+ -0.16164512046595278,
1288
+ 0.05754769356829411
1289
+ ]
1290
+ },
1291
+ "B:laya - B:ines": {
1292
+ "difference": 0.364651999561586,
1293
+ "ci95": [
1294
+ 0.18329205393405798,
1295
+ 0.5540391760322673
1296
+ ]
1297
+ },
1298
+ "B:gliner - B:ines": {
1299
+ "difference": 0.09523556853903474,
1300
+ "ci95": [
1301
+ 0.01900107622902177,
1302
+ 0.17430955225269407
1303
+ ]
1304
+ },
1305
+ "B:ines - A:ines": {
1306
+ "difference": -0.2056134313620306,
1307
+ "ci95": [
1308
+ -0.3164880910714138,
1309
+ -0.09244502441135767
1310
+ ]
1311
+ },
1312
+ "B:julia - A:julia": {
1313
+ "difference": -0.3983358392121291,
1314
+ "ci95": [
1315
+ -0.5756158997267588,
1316
+ -0.20827382157801752
1317
+ ]
1318
+ },
1319
+ "B:laya - A:laya": {
1320
+ "difference": 0.08855236750075707,
1321
+ "ci95": [
1322
+ -0.008752159824462086,
1323
+ 0.1939655463264431
1324
+ ]
1325
+ },
1326
+ "B:gliner - A:gliner": {
1327
+ "difference": -0.16277746831167095,
1328
+ "ci95": [
1329
+ -0.25637377988986315,
1330
+ -0.07162803351218687
1331
+ ]
1332
+ }
1333
+ },
1334
+ "21-72 labels (5)": {
1335
+ "A:julia - A:ines": {
1336
+ "difference": 0.05261854328754896,
1337
+ "ci95": [
1338
+ -0.04301551177445001,
1339
+ 0.15765204279382006
1340
+ ]
1341
+ },
1342
+ "A:laya - A:ines": {
1343
+ "difference": -0.22623626968869046,
1344
+ "ci95": [
1345
+ -0.30032025667320744,
1346
+ -0.12187817221877785
1347
+ ]
1348
+ },
1349
+ "A:gliner - A:ines": {
1350
+ "difference": 0.06298151719422522,
1351
+ "ci95": [
1352
+ -0.039063579916225874,
1353
+ 0.1689149673736492
1354
+ ]
1355
+ },
1356
+ "B:julia - B:ines": {
1357
+ "difference": -0.10772448411645877,
1358
+ "ci95": [
1359
+ -0.15259487999276594,
1360
+ -0.04920310152464395
1361
+ ]
1362
+ },
1363
+ "B:laya - B:ines": {
1364
+ "difference": 0.0878280900717231,
1365
+ "ci95": [
1366
+ 0.011100563313016499,
1367
+ 0.14839732102914302
1368
+ ]
1369
+ },
1370
+ "B:gliner - B:ines": {
1371
+ "difference": 0.041998707161331236,
1372
+ "ci95": [
1373
+ -0.019529909671919345,
1374
+ 0.11057761360469363
1375
+ ]
1376
+ },
1377
+ "B:ines - A:ines": {
1378
+ "difference": -0.08781277235826232,
1379
+ "ci95": [
1380
+ -0.12624266008952723,
1381
+ -0.04849955912024958
1382
+ ]
1383
+ },
1384
+ "B:julia - A:julia": {
1385
+ "difference": -0.24815579976227004,
1386
+ "ci95": [
1387
+ -0.3988206525705068,
1388
+ -0.09861247338677506
1389
+ ]
1390
+ },
1391
+ "B:laya - A:laya": {
1392
+ "difference": 0.22625158740215126,
1393
+ "ci95": [
1394
+ 0.12816497504348637,
1395
+ 0.286499258070288
1396
+ ]
1397
+ },
1398
+ "B:gliner - A:gliner": {
1399
+ "difference": -0.1087955823911563,
1400
+ "ci95": [
1401
+ -0.1700071752364474,
1402
+ -0.032048604061386245
1403
+ ]
1404
+ }
1405
+ },
1406
+ "absent from Ines-1 decision FT mixture (15)": {
1407
+ "A:julia - A:ines": {
1408
+ "difference": 0.050144473325553045,
1409
+ "ci95": [
1410
+ -0.028885054771255515,
1411
+ 0.1500566532935792
1412
+ ]
1413
+ },
1414
+ "A:laya - A:ines": {
1415
+ "difference": 0.029583466640483884,
1416
+ "ci95": [
1417
+ -0.08075161791194013,
1418
+ 0.14421513826606108
1419
+ ]
1420
+ },
1421
+ "A:gliner - A:ines": {
1422
+ "difference": 0.04219729401554383,
1423
+ "ci95": [
1424
+ -0.006600902674686908,
1425
+ 0.09437438464034366
1426
+ ]
1427
+ },
1428
+ "B:julia - B:ines": {
1429
+ "difference": -0.0775557848108404,
1430
+ "ci95": [
1431
+ -0.14064220126958463,
1432
+ -0.013517268561773333
1433
+ ]
1434
+ },
1435
+ "B:laya - B:ines": {
1436
+ "difference": 0.2020010278286585,
1437
+ "ci95": [
1438
+ 0.1269579464717378,
1439
+ 0.2900629696566373
1440
+ ]
1441
+ },
1442
+ "B:gliner - B:ines": {
1443
+ "difference": 0.019015644443022794,
1444
+ "ci95": [
1445
+ -0.03174972794352044,
1446
+ 0.07223435697834166
1447
+ ]
1448
+ },
1449
+ "B:ines - A:ines": {
1450
+ "difference": -0.0764229201443689,
1451
+ "ci95": [
1452
+ -0.15017289217507543,
1453
+ -0.009184764537925973
1454
+ ]
1455
+ },
1456
+ "B:julia - A:julia": {
1457
+ "difference": -0.20412317828076224,
1458
+ "ci95": [
1459
+ -0.2998785466263466,
1460
+ -0.11592881332069362
1461
+ ]
1462
+ },
1463
+ "B:laya - A:laya": {
1464
+ "difference": 0.09599464104380576,
1465
+ "ci95": [
1466
+ 0.0459047217540702,
1467
+ 0.1442013728576654
1468
+ ]
1469
+ },
1470
+ "B:gliner - A:gliner": {
1471
+ "difference": -0.09960456971688988,
1472
+ "ci95": [
1473
+ -0.14649500828750583,
1474
+ -0.04960181354566028
1475
+ ]
1476
+ }
1477
+ },
1478
+ "families in Ines-1 decision FT mixture (7)": {
1479
+ "A:julia - A:ines": {
1480
+ "difference": 0.051803014092416944,
1481
+ "ci95": [
1482
+ -0.10019425716510703,
1483
+ 0.1778425425557031
1484
+ ]
1485
+ },
1486
+ "A:laya - A:ines": {
1487
+ "difference": 0.11320722272783149,
1488
+ "ci95": [
1489
+ -0.12479087223953271,
1490
+ 0.3295312555301822
1491
+ ]
1492
+ },
1493
+ "A:gliner - A:ines": {
1494
+ "difference": 0.10690918653188367,
1495
+ "ci95": [
1496
+ 0.019280206335977032,
1497
+ 0.19106643449909544
1498
+ ]
1499
+ },
1500
+ "B:julia - B:ines": {
1501
+ "difference": -0.14676215095241435,
1502
+ "ci95": [
1503
+ -0.1986636251903599,
1504
+ -0.08740265140015356
1505
+ ]
1506
+ },
1507
+ "B:laya - B:ines": {
1508
+ "difference": 0.10980989286818602,
1509
+ "ci95": [
1510
+ 0.03243625252632493,
1511
+ 0.19414880936010162
1512
+ ]
1513
+ },
1514
+ "B:gliner - B:ines": {
1515
+ "difference": -0.06360725842937322,
1516
+ "ci95": [
1517
+ -0.21886027228587646,
1518
+ 0.08094216222892091
1519
+ ]
1520
+ },
1521
+ "B:ines - A:ines": {
1522
+ "difference": 0.10992953895984924,
1523
+ "ci95": [
1524
+ -0.07562649281899102,
1525
+ 0.2927199100383737
1526
+ ]
1527
+ },
1528
+ "B:julia - A:julia": {
1529
+ "difference": -0.08863562608498207,
1530
+ "ci95": [
1531
+ -0.24495270619294315,
1532
+ 0.033542744774361914
1533
+ ]
1534
+ },
1535
+ "B:laya - A:laya": {
1536
+ "difference": 0.10653220910020378,
1537
+ "ci95": [
1538
+ -0.015590406007179902,
1539
+ 0.20797413933948058
1540
+ ]
1541
+ },
1542
+ "B:gliner - A:gliner": {
1543
+ "difference": -0.06058690600140765,
1544
+ "ci95": [
1545
+ -0.14995189706107254,
1546
+ 0.032545729267887305
1547
+ ]
1548
+ }
1549
+ }
1550
+ },
1551
+ "calibration": {
1552
+ "native (Track A, full native distributions, <=20 labels, 17 datasets)": {
1553
+ "ines": {
1554
+ "brier": 0.5014338202978408,
1555
+ "nll": 0.8000206904458703,
1556
+ "ece": 0.1270706365126021,
1557
+ "coverage_at_error_budget": 0.08941176470588236,
1558
+ "mean_confidence": 0.6118652016888647,
1559
+ "datasets": 17
1560
+ },
1561
+ "julia": {
1562
+ "brier": 0.645280763707045,
1563
+ "nll": 1.6618435294062641,
1564
+ "ece": 0.2983721069531266,
1565
+ "coverage_at_error_budget": 0.1288235294117647,
1566
+ "mean_confidence": 0.8941619627630315,
1567
+ "datasets": 17
1568
+ },
1569
+ "laya": {
1570
+ "brier": 0.4006447652764705,
1571
+ "nll": 0.6925248427789752,
1572
+ "ece": 0.09332229411764704,
1573
+ "coverage_at_error_budget": 0.25588235294117645,
1574
+ "mean_confidence": 0.6874152352941176,
1575
+ "datasets": 17
1576
+ },
1577
+ "gliner": {
1578
+ "brier": 0.48542838104085484,
1579
+ "nll": 0.8599173300405782,
1580
+ "ece": 0.1585389382487745,
1581
+ "coverage_at_error_budget": 0.19705882352941173,
1582
+ "mean_confidence": 0.7310719386879542,
1583
+ "datasets": 17
1584
+ }
1585
+ },
1586
+ "derived (Track B softmax of log-odds, same 17 datasets)": {
1587
+ "ines": {
1588
+ "brier": 0.5266089613872135,
1589
+ "nll": 0.8626628971730973,
1590
+ "ece": 0.11876053221277025,
1591
+ "coverage_at_error_budget": 0.1335294117647059,
1592
+ "mean_confidence": 0.4924301710578631,
1593
+ "datasets": 17
1594
+ },
1595
+ "julia": {
1596
+ "brier": 0.7685502933200778,
1597
+ "nll": 1.5719702226511314,
1598
+ "ece": 0.31343832319933446,
1599
+ "coverage_at_error_budget": 0.014117647058823528,
1600
+ "mean_confidence": 0.7770917395785171,
1601
+ "datasets": 17
1602
+ },
1603
+ "laya": {
1604
+ "brier": 0.35941673886508035,
1605
+ "nll": 0.6807608663005745,
1606
+ "ece": 0.12656927310814167,
1607
+ "coverage_at_error_budget": 0.38176470588235295,
1608
+ "mean_confidence": 0.7694262437653563,
1609
+ "datasets": 17
1610
+ },
1611
+ "gliner": {
1612
+ "brier": 0.5872442915941616,
1613
+ "nll": 1.0308428769681912,
1614
+ "ece": 0.2029575594285007,
1615
+ "coverage_at_error_budget": 0.03705882352941177,
1616
+ "mean_confidence": 0.7019368747032854,
1617
+ "datasets": 17
1618
+ }
1619
+ },
1620
+ "derived (Track B softmax of log-odds, all 22 datasets)": {
1621
+ "ines": {
1622
+ "brier": 0.6231953131399431,
1623
+ "nll": 1.4522999819886815,
1624
+ "ece": 0.12354853986128157,
1625
+ "coverage_at_error_budget": 0.10590909090909091,
1626
+ "mean_confidence": 0.39202771650296064,
1627
+ "datasets": 22
1628
+ },
1629
+ "julia": {
1630
+ "brier": 0.8554517402951244,
1631
+ "nll": 2.468274766821923,
1632
+ "ece": 0.31679964418123413,
1633
+ "coverage_at_error_budget": 0.011363636363636364,
1634
+ "mean_confidence": 0.687741939307485,
1635
+ "datasets": 22
1636
+ },
1637
+ "laya": {
1638
+ "brier": 0.47884708479764443,
1639
+ "nll": 1.203588850522752,
1640
+ "ece": 0.12330875423821963,
1641
+ "coverage_at_error_budget": 0.29681818181818187,
1642
+ "mean_confidence": 0.6690071844208508,
1643
+ "datasets": 22
1644
+ },
1645
+ "gliner": {
1646
+ "brier": 0.6643794367941797,
1647
+ "nll": 1.5673671850720794,
1648
+ "ece": 0.18732672413963056,
1649
+ "coverage_at_error_budget": 0.031363636363636364,
1650
+ "mean_confidence": 0.5655688289154754,
1651
+ "datasets": 22
1652
+ }
1653
+ }
1654
+ },
1655
+ "ines_ablation": {
1656
+ "agnews": {
1657
+ "labels": 4,
1658
+ "accuracy": {
1659
+ "native(<=26)": 0.59,
1660
+ "knockout-20": null,
1661
+ "knockout-2": 0.64,
1662
+ "one-vs-rest": 0.42
1663
+ },
1664
+ "macro_f1": {
1665
+ "native(<=26)": 0.5843451916892106,
1666
+ "knockout-20": null,
1667
+ "knockout-2": 0.639691081949832,
1668
+ "one-vs-rest": 0.32652938961350175
1669
+ }
1670
+ },
1671
+ "emotiondair": {
1672
+ "labels": 6,
1673
+ "accuracy": {
1674
+ "native(<=26)": 0.43,
1675
+ "knockout-20": null,
1676
+ "knockout-2": 0.43,
1677
+ "one-vs-rest": 0.34
1678
+ },
1679
+ "macro_f1": {
1680
+ "native(<=26)": 0.39042230395613853,
1681
+ "knockout-20": null,
1682
+ "knockout-2": 0.39217171717171717,
1683
+ "one-vs-rest": 0.29478472669962036
1684
+ }
1685
+ },
1686
+ "banking77": {
1687
+ "labels": 72,
1688
+ "accuracy": {
1689
+ "native(<=26)": null,
1690
+ "knockout-20": 0.39,
1691
+ "knockout-2": 0.45,
1692
+ "one-vs-rest": 0.29
1693
+ },
1694
+ "macro_f1": {
1695
+ "native(<=26)": null,
1696
+ "knockout-20": 0.34265873015873016,
1697
+ "knockout-2": 0.4010912698412698,
1698
+ "one-vs-rest": 0.2234898589065256
1699
+ }
1700
+ },
1701
+ "financialphrasebank": {
1702
+ "labels": 3,
1703
+ "accuracy": {
1704
+ "native(<=26)": 0.51,
1705
+ "knockout-20": null,
1706
+ "knockout-2": 0.44,
1707
+ "one-vs-rest": 0.45
1708
+ },
1709
+ "macro_f1": {
1710
+ "native(<=26)": 0.48911853494169083,
1711
+ "knockout-20": null,
1712
+ "knockout-2": 0.3744570258331727,
1713
+ "one-vs-rest": 0.388558378810103
1714
+ }
1715
+ },
1716
+ "empathetic": {
1717
+ "labels": 32,
1718
+ "accuracy": {
1719
+ "native(<=26)": null,
1720
+ "knockout-20": 0.25,
1721
+ "knockout-2": 0.16,
1722
+ "one-vs-rest": 0.18
1723
+ },
1724
+ "macro_f1": {
1725
+ "native(<=26)": null,
1726
+ "knockout-20": 0.1909003551273288,
1727
+ "knockout-2": 0.10230728593731689,
1728
+ "one-vs-rest": 0.14416745535166586
1729
+ }
1730
+ },
1731
+ "massive": {
1732
+ "labels": 59,
1733
+ "accuracy": {
1734
+ "native(<=26)": null,
1735
+ "knockout-20": 0.35,
1736
+ "knockout-2": 0.41,
1737
+ "one-vs-rest": 0.2
1738
+ },
1739
+ "macro_f1": {
1740
+ "native(<=26)": null,
1741
+ "knockout-20": 0.2502433536331841,
1742
+ "knockout-2": 0.3015873015873015,
1743
+ "one-vs-rest": 0.15282852740479855
1744
+ }
1745
+ },
1746
+ "yahootopics": {
1747
+ "labels": 10,
1748
+ "accuracy": {
1749
+ "native(<=26)": 0.5,
1750
+ "knockout-20": null,
1751
+ "knockout-2": 0.57,
1752
+ "one-vs-rest": 0.18
1753
+ },
1754
+ "macro_f1": {
1755
+ "native(<=26)": 0.4915120854091442,
1756
+ "knockout-20": null,
1757
+ "knockout-2": 0.5584408865987813,
1758
+ "one-vs-rest": 0.12307189542483658
1759
+ }
1760
+ },
1761
+ "manifesto": {
1762
+ "labels": 56,
1763
+ "accuracy": {
1764
+ "native(<=26)": null,
1765
+ "knockout-20": 0.11,
1766
+ "knockout-2": 0.18,
1767
+ "one-vs-rest": 0.05
1768
+ },
1769
+ "macro_f1": {
1770
+ "native(<=26)": null,
1771
+ "knockout-20": 0.07504578754578754,
1772
+ "knockout-2": 0.14917929292929294,
1773
+ "one-vs-rest": 0.032902735562310034
1774
+ }
1775
+ },
1776
+ "capsotu": {
1777
+ "labels": 21,
1778
+ "accuracy": {
1779
+ "native(<=26)": 0.36,
1780
+ "knockout-20": 0.37,
1781
+ "knockout-2": 0.39,
1782
+ "one-vs-rest": 0.21
1783
+ },
1784
+ "macro_f1": {
1785
+ "native(<=26)": 0.3120540695728665,
1786
+ "knockout-20": 0.3317682178584434,
1787
+ "knockout-2": 0.3739835503810659,
1788
+ "one-vs-rest": 0.17844985702128557
1789
+ }
1790
+ }
1791
+ },
1792
+ "anchors": {
1793
+ "GLiNER2.5 Track A vs published pilot (accuracy)": {
1794
+ "agnews": {
1795
+ "ours": 0.7,
1796
+ "published": 0.7
1797
+ },
1798
+ "emotiondair": {
1799
+ "ours": 0.44,
1800
+ "published": 0.44
1801
+ },
1802
+ "banking77": {
1803
+ "ours": 0.61,
1804
+ "published": 0.61
1805
+ }
1806
+ },
1807
+ "Julia-1 Track A vs its model card (accuracy)": {
1808
+ "agnews": {
1809
+ "ours": 0.94,
1810
+ "card": 0.94,
1811
+ "ours_strategy": "single request"
1812
+ },
1813
+ "emotiondair": {
1814
+ "ours": 0.86,
1815
+ "card": 0.86,
1816
+ "ours_strategy": "single request"
1817
+ },
1818
+ "banking77": {
1819
+ "ours": 0.63,
1820
+ "card": 0.64,
1821
+ "ours_strategy": "Router(width=20, survivors=2)"
1822
+ }
1823
+ }
1824
+ },
1825
+ "ovr_ties": {
1826
+ "ines": {
1827
+ "examples_with_tie_at_max": 268,
1828
+ "n": 2200
1829
+ },
1830
+ "julia": {
1831
+ "examples_with_tie_at_max": 4,
1832
+ "n": 2200
1833
+ },
1834
+ "laya": {
1835
+ "examples_with_tie_at_max": 11,
1836
+ "n": 2200
1837
+ },
1838
+ "gliner": {
1839
+ "examples_with_tie_at_max": 0,
1840
+ "n": 2200
1841
+ }
1842
+ }
1843
+ }
paper/figures/engram_off.pdf CHANGED
Binary files a/paper/figures/engram_off.pdf and b/paper/figures/engram_off.pdf differ
 
paper/figures/loss_v2_v3.pdf CHANGED
Binary files a/paper/figures/loss_v2_v3.pdf and b/paper/figures/loss_v2_v3.pdf differ
 
training/code/release/build_release.py CHANGED
@@ -194,6 +194,8 @@ def main():
194
  shutil.copy(p, ev / "items" / p.name)
195
  for p in sorted((a.audit / "fullcase").glob("v3-full_*__*.jsonl")):
196
  shutil.copy(p, ev / "items" / p.name)
 
 
197
 
198
  # guard: no internal path, user, host or address may leave in the bundle
199
  leaks = []
 
194
  shutil.copy(p, ev / "items" / p.name)
195
  for p in sorted((a.audit / "fullcase").glob("v3-full_*__*.jsonl")):
196
  shutil.copy(p, ev / "items" / p.name)
197
+ if (a.audit / "btzsc22").is_dir(): # external evaluation package (its own REPORT, PROTOCOL, SHA256SUMS)
198
+ shutil.copytree(a.audit / "btzsc22", ev / "btzsc22")
199
 
200
  # guard: no internal path, user, host or address may leave in the bundle
201
  leaks = []