aryamantodkar commited on
Commit
e42a6ad
·
verified ·
1 Parent(s): 3d69d8d

Publish Premove ITN v0.2.0 model

Browse files
Files changed (3) hide show
  1. README.md +43 -153
  2. model.safetensors +1 -1
  3. provenance.json +38 -11
README.md CHANGED
@@ -1,178 +1,68 @@
1
  ---
2
  library_name: premove-itn
3
- language:
4
- - en
5
- base_model:
6
- - microsoft/deberta-v3-large
7
- tags:
8
- - inverse-text-normalization
9
- - text-normalization
10
- - speech-processing
11
- - voice-agents
12
- - structured-prediction
13
- - candidate-ranking
14
- - safetensors
15
- - custom-code
16
  license: mit
17
  ---
18
 
19
- # Premove ITN v0.1.0
20
 
21
- Premove ITN is an open-weight contextual inverse text normalization system for
22
- English voice-agent transcripts. It is the contextual scoring model used by the
23
- `premove-itn` Python package. It turns spoken-form ASR text into structured
24
- written text:
25
 
26
- ```text
27
- call me at four thirty → call me at 04:30
28
- the total is twenty dollars → the total is $20
29
- ```
30
-
31
- Deterministic Rust realizers propose valid written forms. A
32
- DeBERTa-v3-large contextual scorer uses the complete sentence to score those
33
- candidates, and an exact decoder selects compatible, non-overlapping edits.
34
-
35
- This repository contains the frozen, inference-only v0.1.0 model artifact. It
36
- does not contain optimizer state, scheduler state, training counters, training
37
- data, or evaluation rows. Source code and retained evaluation evidence are in
38
- [`premove-ai/premove-itn`](https://github.com/premove-ai/premove-itn).
39
-
40
- ## Loading the model
41
-
42
- This is a custom candidate-scoring architecture. Do not load it with
43
- `AutoModel.from_pretrained()`.
44
 
45
  ```python
46
  from premove_itn import PremoveITN
47
 
48
- itn = PremoveITN.from_pretrained()
49
- print(itn.normalize("call me at four thirty"))
50
- # call me at 04:30
51
  ```
52
 
53
- Install the latest package with `pip install premove-itn`, or pin the current
54
- release with `pip install premove-itn==0.1.0`. Create one
55
- `PremoveITN` instance and reuse it; model initialization is expensive compared
56
- with warm normalization.
57
-
58
- `device="auto"` selects CUDA when available, then Apple MPS, then CPU. The
59
- Release wheels are validated on macOS 14+ arm64 and `manylinux_2_28` x86_64
60
- for Python 3.11–3.13. Real frozen-model inference is validated on Apple
61
- Silicon MPS and Linux CPU. Other environments require release validation. The source repository retains the current
62
- [platform support matrix](https://github.com/premove-ai/premove-itn/blob/main/docs/platform-support.md).
63
-
64
- ## Architecture
65
-
66
- ```text
67
- Spoken ASR text
68
- ↓
69
- deterministic Rust candidates
70
- ↓
71
- DeBERTa-v3-large contextual scores
72
- ↓
73
- exact maximum-score decoder
74
- ↓
75
- written transcript
76
- ```
77
-
78
- The scorer has 435,594,145 parameters. The artifact contains the complete
79
- trained state in `model.safetensors`, the pinned DeBERTa configuration, and the
80
- tokenizer files required by the release.
81
-
82
- Supported candidate kinds are `DIGIT_SEQUENCE`, `CARDINAL`, `TIME`, `DATE`,
83
- `MONEY`, `DECIMAL`, `PHONE`, `ELECTRONIC`, `MEASUREMENT`, `ORDINAL`,
84
- `PUNCTUATION`, `WHITELIST`, and `WORD`.
85
-
86
- ## First Evaluation
87
 
88
- The retained First Evaluation used a frozen, balanced synthetic stress suite.
89
- Semantic entity accuracy is the primary structured-value metric. Strict exact
90
- match separately measures the complete canonical output.
 
91
 
92
- ### Dedicated voice-agent rows
93
 
94
- | Backend | Correct entities | Semantic accuracy | Mean latency |
95
- | --- | ---: | ---: | ---: |
96
- | **Premove ITN** | **398/400** | **99.50%** | 57.41 ms |
97
- | Thutmose | 268/400 | 67.00% | 16.04 ms |
98
- | text-processing-rs | 273/400 | 68.25% | 0.15 ms |
 
 
 
 
99
 
100
- ### Overall 1,500-row benchmark
101
-
102
- | Backend | Semantic accuracy | Strict exact | Mean latency |
103
- | --- | ---: | ---: | ---: |
104
- | **Premove ITN** | **89.70%** | **40.53%** | 56.49 ms |
105
- | Thutmose | 59.39% | 22.13% | 15.98 ms |
106
- | text-processing-rs | 55.79% | 16.53% | 0.14 ms |
107
-
108
- Premove ITN led measured semantic accuracy overall and on the 400 dedicated
109
- voice-agent rows. It did not lead latency.
110
-
111
- Latency used sequential batch-one requests on an Apple M4 MacBook Air with
112
- MPS, an optimized Rust extension, and eight Rayon workers. Models were loaded
113
- and warmed before request latency was measured. Download and initialization
114
- are excluded. The Premove ITN timing used the release Rust extension. The backend
115
- evaluation was blind: each backend received only transcript text.
116
- Independent human gold adjudication is a separate task and remains pending.
117
-
118
- See the
119
- [`First Evaluation report`](https://github.com/premove-ai/premove-itn/blob/main/eval/voice_agent_itn/results/first-evaluation/REPORT.md)
120
- and
121
- [`detailed tables`](https://github.com/premove-ai/premove-itn/blob/main/eval/voice_agent_itn/results/first-evaluation/DETAILS.md).
122
-
123
- ## Intended use
124
-
125
- Use Premove ITN for English voice-agent transcripts in which numbers, dates,
126
- times, money, phone values, identifiers, URLs, and related structured values
127
- need sentence-level disambiguation. The runtime receives only transcript text.
128
- Candidate metadata is generated internally.
129
-
130
- ## Model lifecycle
131
-
132
- - The first use downloads about 1.6 GB; duration depends on the network.
133
- - Cached initialization takes several seconds on the tested system.
134
- - Warm normalization averaged 56.49 ms with the retained release Rust build in
135
- the MPS benchmark.
136
- - Services and transcript streams should keep one normalizer resident.
137
 
138
  ## Limitations
139
 
140
- - English only.
141
- - A 435.6M-parameter model with an approximately 1.6 GB download.
142
- - Multi-second initialization.
143
- - Not compatible with generic `AutoModel.from_pretrained()` loading.
144
- - The benchmark is synthetic and does not measure live production traffic.
145
- - Weaker measured categories include URL, MONEY, CARDINAL, TIME,
146
- REFERENCE_ID, and VERSION.
147
- - Independent human gold adjudication and broader contamination checks are
148
- outside the v0.1.0 release gate. The backend evaluation itself was blind.
149
- - CUDA, Windows, macOS Intel, Linux ARM64, and other accelerators are not
150
- validated v0.1.0 support claims.
151
 
152
- ## Release identity and provenance
153
 
154
- - Artifact version: `v0.1.0`
155
- - Architecture: `premove-candidate-scorer-v1`
156
- - Required package version: `0.1.0`
157
  - Hub repository: `premove-ai/premove-itn`
158
- - Immutable model commit: `80bda5e2e1fe9542aa628597090242df57c1a157`
159
  - Base model: `microsoft/deberta-v3-large`
160
- - Base model revision: `64a8c8eab3e352a784c658aef62be1662607476f`
161
- - Model SHA-256: `119c0f19767b61446e04da1f8f01a001edf97a47a66965e7146db2483b4937a1`
162
-
163
- The package pins the immutable model commit and verifies its release metadata,
164
- base-model identity, and model digest before inference. Full training
165
- composition and checkpoint selection evidence are in the
166
- [`production model record`](https://github.com/premove-ai/premove-itn/blob/main/docs/model-provenance.md).
167
 
168
- ## License and attribution
169
-
170
- Premove ITN source code and model weights are MIT licensed. The scorer uses
171
- [`microsoft/deberta-v3-large`](https://huggingface.co/microsoft/deberta-v3-large)
172
- at the revision above. Its architecture derives from the
173
- [`DeBERTaV3` paper](https://arxiv.org/abs/2111.09543).
174
-
175
- The Rust realization layer uses
176
- [`text-processing-rs`](https://github.com/FluidInference/text-processing-rs),
177
- which is Apache-2.0 licensed. Required notices are retained in the source
178
- repository.
 
1
  ---
2
  library_name: premove-itn
3
+ language: [en]
4
+ base_model: [microsoft/deberta-v3-large]
5
+ tags: [inverse-text-normalization, speech-processing, voice-agents]
 
 
 
 
 
 
 
 
 
 
6
  license: mit
7
  ---
8
 
9
+ # Premove ITN v0.2.0
10
 
11
+ This release updates the contextual candidate scorer used by `premove-itn`.
12
+ The deterministic Rust candidate generators and exact decoder are unchanged.
 
 
13
 
14
+ Load it through the matching Python package:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
  ```python
17
  from premove_itn import PremoveITN
18
 
19
+ itn = PremoveITN.from_pretrained(revision="v0.2.0")
20
+ print(itn.normalize("meet me at two thirty"))
21
+ # meet me at 02:30
22
  ```
23
 
24
+ ## Training
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
+ The v0.1.0 scorer was adapted for three epochs on 7,440 controlled,
27
+ single-collision TIME-versus-identifier records. No replay or dual-collision
28
+ examples were used. Epoch 3 was selected using a separate 200-row development
29
+ set before any frozen test was inspected.
30
 
31
+ ## Results
32
 
33
+ | Metric | v0.1.0 | v0.2.0 |
34
+ | --- | ---: | ---: |
35
+ | Context record | 51.2% | **86.2%** |
36
+ | Counterfactual pair | 6.4% | **72.4%** |
37
+ | Identifier | 29.6% | **98.0%** |
38
+ | Time | 72.8% | **74.4%** |
39
+ | Dual span | 45.0% | **96.0%** |
40
+ | Dual sentence exact | 16.0% | **92.0%** |
41
+ | Broad strict exact | 40.5% | **43.7%** |
42
 
43
+ The contextual and dual benchmarks are synthetic controlled evaluations. They
44
+ do not estimate production voice-agent accuracy. The broad benchmark gained 86
45
+ new exact rows and lost 38 previously exact rows. Localized losses were most
46
+ visible in ORDINAL, MONEY, URL, and DIGIT_SEQUENCE.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
48
  ## Limitations
49
 
50
+ - TIME recall on the controlled single-collision test is 74.4%, substantially
51
+ below the 98.0% identifier result.
52
+ - The model is English-only and requires the `premove-itn` candidate graph and
53
+ decoder. It is not a generic Transformers model.
54
+ - The approximately 435.6M-parameter scorer has a large download and
55
+ multi-second initialization cost.
 
 
 
 
 
56
 
57
+ ## Release identity
58
 
59
+ - Artifact version: `v0.2.0`
60
+ - Required package version: `0.2.0`
 
61
  - Hub repository: `premove-ai/premove-itn`
 
62
  - Base model: `microsoft/deberta-v3-large`
63
+ - Base revision: `64a8c8eab3e352a784c658aef62be1662607476f`
64
+ - Source checkpoint SHA-256: `10a338d57b6d619f52259a58aca210ecb78f47de44baf0c25477a8f5b06b5d39`
65
+ - Model SHA-256: `0b6f36aa32311d0c495e1c5307d5e34463e52b4dc283ab9030bc2f54e1bf1152`
 
 
 
 
66
 
67
+ Source and evaluation evidence are available from
68
+ [`premove-ai/premove-itn`](https://github.com/premove-ai/premove-itn).
 
 
 
 
 
 
 
 
 
model.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:119c0f19767b61446e04da1f8f01a001edf97a47a66965e7146db2483b4937a1
3
  size 1742425916
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0b6f36aa32311d0c495e1c5307d5e34463e52b4dc283ab9030bc2f54e1bf1152
3
  size 1742425916
provenance.json CHANGED
@@ -1,23 +1,36 @@
1
  {
2
  "architecture": "premove-candidate-scorer-v1",
3
- "artifact_sha256": "119c0f19767b61446e04da1f8f01a001edf97a47a66965e7146db2483b4937a1",
4
  "artifact_sha256_definition": "SHA-256 of model.safetensors",
5
- "artifact_version": "v0.1.0",
6
  "base_model": "microsoft/deberta-v3-large",
7
  "base_model_revision": "64a8c8eab3e352a784c658aef62be1662607476f",
8
- "benchmark_checkpoint_sha256": "9021fa11a028faefb31ef67878170cbe29ed25e68a9a78999f37b120c2ad00d5",
9
- "hub_repository": "premove-itn/premove-itn",
10
- "hub_revision": "v0.1.0",
11
- "package_version": "0.1.0",
12
- "production_manifest": "data/models/structured_value_selected_20k/manifest.json",
 
 
 
 
 
 
 
 
 
13
  "redistribution": {
14
  "base_model_license": "MIT (as listed by microsoft/deberta-v3-large)",
15
  "base_model_weights_included": false,
16
  "project_license": "MIT",
17
  "tokenizer_files_included": true
18
  },
19
- "source_checkpoint": "data/models/structured_value_selected_20k/checkpoint.pt",
20
- "source_checkpoint_sha256": "9021fa11a028faefb31ef67878170cbe29ed25e68a9a78999f37b120c2ad00d5",
 
 
 
 
21
  "supported_span_kinds": [
22
  "DIGIT_SEQUENCE",
23
  "CARDINAL",
@@ -34,8 +47,22 @@
34
  "WORD"
35
  ],
36
  "tokenizer_revision": "64a8c8eab3e352a784c658aef62be1662607476f",
 
 
 
 
 
 
 
 
 
 
37
  "training_lineage": {
38
- "combined_exposure": 418000,
39
- "run_fingerprint": "96c110801753166276df98ca9d65406f161009b8e981c03ca8cca94a9fb489fe"
 
 
 
 
40
  }
41
  }
 
1
  {
2
  "architecture": "premove-candidate-scorer-v1",
3
+ "artifact_sha256": "0b6f36aa32311d0c495e1c5307d5e34463e52b4dc283ab9030bc2f54e1bf1152",
4
  "artifact_sha256_definition": "SHA-256 of model.safetensors",
5
+ "artifact_version": "v0.2.0",
6
  "base_model": "microsoft/deberta-v3-large",
7
  "base_model_revision": "64a8c8eab3e352a784c658aef62be1662607476f",
8
+ "benchmark_checkpoint_sha256": "10a338d57b6d619f52259a58aca210ecb78f47de44baf0c25477a8f5b06b5d39",
9
+ "benchmark_results": {
10
+ "broad_strict_exact_accuracy": 0.43733333333333335,
11
+ "context_pair_accuracy": 0.724,
12
+ "context_record_accuracy": 0.862,
13
+ "dual_sentence_exact_accuracy": 0.92,
14
+ "dual_span_accuracy": 0.96,
15
+ "identifier_accuracy": 0.98,
16
+ "time_accuracy": 0.744
17
+ },
18
+ "hub_repository": "premove-ai/premove-itn",
19
+ "hub_revision": "v0.2.0",
20
+ "package_version": "0.2.0",
21
+ "production_manifest": "data/models/time_identifier_targeted_run_1/manifest.json",
22
  "redistribution": {
23
  "base_model_license": "MIT (as listed by microsoft/deberta-v3-large)",
24
  "base_model_weights_included": false,
25
  "project_license": "MIT",
26
  "tokenizer_files_included": true
27
  },
28
+ "release_commit": null,
29
+ "release_status": "candidate",
30
+ "source_checkpoint": "dist/time_identifier_targeted_run_1/epoch_3.pt",
31
+ "source_checkpoint_sha256": "10a338d57b6d619f52259a58aca210ecb78f47de44baf0c25477a8f5b06b5d39",
32
+ "source_commit": "d8240652fe92906f4fdf5aea280acf78e4e24221",
33
+ "source_worktree_dirty": false,
34
  "supported_span_kinds": [
35
  "DIGIT_SEQUENCE",
36
  "CARDINAL",
 
47
  "WORD"
48
  ],
49
  "tokenizer_revision": "64a8c8eab3e352a784c658aef62be1662607476f",
50
+ "training_config": {
51
+ "batch_size": 8,
52
+ "dual_collision_rows": 0,
53
+ "epochs": 3,
54
+ "learning_rate": 5e-06,
55
+ "replay_rows": 0,
56
+ "rows": 7440,
57
+ "seed": 20260914,
58
+ "weight_decay": 0.01
59
+ },
60
  "training_lineage": {
61
+ "frozen_tests_used_for_selection": false,
62
+ "selected_epoch": 3,
63
+ "selection_basis": "dev_only",
64
+ "starting_artifact_sha256": "119c0f19767b61446e04da1f8f01a001edf97a47a66965e7146db2483b4937a1",
65
+ "training_data_sha256": "ae5ec34e9ff02685212ef6d6702003b51161ad439d6bc2301b55a98f7392ff95",
66
+ "training_rows": 7440
67
  }
68
  }