Team Ai
Modelpublic

StenmannsAr/lura-docs-models

sourceHugging Facemitupdated 3mo agoView on Hugging Face
1likes
Model Card

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:

DateiGrößeZweck
E5Small.mlpackage59,2 MBCore ML ML Program, 4-Bit palettisiert
e5-vocab.tsv5,3 MBUnigram-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 mit query: 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 mit EnumeratedShapes.
  • —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 .all ist für dieses Modell 7× langsamer, weil die GPU schlecht passt. .cpuAndNeuralEngine verwenden.

Gemessene Qualität

Retrieval über einen Korpus deutscher/englischer Alltagsdokumente (20 Dokumente, 25 Fragen: wörtlich, flektiert, Synonym, Umschreibung, sprachübergreifend):

VarianteTop-1MRR
BM25 (FTS5, Referenz)14/25 (56 %)0,653
e5-small, PyTorch19/25 (76 %)0,858
e5-small, Core ML fp1619/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 Units32 Tok100 Tok250 Tok500 Tok
CPU_ONLY3,0 ms5,0 ms10,2 ms26,0 ms
CPUANDNE2,9 ms4,9 ms10,0 ms26,4 ms
ALL (mit GPU)15,5 ms31,7 ms73,5 ms185,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.