Unfold insights, XLM-R, French and English
Version 2026.11.02, built 2026-11-02T10:39:40Z.
A classifier fine-tuned from XLM-RoBERTa large (fp32, about 1.4 GB) that Unfold Note runs offline on meeting transcripts. For each transcript segment it decides whether the segment is a question and whether it states an action (a commitment or a request), and it labels the kind of action.
- Base model:
FacebookAI/xlm-roberta-largeat revisionc23d21b0620b635a76227c604d44e43a9f0ee389, vocabulary pruned to French and English, exported in full precision (fp32). - Input: the previous segment and the segment, as a text pair, truncated to 128 tokens.
- Outputs:
qandact(probabilities),kind(logits). Decision thresholds: q 0.25, act 0.19. - Minimum app version: 2.4.0.
- Licence: MIT.
Training data
Trained on synthetic data (the synthetic dataset 2026.10.25, 2145 rows, sha256 aec4a6d6be1a70d4c51bb98c3b18e39cae765dd9d41936c73cf356104589dea3, and set A, a small hand-written set of synthetic meetings) and on anonymised real meetings (version 2026.10.31, 18365 segments in the dataset, of which only the training split was used, anonymisation method anon-v1).
The real meetings were anonymised before training: names of people, organisations, products, projects and places, amounts, numbers, dates and identifiers were replaced with placeholders, then with invented values, and the text was audited for remaining personal data. They are not published, and they were not used to build the vocabulary, since tokenizer.json is public. The decision thresholds were picked on synthetic and anonymised development data. The public gates below use synthetic and scripted sets only.
Public gates
Scored on committed fixtures and scripted sets only, with the fp32 model on CPU, side by side with the rule-based detector (rules r3) that ships in the app. The neg sets are meeting talk with no action and no question: they report the count of false actions.
| set | n | q F1 | act F1 | act P | act R | false actions |
|---|---|---|---|---|---|---|
| setB-en model | 116 | 1.000 | 0.930 | 0.892 | 0.971 | - |
| setB-en rules r3 | 116 | 0.987 | 0.793 | 0.958 | 0.676 | - |
| setB-fr model | 116 | 0.974 | 0.899 | 0.886 | 0.912 | - |
| setB-fr rules r3 | 116 | 0.987 | 0.714 | 0.909 | 0.588 | - |
| neg-en model | 42 | - | - | - | - | 1 |
| neg-en rules r3 | 42 | - | - | - | - | 2 |
| neg-fr model | 42 | - | - | - | - | 1 |
| neg-fr rules r3 | 42 | - | - | - | - | 1 |
| f1script-en model | 38 | 1.000 | 0.875 | 0.875 | 0.875 | - |
| f1script-en rules r3 | 38 | 1.000 | 0.933 | 1.000 | 0.875 | - |
| f1script-fr model | 38 | 1.000 | 0.933 | 1.000 | 0.875 | - |
| f1script-fr rules r3 | 38 | 1.000 | 0.933 | 1.000 | 0.875 | - |
| f1whistle-en model | 38 | 0.923 | 0.933 | 1.000 | 0.875 | - |
| f1whistle-en rules r3 | 38 | 0.923 | 0.933 | 1.000 | 0.875 | - |
| f1whistle-fr model | 38 | 0.833 | 0.857 | 1.000 | 0.750 | - |
| f1whistle-fr rules r3 | 38 | 0.727 | 0.769 | 1.000 | 0.625 | - |
Integrity
insights-model.json lists every model file with its size and sha256. The app verifies them after download.
Limits
Short, informal and noisy speech-to-text segments are where the model is weakest. Gates are report-only: a version can ship while below the rules on a set, and the app keeps the rules as the fallback.