gcoderw commited on
Commit
88ebf8b
·
verified ·
1 Parent(s): d3436cb

Rename TE-86M to AIT-86M and update package contents

Browse files
Files changed (2) hide show
  1. AIT-86M.safetensors +3 -0
  2. README.md +11 -282
AIT-86M.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5245f12b721086d90b4fe649c8f38b6928e658ba81087a620398f3dec567e2b7
3
+ size 346056964
README.md CHANGED
@@ -18,298 +18,27 @@ datasets:
18
  - custom
19
  ---
20
 
21
- # TE-86M — Trimodal Embeddings (Depth-2)
22
 
23
- **TE-86M** maps image, audio, and text into a shared 1280-dim embedding space, enabling cross-modal retrieval with a single vector index. All three modalities share a unified space with full Matryoshka truncation support down to 128 dims.
24
 
25
- Built for edge deployment the entire model runs on a Raspberry Pi 5.
26
 
27
- Successor to [TE-75M](https://huggingface.co/augmem/TE-75M), with depth-2 residual projection heads that break through the cross-modal retrieval ceiling of depth-1 architectures while maintaining text retrieval quality.
28
 
29
- > Also available in [GGUF format](https://huggingface.co/augmem/TE-86M-GGUF) for quantized edge deployment.
30
-
31
- ## Architecture
32
-
33
- TE-86M uses lightweight edge encoders with depth-2 residual projection heads that expand through a 1920-dim hidden layer before projecting into a shared 1280-dim embedding space:
34
-
35
- ```
36
- Text --> LEAF-IR (768-d) -----------> DeepProjectionHead-d2 (768 -> 1920 -> 1920 -> 1280)
37
- Image --> MobileNetV4-Medium (1280-d) --> DeepProjectionHead-d2 (1280 -> 1920 -> 1920 -> 1280)
38
- Audio --> EfficientAT mn20_as (1920-d) --> DeepProjectionHead-d2 (1920 -> 1920 -> 1920 -> 1280)
39
- ```
40
-
41
- All outputs are L2-normalized into the shared 1280-dim space for cross-modal cosine similarity.
42
-
43
- | Component | Architecture | Params | Size |
44
- |---|---|---|---|
45
- | Text encoder | LEAF-IR (MongoDB/mdbr-leaf-ir) | 22.7M | 87.2 MB |
46
- | Image encoder | MobileNetV4-Medium (timm) | 8.4M | 32.4 MB |
47
- | Audio encoder | EfficientAT mn20_as | 17.9M | 68.5 MB |
48
- | Image projection | DeepProjectionHead-d2 (1280 -> 1920 -> 1920 -> 1280) | 12.3M | 47.0 MB |
49
- | Audio projection | DeepProjectionHead-d2 (1920 -> 1920 -> 1920 -> 1280) | 13.5M | 51.7 MB |
50
- | Text projection | DeepProjectionHead-d2 (768 -> 1920 -> 1920 -> 1280) | 11.3M | 43.2 MB |
51
- | **Total** | | **86.1M** | **329.9 MB** |
52
-
53
- ### Projection head detail
54
-
55
- Each `DeepProjectionHead-d2` is a depth-2 residual MLP with Matryoshka-aware training:
56
-
57
- ```
58
- Linear(encoder_dim, 1920) -> GELU -> LayerNorm -> Dropout(0.3)
59
- -> Linear(1920, 1920) -> GELU -> LayerNorm -> Dropout(0.3) + residual
60
- -> Linear(1920, 1920) -> GELU -> LayerNorm -> Dropout(0.3) + residual
61
- -> Linear(1920, 1280)
62
- ```
63
-
64
- ### Why depth-2?
65
-
66
- Ablation experiments showed depth-1 heads hit an I->T retrieval ceiling at ~0.60 R@1 regardless of hyperparameter tuning. Depth-2 heads broke through to 0.618, providing the representational capacity to serve cross-modal AND text retrieval simultaneously. The extra 11M params (75M -> 86M) remain edge-viable.
67
-
68
- ### Matryoshka dimensions
69
-
70
- Embeddings can be truncated to `[1280, 768, 512, 256, 128]` dimensions while preserving retrieval quality — trained with Matryoshka Representation Learning (MRL).
71
-
72
- ## Benchmarks
73
-
74
- SALT retrieval benchmarks use 5K trimodal samples. Full MTEB / MAEB evaluation used the 768-d Matryoshka truncation.
75
-
76
- ### Cross-modal retrieval — SALT (5K trimodal samples)
77
-
78
- | Direction | TE-86M (86M) | TE-75M (75M) | ImageBind (1.2B) | EBind (1.78B*) |
79
- |---|---|---|---|---|
80
- | Image -> Text R@1 | 0.618 | 0.615 | 0.736 | **0.783** |
81
- | Text -> Image R@1 | 0.630 | 0.614 | 0.712 | **0.779** |
82
- | Text -> Audio R@1 | **0.108** | 0.103 | 0.038 | 0.047 |
83
- | Audio -> Text R@1 | 0.087 | 0.082 | 0.039 | 0.035 |
84
- | Image -> Audio R@1 | **0.068** | 0.062 | 0.023 | 0.027 |
85
- | Audio -> Image R@1 | **0.070** | 0.063 | 0.025 | 0.032 |
86
-
87
- ### Audio retrieval — AudioCaps & Clotho
88
-
89
- | Benchmark | Direction | TE-86M | TE-75M | CLAP-Large | ImageBind | EBind |
90
- |---|---|---|---|---|---|---|
91
- | AudioCaps | A->T R@1 | 0.229 | 0.210 | **0.420** | 0.116 | 0.225 |
92
- | AudioCaps | T->A R@1 | 0.156 | 0.148 | **0.280** | 0.080 | 0.219 |
93
- | Clotho | A->T R@1 | **0.219** | 0.208 | 0.195 | 0.061 | 0.088 |
94
- | Clotho | T->A R@1 | **0.177** | 0.172 | 0.167 | 0.074 | 0.118 |
95
-
96
- ### Image-text retrieval — MSCOCO & Flickr30k
97
-
98
- | Benchmark | Direction | TE-86M (86M) | TE-75M (75M) | EBind (1.78B*) | ImageBind (1.2B) |
99
- |---|---|---|---|---|---|
100
- | Flickr30k | I->T R@1 | 0.494 | 0.478 | **0.951** | 0.918 |
101
- | Flickr30k | T->I R@1 | 0.332 | 0.303 | **0.853** | 0.766 |
102
- | MSCOCO 5K | I->T R@1 | 0.343 | 0.320 | **0.743** | 0.658 |
103
- | MSCOCO 5K | T->I R@1 | 0.225 | 0.208 | **0.559** | 0.490 |
104
-
105
- ### Zero-shot classification — ESC-50
106
-
107
- | Model | Params | Accuracy |
108
- |---|---|---|
109
- | TE-86M | 86M | **93.9%** |
110
- | CLAP-Large | 67.8M | 90.5% |
111
- | TE-75M | 75M | 93.2% |
112
- | EBind | 1.78B* | 77.0% |
113
- | ImageBind | 1.2B | 66.4% |
114
-
115
- ### Text retrieval — MTEB (NDCG@10)
116
-
117
- Text-text retrieval quality in the shared embedding space, measured on MTEB retrieval tasks:
118
-
119
- | Task | TE-86M | TE-75M | Raw LEAF-IR | Recovery |
120
- |---|---|---|---|---|
121
- | ArguAna | 0.545 | 0.544 | 0.594 | 92% |
122
- | CQADupstackGaming | 0.515 | 0.506 | 0.607 | 85% |
123
- | CQADupstackUnix | 0.334 | 0.355 | 0.428 | 78% |
124
- | FEVERHardNegatives | 0.561 | 0.551 | 0.863 | 65% |
125
- | HotpotQAHardNegatives | 0.554 | 0.531 | 0.700 | 79% |
126
- | FiQA2018 | 0.291 | 0.292 | 0.392 | 74% |
127
- | ClimateFEVER | 0.231 | 0.215 | 0.353 | 65% |
128
- | SCIDOCS | 0.154 | 0.153 | 0.198 | 78% |
129
- | TRECCOVID | 0.507 | 0.474 | 0.820 | 62% |
130
-
131
- TE-86M improves MTEB text retrieval over TE-75M on 7/9 tasks. The depth-2 projection heads recover 62-92% of raw LEAF-IR's retrieval quality while mapping into the cross-modal shared space.
132
-
133
- ### Full MTEB / MAEB kitchen-sink evaluation
134
-
135
- Full evaluation used the 768-d Matryoshka truncation of the TE-86M checkpoint `checkpoints/trimodal_3head_h1920_d2_v2_d30_tt025/best_model.pt` with MTEB 2.12.15.
136
- The run completed 63/71 requested tasks (`MTEB(eng, v2)` and `MAEB`). Failed tasks were: BirdCLEF, CREMA_DClustering, CommonLanguageAgeDetection, FleursT2ARetrieval, IEMOCAPGender, VoxCelebSA, VoxPopuliGenderClustering, VoxPopuliLanguageID.
137
-
138
- | Family | Tasks | Mean primary score |
139
- |---|---:|---:|
140
- | Text retrieval | 11 | 0.437 |
141
- | Text reranking | 1 | 0.314 |
142
- | Text summarization | 1 | 0.308 |
143
- | Text classification | 8 | 0.693 |
144
- | Text clustering | 8 | 0.445 |
145
- | Text STS / pair | 12 | 0.780 |
146
- | Audio retrieval | 8 | 0.169 |
147
- | Audio classification | 9 | 0.379 |
148
- | Audio pair / reranking | 4 | 0.620 |
149
- | Audio clustering | 1 | 0.009 |
150
-
151
- <details>
152
- <summary>Full per-task scores</summary>
153
-
154
- | Task | Family | Metric | Score | NDCG@10 | Recall@10 | Subsets |
155
- |---|---|---|---:|---:|---:|---:|
156
- | BeijingOpera | Audio classification | Main score | 0.868 | | | 1 |
157
- | CREMA_D | Audio classification | Main score | 0.285 | | | 1 |
158
- | FSD2019Kaggle | Audio classification | Main score | 0.548 | | | 2 |
159
- | GTZANGenre | Audio classification | Main score | 0.742 | | | 1 |
160
- | MInDS14 | Audio classification | Main score | 0.094 | | | 12 |
161
- | MridinghamTonic | Audio classification | Main score | 0.350 | | | 1 |
162
- | RavdessZeroshot | Audio classification | Main score | 0.197 | | | 1 |
163
- | SIBFLEURS | Audio classification | Main score | 0.218 | | | 102 |
164
- | SpeechCommandsZeroshotv0.02 | Audio classification | Main score | 0.111 | | | 1 |
165
- | VehicleSoundClustering | Audio clustering | Main score | 0.009 | | | 1 |
166
- | CREMADPairClassification | Audio pair / reranking | Main score | 0.528 | | | 1 |
167
- | GTZANAudioReranking | Audio pair / reranking | NDCG@10 | 0.874 | 0.874 | 0.987 | 1 |
168
- | NMSQAPairClassification | Audio pair / reranking | Main score | 0.547 | | | 1 |
169
- | VoxPopuliAccentPairClassification | Audio pair / reranking | Main score | 0.529 | | | 1 |
170
- | ClothoT2ARetrieval | Audio retrieval | NDCG@10 | 0.294 | 0.294 | 0.467 | 1 |
171
- | CommonVoiceMini21T2ARetrieval | Audio retrieval | NDCG@10 | 0.023 | 0.023 | 0.052 | 117 |
172
- | GigaSpeechT2ARetrieval | Audio retrieval | NDCG@10 | 0.002 | 0.002 | 0.004 | 1 |
173
- | JamAltArtistA2ARetrieval | Audio retrieval | NDCG@10 | 0.873 | 0.873 | 0.183 | 4 |
174
- | JamAltLyricA2TRetrieval | Audio retrieval | NDCG@10 | 0.008 | 0.008 | 0.013 | 4 |
175
- | MACST2ARetrieval | Audio retrieval | NDCG@10 | 0.136 | 0.136 | 0.252 | 1 |
176
- | SpokenSQuADT2ARetrieval | Audio retrieval | NDCG@10 | 0.010 | 0.010 | 0.020 | 1 |
177
- | UrbanSound8KT2ARetrieval | Audio retrieval | NDCG@10 | 0.009 | 0.009 | 0.020 | 1 |
178
- | BIOSSES | Text STS / pair | Main score | 0.803 | | | 1 |
179
- | SICK-R | Text STS / pair | Main score | 0.746 | | | 1 |
180
- | STS12 | Text STS / pair | Main score | 0.709 | | | 1 |
181
- | STS13 | Text STS / pair | Main score | 0.783 | | | 1 |
182
- | STS14 | Text STS / pair | Main score | 0.731 | | | 1 |
183
- | STS15 | Text STS / pair | Main score | 0.828 | | | 1 |
184
- | STS17 | Text STS / pair | Main score | 0.859 | | | 1 |
185
- | STS22.v2 | Text STS / pair | Main score | 0.679 | | | 1 |
186
- | STSBenchmark | Text STS / pair | Main score | 0.810 | | | 1 |
187
- | SprintDuplicateQuestions | Text STS / pair | Main score | 0.957 | | | 1 |
188
- | TwitterSemEval2015 | Text STS / pair | Main score | 0.620 | | | 1 |
189
- | TwitterURLCorpus | Text STS / pair | Main score | 0.837 | | | 1 |
190
- | AmazonCounterfactualClassification | Text classification | Main score | 0.681 | | | 1 |
191
- | Banking77Classification | Text classification | Main score | 0.742 | | | 1 |
192
- | ImdbClassification | Text classification | Main score | 0.722 | | | 1 |
193
- | MTOPDomainClassification | Text classification | Main score | 0.896 | | | 1 |
194
- | MassiveIntentClassification | Text classification | Main score | 0.623 | | | 1 |
195
- | MassiveScenarioClassification | Text classification | Main score | 0.709 | | | 1 |
196
- | ToxicConversationsClassification | Text classification | Main score | 0.623 | | | 1 |
197
- | TweetSentimentExtractionClassification | Text classification | Main score | 0.545 | | | 1 |
198
- | ArXivHierarchicalClusteringP2P | Text clustering | Main score | 0.549 | | | 1 |
199
- | ArXivHierarchicalClusteringS2S | Text clustering | Main score | 0.523 | | | 1 |
200
- | BiorxivClusteringP2P.v2 | Text clustering | Main score | 0.352 | | | 1 |
201
- | MedrxivClusteringP2P.v2 | Text clustering | Main score | 0.352 | | | 1 |
202
- | MedrxivClusteringS2S.v2 | Text clustering | Main score | 0.333 | | | 1 |
203
- | StackExchangeClustering.v2 | Text clustering | Main score | 0.589 | | | 1 |
204
- | StackExchangeClusteringP2P.v2 | Text clustering | Main score | 0.405 | | | 1 |
205
- | TwentyNewsgroupsClustering.v2 | Text clustering | Main score | 0.457 | | | 1 |
206
- | MindSmallReranking | Text reranking | Main score | 0.314 | 0.317 | 0.542 | 1 |
207
- | ArguAna | Text retrieval | NDCG@10 | 0.546 | 0.546 | 0.826 | 1 |
208
- | AskUbuntuDupQuestions | Text retrieval | NDCG@10 | 0.659 | 0.659 | 0.740 | 1 |
209
- | CQADupstackGamingRetrieval | Text retrieval | NDCG@10 | 0.519 | 0.519 | 0.659 | 1 |
210
- | CQADupstackUnixRetrieval | Text retrieval | NDCG@10 | 0.355 | 0.355 | 0.462 | 1 |
211
- | ClimateFEVERHardNegatives | Text retrieval | NDCG@10 | 0.239 | 0.239 | 0.301 | 1 |
212
- | FEVERHardNegatives | Text retrieval | NDCG@10 | 0.569 | 0.569 | 0.765 | 1 |
213
- | FiQA2018 | Text retrieval | NDCG@10 | 0.292 | 0.292 | 0.361 | 1 |
214
- | HotpotQAHardNegatives | Text retrieval | NDCG@10 | 0.553 | 0.553 | 0.605 | 1 |
215
- | SCIDOCS | Text retrieval | NDCG@10 | 0.154 | 0.154 | 0.164 | 1 |
216
- | TRECCOVID | Text retrieval | NDCG@10 | 0.513 | 0.513 | 0.014 | 1 |
217
- | Touche2020Retrieval.v3 | Text retrieval | NDCG@10 | 0.414 | 0.414 | 0.173 | 1 |
218
- | SummEvalSummarization.v2 | Text summarization | Main score | 0.308 | | | 1 |
219
-
220
- </details>
221
-
222
- ## Usage
223
-
224
- ### Loading components
225
-
226
- ```python
227
- from safetensors.torch import load_file
228
-
229
- # Load entire model
230
- tensors = load_file("TE-86M.safetensors")
231
-
232
- # Extract components by prefix
233
- text_enc_sd = {k.removeprefix("text_encoder."): v for k, v in tensors.items() if k.startswith("text_encoder.")}
234
- image_enc_sd = {k.removeprefix("image_encoder."): v for k, v in tensors.items() if k.startswith("image_encoder.")}
235
- audio_enc_sd = {k.removeprefix("audio_encoder."): v for k, v in tensors.items() if k.startswith("audio_encoder.")}
236
- image_proj_sd = {k.removeprefix("image_projection."): v for k, v in tensors.items() if k.startswith("image_projection.")}
237
- audio_proj_sd = {k.removeprefix("audio_projection."): v for k, v in tensors.items() if k.startswith("audio_projection.")}
238
- text_proj_sd = {k.removeprefix("text_projection."): v for k, v in tensors.items() if k.startswith("text_projection.")}
239
- ```
240
-
241
- ### Matryoshka truncation
242
-
243
- ```python
244
- import torch.nn.functional as F
245
-
246
- # Full 1280-dim embedding
247
- embedding = model(input) # (N, 1280)
248
-
249
- # Truncate to 256-dim and re-normalize
250
- embedding_256 = F.normalize(embedding[:, :256], dim=-1)
251
- ```
252
 
253
  ## File layout
254
 
 
 
255
  ```
256
- TE-86M.safetensors # All components in one file (~330 MB)
257
- ```
258
-
259
- ### Tensor key prefixes
260
-
261
- | Prefix | Component | Tensors |
262
- |---|---|---|
263
- | `text_encoder.*` | LEAF-IR (float32) | 103 |
264
- | `image_encoder.*` | MobileNetV4-Medium | 462 |
265
- | `audio_encoder.*` | EfficientAT mn20_as | 312 |
266
- | `image_projection.*` | Depth-2 projection head | 14 |
267
- | `audio_projection.*` | Depth-2 projection head | 14 |
268
- | `text_projection.*` | Depth-2 projection head | 14 |
269
-
270
- ## Training
271
-
272
- - **Loss**: InfoNCE (contrastive) with Matryoshka Representation Learning
273
- - **Data**: ~2.2M synthetically generated trimodal triplets (WordNet) + 200K MSCOCO img+txt + 262K WavCaps aud+txt + 1.5M Nomic text pairs
274
- - **Hardware**: 2x NVIDIA L4 GPUs
275
- - **Optimizer**: AdamW, lr=1.41e-3, weight decay=1e-4, cosine scheduler
276
- - **Epochs**: 50
277
- - **Batch size**: 4096
278
- - **Dropout**: 0.20 -> 0.25 (ep27) -> 0.30 (ep29) — mid-run regularization increases
279
- - **Text mixing**: λ_tt=0.5 (ep1-9) -> 0.25 (ep10-50) — Nomic supervised text pairs
280
- - **Projection heads only** — source encoders are frozen during training
281
-
282
- ### Improvements over TE-75M
283
-
284
- | Change | TE-75M | TE-86M |
285
- |---|---|---|
286
- | Projection depth | 1 (single residual block) | 2 (two residual blocks) |
287
- | Head params | 26.1M | 37.2M |
288
- | Total params | 75.2M | 86.1M |
289
- | SALT I->T R@1 | 0.615 | 0.618 (+0.5%) |
290
- | SALT T->I R@1 | 0.614 | 0.630 (+2.6%) |
291
- | MSCOCO I->T R@1 | 0.320 | 0.343 (+7.2%) |
292
- | Clotho A->T R@1 | 0.208 | 0.219 (+5.3%) |
293
- | ESC-50 | 93.2% | 93.9% (+0.7%) |
294
-
295
- ### Design decisions
296
-
297
- - **Depth-2 residual heads**: Ablation confirmed depth-1 hits I->T ceiling at ~0.60 regardless of dropout or λ_tt. Depth-2 provides capacity to serve cross-modal and text retrieval simultaneously.
298
- - **3-head shared space**: All modalities project into a learned 1280-dim space (image-native dimension)
299
- - **LEAF-IR text encoder**: 23M-param retrieval-optimized text encoder enables fully edge-deployable text inference
300
- - **Frozen source encoders**: MobileNetV4, EfficientAT, and LEAF-IR are kept frozen; only projection heads are trained
301
- - **Edge-first**: All source encoders can run on devices like Raspberry Pi 5
302
-
303
- ## Limitations
304
-
305
- - Audio retrieval lags behind specialist models like CLAP on audio-only benchmarks
306
- - Image-text retrieval trades accuracy vs larger vision encoders for edge deployability
307
- - Text retrieval recovers 62-92% of raw LEAF-IR quality (gap is domain-dependent)
308
 
309
- ## Links
310
 
311
- - **Website**: [augmem.ai](https://augmem.ai)
312
- - **GitHub**: [github.com/augmem](https://github.com/augmem)
 
313
 
314
  ## License
315
 
 
18
  - custom
19
  ---
20
 
21
+ # AIT-86M — Audio, Image, Text Embeddings (Depth-2)
22
 
23
+ **AIT-86M** maps image, audio, and text into a shared 1280-dim embedding space for cross-modal retrieval with a single vector index. All three modalities share one space with full Matryoshka truncation support down to 128 dims.
24
 
25
+ Built for edge deployment, with a single combined safetensors artifact.
26
 
27
+ Successor to [TE-75M](https://huggingface.co/augmem/TE-75M).
28
 
29
+ > Also available in [GGUF format](https://huggingface.co/augmem/AIT-86M-GGUF) for quantized edge deployment.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
  ## File layout
32
 
33
+ ```text
34
+ AIT-86M.safetensors
35
  ```
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
+ ## Notes
38
 
39
+ - shared trimodal embedding space
40
+ - Matryoshka truncation: `1280 / 768 / 512 / 256 / 128`
41
+ - intended for retrieval and embedding use, not generation
42
 
43
  ## License
44