Das Voynich-Manuskript mit SBERT modellieren, um seine Struktur zu untersuchen
(github.com/brianmg)- Dieses Repository wendet Clustering, Wortart-Inferenz, Markov-Übergänge und abschnittsbezogene Muster ohne Übersetzungs-Spekulationen an, um zu prüfen, ob das Voynich-Manuskript strukturelle Muster besitzt, die sich wie eine echte Sprache verhalten
- Die Analyse-Pipeline entfernt zunächst scheinbar wiederkehrende Suffixe wie
aiin,dy,chyund ähnliche, bettet dann Wortstämme mit multilingualem SBERT ein, bildet Cluster und ordnet jede Zeile des Manuskripts einer Sequenz von Clustern zu - Die Ergebnisse zeigen strukturelle Unterschiede, etwa dass Cluster 8 mit hoher Frequenz, geringer Diversität und häufigen Positionen am Zeilenanfang wie eine Gruppe von Funktionswörtern wirkt, während Cluster 3 mit hoher Diversität und flexibler Positionierung wie eine Klasse inhaltswortartiger Wortstämme erscheint
- Das Entfernen von Suffixen bündelte ähnliche Wortstämme enger und machte die Übergangsmatrizen sauberer, ist aber eine starke Vorverarbeitungsentscheidung, die reale morphologische Informationen entfernen, bedeutungsvolle Flexionsvarianten verdecken oder einen funktionszentrierten Bias erzeugen kann
- Dieses Projekt versucht keine semantische Übersetzung, sondern konzentriert sich darauf, datenbasiert zu prüfen, ob das Voynich-Manuskript sprachähnliche Strukturen wie Syntax, die Trennung von Funktions- und Inhaltswörtern sowie abschnittsabhängige Sprachvariation zeigt
Ziel des Projekts
- Das Voynich-Manuskript ist bis heute nicht entziffert, und es gibt keine konsensfähige linguistische oder kryptografische Lösung
- Dieses Projekt versteht sich als Mittelweg zwischen statistischen Entropietests und unbegründeten Deutungen und nutzt computergestützte linguistische Methoden, um zu bewerten, ob das Manuskript strukturiertes sprachähnliches Verhalten kodiert
- Es unternimmt keine Übersetzung und kein GPT-artiges Raten, sondern konzentriert sich ausschließlich auf Struktur, die sich wie Sprache verhält
Analyse-Pipeline und Dateistruktur
/data/enthält die vollständige Transkription, Dateien mit Stammwörtern, Listen entfernter Stämme, Cluster-Nachschlagetabellen und Cluster-Sequenzen pro Zeile/scripts/führt die Analyseschritte getrennt auscluster_roots.py: SBERT-Clustering und Suffix-Entfernungmap_lines_to_clusters.py: ordnet Manuskriptzeilen Cluster-IDs zupos_model.py: leitet grammatische Rollen aus dem Verhalten der Cluster abtransition_matrix.py: erstellt und visualisiert Cluster-Übergängelexicon_builder.py: erzeugt Kandidaten-Lexika nach Abschnitt und Rollecluster_language_similarity.py: vergleicht Cluster optional mit realen Sprachen
/results/speichert PCA-reduzierte Cluster-Grafiken, Heatmaps von Markov-Übergangsmatrizen, Zusammenfassungen von Cluster-Rollen, CSVs der Übergangsmatrizen und CSVs mit Kandidaten-Lexika
Zentrale Beiträge
- Clustering von suffixbereinigten Wortstämmen mit multilingualem SBERT
- Unterscheidung zwischen Clustern, die wie Funktionswörter wirken, und solchen, die wie Inhaltswörter wirken
- Markov-basierte Übergangsmodellierung auf Cluster-Sequenzen
- Abbildung syntaktischer Struktur nach Manuskriptabschnitten wie Botanical und Biological
- Erstellung datenbasierter Lexikon-Hypothesentabellen nach Abschnitt und Rolle
Vorverarbeitungsentscheidungen und ihre Auswirkungen
- Scheinbar wiederkehrende Suffixe wie
aiin,dy,chyund ähnliche Varianten werden aus jedem Wort entfernt - Ziel dieser Entscheidung war es, Stammformen zu isolieren, die zusammen mit Variationen wiederkehren
- Die Suffixe könnten eines der folgenden Dinge sein
- phonetisches Padding
- grammatische Partikel
- Wiederholung wie in Beschwörungen oder Mnemotechnik
- Rauschen
- Nach dem Entfernen der Suffixe werden ähnliche Stämme enger gebündelt, und in der Übergangsmatrix zeigen sich klarere Strukturmuster
- Diese Vorverarbeitung ist jedoch nicht neutral
- Sie könnte reale morphologische Information entfernt haben
- Sie könnte bedeutungsvolle Flexionsvarianten verdeckt haben
- Sie könnte die Ergebnisse stärker auf Funktion statt Inhalt ausgerichtet haben
- Man kann die Pipeline erneut ausführen, ohne Suffixe zu entfernen, oder indem man Suffixe als eigene Token-Klasse behandelt
Beobachtete Struktur
- Cluster 8 zeigt hohe Frequenz, geringe Diversität und häufige Positionen am Zeilenanfang und könnte eine Gruppe von Funktionswörtern sein
- Cluster 3 zeigt hohe Diversität und flexible Positionierung und könnte eine Klasse von inhaltstragenden Wortstämmen sein
- Die Übergangsmatrix zeigt eine starke interne Struktur, die weit von Zufälligkeit entfernt ist
- Die Cluster-Nutzung und Wortartmuster unterscheiden sich zwischen Manuskriptabschnitten wie Biological und Botanical
Hypothesen und Grenzen
- Es wird die Hypothese aufgestellt, dass das Manuskript eine strukturierte konstruierte Sprache oder eine mnemotechnische Sprache kodiert, die silbisches Padding und positionsgebundene Wiederholung verwendet
- Auch ohne direkte Übersetzung würden sich Syntax, eine Trennung von Funktions- und Inhaltswörtern sowie abschnittssensitive Sprachvariation zeigen
- Es werden auch Grenzen benannt
- Die Zuordnung zwischen Clustern und Wörtern ist indirekt, sodass sich Frequenzschätzungen überlappen können
- Die Suffix-Entfernung ist heuristisch und könnte bedeutungstragende Endungen entfernt haben
- Es wird keine semantische Übersetzung versucht, sondern nur Strukturmodellierung betrieben
Reproduktion und aktuelle Änderungen
- Zur Reproduktion werden nach der Installation der Abhängigkeiten die einzelnen Skripte der Reihe nach ausgeführt
pip install -r requirements.txtpython scripts/cluster_roots.pypython scripts/map_lines_to_clusters.pypython scripts/pos_model.pypython scripts/transition_matrix.pypython scripts/lexicon_builder.py
- Für Visualisierungen wurde zusätzlich zu PCA Unterstützung für UMAP, PaCMAP und LocalMAP hinzugefügt
- Der CLI-Reducer ist ohne Argumente PCA und verarbeitet
--reducer umapsowie--reducer pacmap - Das Projekt funktionierte unter Windows, es gibt aber die Einschränkung, dass es unter MacOS nicht zuverlässig lauffähig gemacht werden konnte
- Das Modell wurde von
all-MiniLM-L6-v2auf das größereparaphrase-multilingual-mpnet-base-v2umgestellt- Im README ist der Größenvergleich als
22M vs 110Mangegeben
- Im README ist der Größenvergleich als
1 Kommentare
Meinungen auf Hacker News
Wenn man in einer PCA-Projektion nach Clustern sucht, sollte man sich mit moderneren Dimensionsreduktionsalgorithmen wie PaCMAP oder LocalMAP die tiefere Struktur ansehen.
Ich arbeite an einem Projekt rund um ein Tool zur Bedeutungserschließung namens Pol.is [1]; als wir Wiki-Umfragedaten statt mit PCA mit solchen neuen Algorithmen neu projiziert haben, waren die neuen Erkenntnisse ziemlich überraschend.
https://patcon.github.io/polislike-opinion-map-painting/
Painted groups: https://t.co/734qNlMdeh
Schade ist, dass es nur auf dem Desktop richtig funktioniert.
[1]: https://www.technologyreview.com/2025/04/15/1115125/a-small-...
Das ist etwas anderes als die alte „Faktorenanalyse“.
Das hier verwendete Text-Embedding-Modell ist paraphrase-multilingual-MiniLM-L12-v2 (https://huggingface.co/sentence-transformers/paraphrase-mult...); es ist etwa vier Jahre alt.
In der Welt der natürlichen Sprachverarbeitung ist das praktisch schon ein antikes Modell, und dank der allgemeinen Fortschritte bei LLMs haben sich selbst kleine Embedding-Modelle stark verbessert, was Informationsrepräsentation und Trennschärfe im Embedding-Raum angeht.
Heutige Text-Embedding-Modelle funktionieren bei solchen Daten ziemlich gut, selbst wenn sie nicht explizit für Mehrsprachigkeit trainiert wurden; für eine relativ unbekannte Sprache wie das Voynich-Manuskript könnten sie daher besser sein.
Traditionelle NLP-Techniken wie das Entfernen von Suffixen oder das Identifizieren von Wortarten können die Embedding-Qualität sogar verschlechtern, weil dadurch relevante Kontextinformationen verloren gehen, die für das Gesamt-Embedding nötig sind.
Ich bin neugierig, wie Modelle wie all-mpnet-base-v2 oder text-embedding-ada-002 abschneiden würden; besonders interessant wäre es, die Suffixe beizubehalten und statt einer Reduktion auf Stammformen vollständige Kontext-Embeddings zu verwenden.
Ich kenne mich mit natürlicher Sprachverarbeitung nicht gut aus, frage mich aber, ob es sinnvoll wäre, in diesem Prozess eine Kontrollgruppe zu haben.
Man könnte zum Beispiel Menschen Texte schreiben lassen, die wie Sprache aussehen, aber keine echte Sprache sind, und dann denselben Prozess wie Suffixentfernung und Clustering anwenden, um zu prüfen, ob ähnliche Ergebnisse auftreten.
Ich habe mir das Manuskript eine Weile angesehen, und auf einigen Seiten kam es mir verdächtig vor, dass der Text sehr dicht an den Illustrationen steht.
In normalen Sprachen haben Wörter und Buchstaben unterschiedliche Breiten; nähert man sich dem Zeilenende, setzt man daher normalerweise einen Zeilenumbruch, beginnt ein neues Wort und vermeidet Überlauf.
In diesem Manuskript schien es solche Umbrüche aber nicht zu geben, und an vielen Stellen wirkte es, als sei alles, was noch ans Zeilenende passte, irgendwie hineingequetscht worden.
Ich wollte analysieren, welche Zeichen unmittelbar vor und nach Zeilenumbrüchen vorkommen und ob sich das vom restlichen Text unterscheidet, konnte aber keine Transkription finden.
Nach völlig laienhaftem Bauchgefühl ist es entweder ein raffiniertes Kunstwerk oder ein Schwindel.
Schon mit PCA ist die Trennung gut zu erkennen, aber UMAP oder t-SNE wären ebenfalls sinnvoll.
Wenn man jeden Cluster gegen alle anderen Cluster als Referenz mappt, könnte das eine gute Methode sein, um zu zeigen, ob in der Analyse keine weitere Variabilität mehr übrig ist.
Aber es stimmt, dass UMAP oder t-SNE aus nichtlinearer Perspektive subtilere Muster oder Fehlfälle sichtbar machen könnten.
Eine Ähnlichkeitsmatrix zwischen Clustern habe ich nicht erstellt, aber so gesehen wäre das ein natürlicher nächster Schritt, um zu prüfen, wie viel echtes Signal erfasst wurde.
Ich würde es gern auf Embeddings anderer Art anwenden, habe aber nicht viel Erfahrung mit natürlicher Sprachverarbeitung.
t-SNE vermeide ich um jeden Preis, weil Abstände in solchen Darstellungen meiner Ansicht nach kaum Bedeutung haben.
Das ist keine Empfehlung, sondern persönliche Vorliebe.
Sehr interessant. Es wäre gut, den Link auch auf https://www.voynich.ninja/index.php zu posten.
Ich bin mit SBERT oder moderner statistischer Verarbeitung natürlicher Sprache im Allgemeinen nicht vertraut, aber SBERT arbeitet auf Satzebene, und im Voynich-Manuskript gibt es keine klaren Satztrenner. Es gibt nur Wort- und Absatztrenner.
Auch der Punkt, „häufige Suffixe aus Voynich-Wörtern zu entfernen“, bereitet mir Sorge. Die Wörter des Voynich-Manuskripts wirken wie Präfix + Suffix, und da die Präfixe recht kurz sind, könnte man schon vor Beginn der Analyse etwa die Hälfte der Information verloren haben.
Es wäre gut zu prüfen, ob diese Methode sowohl bei sinnvollen Texten in natürlicher Sprache als auch bei bedeutungslosem Kauderwelsch funktioniert.
Geheimtexte liegen irgendwo dazwischen: Je einfacher die Chiffre, desto näher an natürlicher Sprache; je komplexer die Chiffre, desto näher an bedeutungslosem Kauderwelsch.
Gordon Rugg, Torsten Timm und ich selbst haben mit unterschiedlichen Methoden Texte erzeugt, die dem Voynich-Manuskript sehr ähnlich sind.
Meiner ist hier: https://fmjlang.co.uk/voynich/generated-voynich-manuscript.h...
Die entsprechende EVA-Version ist hier: https://fmjlang.co.uk/voynich/generated-voynich-manuscript.t...
Vielleicht habe ich es im README übersehen, aber mich würde interessieren, wie die anfängliche Kodierung der „Wörter“ vorgenommen wurde.
Wenn es zum Beispiel ein Wort wie "okeeodair" gibt: Mich würde interessieren, worauf es in den ursprünglichen Zeichen abgebildet wird.
Es geht also nicht um die Glyphen selbst, sondern um standardisierte Transkriptionswörter auf Basis des EVA-Systems (European Voynich Alphabet).
Die verwendete Transkription findet sich hier: https://www.voynich.nu/
In diesem Projekt wurde nicht wieder zurück auf Glyphen abgebildet; alles nahm die EVA-Transkription als Ausgangspunkt.
Wenn also "okeeodair" im Datensatz steht, dann deshalb, weil jemand, der viel klüger ist als ich, sich die Glyphensequenz angesehen und sich darauf geeinigt hat, sie so zu nennen.
Eine der interessantesten Hypothesen, die ich gesehen habe, ist diese: http://voynichproject.org/
Der Autor nimmt an, dass Voynichese zur germanischen Sprachfamilie gehört, und es scheint, als habe es einige Fortschritte gegeben.
Ich habe auch schon gelesen, dass es uralisch oder finno-ugrisch sein könnte.
Dieser Ansatz ist großartig, und ich frage mich, ob man weiter käme, wenn man ihn auf eine bestimmte Sprachfamilie abstimmen würde.
Bernholz’ Website ist in Ordnung, aber Childs Arbeit hat tatsächlich nicht viel Licht in die Entzifferung des Manuskripts gebracht.
Es könnte von jemandem stammen, der Sprache imitiert hat, ohne die Regeln einer Sprache zu kennen: https://en.wikipedia.org/wiki/Naïve_art
Damit meine ich kein psychisches Problem; es ist ein selten auftretendes Phänomen.
Das Voynich-Manuskript passt ziemlich gut zu den Kriterien eines Werks der naiven Kunst.
1.https://en.wikipedia.org/wiki/Edward_Kelley
2.https://en.wikipedia.org/wiki/Cardan_grille
Im 15. Jahrhundert wäre der offensichtliche Grund, einen Text zu verschlüsseln, gewesen, der Inquisition und anderer religiöser Gewalt jener Zeit zu entgehen.
Daher wäre es interessant, dieselbe Verarbeitung natürlicher Sprache auf die Evangelien anzuwenden und nach Korrelationen zu suchen.
Zuerst sollte man wohl einen „wort“-basierten Vergleich machen und danach einen „zeichen“-basierten Vergleich. Also die Graphen der Bibel mit den Graphen des Voynich vergleichen.
Außerdem könnten Zeichen eingefügt worden sein, um Verwirrung zu stiften.
Zum Beispiel erscheinen Symbole wie das seltsame große „P“ mit mehreren Varianten teils zu häufig, um eine echte Sprache abzubilden; sie könnten Verschleierungszeichen sein, die vor der Entzifferung entfernt werden müssten.
Andere ungewöhnlich häufig auftretende Zeichen könnten ebenfalls unbenutzte Dummy-Zeichen sein.
Natürlich passt das Phänomen „zu viele P“ auch zu der Erklärung reiner Fiktion.
Wenn ein solches handgeschriebenes Buch einfach Kauderwelsch ist und keine Art von Chiffre, dann müssten sich Stil, Kalligrafie, verwendete Wörter und sogar die Buchstaben selbst von Seite 1 bis zur letzten Seite verändern.
Natürlich könnten die Seiten neu angeordnet worden sein, aber trotzdem müsste das auffallen.
Es sei denn, der Autor hätte bereits Dutzende solcher Bücher geschrieben, und nicht alle davon wären verschwunden.
Das ist sicher kein völlig neuer Gedanke, aber ich frage mich, ob es Analysen zu solchen Mustern gibt.
Ich habe nirgends eine Erwähnung der Konsistenz zwischen den Seiten gesehen.
Man geht teils von zwei Schreibern aus (siehe Prescott Currier), während Lisa Fagin Davis von fünf ausgeht.
Eine Diskussion von Experimenten auf Grundlage von Fagin Davis’ Position gibt es hier: https://www.voynich.ninja/thread-3783.html