multilingual-e5-small — Core ML (4-Bit palettisiert)
multilingual-e5-small von intfloat, konvertiert nach Core ML für die On-Device-Nutzung in Lura Docs — einem Dokumentenscanner, der OCR, Suche und KI vollständig auf dem Gerät ausführt. Kein Backend, keine Cloud-Aufrufe.
Die Gewichte stammen von intfloat/Microsoft und stehen unter MIT. Dieses Repository enthält lediglich eine konvertierte, quantisierte Fassung. Details zu Herkunft und Änderungen: siehe NOTICE.
Inhalt
e5-small-pal4.aar (59,8 MB, Apple Archive)
enthält beides — Modell und Tokenizer gehören zusammen:
| Datei | Größe | Zweck |
|---|---|---|
E5Small.mlpackage |
59,2 MB | Core ML ML Program, 4-Bit palettisiert |
e5-vocab.tsv |
5,3 MB | Unigram-Vokabular (Token + Score je Zeile), 250.002 Einträge |
Bewusst in einem Archiv: Ein Vokabular, das nicht zum Modell passt, liefert keine Fehlermeldung, sondern still falsche Vektoren.
Schnittstelle
Eingang: input_ids Int32 [1, S], S ∈ {64, 128, 256, 512}
Ausgang: embedding Float32 [1, 384] (L2-normalisiert)
Wichtig für die Verwendung:
- Präfixe sind Pflicht. e5 ist asymmetrisch trainiert: Dokumente mit
passage:, Suchanfragen mitquery:einleiten. Ohne Präfix sinkt die Trefferqualität, ohne dass etwas offensichtlich kaputtgeht. - Nur
input_ids. Die Attention-Maske leitet das Modell selbst aus dem Padding-Token (1) ab. Grund: Core ML erlaubt unterhalb iOS 18 nur einen Eingang mitEnumeratedShapes. - Auffüllen auf eine der vier Längen. Andere Längen weist Core ML zurück.
- Mean-Pooling und L2-Norm sind im Graphen. Der Ausgang ist der fertige Satzvektor — nicht selbst nachrechnen.
- Compute Units explizit setzen. Der Standardwert
.allist für dieses Modell 7× langsamer, weil die GPU schlecht passt..cpuAndNeuralEngineverwenden.
Gemessene Qualität
Retrieval über einen Korpus deutscher/englischer Alltagsdokumente (20 Dokumente, 25 Fragen: wörtlich, flektiert, Synonym, Umschreibung, sprachübergreifend):
| Variante | Top-1 | MRR |
|---|---|---|
| BM25 (FTS5, Referenz) | 14/25 (56 %) | 0,653 |
| e5-small, PyTorch | 19/25 (76 %) | 0,858 |
| e5-small, Core ML fp16 | 19/25 (76 %) | 0,858 |
| e5-small, Core ML 4-Bit (dieses Modell) | 19/25 (76 %) | 0,854 |
Die Quantisierung kostet nichts Messbares. Dass gerade 4-Bit-Palettisierung so gut trägt, passt zur Struktur: 96 M der 117,7 M Parameter (82 %) stecken in der Embedding-Tabelle.
Bekannte Schwäche: sprachübergreifend nur 1/5 — eine deutsche Frage findet ein englisches Dokument selten. Multilinguale Embeddings gruppieren nach Sprache. Das Modell ist hier nicht besser als BM25, aber auch nicht schlechter.
Latenz (iPhone, iOS 26.5.2)
| Compute Units | 32 Tok | 100 Tok | 250 Tok | 500 Tok |
|---|---|---|---|---|
| CPU_ONLY | 3,0 ms | 5,0 ms | 10,2 ms | 26,0 ms |
| CPU_AND_NE | 2,9 ms | 4,9 ms | 10,0 ms | 26,4 ms |
| ALL (mit GPU) | 15,5 ms | 31,7 ms | 73,5 ms | 185,9 ms |
Die Neural Engine bringt derzeit nichts (1,02×) — die CPU reicht. Ein Bestand von 500 Dokumenten ist in ~16 s indexiert.
Reproduzieren
Die Konvertierung ist skriptiert und nachvollziehbar:
Tools/retrieval-spike/ im
LuraDocCore-Repository (convert_ne.py + pack.sh).
Lizenz
MIT — wie das ursprüngliche Modell. Siehe LICENSE und NOTICE.
Model tree for StenmannsAr/lura-docs-models
Base model
intfloat/multilingual-e5-small