zeppelin-embed clean71-v1 + Arctic m-v2

An asymmetric two-tower text embedding pair for zeppelin-embed, an embedded vector and hybrid search engine. Documents are embedded with the unchanged Snowflake Arctic-embed-m-v2.0 model. Queries are embedded with clean71-v1, a small query tower distilled into the same 768-dimension space. The small query tower keeps query latency low on the Apple Neural Engine.

These files are a packaged runtime bundle for zeppelin-embed. They are not a transformers or sentence-transformers checkpoint.

Platform: macOS on Apple Silicon only (CoreML on the Neural Engine for queries, MLX on the GPU for documents).

Towers

Role Model Parameters Input Precision in this release
Query clean71-v1 71,201,280 prefix query: , max 96 tokens CoreML INT8 weights (primary); MLX FP16 (fallback)
Document Snowflake/snowflake-arctic-embed-m-v2.0 @ 95c2741480856aa9666782eb4afe11959938017f 305,368,320 no prefix, max 8192 tokens MLX FP16
  • Output: 768 dimensions, L2-normalized. Score = dot product (= cosine).
  • Each tower has its own tokenizer. Token limits include special tokens and the query prefix. zeppelin-embed adds the prefix and chunks documents.
  • Query tower: 6 layers, width 512, FFN 1536, 98,304-token vocabulary, CLS pooling, learned 512 to 768 projection. It was initialized from the published Arctic weights.
  • CoreML INT8: weight-only, per-channel, symmetric; activations and output FP16; all compute ops on the Neural Engine (230 ANE ops, 12 CPU ops).

Files

File Bytes Content
zeppelin-embed-clean71-v1-arctic-m-v2.zem 761,146,896 FP16 document tower, FP16 MLX query fallback, both tokenizers
zeppelin-embed-clean71-v1-arctic-m-v2.mlmodelc/ 71,618,688 compiled CoreML INT8 query tower (96 tokens)
zeppelin-model.json 1,377 format-1 manifest: size and SHA-256 of each file
SHA256SUMS shasum -a 256 -c SHA256SUMS

zeppelin-embed downloads only the files in zeppelin-model.json, checks the size and SHA-256 of each file, and caches the verified set. Pin the commit and the manifest hash:

  • repo: aghatage/zeppelin-embed-clean71-arctic-m-v2
  • revision: d64b817c4021a3f1b9bded3152d9afdf9ac813e7
  • manifest SHA-256: 123c6308e00f769c68498f9df60dfb9efc688f58c4ff2c4da266f978fcb215dc

Languages and measured quality

Target languages: en, es, fr, de, pt, it, ru, zh, ja, ko, hi, ar, id, vi.

The primary score is the equal mean of English BEIR (4 tasks), MIRACL (10 target languages) and Belebele (14 target languages), nDCG@10 with MTEB 2.20.5. Document vectors are the unchanged Arctic vectors. "Original S2B" is the earlier, larger query tower that clean71-v1 replaces.

Group clean71-v1 Original S2B
English4 (SciFact, NFCorpus, FiQA, TREC-COVID) 0.558788 0.558020
MIRACL10 0.573916 0.574632
Belebele14 0.865348 0.882941
Primary macro 0.666017 0.671864
All 37 units, with out-of-scope languages 0.610932 0.719872

The primary score is 0.87% lower with 69% fewer query parameters.

Do not expect universal multilingual parity. There are real regressions inside the target set, mostly on Belebele (nDCG@10, clean71-v1 vs S2B): Russian 0.852 vs 0.890, Vietnamese 0.797 vs 0.833, Chinese 0.875 vs 0.901, Hindi 0.787 vs 0.812. Outside the target set the regressions are large:

Outside the target set clean71-v1 Original S2B
Persian, MIRACL 0.140 0.536
Persian, Belebele 0.296 0.852
Thai, Belebele 0.083 0.850
Telugu, Belebele 0.066 0.783
Bengali, Belebele 0.075 0.777
Finnish, Belebele 0.463 0.762
Dutch, Belebele 0.643 0.877

Use a different query model for languages outside the target set.

Precision of this release

Measured in zeppelin-embed on BEIR test sets (Apple M3 Max), nDCG@10, against an FP32 document tower with an FP16 CoreML query tower:

Corpus Leg FP32 reference This release Change
FiQA (648 q) dense 0.421072 0.420397 -0.160%
FiQA hybrid 0.284278 0.284463 +0.065%
SciFact (300 q) dense 0.697647 0.696895 -0.108%
SciFact hybrid 0.720797 0.720797 0.000%
NFCorpus (323 q) dense 0.339128 0.340106 +0.288%
NFCorpus hybrid 0.339312 0.339146 -0.049%

