File size: 1,431 Bytes
e330a14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
---
tags: [retrieval, chunk-selection, trm]
---
# TRM chunk selector

Recursive PASS/FAIL gate over retrieved chunks (TRM core + skip head),
1.91M params on frozen Azure `text-embedding-ada-002` embeddings
(dim 1539). Decides per chunk whether it belongs in the answer set —
a variable-size selection instead of a fixed top-k.

![training report](training_report.png)

## Test metrics (threshold 0.924)

micro-P **0.9076** · micro-R **0.7046** ·
micro-F1 **0.7933** · exact-set **0.2889** ·
best epoch 40

| bench | groups | P | R | F1 |
|---|---|---|---|---|
| gold_easy | 9 | 1.0 | 0.3793 | 0.55 |
| gold_medium | 2 | 1.0 | 0.9474 | 0.973 |
| gold_hard | 5 | 0.9886 | 0.9667 | 0.9775 |
| llm_held_out | 29 | 0.6735 | 0.4125 | 0.5116 |

`gold_*` tiers are hand-curated deterministic labels (easy = section how-to,
medium = single-doc, hard = table/matrix incl. reverse lookups); rephrasing
variants of those questions are in train, so they measure learned question
types. `llm_held_out` is strict generalization on unseen questions.

## Training data

```json
{
  "train_groups": 1184,
  "gold_train_groups": 48,
  "test_groups": 45,
  "gold_test_groups": 16,
  "train_candidates": 27544,
  "train_pass": 5567,
  "train_fail": 21977,
  "pass_ratio": 0.202,
  "avg_candidates_per_train_group": 23.3,
  "avg_pass_per_train_group": 4.7
}
```

Trained 2026-07-07T04:40:40 · source: https://github.com/s3777091/recursive_models