Upload Nemotron-3.5 ASR Streaming 0.6B variant
Browse files- README.md +189 -0
- config.json +28 -0
- decoder.mlmodelc/analytics/coremldata.bin +3 -0
- decoder.mlmodelc/coremldata.bin +3 -0
- decoder.mlmodelc/model.mil +53 -0
- decoder.mlmodelc/weights/weight.bin +3 -0
- encoder.mlmodelc/analytics/coremldata.bin +3 -0
- encoder.mlmodelc/coremldata.bin +3 -0
- encoder.mlmodelc/model.mil +0 -0
- encoder.mlmodelc/weights/weight.bin +3 -0
- joint.mlmodelc/analytics/coremldata.bin +3 -0
- joint.mlmodelc/coremldata.bin +3 -0
- joint.mlmodelc/model.mil +27 -0
- joint.mlmodelc/weights/weight.bin +3 -0
- languages.json +127 -0
- vocab.json +0 -0
README.md
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: other
|
| 3 |
+
license_name: nvidia-software-and-model-evaluation-license
|
| 4 |
+
license_link: https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-software-and-model-evaluation-license/
|
| 5 |
+
language:
|
| 6 |
+
- en
|
| 7 |
+
- es
|
| 8 |
+
- de
|
| 9 |
+
- fr
|
| 10 |
+
- it
|
| 11 |
+
- pt
|
| 12 |
+
- ru
|
| 13 |
+
- hi
|
| 14 |
+
- zh
|
| 15 |
+
- ja
|
| 16 |
+
- ko
|
| 17 |
+
- ar
|
| 18 |
+
- nl
|
| 19 |
+
- pl
|
| 20 |
+
- tr
|
| 21 |
+
- uk
|
| 22 |
+
- ro
|
| 23 |
+
- el
|
| 24 |
+
- cs
|
| 25 |
+
- hu
|
| 26 |
+
- sv
|
| 27 |
+
- da
|
| 28 |
+
- fi
|
| 29 |
+
- 'no'
|
| 30 |
+
- sk
|
| 31 |
+
- hr
|
| 32 |
+
- bg
|
| 33 |
+
- lt
|
| 34 |
+
- et
|
| 35 |
+
- lv
|
| 36 |
+
- sl
|
| 37 |
+
- th
|
| 38 |
+
- vi
|
| 39 |
+
- id
|
| 40 |
+
- ms
|
| 41 |
+
- bn
|
| 42 |
+
- ur
|
| 43 |
+
- fa
|
| 44 |
+
- ta
|
| 45 |
+
- te
|
| 46 |
+
- mr
|
| 47 |
+
- gu
|
| 48 |
+
- kn
|
| 49 |
+
- ml
|
| 50 |
+
- si
|
| 51 |
+
- ne
|
| 52 |
+
- km
|
| 53 |
+
- sw
|
| 54 |
+
- am
|
| 55 |
+
- ha
|
| 56 |
+
- zu
|
| 57 |
+
- yo
|
| 58 |
+
- ig
|
| 59 |
+
- af
|
| 60 |
+
- rw
|
| 61 |
+
- so
|
| 62 |
+
- ny
|
| 63 |
+
- ln
|
| 64 |
+
- 'or'
|
| 65 |
+
- he
|
| 66 |
+
- ku
|
| 67 |
+
- az
|
| 68 |
+
- ka
|
| 69 |
+
- hy
|
| 70 |
+
- uz
|
| 71 |
+
- tg
|
| 72 |
+
- ky
|
| 73 |
+
- qu
|
| 74 |
+
- ay
|
| 75 |
+
- gn
|
| 76 |
+
- mi
|
| 77 |
+
- haw
|
| 78 |
+
- sm
|
| 79 |
+
- to
|
| 80 |
+
- mt
|
| 81 |
+
tags:
|
| 82 |
+
- automatic-speech-recognition
|
| 83 |
+
- nemotron
|
| 84 |
+
- streaming
|
| 85 |
+
- conformer
|
| 86 |
+
- rnn-t
|
| 87 |
+
- multilingual
|
| 88 |
+
- coreml
|
| 89 |
+
base_model: nvidia/nemotron-3.5-asr-streaming-0.6b
|
| 90 |
+
library_name: coreml
|
| 91 |
+
pipeline_tag: automatic-speech-recognition
|
| 92 |
+
---
|
| 93 |
+
|
| 94 |
+
# Nemotron-3.5 ASR Streaming 0.6B — CoreML INT8
|
| 95 |
+
|
| 96 |
+
Cache-aware streaming Conformer + RNN-T from NVIDIA, ported to CoreML (`.mlmodelc`) for on-device inference on Apple Silicon. 600 M params, 76 languages, native punctuation and capitalization. INT8 palettized encoder, FP16 decoder + joint. Ships `.mlmodelc` (compiled) — `.mlpackage` is not shipped because on-device `MLModel.compileModel()` produces non-deterministic output across iOS simulator vs device runtimes.
|
| 97 |
+
|
| 98 |
+
## Model
|
| 99 |
+
|
| 100 |
+
| | |
|
| 101 |
+
|---|---|
|
| 102 |
+
| Parameters | 600 M |
|
| 103 |
+
| Architecture | FastConformer-CacheAware-RNN-T with language-conditioning prompt kernel |
|
| 104 |
+
| Languages | 76 (see frontmatter) |
|
| 105 |
+
| Sample rate | 16 kHz mono |
|
| 106 |
+
| Streaming chunk | 320 ms (`att_context_size = [56, 3]`) |
|
| 107 |
+
| Encoder quantization | INT8 palettized |
|
| 108 |
+
| Decoder / joint dtype | FP16 |
|
| 109 |
+
| On-disk size | 612 MB |
|
| 110 |
+
|
| 111 |
+
## Files
|
| 112 |
+
|
| 113 |
+
| File | Size | Description |
|
| 114 |
+
|------|------|-------------|
|
| 115 |
+
| `encoder.mlmodelc/` | 565 MB | 24-layer cache-aware Conformer encoder + prompt kernel |
|
| 116 |
+
| `decoder.mlmodelc/` | 29 MB | RNN-T prediction net (2-layer LSTM, 640 dim) |
|
| 117 |
+
| `joint.mlmodelc/` | 18 MB | Joint network (vocab=13088) |
|
| 118 |
+
| `vocab.json` | 230 KB | SentencePiece pieces, id → string |
|
| 119 |
+
| `languages.json` | 2 KB | Language tag → prompt slot (e.g. `"en-US": 0`) |
|
| 120 |
+
| `config.json` | <1 KB | Streaming geometry + dims for the loader |
|
| 121 |
+
|
| 122 |
+
## Performance
|
| 123 |
+
|
| 124 |
+
M5 Pro (Apple Silicon), 50 samples per language from FLEURS test, streaming 320 ms chunks, compute units `.all`. Scoring uses Whisper `EnglishTextNormalizer` for English and `BasicTextNormalizer(split_letters=True)` for hi/ja (char-level), `BasicTextNormalizer` for de/fr/ar.
|
| 125 |
+
|
| 126 |
+
### Accuracy
|
| 127 |
+
|
| 128 |
+
| lang | WER % | CER % | Δ WER vs fp32 source |
|
| 129 |
+
|------|------:|------:|---------------------:|
|
| 130 |
+
| en_us | 9.59 | 4.26 | +0.26 |
|
| 131 |
+
| de_de | 10.41 | 5.37 | +0.19 |
|
| 132 |
+
| fr_fr | 12.18 | 4.84 | +1.05 |
|
| 133 |
+
| ar_eg | 13.37 | 3.80 | +0.10 |
|
| 134 |
+
| hi_in | 4.42 | 3.61 | −0.84 |
|
| 135 |
+
| ja_jp | 17.66 | 12.09 | +0.69 |
|
| 136 |
+
|
| 137 |
+
Quantization is essentially lossless. For ja/hi the published WER is char-level (matches NVIDIA's CJK methodology); CER is the more interpretable number for those scripts.
|
| 138 |
+
|
| 139 |
+
### Streaming throughput + memory
|
| 140 |
+
|
| 141 |
+
M5 Pro, 60 s long-form en_us audio, single thread, `.all` compute units:
|
| 142 |
+
|
| 143 |
+
| metric | value |
|
| 144 |
+
|--------|------:|
|
| 145 |
+
| RTF (encode + decode) | 0.068 |
|
| 146 |
+
| p50 chunk latency | 18.6 ms |
|
| 147 |
+
| p99 chunk latency | 23.4 ms |
|
| 148 |
+
| RSS post-load | 1046 MB |
|
| 149 |
+
| RSS peak (mid-stream) | 1238 MB |
|
| 150 |
+
|
| 151 |
+
## Usage
|
| 152 |
+
|
| 153 |
+
### Python (coremltools)
|
| 154 |
+
|
| 155 |
+
```python
|
| 156 |
+
import coremltools as ct
|
| 157 |
+
import numpy as np
|
| 158 |
+
import json
|
| 159 |
+
from huggingface_hub import snapshot_download
|
| 160 |
+
|
| 161 |
+
bundle = snapshot_download("aufklarer/Nemotron-3.5-ASR-Streaming-0.6B-CoreML-INT8")
|
| 162 |
+
encoder = ct.models.CompiledMLModel(f"{bundle}/encoder.mlmodelc")
|
| 163 |
+
decoder = ct.models.CompiledMLModel(f"{bundle}/decoder.mlmodelc")
|
| 164 |
+
joint = ct.models.CompiledMLModel(f"{bundle}/joint.mlmodelc")
|
| 165 |
+
|
| 166 |
+
slots = json.load(open(f"{bundle}/languages.json"))["promptDictionary"]
|
| 167 |
+
lang_mask = np.zeros((1, 128), dtype=np.float32)
|
| 168 |
+
lang_mask[0, slots["en-US"]] = 1.0
|
| 169 |
+
# Feed 320 ms chunks; persist caches across calls (see inference reference below).
|
| 170 |
+
```
|
| 171 |
+
|
| 172 |
+
### Swift
|
| 173 |
+
|
| 174 |
+
```swift
|
| 175 |
+
import NemotronStreamingASR
|
| 176 |
+
|
| 177 |
+
let model = try await NemotronStreamingASRModel.fromPretrained()
|
| 178 |
+
let text = try model.transcribeAudio(audio, sampleRate: 16000, language: "en-US")
|
| 179 |
+
```
|
| 180 |
+
|
| 181 |
+
## Source
|
| 182 |
+
|
| 183 |
+
Upstream: [nvidia/nemotron-3.5-asr-streaming-0.6b](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b).
|
| 184 |
+
|
| 185 |
+
## Links
|
| 186 |
+
|
| 187 |
+
- [speech-swift](https://github.com/soniqo/speech-swift) — Apple SDK with `NemotronStreamingASR`
|
| 188 |
+
- [soniqo.audio](https://soniqo.audio)
|
| 189 |
+
- [blog](https://soniqo.audio/blog)
|
config.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"modelName": "nemotron-3.5-asr-streaming-0.6b",
|
| 3 |
+
"numMelBins": 128,
|
| 4 |
+
"sampleRate": 16000,
|
| 5 |
+
"nFFT": 512,
|
| 6 |
+
"hopLength": 160,
|
| 7 |
+
"winLength": 400,
|
| 8 |
+
"preEmphasis": 0.97,
|
| 9 |
+
"encoderHidden": 1024,
|
| 10 |
+
"encoderLayers": 24,
|
| 11 |
+
"subsamplingFactor": 8,
|
| 12 |
+
"attentionLeftContext": 56,
|
| 13 |
+
"convCacheSize": 8,
|
| 14 |
+
"decoderHidden": 640,
|
| 15 |
+
"decoderLayers": 2,
|
| 16 |
+
"vocabSize": 13087,
|
| 17 |
+
"blankTokenId": 13087,
|
| 18 |
+
"numPrompts": 128,
|
| 19 |
+
"streaming": {
|
| 20 |
+
"chunkMs": 320,
|
| 21 |
+
"chunkSize": 4,
|
| 22 |
+
"rightContext": 3,
|
| 23 |
+
"lookaheadMs": 240,
|
| 24 |
+
"melFrames": 32,
|
| 25 |
+
"preCacheSize": 9,
|
| 26 |
+
"outputFrames": 4
|
| 27 |
+
}
|
| 28 |
+
}
|
decoder.mlmodelc/analytics/coremldata.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:4d58297228f44ca23752d3850c60a0559af78a6d4455b348cd8dc6364b8ed0d4
|
| 3 |
+
size 243
|
decoder.mlmodelc/coremldata.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:15a3baf01a47f013b388b76b940ab5ec33ba84a8bc6025e5d5dba1ec9bf28762
|
| 3 |
+
size 404
|
decoder.mlmodelc/model.mil
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
program(1.3)
|
| 2 |
+
[buildInfo = dict<string, string>({{"coremlc-component-MIL", "3520.4.1"}, {"coremlc-version", "3520.5.1"}, {"coremltools-component-torch", "2.11.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "8.3.0"}})]
|
| 3 |
+
{
|
| 4 |
+
func main<ios18>(tensor<fp16, [2, 1, 640]> c, tensor<fp16, [2, 1, 640]> h, tensor<int32, [1, 1]> token) {
|
| 5 |
+
int32 y_1_axis_0 = const()[name = string("y_1_axis_0"), val = int32(0)];
|
| 6 |
+
int32 y_1_batch_dims_0 = const()[name = string("y_1_batch_dims_0"), val = int32(0)];
|
| 7 |
+
bool y_1_validate_indices_0 = const()[name = string("y_1_validate_indices_0"), val = bool(false)];
|
| 8 |
+
tensor<fp16, [13088, 640]> decoder_prediction_embed_weight_to_fp16 = const()[name = string("decoder_prediction_embed_weight_to_fp16"), val = tensor<fp16, [13088, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(64)))];
|
| 9 |
+
string token_to_int16_dtype_0 = const()[name = string("token_to_int16_dtype_0"), val = string("int16")];
|
| 10 |
+
tensor<int16, [1, 1]> token_to_int16 = cast(dtype = token_to_int16_dtype_0, x = token)[name = string("cast_6")];
|
| 11 |
+
tensor<fp16, [1, 1, 640]> y_1_cast_fp16_cast_uint16 = gather(axis = y_1_axis_0, batch_dims = y_1_batch_dims_0, indices = token_to_int16, validate_indices = y_1_validate_indices_0, x = decoder_prediction_embed_weight_to_fp16)[name = string("y_1_cast_fp16_cast_uint16")];
|
| 12 |
+
tensor<int32, [3]> input_1_perm_0 = const()[name = string("input_1_perm_0"), val = tensor<int32, [3]>([1, 0, 2])];
|
| 13 |
+
int32 split_0_num_splits_0 = const()[name = string("split_0_num_splits_0"), val = int32(2)];
|
| 14 |
+
int32 split_0_axis_0 = const()[name = string("split_0_axis_0"), val = int32(0)];
|
| 15 |
+
tensor<fp16, [1, 1, 640]> split_0_cast_fp16_0, tensor<fp16, [1, 1, 640]> split_0_cast_fp16_1 = split(axis = split_0_axis_0, num_splits = split_0_num_splits_0, x = h)[name = string("split_0_cast_fp16")];
|
| 16 |
+
int32 split_1_num_splits_0 = const()[name = string("split_1_num_splits_0"), val = int32(2)];
|
| 17 |
+
int32 split_1_axis_0 = const()[name = string("split_1_axis_0"), val = int32(0)];
|
| 18 |
+
tensor<fp16, [1, 1, 640]> split_1_cast_fp16_0, tensor<fp16, [1, 1, 640]> split_1_cast_fp16_1 = split(axis = split_1_axis_0, num_splits = split_1_num_splits_0, x = c)[name = string("split_1_cast_fp16")];
|
| 19 |
+
tensor<int32, [1]> input0_1_lstm_layer_0_lstm_h0_squeeze_axes_0 = const()[name = string("input0_1_lstm_layer_0_lstm_h0_squeeze_axes_0"), val = tensor<int32, [1]>([0])];
|
| 20 |
+
tensor<fp16, [1, 640]> input0_1_lstm_layer_0_lstm_h0_squeeze_cast_fp16 = squeeze(axes = input0_1_lstm_layer_0_lstm_h0_squeeze_axes_0, x = split_0_cast_fp16_0)[name = string("input0_1_lstm_layer_0_lstm_h0_squeeze_cast_fp16")];
|
| 21 |
+
tensor<int32, [1]> input0_1_lstm_layer_0_lstm_c0_squeeze_axes_0 = const()[name = string("input0_1_lstm_layer_0_lstm_c0_squeeze_axes_0"), val = tensor<int32, [1]>([0])];
|
| 22 |
+
tensor<fp16, [1, 640]> input0_1_lstm_layer_0_lstm_c0_squeeze_cast_fp16 = squeeze(axes = input0_1_lstm_layer_0_lstm_c0_squeeze_axes_0, x = split_1_cast_fp16_0)[name = string("input0_1_lstm_layer_0_lstm_c0_squeeze_cast_fp16")];
|
| 23 |
+
string input0_1_lstm_layer_0_direction_0 = const()[name = string("input0_1_lstm_layer_0_direction_0"), val = string("forward")];
|
| 24 |
+
bool input0_1_lstm_layer_0_output_sequence_0 = const()[name = string("input0_1_lstm_layer_0_output_sequence_0"), val = bool(true)];
|
| 25 |
+
string input0_1_lstm_layer_0_recurrent_activation_0 = const()[name = string("input0_1_lstm_layer_0_recurrent_activation_0"), val = string("sigmoid")];
|
| 26 |
+
string input0_1_lstm_layer_0_cell_activation_0 = const()[name = string("input0_1_lstm_layer_0_cell_activation_0"), val = string("tanh")];
|
| 27 |
+
string input0_1_lstm_layer_0_activation_0 = const()[name = string("input0_1_lstm_layer_0_activation_0"), val = string("tanh")];
|
| 28 |
+
tensor<fp16, [2560, 640]> concat_1_to_fp16 = const()[name = string("concat_1_to_fp16"), val = tensor<fp16, [2560, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(16752768)))];
|
| 29 |
+
tensor<fp16, [2560, 640]> concat_2_to_fp16 = const()[name = string("concat_2_to_fp16"), val = tensor<fp16, [2560, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(20029632)))];
|
| 30 |
+
tensor<fp16, [2560]> concat_0_to_fp16 = const()[name = string("concat_0_to_fp16"), val = tensor<fp16, [2560]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(23306496)))];
|
| 31 |
+
tensor<fp16, [1, 1, 640]> input_1_cast_fp16 = transpose(perm = input_1_perm_0, x = y_1_cast_fp16_cast_uint16)[name = string("transpose_1")];
|
| 32 |
+
tensor<fp16, [1, 1, 640]> input0_1_lstm_layer_0_cast_fp16_0, tensor<fp16, [1, 640]> input0_1_lstm_layer_0_cast_fp16_1, tensor<fp16, [1, 640]> input0_1_lstm_layer_0_cast_fp16_2 = lstm(activation = input0_1_lstm_layer_0_activation_0, bias = concat_0_to_fp16, cell_activation = input0_1_lstm_layer_0_cell_activation_0, direction = input0_1_lstm_layer_0_direction_0, initial_c = input0_1_lstm_layer_0_lstm_c0_squeeze_cast_fp16, initial_h = input0_1_lstm_layer_0_lstm_h0_squeeze_cast_fp16, output_sequence = input0_1_lstm_layer_0_output_sequence_0, recurrent_activation = input0_1_lstm_layer_0_recurrent_activation_0, weight_hh = concat_2_to_fp16, weight_ih = concat_1_to_fp16, x = input_1_cast_fp16)[name = string("input0_1_lstm_layer_0_cast_fp16")];
|
| 33 |
+
tensor<int32, [1]> input0_1_lstm_h0_squeeze_axes_0 = const()[name = string("input0_1_lstm_h0_squeeze_axes_0"), val = tensor<int32, [1]>([0])];
|
| 34 |
+
tensor<fp16, [1, 640]> input0_1_lstm_h0_squeeze_cast_fp16 = squeeze(axes = input0_1_lstm_h0_squeeze_axes_0, x = split_0_cast_fp16_1)[name = string("input0_1_lstm_h0_squeeze_cast_fp16")];
|
| 35 |
+
tensor<int32, [1]> input0_1_lstm_c0_squeeze_axes_0 = const()[name = string("input0_1_lstm_c0_squeeze_axes_0"), val = tensor<int32, [1]>([0])];
|
| 36 |
+
tensor<fp16, [1, 640]> input0_1_lstm_c0_squeeze_cast_fp16 = squeeze(axes = input0_1_lstm_c0_squeeze_axes_0, x = split_1_cast_fp16_1)[name = string("input0_1_lstm_c0_squeeze_cast_fp16")];
|
| 37 |
+
string input0_1_direction_0 = const()[name = string("input0_1_direction_0"), val = string("forward")];
|
| 38 |
+
bool input0_1_output_sequence_0 = const()[name = string("input0_1_output_sequence_0"), val = bool(true)];
|
| 39 |
+
string input0_1_recurrent_activation_0 = const()[name = string("input0_1_recurrent_activation_0"), val = string("sigmoid")];
|
| 40 |
+
string input0_1_cell_activation_0 = const()[name = string("input0_1_cell_activation_0"), val = string("tanh")];
|
| 41 |
+
string input0_1_activation_0 = const()[name = string("input0_1_activation_0"), val = string("tanh")];
|
| 42 |
+
tensor<fp16, [2560, 640]> concat_4_to_fp16 = const()[name = string("concat_4_to_fp16"), val = tensor<fp16, [2560, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(23311680)))];
|
| 43 |
+
tensor<fp16, [2560, 640]> concat_5_to_fp16 = const()[name = string("concat_5_to_fp16"), val = tensor<fp16, [2560, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(26588544)))];
|
| 44 |
+
tensor<fp16, [2560]> concat_3_to_fp16 = const()[name = string("concat_3_to_fp16"), val = tensor<fp16, [2560]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(29865408)))];
|
| 45 |
+
tensor<fp16, [1, 1, 640]> input0_1_cast_fp16_0, tensor<fp16, [1, 640]> input0_1_cast_fp16_1, tensor<fp16, [1, 640]> input0_1_cast_fp16_2 = lstm(activation = input0_1_activation_0, bias = concat_3_to_fp16, cell_activation = input0_1_cell_activation_0, direction = input0_1_direction_0, initial_c = input0_1_lstm_c0_squeeze_cast_fp16, initial_h = input0_1_lstm_h0_squeeze_cast_fp16, output_sequence = input0_1_output_sequence_0, recurrent_activation = input0_1_recurrent_activation_0, weight_hh = concat_5_to_fp16, weight_ih = concat_4_to_fp16, x = input0_1_lstm_layer_0_cast_fp16_0)[name = string("input0_1_cast_fp16")];
|
| 46 |
+
int32 var_33_axis_0 = const()[name = string("op_33_axis_0"), val = int32(0)];
|
| 47 |
+
tensor<fp16, [2, 1, 640]> h_out = stack(axis = var_33_axis_0, values = (input0_1_lstm_layer_0_cast_fp16_1, input0_1_cast_fp16_1))[name = string("op_33_cast_fp16")];
|
| 48 |
+
int32 var_34_axis_0 = const()[name = string("op_34_axis_0"), val = int32(0)];
|
| 49 |
+
tensor<fp16, [2, 1, 640]> c_out = stack(axis = var_34_axis_0, values = (input0_1_lstm_layer_0_cast_fp16_2, input0_1_cast_fp16_2))[name = string("op_34_cast_fp16")];
|
| 50 |
+
tensor<int32, [3]> output_1_perm_0 = const()[name = string("output_1_perm_0"), val = tensor<int32, [3]>([1, 0, 2])];
|
| 51 |
+
tensor<fp16, [1, 1, 640]> decoder_output = transpose(perm = output_1_perm_0, x = input0_1_cast_fp16_0)[name = string("transpose_0")];
|
| 52 |
+
} -> (decoder_output, h_out, c_out);
|
| 53 |
+
}
|
decoder.mlmodelc/weights/weight.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:dcdeccd4ccf46e2675224f9f030d46c1a89e2bda4abb316e901e1a21f1597f8f
|
| 3 |
+
size 29870592
|
encoder.mlmodelc/analytics/coremldata.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:cdd661c54b5e6f6389b58567c144cba6fad0d9e2c998d8a9048f87e857f9f32b
|
| 3 |
+
size 243
|
encoder.mlmodelc/coremldata.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c37a6fb1813130e71e0a19e58c235974234f1b9b3984ec1afa9323bf3c192e8d
|
| 3 |
+
size 701
|
encoder.mlmodelc/model.mil
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
encoder.mlmodelc/weights/weight.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:5fab9a684e34183d5f19cd1c63c19eefd7b02cc5a68af1367c6489702e746508
|
| 3 |
+
size 591932416
|
joint.mlmodelc/analytics/coremldata.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:e76f3618638fd5cf64805d4ba57942cbc7fcb1b38edd13851a151978871e57c4
|
| 3 |
+
size 243
|
joint.mlmodelc/coremldata.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1b4924670d16462ab2de77fb7e5f7fa721af139939e5ab2ddcd903734894ce9d
|
| 3 |
+
size 355
|
joint.mlmodelc/model.mil
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
program(1.3)
|
| 2 |
+
[buildInfo = dict<string, string>({{"coremlc-component-MIL", "3520.4.1"}, {"coremlc-version", "3520.5.1"}, {"coremltools-component-torch", "2.11.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "8.3.0"}})]
|
| 3 |
+
{
|
| 4 |
+
func main<ios18>(tensor<fp16, [1, 1, 640]> decoder_output, tensor<fp16, [1, 1, 1024]> encoder_output) {
|
| 5 |
+
int32 var_6 = const()[name = string("op_6"), val = int32(-1)];
|
| 6 |
+
tensor<fp16, [640, 1024]> joint_enc_weight_to_fp16 = const()[name = string("joint_enc_weight_to_fp16"), val = tensor<fp16, [640, 1024]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(64)))];
|
| 7 |
+
tensor<fp16, [640]> joint_enc_bias_to_fp16 = const()[name = string("joint_enc_bias_to_fp16"), val = tensor<fp16, [640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(1310848)))];
|
| 8 |
+
tensor<fp16, [1, 1, 640]> linear_0_cast_fp16 = linear(bias = joint_enc_bias_to_fp16, weight = joint_enc_weight_to_fp16, x = encoder_output)[name = string("linear_0_cast_fp16")];
|
| 9 |
+
tensor<fp16, [640, 640]> joint_pred_weight_to_fp16 = const()[name = string("joint_pred_weight_to_fp16"), val = tensor<fp16, [640, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(1312192)))];
|
| 10 |
+
tensor<fp16, [640]> joint_pred_bias_to_fp16 = const()[name = string("joint_pred_bias_to_fp16"), val = tensor<fp16, [640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(2131456)))];
|
| 11 |
+
tensor<fp16, [1, 1, 640]> linear_1_cast_fp16 = linear(bias = joint_pred_bias_to_fp16, weight = joint_pred_weight_to_fp16, x = decoder_output)[name = string("linear_1_cast_fp16")];
|
| 12 |
+
tensor<int32, [1]> f_3_axes_0 = const()[name = string("f_3_axes_0"), val = tensor<int32, [1]>([2])];
|
| 13 |
+
tensor<fp16, [1, 1, 1, 640]> f_3_cast_fp16 = expand_dims(axes = f_3_axes_0, x = linear_0_cast_fp16)[name = string("f_3_cast_fp16")];
|
| 14 |
+
tensor<int32, [1]> g_3_axes_0 = const()[name = string("g_3_axes_0"), val = tensor<int32, [1]>([1])];
|
| 15 |
+
tensor<fp16, [1, 1, 1, 640]> g_3_cast_fp16 = expand_dims(axes = g_3_axes_0, x = linear_1_cast_fp16)[name = string("g_3_cast_fp16")];
|
| 16 |
+
tensor<fp16, [1, 1, 1, 640]> input_3_cast_fp16 = add(x = f_3_cast_fp16, y = g_3_cast_fp16)[name = string("input_3_cast_fp16")];
|
| 17 |
+
tensor<fp16, [1, 1, 1, 640]> var_25_cast_fp16 = relu(x = input_3_cast_fp16)[name = string("op_25_cast_fp16")];
|
| 18 |
+
tensor<fp16, [13088, 640]> joint_joint_net_2_weight_to_fp16 = const()[name = string("joint_joint_net_2_weight_to_fp16"), val = tensor<fp16, [13088, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(2132800)))];
|
| 19 |
+
tensor<fp16, [13088]> joint_joint_net_2_bias_to_fp16 = const()[name = string("joint_joint_net_2_bias_to_fp16"), val = tensor<fp16, [13088]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(18885504)))];
|
| 20 |
+
tensor<fp16, [1, 1, 1, 13088]> linear_2_cast_fp16 = linear(bias = joint_joint_net_2_bias_to_fp16, weight = joint_joint_net_2_weight_to_fp16, x = var_25_cast_fp16)[name = string("linear_2_cast_fp16")];
|
| 21 |
+
tensor<fp16, [1, 1, 1, 13088]> logits_1_softmax_cast_fp16 = softmax(axis = var_6, x = linear_2_cast_fp16)[name = string("logits_1_softmax_cast_fp16")];
|
| 22 |
+
fp32 logits_1_epsilon_0 = const()[name = string("logits_1_epsilon_0"), val = fp32(0x1p-149)];
|
| 23 |
+
tensor<fp16, [1, 1, 1, 13088]> logits_1_cast_fp16 = log(epsilon = logits_1_epsilon_0, x = logits_1_softmax_cast_fp16)[name = string("logits_1_cast_fp16")];
|
| 24 |
+
tensor<int32, [1]> var_31_axes_0 = const()[name = string("op_31_axes_0"), val = tensor<int32, [1]>([2])];
|
| 25 |
+
tensor<fp16, [1, 1, 13088]> logits = squeeze(axes = var_31_axes_0, x = logits_1_cast_fp16)[name = string("op_31_cast_fp16")];
|
| 26 |
+
} -> (logits);
|
| 27 |
+
}
|
joint.mlmodelc/weights/weight.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c0ef0a3a6598f962d2aad598dc6850e4428874033419817121e11f1fff4a9cfe
|
| 3 |
+
size 18911744
|
languages.json
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"numPrompts": 128,
|
| 3 |
+
"promptDictionary": {
|
| 4 |
+
"en-US": 0,
|
| 5 |
+
"en": 0,
|
| 6 |
+
"en-GB": 1,
|
| 7 |
+
"enGB": 1,
|
| 8 |
+
"es-ES": 2,
|
| 9 |
+
"esES": 2,
|
| 10 |
+
"es-US": 3,
|
| 11 |
+
"es": 3,
|
| 12 |
+
"zh-CN": 4,
|
| 13 |
+
"zh-ZH": 4,
|
| 14 |
+
"zh-TW": 5,
|
| 15 |
+
"hi-IN": 6,
|
| 16 |
+
"hi": 6,
|
| 17 |
+
"hi-HI": 6,
|
| 18 |
+
"ar-AR": 7,
|
| 19 |
+
"ar": 7,
|
| 20 |
+
"fr-FR": 8,
|
| 21 |
+
"fr": 8,
|
| 22 |
+
"de-DE": 9,
|
| 23 |
+
"de": 9,
|
| 24 |
+
"ja-JP": 10,
|
| 25 |
+
"ja-JA": 10,
|
| 26 |
+
"ru-RU": 11,
|
| 27 |
+
"ru": 11,
|
| 28 |
+
"pt-BR": 12,
|
| 29 |
+
"pt-PT": 13,
|
| 30 |
+
"pt": 13,
|
| 31 |
+
"ko-KR": 14,
|
| 32 |
+
"ko": 14,
|
| 33 |
+
"ko-KO": 14,
|
| 34 |
+
"it-IT": 15,
|
| 35 |
+
"it": 15,
|
| 36 |
+
"nl-NL": 16,
|
| 37 |
+
"nl": 16,
|
| 38 |
+
"pl-PL": 17,
|
| 39 |
+
"pl": 17,
|
| 40 |
+
"tr-TR": 18,
|
| 41 |
+
"tr": 18,
|
| 42 |
+
"uk-UA": 19,
|
| 43 |
+
"uk": 19,
|
| 44 |
+
"ro-RO": 20,
|
| 45 |
+
"ro": 20,
|
| 46 |
+
"el-GR": 21,
|
| 47 |
+
"el": 21,
|
| 48 |
+
"cs-CZ": 22,
|
| 49 |
+
"cs": 22,
|
| 50 |
+
"hu-HU": 23,
|
| 51 |
+
"hu": 23,
|
| 52 |
+
"sv-SE": 24,
|
| 53 |
+
"sv": 24,
|
| 54 |
+
"da-DK": 25,
|
| 55 |
+
"da": 25,
|
| 56 |
+
"fi-FI": 26,
|
| 57 |
+
"fi": 26,
|
| 58 |
+
"no-NO": 27,
|
| 59 |
+
"no": 27,
|
| 60 |
+
"nb-NO": 103,
|
| 61 |
+
"nb": 103,
|
| 62 |
+
"nn-NO": 104,
|
| 63 |
+
"nn": 104,
|
| 64 |
+
"sk-SK": 28,
|
| 65 |
+
"sk": 28,
|
| 66 |
+
"hr-HR": 29,
|
| 67 |
+
"hr": 29,
|
| 68 |
+
"bg-BG": 30,
|
| 69 |
+
"bg": 30,
|
| 70 |
+
"lt-LT": 31,
|
| 71 |
+
"lt": 31,
|
| 72 |
+
"et-EE": 60,
|
| 73 |
+
"et": 60,
|
| 74 |
+
"lv-LV": 61,
|
| 75 |
+
"lv": 61,
|
| 76 |
+
"sl-SI": 62,
|
| 77 |
+
"sl": 62,
|
| 78 |
+
"th-TH": 32,
|
| 79 |
+
"vi-VN": 33,
|
| 80 |
+
"id-ID": 34,
|
| 81 |
+
"ms-MY": 35,
|
| 82 |
+
"bn-IN": 36,
|
| 83 |
+
"ur-PK": 37,
|
| 84 |
+
"fa-IR": 38,
|
| 85 |
+
"ta-IN": 39,
|
| 86 |
+
"te-IN": 40,
|
| 87 |
+
"mr-IN": 41,
|
| 88 |
+
"gu-IN": 42,
|
| 89 |
+
"kn-IN": 43,
|
| 90 |
+
"ml-IN": 44,
|
| 91 |
+
"si-LK": 45,
|
| 92 |
+
"ne-NP": 46,
|
| 93 |
+
"km-KH": 47,
|
| 94 |
+
"sw-KE": 48,
|
| 95 |
+
"am-ET": 49,
|
| 96 |
+
"ha-NG": 50,
|
| 97 |
+
"zu-ZA": 51,
|
| 98 |
+
"yo-NG": 52,
|
| 99 |
+
"ig-NG": 53,
|
| 100 |
+
"af-ZA": 54,
|
| 101 |
+
"rw-RW": 55,
|
| 102 |
+
"so-SO": 56,
|
| 103 |
+
"ny-MW": 57,
|
| 104 |
+
"ln-CD": 58,
|
| 105 |
+
"or-KE": 59,
|
| 106 |
+
"he-IL": 64,
|
| 107 |
+
"ku-TR": 65,
|
| 108 |
+
"az-AZ": 66,
|
| 109 |
+
"ka-GE": 67,
|
| 110 |
+
"hy-AM": 68,
|
| 111 |
+
"uz-UZ": 69,
|
| 112 |
+
"tg-TJ": 70,
|
| 113 |
+
"ky-KG": 71,
|
| 114 |
+
"qu-PE": 80,
|
| 115 |
+
"ay-BO": 81,
|
| 116 |
+
"gn-PY": 82,
|
| 117 |
+
"nah-MX": 83,
|
| 118 |
+
"mi-NZ": 96,
|
| 119 |
+
"haw-US": 97,
|
| 120 |
+
"sm-WS": 98,
|
| 121 |
+
"to-TO": 99,
|
| 122 |
+
"fr-CA": 100,
|
| 123 |
+
"mt-MT": 102,
|
| 124 |
+
"auto": 101
|
| 125 |
+
},
|
| 126 |
+
"autoSlot": 101
|
| 127 |
+
}
|
vocab.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|