Der am stärksten eingeschränkte Computer, den die meisten Menschen je benutzen werden, ist der, auf dem Sie das hier lesen. Nicht das Telefon. Der Tab.
Ein Browser-Tab hat kein Installationsprogramm, keine Grafikkarte, auf die er sich verlassen könnte, ein paar hundert Megabyte Arbeitsspeicher, bevor es unangenehm wird, und einen Nutzer, dessen Geduld mit einem Fortschrittsbalken in Sekunden gemessen wird. Es ist der schlechteste Ort der modernen Informatik für ein neuronales Netz. Wir haben unseres genau dort untergebracht, mit Absicht.
Warum das Modell im Tab laufen muss
Anonymisierung als Dienst ist ein Widerspruch in sich. Um sie zu nutzen, laden Sie das vertrauliche Dokument zu dem Unternehmen hoch, das verspricht, es zu schützen. Sie haben Ihr Risiko nicht verringert. Sie haben es verschoben und einen Auftragsverarbeiter hinzugefügt.
Unsere Erkennung läuft deshalb in Ihrem Browser: das Lesen der PDF, die Texterkennung auf gescannten Seiten und das Modell, das erkennt, dass Margarida Rodrigues eine Person und 1249-300 Lisboa eine Adresse ist — in sieben Sprachen, ohne dass man ihm sagt, welche. Also muss das Modell in einen Tab passen. Die erste Fassung tat das nicht.
Die Alphabet-Steuer
Unser Detektor beginnt als mehrsprachiges BERT, feinabgestimmt auf Namen, Organisationen und Orte. Gutes Modell. Es schleppt allerdings ein Vokabular von 119.547 Tokens für 104 Sprachen mit sich herum.
Wir bieten sieben an: Englisch, Französisch, Deutsch, Spanisch, Italienisch, Niederländisch, Portugiesisch. Alle in lateinischer Schrift.
Bei 768 Dimensionen sind das rund 92 MB einer 178,5-MB-Datei — mehr als die Hälfte des Modells und etwa 97 % von allem, was ein Erstbesucher herunterlädt. Darin: Devanagari, Kyrillisch, Hangul, Thai, Armenisch, Hebräisch, Arabisch, Kana, dreizehntausend chinesische Schriftzeichen. Von jedem Nutzer heruntergeladen. Von keinem benutzt.
Nennen wir es die Alphabet-Steuer. Jeder Besucher zahlt dafür, 104 Sprachen mitzuschleppen, um eine zu lesen. Und jetzt der Teil, auf den wir weniger stolz sind: Wir hatten das Werkzeug dagegen längst geschrieben und nachgewiesen, dass es nichts verschlechtert — und es dann als optionalen Befehl liegen lassen, den niemand ausführte. Ein Build-Schritt, der freiwillig ist, ist ein Build-Schritt, der nirgends stattfindet.
Zeilen löschen, nicht Fotos komprimieren
Die übliche Antwort heißt Distillation: ein kleines Schülermodell darauf trainieren, ein großes Lehrermodell nachzuahmen. Das funktioniert, und es tauscht Genauigkeit gegen Größe — kein Handel, den man stillschweigend eingeht, wenn die einzige Aufgabe des Werkzeugs darin besteht, nichts zu übersehen. Also haben wir es gelassen.
Was wir stattdessen getan haben, ähnelt eher dem Löschen ungenutzter Zeilen in einer Tabelle. Kein einziges Encoder-Gewicht wird angefasst: Die zwölf Schichten, die das eigentliche Verstehen leisten, werden unverändert kopiert. Die Vokabeltabelle ist pro Tensor quantisiert, eine erhaltene Zeile behält also ihren exakten Wert, ganz gleich ob ihre Nachbarn noch da sind. Und der Tokenizer nimmt immer das längste verfügbare Stück: Entfernt man nur Stücke, die in lateinischer Schrift ohnehin unerreichbar waren, wird lateinischer Text exakt gleich zerlegt.
Ergebnis: von 119.547 Tokens auf 68.875. Von 178,5 MB auf 139,6 MB, rund 100 MB über die Leitung. Und die Behauptung lautet nicht „nahezu identisch". Wir haben beide Modelle über 77 echte Dokumente in allen sieben Sprachen laufen lassen: null Unterschiede bei der Zerlegung des Textes, null Unterschiede über 2.219 erkannte Entitäten hinweg und eine maximale Abweichung der Modellausgabe von 0,0000000000. Kein kleineres Modell, das ungefähr genauso gut ist. Dasselbe Modell, ohne den Ballast.
Dorthin zu kommen kostete uns eine schlechte Woche. Token-Kennungen stehen an drei Stellen in der Tokenizer-Datei; wir haben zwei davon aktualisiert. Alle Tests liefen durch, der Text wurde identisch zerlegt, und das Modell lieferte klammheimlich auf sechzig Dokumenten andere Antworten. Die Regel, die wir behalten haben: die rohe Modellausgabe vergleichen, niemals die Entitätsliste. Zwei Entitätslisten können sich zufällig einig sein.
Zweimal wollten wir mehr
Das Vokabular macht immer noch ein Drittel des Rests aus, vieles davon lateinische Schrift für Sprachen, die wir nicht anbieten. Weitere 30 bis 40 Megabyte schienen zu holen. Das ist kein Kompromiss. Das ist eine Abbruchkante.
58.000 der 68.875 lateinischen Tokens zu behalten — 84 % davon — sparte 8 MB und kostete 13 % aller Treffer. Dann der Test, der die Debatte beendete: eine Liste aus ausschließlich jenen Tokens, die unsere Testdokumente tatsächlich verwenden — 22.800 behalten, 46.000 weggeworfen — ergab eine bitgenau identische Zerlegung und 100 % Übereinstimmung. Ein kleines Vokabular kostet also überhaupt nichts. Das fehlende Token kostet alles. Es gibt keine Kurve, auf der man justieren könnte, und die Neuzerlegung trifft seltene Wörter am härtesten — und genau das sind Eigennamen.
Eine Zahl gab den Ausschlag. Die lateinischen Zeichen der Sprachen, in die wir nicht verkaufen — türkisch ğ ı, vietnamesisch ư ạ ế, rumänisch ă ț, tschechisch ř ů, ungarisch ő, nordisch ø — ergeben 4.200 Stücke. 3,2 MB. Das ist das Alphabet jedes ausländischen Namens in einem europäischen Vertrag: personenbezogene Daten in Reinform, in genau den Dokumenten, die sie am ehesten enthalten, für drei Megabyte. Wenn unsere Erkennung bei Ihrem Namen schwächelt, weil Ihr Name türkisch ist, haben wir das falsche Produkt gebaut.
Zweiter Versuch: DistilBERT — sechs Schichten statt zwölf, rund 70 MB über die Leitung gegen unsere 100. Dann haben wir es an 137 handgeprüften Entitäten gemessen. Die Erkennung fiel von 77,2 % auf 73,5 % — klein genug, um es sich schönzureden. Aber der Durchschnitt verdeckt die Form: Deutsch verlor 13 Punkte, Englisch 9, Spanisch 22. Und die beiden Modelle waren sich nur bei 76 % ihrer Funde einig. Es erkannte nicht weniger Entitäten. Es erkannte eine andere Menge etwa gleicher Größe. „Weniger" bekommt man in den Griff. „Anders" nicht.
Minuscule
Das Modell, das wir ausliefern, heißt Minuscule. Die karolingische Minuskel war die im 8. Jahrhundert in Karls des Großen Reich vereinheitlichte Schrift — eine klare lateinische Schrift, bewusst schmal gehalten, weshalb ein Schreiber in Aachen eine in Tours kopierte Handschrift lesen konnte. Viele Sprachen, ein Alphabet, nichts darüber hinaus. Und außerdem: sehr klein.
68.875 Tokens. 139,6 MB auf der Platte, rund 100 MB einmal übertragen und danach dauerhaft im Cache. Kein einziges Encoder-Gewicht verändert gegenüber dem Modell, von dem es abstammt. Es führt seinen eigenen Bauzettel mit sich — Ursprungsmodell, Einstellungen, Vokabulargrößen, Prüfsumme der eigenen Gewichte — denn ein Modell, das nicht sagen kann, woher es kommt, hat bei dem, was Sie schützen wollen, nichts verloren. Es ist auf Hugging Face veröffentlicht — Gewichte, Tokenizer und Bauzettel — damit Sie die Zahlen oben selbst prüfen können, statt uns glauben zu müssen.
Wofür diese hundert Megabyte gut sind
Gerade jetzt fügt irgendwo eine Rechtsanwaltsfachangestellte den Vertrag einer Mandantin in ein Chatfenster ein. Eine Pflegekraft lädt einen Entlassungsbrief hoch. Eine Sozialarbeiterin zieht die Akte einer Familie auf eine kostenlose Übersetzungsseite. Das sind keine leichtsinnigen Menschen. Sie sind im Verzug. Der freigegebene Weg braucht ein Ticket, eine Sicherheitsprüfung und zwei Wochen, und die Frist ist am Donnerstag.
Die einzige Version von „geschützt", die sich je durchsetzt, ist die, die schon offen ist. Keine Installation, keine Administratorrechte, keine Genehmigung, kein Termin. Also ein Browser-Tab. Also passt das Modell in einen Browser-Tab. Und deshalb haben erwachsene Menschen eine Woche damit zugebracht, über 3,2 Megabyte türkischer Diakritika zu streiten.
Undankbare Arbeit, unsichtbar von Natur aus. Aber am Ende steht ein Mensch mit einem Laptop in einem Büro, das Sie nie sehen werden, der seine Arbeit pünktlich abliefert — und der Name seiner Mandantin hat den Raum nie verlassen. Hundert Megabyte, einmal. Danach gehören sie Ihnen.
Häufige Fragen
Verschlechtert das Entfernen von Vokabular die Genauigkeit eines Modells?
Nicht, wenn das entfernte Vokabular in den unterstützten Sprachen ohnehin unerreichbar ist. Kein Encoder-Gewicht wird verändert und jede erhaltene Zeile wird bitgenau kopiert — für lateinisch geschriebenen Text ist das Ergebnis numerisch identisch mit dem Original; wir haben null Unterschiede über 2.219 Entitäten in 77 Dokumenten gemessen. In Vokabular zu schneiden, das das Modell erreichen kann, ist etwas völlig anderes und verschlechtert die Ergebnisse drastisch.
Warum nicht einfach ein kleineres Modell nehmen?
Haben wir versucht. Ein DistilBERT mit sechs Schichten aus derselben Familie kommt auf rund 70 MB über die Leitung gegen unsere 100, erreichte aber 73,5 % gegenüber 77,2 % auf unserem geprüften Datensatz — und der Durchschnitt verbarg 22 verlorene Punkte im Spanischen und 13 im Deutschen. Mit dem ausgelieferten Modell war es sich nur bei 76 % seiner Funde einig: eine andere Menge an Entitäten, keine kleinere. Unser Vergleich mit Microsoft Presidio erklärt, wie wir das messen.
Kann ein Modell dieser Größe wirklich in einem Browser-Tab laufen?
Ja, mit zwei Einschränkungen. Der Download passiert einmal und liegt danach im Cache Ihres Geräts, und das Modell muss bei jedem Start dennoch zu einer Session kompiliert werden — daher der Ladebalken beim ersten Aufruf. Alles danach läuft lokal: Keine Seite Ihres Dokuments wird hochgeladen. Warum wir unsere eigene Erkennungs-Engine gebaut haben beschreibt den Rest der Kette.
Welche Sprachen deckt es ab, und was passiert mit den übrigen?
Englisch, Französisch, Deutsch, Spanisch, Italienisch, Niederländisch und Portugiesisch, dazu jede weitere lateinisch geschriebene Sprache, deren Zeichen im Vokabular erhalten geblieben sind — türkische, vietnamesische, rumänische, tschechische, ungarische und nordische Zeichen wurden bewusst behalten, weil ausländische Namen in europäischen Verträgen ständig vorkommen. Eine Sprache in einer entfernten Schrift, etwa Japanisch, braucht ein eigenes Modellpaket statt eines gemeinsamen Modells, das mit jeder neuen Sprache wächst.