Instructions to use rafmacalaba/gliner2_agents_v3 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- GLiNER2
How to use rafmacalaba/gliner2_agents_v3 with GLiNER2:
from gliner2 import AutoExtractor extractor = AutoExtractor.from_pretrained("rafmacalaba/gliner2_agents_v3") # Extract entities text = "Apple CEO Tim Cook announced iPhone 15 in Cupertino yesterday." result = extractor.extract_entities(text, ["company", "person", "product", "location"]) print(result) - Notebooks
- Google Colab
- Kaggle
Upload README.md with huggingface_hub
Browse files
README.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
pipeline_tag: token-classification
|
| 4 |
+
tags:
|
| 5 |
+
- ner
|
| 6 |
+
- gliner2
|
| 7 |
+
- data-use
|
| 8 |
+
---
|
| 9 |
+
|
| 10 |
+
# gliner2_agents_v3
|
| 11 |
+
|
| 12 |
+
Fine-tune of `fastino/gliner2-large-v1` (GLiNER2, span architecture) for data-use mention extraction
|
| 13 |
+
(dataset / survey / census / registry mentions in economics research papers).
|
| 14 |
+
|
| 15 |
+
## Annotation workflow
|
| 16 |
+
|
| 17 |
+
Labels were produced with a locally run LLM through the passage-annotation harness, with human-in-the-loop passage review and adjudication under the project doctrine. Holdout F1 is therefore agreement with the annotating agent, not owner accuracy.
|
| 18 |
+
- dataset: `rafmacalaba/datause-agents-v3` (config `gliner2`)
|
| 19 |
+
- holdout: 2,108 passages, 1,916 spans
|
| 20 |
+
- origins scored: fcv_pads_east_africa, prwp, reliefweb, umar_pads
|
| 21 |
+
|
| 22 |
+
## Labels
|
| 23 |
+
- `NAMED_DATA` — a proper name, title, or acronym of a specific data source
|
| 24 |
+
- `DESCRIPTIVE_DATA` — a source described in words but not named
|
| 25 |
+
- `VAGUE_DATA` — generic data wording with no identifiable source
|
| 26 |
+
|
| 27 |
+
## Training
|
| 28 |
+
- base model: `fastino/gliner2-large-v1`
|
| 29 |
+
- dataset: `rafmacalaba/datause-agents-v3` (gliner2 config)
|
| 30 |
+
- epochs: 5
|
| 31 |
+
- encoder LR: 1e-05
|
| 32 |
+
- task LR: 0.0005
|
| 33 |
+
- batch size: 8
|
| 34 |
+
- precision: bf16
|
| 35 |
+
|
| 36 |
+
## Evaluation (holdout, label-agnostic)
|
| 37 |
+
|
| 38 |
+
2 gold mention(s) in the holdout sit inside a run the word splitter glues into one token (a URL, `EM-DAT_`), so no GLiNER2-family model can address them as a span; they are removed from every split before training and scoring. Listed in `holdout_metrics.json`.
|
| 39 |
+
|
| 40 |
+
| thr | tp | fp | fn | precision | recall | f0.5 | f1 |
|
| 41 |
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
| 42 |
+
| 0.10 | 1752 | 1279 | 161 | 0.5780 | 0.9158 | 0.6241 | 0.7087 |
|
| 43 |
+
| 0.20 | 1673 | 909 | 240 | 0.6479 | 0.8745 | 0.6834 | 0.7444 |
|
| 44 |
+
| 0.30 | 1582 | 682 | 331 | 0.6988 | 0.8270 | 0.7211 | 0.7575 |
|
| 45 |
+
| 0.40 | 1466 | 479 | 447 | 0.7537 | 0.7663 | 0.7562 | 0.7600 |
|
| 46 |
+
| 0.50 | 1330 | 302 | 583 | 0.8150 | 0.6952 | 0.7878 | 0.7504 |
|
| 47 |
+
| 0.60 | 1122 | 196 | 791 | 0.8513 | 0.5865 | 0.7808 | 0.6945 |
|
| 48 |
+
| 0.70 | 925 | 125 | 988 | 0.8810 | 0.4835 | 0.7566 | 0.6244 |
|
| 49 |
+
| 0.80 | 703 | 59 | 1210 | 0.9226 | 0.3675 | 0.7085 | 0.5256 |
|
| 50 |
+
| 0.90 | 345 | 18 | 1568 | 0.9504 | 0.1803 | 0.5126 | 0.3032 |
|
| 51 |
+
|
| 52 |
+
**Best F0.5**: 0.7878 (thr=0.5)
|
| 53 |
+
**Best F1**: 0.7600 (thr=0.4)
|
| 54 |
+
|
| 55 |
+
## Where it fails (holdout, score threshold 0.50)
|
| 56 |
+
|
| 57 |
+
Entity-level counts at the reported threshold, matched with the same Jaccard >= 0.5
|
| 58 |
+
rule as the table above — these are the spans those numbers were computed from.
|
| 59 |
+
|
| 60 |
+
| tp | fp | fn | redundant (same entity found twice) |
|
| 61 |
+
| ---: | ---: | ---: | ---: |
|
| 62 |
+
| 1330 | 302 | 583 | 222 |
|
| 63 |
+
|
| 64 |
+
**False positives**, by closeness to a gold span: near_miss 6 · partial 40 · spurious 293
|
| 65 |
+
|
| 66 |
+
**Misses**, by span length: 1-2 tokens 196 · 3-5 tokens 283 · 6+ tokens 104
|
| 67 |
+
|
| 68 |
+
**Misses, by cause**: 161 never emitted at all (proposal / abstention — no threshold moves these) · 422 emitted but scored below the cutoff (calibration).
|
| 69 |
+
|
| 70 |
+
**Label errors on matched spans**: 176 of 1330 — boundary right, class wrong.
|
| 71 |
+
|
| 72 |
+
**Suppression**: 941 passages carry no gold span at all; the model still emitted 168 spans on 518 of them.
|
| 73 |
+
|
| 74 |
+
| label | gold clusters | recalled | recall |
|
| 75 |
+
| --- | ---: | ---: | ---: |
|
| 76 |
+
| DESCRIPTIVE_DATA | 548 | 244 | 0.4453 |
|
| 77 |
+
| NAMED_DATA | 1355 | 1084 | 0.8000 |
|
| 78 |
+
| VAGUE_DATA | 10 | 2 | 0.2000 |
|
| 79 |
+
|
| 80 |
+
Per-passage detail is in `holdout_predictions.jsonl` — one record per holdout passage
|
| 81 |
+
with the passage text, every prediction with its score and label (`kept` marks the
|
| 82 |
+
ones above the threshold above), and which of them matched. Re-derive any threshold
|
| 83 |
+
from it; gold and predictions are both span text plus character offsets.
|
| 84 |
+
|