- Die viel beachtete Leistung des gzip-basierten kNN-Klassifikators aus dem Paper „Low-Resource“ Text Classification von Jiang et al. wurde möglicherweise nicht als übliche kNN-Accuracy berechnet, sondern bei k=2 eher wie eine Top-2-Metrik
calc_accinexperiments.pydes offiziellen Repositorys behandelt einen Fall als korrekt, wenn unter den Kandidaten mit Gleichstand auch nur ein Label dem richtigen Label entspricht; es reicht also, wenn einer der zwei nächsten Trainings-Samples richtig ist- Berechnet man die „Full“-Spalte der ersten vier Datensätze neu, ändern sich mehrere Werte; bei KirundiNews fällt die gzip-Methode von der besten auf die schlechteste Leistung zurück
- Eine separate Reimplementierung ergab, dass die Ausgabe des offiziellen Codes immer
top2entsprach; löst man Gleichstände bei k=2 zugunsten des näheren Samples auf, entspricht das Ergebnis faktisch k=1 - Die Option
rand==Truelöst Gleichstände mitrandom.choice, scheint aber für die Paper-Ergebnisse nicht verwendet worden zu sein; SogouNews wurde wegen der Datengröße noch nicht ausgeführt
Problem bei der Accuracy-Berechnung während der Reproduktion der Paper-Ergebnisse
- Es geht um „Low-Resource“ Text Classification: A Parameter-Free Classification Method with Compressors von Jiang et al.; eine Tabelle, in der die
gzip-basierte Methode besser abschneidet als mehrere neuronale Verfahren, erhielt auf Twitter Aufmerksamkeit - Beim Reproduzieren des offiziellen Quellcodes zeigte sich eine Stelle, an der die Accuracy-Berechnung des kNN-Klassifikators anders funktioniert als üblich
- Insbesondere bei k=2 ähnelt sie weniger einer normalen kNN-Accuracy mit k=2, sondern eher einer Top-2-Accuracy, wodurch die Leistung der Paper-Methode höher angesetzt worden sein könnte
Warum Gleichstände bei k=2 kNN problematisch sind
- Die Paper-Methode nutzt einen kNN-Klassifikator; laut Appendix C wird in allen Experimenten k=2 verwendet
- Eine k=2-Klassifikation findet für jedes Test-Sample die zwei nächsten Trainings-Samples, wodurch die Label-Situation einfach ist
- Wenn beide Labels gleich sind, wird dieses Label vorhergesagt; das Ergebnis entspricht damit k=1
- Wenn die beiden Labels unterschiedlich sind, entsteht ein 1:1-Gleichstand, sodass eine separate Regel zur Auflösung des Gleichstands nötig ist, etwa Vorrang für das nähere Sample
- Wird der Gleichstand zufällig aufgelöst, wird in der Hälfte der 1:1-Fälle das weiter entfernte Sample gewählt; dadurch ist es schwer, besser als k=1 zu werden
Wie calc_acc Gleichstände behandelt
- Die problematische Stelle ist die Methode
calc_accinexperiments.py - Der Code sammelt in
sorted_pred_labdie Labels und Zählwerte der Top-k-Samples, gruppiert sie nach Label und sortiert dann nach Zählwert - Anschließend iteriert er über die Labels, die mit dem höchsten Zählwert gleichauf liegen; sobald eines davon dem Test-Label entspricht, wird
if_right = 1gesetzt und der Fall als korrekt gezählt - Bei k=2 und zwei verschiedenen Labels mit jeweils einer Stimme wird damit lediglich geprüft, ob eines der beiden Kandidaten-Labels korrekt ist
- Das Ergebnis ähnelt der Top-k-Accuracy aus ImageNet, unterscheidet sich aber darin, dass hier nicht k ausgewählte Labels, sondern k Trainings-Samples die Grundlage bilden
- Die Methode nimmt zwar ein beliebiges k entgegen, berechnet aber nicht für alle k eine Top-k-Metrik; bei k=2 entsteht die besondere Situation, dass alle Kandidaten mit dem maximalen Zählwert 1 gruppiert werden
calc_acchat einrand-Flag, und beirand==Truewird ein Gleichstand mitrandom.choiceaufgelöst; für die Paper-Ergebnisse scheint dies jedoch nicht verwendet worden zu sein
Veränderungen bei der neu berechneten Accuracy
- Für die „Full“-Spalte der ersten vier Datensätze lauten die Paper-Werte und die korrigierten
knn2d-Werte wie folgt
| Kategorie | KinyarwandaNews | KirundiNews | DengueFilipino | SwahiliNews |
|---|---|---|---|---|
| Paper | 0.891 | 0.905 | 0.998 | 0.927 |
Korrigiert knn2d |
0.835 | 0.858 | 0.999 | 0.850 |
- Der fünfte Datensatz, SogouNews, wurde wegen seiner Größe noch nicht ausgeführt
- Dieser Unterschied verändert die Interpretation der Experimente erheblich; bei KirundiNews fällt die
gzip-Methode von der besten auf die schlechteste Leistung zurück
Ergebnisse einer separaten Implementierung
- Die separate Implementierung verwendet zwei Strategien zur Auflösung von Gleichständen
r: zufällige Auswahld: k wird reduziert, bis kein Gleichstand mehr besteht
- Die Ergebnisse der Reimplementierung lauten wie folgt
| Methode | kinnews | kirnews | filipino | swahili | Beschreibung |
|---|---|---|---|---|---|
table5 |
0.891 | 0.905 | 0.998 | 0.927 | Werte aus der Paper-Tabelle |
code |
0.891 | 0.906 | 1.000 | 0.927 | Verwendung des Repositorys npc_gzip |
top2 |
0.891 | 0.906 | 1.000 | 0.927 | Top-2 |
knn1r |
0.835 | 0.858 | 0.999 | 0.850 | kNN, k=1, zufällige Auflösung von Gleichständen |
knn1d |
0.835 | 0.858 | 0.999 | 0.850 | kNN, k=1, k wird bei Gleichstand reduziert |
knn2r |
0.828 | 0.807 | 0.851 | 0.842 | kNN, k=2, zufällige Auflösung von Gleichständen |
knn3r |
0.838 | 0.791 | 0.851 | 0.881 | kNN, k=3, zufällige Auflösung von Gleichständen |
knn2d |
0.835 | 0.858 | 0.999 | 0.850 | kNN, k=2, k wird bei Gleichstand reduziert |
knn3d |
0.843 | 0.794 | 0.904 | 0.883 | kNN, k=3, k wird bei Gleichstand reduziert |
- Die Gegenprüfung zeigt, was der offizielle Code berechnet hat
table5liegt innerhalb von 0.001 oder 0.002 nahe beicode, sodass sich die Paper-Werte reproduzieren lassencodeist immer identisch mittop2, die Ergebnisse des offiziellen Codes stimmen also mit den separat implementierten Top-2-Ergebnissen übereinknn1r == knn1d; bei k=1 treten keine Gleichstände aufknn2d == knn1d; wenn bei k=2 ein Gleichstand zugunsten des ersten Samples aufgelöst wird, entspricht das k=1knn2r < knn2d; bei einem 1:1-Gleichstand mit k=2 wählt die zufällige Auswahl in der Hälfte der Fälle das weiter entfernte Sample
Offene Punkte
- Eine neue Reimplementierung mit weiteren k-Werten liegt unter gzip-knn
- Warum DengueFilipino in einigen Fällen extrem hohe Werte wie 1.0 erreicht, wird in einem Folgebeitrag Part 2 behandelt
- Warum
table5undcodein zwei Fällen leicht voneinander abweichen, bleibt noch zu klären
1 Kommentare
Hacker-News-Kommentare
Für die Autoren ist das zwar enttäuschend, aber ich halte es für eine hervorragende Widerlegung
In Machine Learning passieren solche Fehler sehr leicht, und noch problematischer ist, dass subtile methodische Fehler sich anders als in vielen anderen Ingenieur- oder Wissenschaftsbereichen meist nicht als katastrophales Scheitern zeigen, sondern als subtile Leistungsänderungen
Wenn schlechte Daten in den Trainingssatz geraten oder Informationen über die Zielwerte durchsickern, läuft das System irgendwie trotzdem weiter, nur die Ergebnisse werden leicht verfälscht
Bestehende Kompressionsalgorithmen auf Machine Learning anzuwenden fühlt sich, anders als erhofft, zu sehr nach einem kostenlosen Mittagessen an. Wenn in Kompressionsalgorithmen eine besondere Magie steckte, hätte man Kompressionsalgorithmen als Encoder verwendet, statt Transformer als Kompressoren einzusetzen
Deshalb behaupte ich oft, dass offene Publikation eine bessere Form von Peer Review ist als Konferenzen oder Journals. Peer Review bedeutet, dass Fachkollegen meine Arbeit prüfen; der Kern ist nicht irgendein willkürlicher und verrauschter Maßstab, den Konferenzen oder Journals anlegen
Über weite Teile der Geschichte lief es genau so, und Peer Review im modernen Sinn ist ein ziemlich neues Konzept aus der Mitte der 1970er Jahre. Frühere Journals hatten eher die Aufgabe, Forschung zu verbreiten, so wie es heute arxiv tut
https://mitcommlab.mit.edu/broad/commkit/peer-review-a-histo...
Ein weiterer Grund, Konferenzen und Journals abzuschaffen, ist, dass man so wichtige Arbeiten wie Replikationsarbeiten oder Arbeiten über Fehlschläge aktiv fördern könnte. Man wäre nicht an das Kriterium der „Neuheit“ gebunden, und tatsächlich ist fast alle Forschung inkrementell
„Publizieren“ bedeutet, meine Arbeit an Fachkollegen zu vermitteln, damit sie die Ergebnisse überprüfen oder widerlegen können
Gut an Konferenzen ist allerdings, dass sie Menschen zusammenbringen und Zusammenarbeit fördern. Die Kritik hier richtet sich dagegen, Konferenzen und Journals als Mittel zur Beurteilung der Gültigkeit von Forschung zu verwenden
Wenn das Konferenzsystem nur ein Ort wäre, an dem man Forschung und Community zusammenbringt, wäre daran überhaupt nichts auszusetzen. Auch Journals sind theoretisch gut, weil es dort einen Dialog zwischen Autoren und Reviewern gibt, aber ich denke, das lässt sich ebenso gut mit arxiv + github oder OpenReview erreichen
Die Leistung ist nicht besonders gut, aber es existiert eindeutig und ist auch sehr leicht zu deployen. Ähnliche Texte lassen sich tendenziell besser komprimieren, daher habe ich schon gesehen, dass gzip zur Plagiatserkennung eingesetzt wird
Man kann die Kompressionsrate auch als Gewichtung in einem Feder-Modell zur Visualisierung verwenden, und sie lässt sich ebenso auf Metadaten der Netzwerkkommunikation anwenden
Besonders dann, wenn das Ergebnis die eigene bisherige Sicht bestätigt
Wenn ein Semikolon fehlt, gibt es sofort einen Fehler
Aber selbst wenn man bei der Gradientenberechnung in einer von drei Schichten einen Fehler macht, kann es manchmal trotzdem noch laufen. Nur das Ergebnis wird seltsam
Eine Welt mit halb so vielen wissenschaftlichen Arbeiten und doppelt so viel Sorgfalt würde viel mehr Wert schaffen, aber das gesamte System ist hoffnungslos gamifiziert
Ich bin die Person, die diesen Blogbeitrag geschrieben hat. Bei dem, was ich dort geschrieben habe, bin ich ziemlich sicher, aber falls ich etwas übersehen habe, müssen die Autoren es vielleicht selbst erklären
Ich habe gerade ein Issue auf GitHub erstellt: https://github.com/bazingagin/npc_gzip/issues/3
Das Paper selbst ist nach wie vor solide
Allerdings stimmt es, dass diese Wahl etwas seltsam ist. Wie im Paper und auf Twitter gesagt, ändern sich die Ergebnisse mit unterschiedlichen k-Werten, und berichtet wurde das maximale Ergebnis, das erzielt werden konnte; das bedeutet also einen idealen Fall, in dem die Vorhersage immer richtig ist
Für W2V und SentBERT wurde dieselbe Strategie verwendet. Das bedeutet allerdings nicht top-2 accuracy. Soweit ich weiß, bedeutet top-2 accuracy, dass ein Punkt vergeben wird, wenn eine der beiden vorhergesagten Top-Klassen richtig ist
Wie du aber angemerkt hast, gibt es bei kNN mit k=2 den Fall, dass die zwei nächsten Nachbarn auf dieselbe Klasse zeigen; wenn man hier top-2 accuracy berichten würde, würde man einen Kandidaten einer anderen Klasse verpassen
Wenn ich Zeit habe und eine neue Version auf arxiv hochlade, möchte ich Ergebnisse für andere Strategien und andere k-Werte ergänzen. Die im Blog erwähnte Decrement-Strategie ist wirklich gut, und wenn du möchtest, würde ich sie gern dem Repository hinzufügen
Entschuldige die kurze und späte Antwort. Ich habe das Repository noch nicht prüfen können. Ich bereite gerade morgen ein Paper-Review vor und werde nach Abschluss im Issue antworten und es klären
Mich würde interessieren, ob du auch die andere Ergebnistabelle, Table 3, reproduziert hast
Wenn ich es richtig verstehe, ist top-2 accuracy gleich 1, wenn es nur zwei Klassen gibt; je mehr Klassen der Datensatz jedoch hat, desto kleiner wird im Durchschnitt der Unterschied zur „normalen“ accuracy. Wenn der Datensatz also viele Klassen hat, würden sich die Ergebnisse in Table 3 wohl nicht so stark ändern
Wie dem auch sei: Eine top-2 accuracy von 0.685 auf dem 20-newsgroups-Datensatz ist für einen Ansatz, der nicht einmal Zeichen als Zeichen betrachtet, ziemlich beeindruckend[1]. Von guten Werkzeugen ganz zu schweigen, in die NLP-Forscher über Jahre hinweg investiert haben, etwa Tokens, n-Gramme oder Embeddings
[1] So wie ich gzip verstehe, verarbeitet es nur Bitfolgen, die nicht zwingend mit Wörtern, also Byte-Grenzen, ausgerichtet sind
Als wir bei Shopify mit Suchrelevanz experimentierten, haben wir auch viele Fehler gemacht, daher kann ich mich gut in die Autoren hineinversetzen. Ich habe selbst einige Fehler öffentlich peinlich ausbaden müssen
Gegen Ende meiner Zeit bei Shopify habe ich gelernt, dass gute Wissenschaft gute Softwaretechnik braucht. Denn an zu vielen Stellen im Stack kann leicht etwas schiefgehen
Deshalb habe ich viel Zeit darauf verwendet, strenge, stark getestete und qualitativ hochwertige Experimentier-Software zu bauen, damit man den Zahlen vertrauen und die Experimente gegenseitig reproduzieren kann
Einmalige Evaluierungsmethoden wollte ich vermeiden; wenn wir eine neue Methode entwickelten, fügten wir sie der Evaluierungs-Toolbox hinzu und testeten sie, um zu verstehen, was die Kennzahl eigentlich bedeutet
Das klingt selbstverständlich, aber nach meiner Erfahrung mit solchen Experimenten ist das leider bei Weitem nicht so verbreitet, wie man hoffen würde. Unternehmen wollen Geschwindigkeit, und statistisch gründlich nachzudenken oder interne Tools zu bauen passt meist nicht gut zu den Interessen des Managements
Erstens kann man mehr Softwaretechnik-Expertise einsetzen, und zweitens gibt es weniger Anreize, Behauptungen zu übertreiben. Wenn man sagt, dass etwas funktioniert, wird erwartet, dass es auch in die echte Produktionsumgebung kommt
Ich freue mich, dass dieser Blogpost veröffentlicht wurde
Ich mache selbst sehr viele solcher kleinen Projekte, und selbst Arbeiten wie diese, die Probleme in Papers aufzeigen, sehen oft nie das Licht der Welt. Meist gibt man nur kurz ein Lebenszeichen von sich, und dann endet alles auf der Festplatte
Deshalb danke dafür, dass das hier veröffentlicht wurde
Wenn ich einen Tag in solche Arbeit gesteckt habe, fehlt mir meistens die Kraft, tatsächlich noch einen Blogpost zu schreiben, und das fühlt sich dann verschwenderisch an. Einen kurzen Twitter-Thread schaffe ich aber in der Regel noch
Ich freue mich sehr, dieses Ergebnis zu sehen. kNN + Klassifikationsaufgabe + Klassifikation rein auf Basis von Textähnlichkeit ist eine Kombination, bei der sich leicht günstige Resultate ansammeln
Schadenfrohe Reaktionen auf dieses Paper beruhen auf einem Missverständnis darüber, wie zentral natürlichsprachliche Komponenten für Embeddings sind. Formulierungen, die Wörter teilen, lassen sich gut klassifizieren, und GZIP funktioniert dort ebenfalls gut, daher kann GZIP durchaus als alternativer Klassifikator dienen
Das Erstaunliche an BERT oder Embeddings ist, dass keine gemeinsamen Wörter nötig sind. Zum Beispiel passt „what is my safe passcode?“ stark zu „my lockbox pin is 1234“, aber nicht zu „my jewelry is stored safely in the safe“
Das ist auch bei LLMs wichtig. Viele Leute verwenden Embeddings für Textähnlichkeit, tatsächlich sollte man aber ein SBERT-Modell verwenden, das so trainiert wurde, dass Fragen und Dokumente mit den dazugehörigen Antworten korrelieren
Den ganzen Kaninchenbau gibt es unter https://www.sbert.net/
Früherer Beitrag: Should you use OpenAI's embeddings? Probably not, and here's why. https://iamnotarobot.substack.com/p/should-you-use-openais-e...
HN-Diskussion: https://news.ycombinator.com/item?id=35377935
Unter solchen Bedingungen sind die Trainingseingaben womöglich zu spärlich, als dass ein modell mit vielen Parametern gute Embeddings lernen könnte
In klassischen In-Domain-Klassifikationsszenarien mit großen Datenmengen ist es unwahrscheinlich, dass nichtparametrische Methoden wie Kompression gelernte Repräsentationen schlagen
Warum die Autoren kNN als Klassifikator gewählt haben, war nicht ganz klar. Wenn man eine Distanzmatrix erstellt hat, hätte man per multidimensionaler Skalierung die Matrix in Faktoren umwandeln und dann einen Baumalgorithmus wie xgboost verwenden können; damit hätte sich vermutlich viel mehr Information nutzen lassen und ein deutlich besseres Ergebnis als mit kNN erzielen lassen
Man hätte auch den PAQ-Kompressionsalgorithmus verwenden können, der deutlich besser ist als Kompressoren aus der LZ-Familie. Solche Entscheidungen hätten die Ergebnisse stark verbessern und vielleicht doch zur ursprünglichen Schlussfolgerung führen können
Gut an diesem Paper war, dass es den Kompressionsalgorithmus abstrahiert hat, und dadurch kam ich ins Nachdenken, was man aus der Beziehung p(x) ~ K^(-|x|) mit Kompression sonst noch machen könnte. Dabei ist K die Alphabetgröße, |x| die Länge der Zeichenkette x, unter Annahme optimaler Kodierung
Zum Beispiel kam mir der Gedanke, dass auch eine klassische Klassifikation möglich wäre, indem man die Faktoren jeder Antwort zu separaten Dokumenten bündelt und dann wie im Paper das Dokument sucht, das das nächste Sample am besten komprimiert, um daraus die Klasse zu bestimmen. Eine Art überwachte Klassifikation mit einem Kompressionsalgorithmus
Je näher der Kompressor an der optimalen Kodierung für den betreffenden Datensatz ist, desto besser sollte das funktionieren
Auch ein Ansatz zur Sequenzvorhersage ließe sich ähnlich einfach implementieren
Das war eine angenehme Überraschung
Kann jemand erklären, wie ein Kompressionsalgorithmus ein LLM schlagen kann? Das klingt, als würde man Sprache mit Graffiti vergleichen
Die Antwort scheint irgendwo da draußen zu sein, aber ich bin mit KI nicht vertraut und verstehe es einfach nicht
Die Aufgabe des Modells ist es, vorherzusagen, was als Nächstes kommt, und die Aufgabe des Entropiekodierers ist es, die Differenz zwischen Vorhersage und tatsächlichem nächsten Wert so zu kodieren, dass wahrscheinliche Ergebnisse möglichst wenige Bits benötigen
Je genauer das Modell ist, desto kleiner ist die Abweichung zwischen Realität und Vorhersage, und desto weniger Bits braucht der Entropiekodierer, wodurch die Kompression besser wird
Ein einfacher Kompressionsalgorithmus hat ein simples Modell wie: „Wenn ich dasselbe Byte 10-mal gesehen habe, ist es wahrscheinlich, dass auch das 11. gleich ist.“ Aber auch ein LLM kann als Modell dienen. Denn genau das tut ein LLM: Text mit dem wahrscheinlichsten nächsten Wort fortsetzen
Hier wurde es umgekehrt gemacht. Statt ein Modell zur Kompression zu verwenden, wurde der Kompressionsalgorithmus mit ein paar Kniffen wie ein Modell verwendet. Wenn der Kompressionsalgorithmus ein Ergebnis mit weniger Bits kodiert, wird es als das wahrscheinlichste Ergebnis betrachtet
Die Autoren des Originalpapers zeigten, dass ein einfaches Modell, das sich aus gzip herausziehen lässt, bei einigen Aufgaben deutlich komplexere LLMs schlägt
Bei der Kompression sollten wahrscheinlicheren Wortfolgen kürzere Codes zugewiesen werden, daher gibt es einen direkten Zusammenhang. Eine bekannte Methode, solche Codes aus Wahrscheinlichkeiten zu erzeugen, ist die Huffman-Kodierung
Das gilt sowohl für statistische Sprachmodelle, die Wortfrequenzen verwenden, als auch dann, wenn ein LLM zur Wahrscheinlichkeitsschätzung genutzt wird. Je besser das Sprachmodell ist, also je niedriger die Perplexity, desto kürzer fällt das Kompressionsergebnis aus
Umgekehrt kann man auch sagen, dass ein Kompressionsalgorithmus über die Codelängen implizit ein Sprachmodell definiert. Er nimmt zum Beispiel an, dass wiederholte Zeichenfolgen wahrscheinlicher sind als zufälliges Rauschen
Wenn man
ABCkomprimiert, erhält man X Bytes. Wenn man danachABCABCkomprimiert, werden daraus nicht 2X Bytes. Je ähnlicher die aneinandergehängten beiden Zeichenfolgen sind, desto weniger Bytes werden benötigtABCABDwird größer sein alsABCABC, aber kleiner alsABCXYZBERT ist nach heutigen Maßstäben außerdem ein sehr kleines LLM, und wir wissen, dass es schwächer ist als die Modelle mit Milliarden Parametern, denen wir heute ständig begegnen
https://mattmahoney.net/dc/rationale.html
Auch ein Ansatz wie das Erkennen bestimmter Wörter kann je nach Fall ziemlich gut funktionieren. In gut komprimierbaren Daten tauchen gemeinsame Teilzeichenfolgen häufig auf
Falls das stimmt, würde ich gern sehen, wie die Leute, die zu diesem Paper große Töne gespuckt haben, jetzt still und leise ihre Spuren verwischen
Ich schaue dabei besonders auf LinkedIn- und Twitter-Influencer
Wenn es nicht stimmt, sehe ich wohl dumm aus, aber ich habe den Artikel nur grob überflogen
Gzip als Klassifikator ist überraschend gut und sollte als Baseline für neuronale Netze verwendet werden
Nebenbei scheint der Blog seit 2022 stehen geblieben zu sein
Das Datum des Beitrags ist auf den 17. Juli 2022 gesetzt