The worst loss on any corpus, leg or tier is 0.16%. The upload is 49.7% smaller than the FP32 release (832,765,584 vs 1,656,816,265 bytes). Dense query p50 latency with the CoreML tower was about 1-2 ms at batch 1, tokenization included, on a loaded host. The MLX FP16 fallback was about 6-7 ms. Quality of the MLX fallback is within 0.2% of FP32.

Usage

Install zeppelin-embed with text support, then open a store by model. The first open downloads and verifies the files; later opens use the cache.

Rust (zeppelin-embed-text):

use zeppelin_embed_text::{Legs, ModelOpenOptions, ModelRef, QueryOptions, TextDocument, TextStore};

let model = ModelRef {
    repo: "aghatage/zeppelin-embed-clean71-arctic-m-v2".into(),
    revision: "d64b817c4021a3f1b9bded3152d9afdf9ac813e7".into(),
    manifest_sha256: "123c6308e00f769c68498f9df60dfb9efc688f58c4ff2c4da266f978fcb215dc".into(),
};
let store = TextStore::open_model("store", &model, ModelOpenOptions::default())?;
store.ingest_text(&[TextDocument { id: 1, revision: 1, text: "Restore the backup, then replay the log.".into() }],
                  Default::default())?;
let hits = store.query_text("how do I restore a backup", QueryOptions::new(10).with_legs(Legs::Hybrid))?;

C: fill ZeTextOpenModelRequest (repo, revision, manifest_sha256) and call ze_text_open_model(&request, &handle), then ze_text_ingest and ze_text_query.

Python:

import zeppelin_embed as ze

store = ze.open_model("store", repo="aghatage/zeppelin-embed-clean71-arctic-m-v2",
                      revision="d64b817c4021a3f1b9bded3152d9afdf9ac813e7",
                      manifest_sha256="123c6308e00f769c68498f9df60dfb9efc688f58c4ff2c4da266f978fcb215dc")
store.ingest_text([1], ["Restore the backup, then replay the log."])
print(store.query_text("how do I restore a backup", k=10, legs="hybrid"))

Node:

const store = await TextStore.openModel({path: 'store',
  repo: 'aghatage/zeppelin-embed-clean71-arctic-m-v2',
  revision: 'd64b817c4021a3f1b9bded3152d9afdf9ac813e7',
  manifestSha256: '123c6308e00f769c68498f9df60dfb9efc688f58c4ff2c4da266f978fcb215dc'});
store.ingest([{id: 1n, text: 'Restore the backup, then replay the log.'}]);
console.log(store.query({text: 'how do I restore a backup', legs: 'hybrid'}));

Swift:

let model = TextModel(repo: "aghatage/zeppelin-embed-clean71-arctic-m-v2",
                      revision: "d64b817c4021a3f1b9bded3152d9afdf9ac813e7",
                      manifestSHA256: "123c6308e00f769c68498f9df60dfb9efc688f58c4ff2c4da266f978fcb215dc")
let store = try await TextStore.open(at: storeURL, model: model)

Later zeppelin-embed releases ship this model as the built-in default model reference.

License and attribution

Apache-2.0.

The document tower is Snowflake/snowflake-arctic-embed-m-v2.0, Copyright Snowflake Inc., released under Apache-2.0. Its weights are unchanged except for FP16 conversion. The included GTE model code keeps its own copyright and Apache-2.0 headers.

Provenance

  • Query tower clean71-v1: best held-out checkpoint at step 50,000 of an embedding-distillation run against the Arctic document space. It was initialized from the published Arctic weights.
  • No MS MARCO or mMARCO training data was used, and no KorQuAD data was used (it is explicitly excluded from the selected training caches). MKQA was used only for inspection, not training. "clean" is a run name, not a legal certification.
  • Training sources in the selected caches, with their own licenses:
    • Wikipedia-derived queries and passages, MIRACL and Mr. TyDi official training sources (Wikipedia text: CC-BY-SA).
    • Mintaka TRAIN: CC-BY-4.0.
    • DPR Natural Questions TRAIN: CC-BY-SA-3.0.
    • SQuAD TRAIN: CC-BY-SA-4.0.
    • KLUE MRC TRAIN: CC-BY-SA-4.0.
    • CMRC2018 TRAIN: CC-BY-SA-4.0.
    • Stack Exchange titles: CC-BY-SA-4.0.
    • Qwen3-4B translations of NQ TRAIN questions (the translation model's Apache-2.0 license does not relicense the source questions).
  • No training data, optimizer state or other experiment weights are in this repository. Benchmark datasets are not included.
  • Conversion: tools/ze-model release --document-precision fp16 --query-coreml-precision int8 in zeppelin-embed (torch 2.7.0, coremltools 9.0).
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for aghatage/zeppelin-embed-clean71-arctic-m-v2

Finetuned
(36)
this model