Unfold entities, GLiNER multi, French and English
Version 2026.11.02, built 2026-11-02T10:21:08Z.
The entity model that Unfold Note runs offline, on the device, to find the names in meeting notes (people, organisations, projects, products, tools and places) for its Obsidian export. It is GLiNER multi v2.1, fine-tuned on anonymised meetings, with its vocabulary pruned to French and English, kept in full precision (fp32).
- Base model:
urchade/gliner_multi-v2.1(Apache-2.0), itself built onmicrosoft/mdeberta-v3-base(MIT). - ONNX export:
onnx-community/gliner_multi-v2.1at commit6ddaeb9413b0e71ad8457da1aab378a165b24058, fileonnx/model.onnx(full fp32). Its card declares no licence of its own; it is a format conversion of the base model, redistributed here under the base model's Apache-2.0 licence. - Changes: the mDeBERTa vocabulary (250,105 pieces) is pruned to the pieces seen in French and English corpora
(
fren-k1): the embedding rows are sliced, and the tokenizer ids and the baked-in<<ENT>>id are remapped, so the kept words tokenize exactly as before. Model file:model.onnx. - Fine-tuning: on anonymised meetings (entities), version
2026.10.31: French meeting transcripts and reports of consenting Unfold Note accounts, anonymised on the Unfold Note backend before they left it (methodsurrogates-v1: every name of a person, company, product, project or place is replaced by an invented one). The data is not published and was not used for the vocabulary pruning. The fine-tuned weights are exported to ONNX with GLiNER's own exporter, in place of the export above; the tokenizer files are that export's. Checkpointcheckpoint-616, sha256cf7e863e03cf565b1a753577e1fc22cbf479eb1544dc62c73068bcd17fc7811d; settings: epochs 3, lr 5e-06, others_lr 1e-05, batch 8, seed 0, oversample project:4. - Labels used by the app: person, organization, project, product, tool, place. Threshold 0.5, flat NER, one label per span.
- Input: at most 384 subword tokens (label prompt included), spans of at most 12 words.
- Minimum app version: 2.7.0.
- Licence: Apache-2.0.
Gates
Scored on 60 short French and English meeting sentences written for this purpose and hand-labelled (no real meeting content, customer data or recording), one sentence per run on CPU. A span counts only with its exact character offsets and label. The held-out sample is 150 sentences of public French and English news, Wikipedia and Tatoeba text that the vocabulary pruning never saw.
| gate | measure | value | bar | result |
|---|---|---|---|---|
| int8_vs_fp32 | best INT8 variant vs fp32 span agreement F1 (not shipped) | 0.013 | >= 0.95 | not applicable (fp32 build) |
| pruned_vs_full | pruned vs full vocabulary span agreement F1 | 1.000 | >= 0.95 | pass |
| hand_labels | span F1 against the hand labels (P 0.835, R 0.826) | 0.831 | >= 0.6 | pass |
| js_processor | app processor (words, token ids, words_mask) identical to Python GLiNER | 60/60 | all | pass |
Integrity
entities-model.json lists every model file with its size and sha256. The app verifies them after download.
Limits
Projects, products and organisations are told apart from context, and the model still often gives one of these types for another; short or ambiguous names are where it is weakest. The app keeps its own vocabulary (contacts, memory) as the first source of names.