Exploration de la structure du manuscrit de Voynich en le modélisant avec SBERT
(github.com/brianmg)- Ce dépôt applique, sans hypothèse de traduction, du clustering, une inférence des parties du discours, des transitions de Markov et des motifs par section afin de vérifier si le manuscrit de Voynich présente des motifs structurels se comportant comme une vraie langue
- Le pipeline d’analyse supprime d’abord des éléments comme
aiin,dy,chy, qui ressemblent à des suffixes répétitifs, puis encode les racines avec multilingual SBERT, crée des clusters et mappe chaque ligne du manuscrit vers une séquence de clusters - Les résultats montrent des différences structurelles telles que Cluster 8, qui semble être un groupe de mots-outils en raison de sa fréquence élevée, de sa faible diversité et de sa forte présence en début de ligne, tandis que Cluster 3 paraît davantage correspondre à une classe de racines de mots de contenu, avec une plus grande diversité et une position plus flexible
- La suppression des suffixes regroupe plus étroitement des radicaux similaires et rend les matrices de transition plus nettes, mais c’est aussi un choix de prétraitement fort qui peut supprimer de véritables informations morphologiques, masquer des variations flexionnelles significatives ou introduire un biais centré sur la fonction
- Ce projet ne tente pas de traduction sémantique ; il se concentre sur un examen fondé sur les données pour déterminer si le manuscrit de Voynich présente des structures analogues à une langue, comme la syntaxe, la séparation entre mots-outils et mots de contenu, ou des variations linguistiques selon les sections
Objectif du projet
- Le manuscrit de Voynich n’est toujours pas déchiffré, et il n’existe pas de solution linguistique ou cryptographique faisant consensus
- Ce projet se situe à mi-chemin entre les tests d’entropie statistique et les interprétations sans fondement, en utilisant des techniques de linguistique computationnelle pour évaluer si le manuscrit encode un comportement structuré de type linguistique
- Il ne propose ni traduction ni spéculation à la GPT ; il se concentre uniquement sur l’existence d’une structure se comportant comme une langue
Pipeline d’analyse et organisation des fichiers
/data/contient la transcription complète, le fichier des mots-racines, la liste des racines supprimées, la table de correspondance des clusters et les séquences de clusters par ligne/scripts/exécute séparément les étapes de l’analysecluster_roots.py: clustering SBERT et suppression des suffixesmap_lines_to_clusters.py: mappage des lignes du manuscrit vers des ID de clusterspos_model.py: inférence des rôles grammaticaux à partir du comportement des clusterstransition_matrix.py: création et visualisation des transitions entre clusterslexicon_builder.py: génération de tables de vocabulaire candidates par section et par rôlecluster_language_similarity.py: comparaison optionnelle entre les clusters et de vraies langues
/results/stocke les figures de clusters réduits par PCA, les heatmaps des matrices de transition de Markov, les résumés des rôles des clusters, les CSV des matrices de transition et les CSV du vocabulaire candidat
Contributions clés
- Utilisation de multilingual SBERT pour regrouper des racines après suppression des suffixes
- Distinction entre des clusters ressemblant à des mots-outils et d’autres ressemblant à des mots de contenu
- Modélisation des transitions de type Markov sur les séquences de clusters
- Cartographie de la structure syntaxique selon les sections du manuscrit comme Botanical ou Biological
- Génération de tables hypothétiques de vocabulaire fondées sur les données selon les sections et les rôles
Choix de prétraitement et leurs effets
- Suppression, dans chaque mot, de suffixes répétitifs apparents comme
aiin,dy,chyet de variantes proches - L’objectif de ce choix était d’isoler des formes racines qui se répètent avec des variations
- Les suffixes sont considérés comme pouvant relever de l’un des cas suivants
- remplissage phonétique
- particules grammaticales
- répétition de type incantation ou mnémotechnique
- bruit
- Après suppression des suffixes, des radicaux similaires sont regroupés plus étroitement, et des motifs structurels plus nets apparaissent dans la matrice de transition
- Ce prétraitement n’est toutefois pas neutre
- il a pu supprimer de véritables informations morphologiques
- il a pu masquer des variations flexionnelles significatives
- il a pu biaiser les résultats vers la fonction plutôt que le contenu
- Il est possible de relancer le pipeline sans supprimer les suffixes, ou en traitant les suffixes comme une classe de tokens distincte
Structures observées
- Cluster 8 présente une fréquence élevée, une faible diversité et de fréquentes positions en début de ligne, ce qui en fait un candidat possible au rôle de groupe de mots-outils
- Cluster 3 montre une forte diversité et une position flexible, ce qui en fait un candidat possible au rôle de classe de mots de contenu racinaires
- La matrice de transition montre une forte structure interne, loin d’un comportement aléatoire
- L’usage des clusters et les schémas de parties du discours varient selon les sections du manuscrit, comme Biological et Botanical
Hypothèses et limites
- L’hypothèse posée est que le manuscrit encode une langue construite structurée ou une langue mnémotechnique utilisant un remplissage syllabique et des répétitions positionnelles
- Même sans traduction directe, il présenterait une syntaxe, une séparation entre mots-outils et mots de contenu, ainsi que des variations linguistiques sensibles aux sections
- Les limites sont également explicitées
- la correspondance entre clusters et mots est indirecte, de sorte que les estimations de fréquence peuvent se recouper
- la suppression des suffixes est heuristique et a pu retirer des terminaisons significatives
- aucune traduction sémantique n’est tentée, seule une modélisation structurelle est effectuée
Reproduction et changements récents
- La procédure de reproduction consiste à installer les dépendances puis à exécuter chaque script dans l’ordre
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
- En plus de PCA, la visualisation prend désormais en charge UMAP, PaCMAP et LocalMAP
- Le réducteur CLI utilise PCA par défaut sans argument et prend en charge
--reducer umap,--reducer pacmap - Le projet fonctionne sous Windows, mais comporte la limite de ne pas avoir été rendu pleinement fonctionnel sur MacOS
- Le modèle est passé de
all-MiniLM-L6-v2au plus grandparaphrase-multilingual-mpnet-base-v2- le README indique une comparaison de taille
22M vs 110M
- le README indique une comparaison de taille
1 commentaires
Commentaires sur Hacker News
Si l’on cherche des clusters dans une projection PCA, il vaut mieux examiner la structure plus en profondeur avec des algorithmes modernes de réduction de dimension comme PaCMAP ou LocalMAP
Je travaille sur un projet lié à un outil de compréhension sémantique appelé Pol.is [1] ; en reprojetant des données d’enquêtes wiki avec ces nouveaux algorithmes plutôt qu’avec PCA, les nouvelles observations sont assez surprenantes
https://patcon.github.io/polislike-opinion-map-painting/
Painted groups: https://t.co/734qNlMdeh
Dommage que cela ne fonctionne correctement que sur desktop
[1]: https://www.technologyreview.com/2025/04/15/1115125/a-small-...
Ce n’est pas la vieille « analyse factorielle »
Le modèle d’embeddings de texte utilisé ici est paraphrase-multilingual-MiniLM-L12-v2 (https://huggingface.co/sentence-transformers/paraphrase-mult...), un modèle qui a environ quatre ans
Dans le monde du traitement automatique du langage, c’est pratiquement de l’archéologie, et grâce aux progrès généraux des LLM, même les petits modèles d’embeddings se sont nettement améliorés en capacité de représentation de l’information et en séparabilité de l’espace d’embedding
Les modèles récents d’embeddings de texte fonctionnent plutôt bien sur ce type de données même sans avoir été explicitement entraînés pour le multilingue ; ils pourraient donc être meilleurs pour une langue relativement inconnue comme le manuscrit de Voynich
Les techniques traditionnelles de traitement automatique du langage, comme la suppression des suffixes ou l’identification des parties du discours, peuvent au contraire dégrader la qualité des embeddings, car elles suppriment des informations contextuelles pertinentes nécessaires à l’embedding global
Je serais curieux de voir comment se comporteraient des modèles comme all-mpnet-base-v2 ou text-embedding-ada-002, et ce serait particulièrement intéressant d’utiliser des embeddings de contexte complet en conservant les suffixes plutôt qu’en réduisant les mots à une forme racine
Je ne connais pas bien le traitement automatique du langage, mais je me demande s’il serait pertinent d’avoir un groupe témoin dans ce processus
Par exemple, on pourrait demander à des gens d’écrire un texte qui ressemble à une langue sans en être une, puis appliquer le même processus — suppression des suffixes, clustering, etc. — afin de vérifier si des résultats similaires peuvent apparaître
J’ai examiné le manuscrit pendant un certain temps, et j’ai trouvé suspect que, sur certaines pages, le texte soit collé de très près aux illustrations
Dans une langue ordinaire, comme la largeur des mots et des lettres varie, on insère naturellement un saut de ligne quand on approche de la fin d’une ligne pour commencer un nouveau mot et éviter le débordement
Or, dans ce manuscrit, il ne semblait pas y avoir ce type de rupture, et de nombreux passages donnaient l’impression qu’on avait forcé l’insertion de toutes les lettres pouvant tenir en fin de ligne
J’aurais voulu analyser quelles lettres apparaissent juste avant et juste après les sauts de ligne, et si cela diffère du reste du texte, mais je n’ai pas trouvé de transcription
À mon intuition totalement amateur, cela ressemble soit à une œuvre d’art élaborée, soit à une mystification
Même avec PCA seule, la séparation apparaît clairement, mais UMAP ou t-SNE pourraient aussi être intéressants
Mapper chaque cluster par rapport à tous les autres pourrait être un bon moyen de montrer qu’il ne reste plus de variabilité dans l’analyse
Mais il est vrai qu’avec UMAP ou t-SNE, on pourrait détecter des motifs plus subtils ou des cas d’échec depuis un point de vue non linéaire
Je n’ai pas construit de matrice de similarité entre clusters, mais maintenant que vous le dites, ce serait une étape suivante naturelle pour vérifier à quel point le signal réel a été capté
J’aimerais l’appliquer à des embeddings d’autres modalités, mais je n’ai pas beaucoup d’expérience côté traitement automatique du langage
J’évite t-SNE à tout prix, car j’estime que les distances dans ce type de visualisation n’ont presque aucun sens
Ce n’est pas une prescription, juste une préférence personnelle
Très intéressant. Ce serait bien de poster aussi un lien sur https://www.voynich.ninja/index.php
Je ne suis pas familier avec SBERT ni, plus largement, avec le traitement statistique moderne du langage naturel, mais SBERT fonctionne à l’échelle de la phrase, et le manuscrit de Voynich n’a pas de séparateurs de phrases clairs. Il n’y a que des séparateurs de mots et de paragraphes
Le fait de « supprimer les suffixes courants des mots de Voynich » m’inquiète aussi. Les mots du manuscrit de Voynich ressemblent à préfixe + suffixe, et comme les préfixes sont assez courts, on a peut-être perdu près de la moitié de l’information avant même de commencer l’analyse
Ce serait bien de vérifier si cette méthode fonctionne aussi sur des textes significatifs en langue naturelle, et sur du charabia dénué de sens
Les textes chiffrés se situent quelque part entre les deux : plus le chiffrement est simple, plus il est proche d’une langue naturelle ; plus il est complexe, plus il ressemble à du charabia sans signification
Gordon Rugg, Torsten Timm et moi-même avons généré, par des méthodes différentes, des textes très proches du manuscrit de Voynich
Le mien est ici : https://fmjlang.co.uk/voynich/generated-voynich-manuscript.h...
La version EVA équivalente est ici : https://fmjlang.co.uk/voynich/generated-voynich-manuscript.t...
Je l’ai peut-être manqué dans le README, mais je me demande comment l’encodage initial des « mots » a été fait
Par exemple, s’il y a un mot comme "okeeodair", je me demande à quoi cela correspond dans les symboles d’origine
On ne manipule donc pas les glyphes eux-mêmes, mais des mots de transcription standard fondés sur le système EVA (European Voynich Alphabet)
La transcription utilisée se trouve ici : https://www.voynich.nu/
Dans ce projet, je n’ai pas refait de mapping vers les glyphes ; tout part de la transcription EVA
Donc si le jeu de données contient "okeeodair", c’est parce que quelqu’un de bien plus intelligent que moi a regardé la séquence de glyphes et qu’il a été convenu de l’appeler ainsi
J’ai vu ceci comme l’une des hypothèses les plus intéressantes : http://voynichproject.org/
L’auteur suppose que le Voynichese appartient à la famille des langues germaniques, et il semble y avoir eu quelques progrès
J’ai aussi vu des hypothèses selon lesquelles il pourrait s’agir d’une langue ouralienne ou finno-ougrienne
Cette approche est excellente, et je me demande si elle pourrait aller plus loin en l’adaptant à une famille de langues précise
Le site de Bernholz est correct, mais les travaux de Child n’éclairent pas vraiment le déchiffrement du manuscrit
Cela pourrait être l’imitation d’une langue par quelqu’un qui n’en connaît pas les règles : https://en.wikipedia.org/wiki/Naïve_art
Je ne veux pas dire qu’il s’agit d’un problème mental ; c’est un phénomène rare
Le manuscrit de Voynich correspond assez bien aux critères d’une œuvre d’art naïf
1.https://en.wikipedia.org/wiki/Edward_Kelley
2.https://en.wikipedia.org/wiki/Cardan_grille
Au XVe siècle, la raison évidente de chiffrer un texte aurait été d’éviter l’Inquisition et les autres violences religieuses de l’époque
Il serait donc intéressant d’appliquer le même traitement du langage naturel aux Évangiles pour chercher des corrélations
Il faudrait sans doute commencer par une comparaison basée sur les « mots », puis passer à une comparaison basée sur les « caractères ». Autrement dit, comparer le graphe de la Bible avec celui de Voynich
Il se peut aussi que certains caractères aient été ajoutés pour semer la confusion
Par exemple, certains symboles comme cet étrange « P » majuscule aux nombreuses variantes apparaissent parfois trop souvent pour représenter une vraie langue ; ils pourraient donc être des symboles d’obfuscation à retirer avant le déchiffrement
D’autres caractères anormalement fréquents pourraient aussi être des caractères factices inutilisés
Bien sûr, le phénomène du « trop grand nombre de P » colle aussi avec l’explication d’une pure fiction
Si un livre manuscrit de ce genre n’était que du charabia, et pas un chiffrement d’aucune sorte, alors le style, la calligraphie, les mots employés, voire les lettres elles-mêmes, devraient évoluer de la première à la dernière page
Bien sûr, les pages ont pu être réordonnées, mais cela devrait tout de même se voir
À moins que l’auteur ait déjà écrit des dizaines de livres de ce type et qu’ils aient tous disparu
Ce n’est sans doute pas une idée très nouvelle, mais je me demande s’il existe une analyse de ce genre de motifs
Je n’ai vu nulle part de mention de la cohérence entre les pages
On considère parfois qu’il y avait 2 scribes (voir Prescott Currier), tandis que Lisa Fagin Davis en voit 5
Une discussion expérimentale fondée sur la position de Fagin Davis se trouve ici : https://www.voynich.ninja/thread-3783.html