Menjelajahi struktur Naskah Voynich dengan memodelkannya menggunakan SBERT
(github.com/brianmg)- Repositori ini menerapkan clustering, inferensi kelas kata, transisi Markov, dan pola per bagian tanpa tebakan terjemahan untuk memeriksa apakah Naskah Voynich memiliki pola struktural yang berperilaku seperti bahasa nyata
- Pipeline analisis menghapus
aiin,dy,chy, dan bentuk serupa yang tampak seperti sufiks berulang, lalu meng-embed akar kata dengan multilingual SBERT, membentuk cluster, dan memetakan setiap baris naskah ke urutan cluster - Hasilnya menunjukkan perbedaan struktural seperti Cluster 8 yang tampak seperti kelompok kata fungsi karena frekuensinya tinggi, keragamannya rendah, dan sering muncul di awal baris, sedangkan Cluster 3 tampak seperti kelas akar kata isi karena memiliki keragaman tinggi dan posisi yang fleksibel
- Penghapusan sufiks mengelompokkan batang kata serupa dengan lebih rapat dan membuat matriks transisi lebih rapi, tetapi ini adalah pilihan prapemrosesan yang kuat yang dapat menghapus informasi morfologis nyata, menutupi variasi infleksi yang bermakna, atau menciptakan bias yang berpusat pada fungsi
- Proyek ini tidak mencoba terjemahan semantik, melainkan berfokus pada peninjauan berbasis data apakah Naskah Voynich menunjukkan struktur mirip bahasa seperti sintaksis, pemisahan kata fungsi/kata isi, dan perubahan bahasa menurut bagian
Tujuan proyek
- Naskah Voynich masih belum terpecahkan, dan belum ada solusi linguistik maupun kriptografis yang disepakati
- Proyek ini menempuh jalur tengah antara uji entropi statistik dan interpretasi tanpa dasar, dengan menggunakan teknik linguistik komputasional untuk menilai apakah naskah ini mengodekan perilaku terstruktur yang mirip bahasa
- Tidak melakukan terjemahan atau tebakan ala GPT, dan hanya berfokus pada ada tidaknya struktur yang berperilaku seperti bahasa
Pipeline analisis dan struktur berkas
/data/berisi transkrip lengkap, berkas kata akar, daftar akar yang dihapus, tabel lookup cluster, dan urutan cluster per baris/scripts/menjalankan tahap analisis secara terpisahcluster_roots.py: clustering SBERT dan penghapusan sufiksmap_lines_to_clusters.py: memetakan baris naskah ke ID clusterpos_model.py: menginferensikan peran gramatikal berdasarkan perilaku clustertransition_matrix.py: membuat dan memvisualisasikan transisi clusterlexicon_builder.py: membuat tabel kandidat leksikon menurut bagian dan perancluster_language_similarity.py: secara opsional membandingkan cluster dengan bahasa nyata
/results/menyimpan gambar cluster hasil reduksi PCA, heatmap matriks transisi Markov, ringkasan peran cluster, CSV matriks transisi, dan CSV kandidat leksikon
Kontribusi utama
- Menggunakan multilingual SBERT untuk melakukan clustering pada akar kata setelah penghapusan sufiks
- Membedakan cluster yang tampak seperti kata fungsi dan cluster yang tampak seperti kata isi
- Melakukan pemodelan transisi bergaya Markov pada urutan cluster
- Memetakan struktur sintaksis menurut bagian naskah seperti Botanical dan Biological
- Menghasilkan tabel hipotesis kosakata berbasis data berdasarkan bagian dan peran
Pilihan prapemrosesan dan dampaknya
- Menghapus
aiin,dy,chy, dan variasi serupa yang tampak sebagai sufiks berulang dari setiap kata - Tujuan pilihan ini adalah memisahkan bentuk akar yang berulang bersama variasinya
- Sufiks tersebut diperkirakan mungkin merupakan salah satu dari berikut ini
- padding fonetik
- partikel gramatikal
- pengulangan seperti mantra atau mnemonik
- noise
- Setelah sufiks dihapus, batang kata yang mirip terkelompok lebih rapat, dan pola struktur pada matriks transisi tampak lebih bersih
- Namun, prapemrosesan ini tidak netral
- bisa jadi menghapus informasi morfologis yang nyata
- bisa jadi menutupi variasi infleksi yang bermakna
- bisa jadi membiaskan hasil ke arah berpusat pada fungsi alih-alih isi
- Pipeline juga bisa dijalankan ulang untuk perbandingan, baik tanpa menghapus sufiks maupun dengan memperlakukan sufiks sebagai kelas token terpisah
Struktur yang diamati
- Cluster 8 menunjukkan frekuensi tinggi, keragaman rendah, dan posisi awal baris yang sering, sehingga kemungkinan merupakan kelompok kata fungsi
- Cluster 3 menunjukkan keragaman tinggi dan posisi yang fleksibel, sehingga kemungkinan merupakan kelas akar kata isi
- Matriks transisi menunjukkan struktur internal yang kuat dan jauh dari acak
- Penggunaan cluster dan pola kelas kata berbeda menurut bagian naskah seperti Biological dan Botanical
Hipotesis dan keterbatasan
- Diajukan hipotesis bahwa naskah ini mengodekan bahasa terstruktur buatan atau bahasa mnemonik yang menggunakan padding suku kata dan pengulangan berbasis posisi
- Bahkan tanpa terjemahan langsung, tampak ada sintaksis, pemisahan kata fungsi/kata isi, dan perubahan bahasa yang peka terhadap bagian
- Keterbatasannya juga dijelaskan
- pemetaan antara cluster dan kata bersifat tidak langsung sehingga estimasi frekuensi bisa tumpang tindih
- penghapusan sufiks bersifat heuristik dan bisa jadi menghapus akhiran yang bermakna
- tidak mencoba terjemahan semantik, hanya melakukan pemodelan struktur
Reproduksi dan perubahan terbaru
- Prosedur reproduksi dilakukan dengan memasang dependensi lalu menjalankan setiap skrip secara berurutan
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
- Selain PCA, visualisasi kini menambahkan dukungan untuk UMAP, PaCMAP, dan LocalMAP
- Reducer CLI default-nya adalah PCA saat tanpa argumen, dan mendukung
--reducer umap,--reducer pacmap - Proyek ini memiliki keterbatasan bahwa ia berjalan di Windows, tetapi belum berhasil dibuat bekerja dengan baik di MacOS
- Model diubah dari
all-MiniLM-L6-v2keparaphrase-multilingual-mpnet-base-v2yang lebih besar- Di README, perbandingan ukurannya tertulis
22M vs 110M
- Di README, perbandingan ukurannya tertulis
1 komentar
Komentar Hacker News
Jika mencari klaster dalam proyeksi PCA, sebaiknya melihat struktur yang lebih dalam dengan algoritme reduksi dimensi modern seperti PaCMAP atau LocalMAP
Saya mengerjakan proyek yang berkaitan dengan alat pemahaman makna bernama Pol.is [1], dan ketika data survei wiki diproyeksikan ulang dengan algoritme baru seperti ini alih-alih PCA, insight baru yang muncul cukup mengejutkan
https://patcon.github.io/polislike-opinion-map-painting/
Painted groups: https://t.co/734qNlMdeh
Sayangnya, ini hanya berfungsi dengan baik di desktop
[1]: https://www.technologyreview.com/2025/04/15/1115125/a-small-...
Ini berbeda dari “analisis faktor” gaya lama
Model embedding teks yang dipakai di sini adalah paraphrase-multilingual-MiniLM-L12-v2 (https://huggingface.co/sentence-transformers/paraphrase-mult...), yang usianya sekitar 4 tahun
Di dunia pemrosesan bahasa alami, ini praktis mendekati model purba, dan berkat kemajuan LLM secara umum, bahkan model embedding kecil pun kini jauh lebih baik dalam daya representasi informasi dan keterpisahan ruang embedding
Model embedding teks masa kini bekerja cukup baik pada data seperti ini meski tidak dilatih secara eksplisit untuk dukungan multibahasa, jadi bisa jadi lebih baik untuk Naskah Voynich, bahasa yang relatif tidak dikenal
Teknik NLP tradisional seperti menghapus sufiks atau mengidentifikasi kelas kata justru bisa menurunkan kualitas embedding. Sebab, informasi konteks relevan yang diperlukan untuk embedding keseluruhan akan hilang
Saya penasaran bagaimana model seperti all-mpnet-base-v2 atau text-embedding-ada-002 akan bekerja, dan khususnya akan lebih menarik jika memakai embedding konteks penuh dengan tetap mempertahankan sufiks tanpa mereduksinya ke bentuk akar
Saya tidak begitu paham pemrosesan bahasa alami, tetapi saya penasaran apakah masuk akal menambahkan kelompok kontrol dalam proses ini
Misalnya, meminta orang menulis teks yang tampak seperti bahasa bagi manusia tetapi sebenarnya bukan bahasa, lalu menerapkan proses yang sama seperti penghapusan sufiks dan klasterisasi untuk melihat apakah hasil serupa mungkin muncul
Saya pernah mengamati naskah itu cukup lama, dan pada beberapa halaman saya merasa mencurigakan bahwa tulisannya terlalu menempel pada ilustrasi
Dalam bahasa biasa, karena lebar kata dan huruf berbeda-beda, ketika mendekati akhir baris orang secara alami akan melakukan pergantian baris untuk memulai kata baru dan menghindari teks meluber
Namun dalam naskah ini, jeda semacam itu tampaknya tidak ada, dan di banyak tempat terlihat seolah huruf apa pun yang bisa muat di ujung baris dipaksakan masuk
Saya ingin menganalisis huruf apa yang muncul tepat sebelum dan sesudah pergantian baris, dan apakah berbeda dari keseluruhan teks, tetapi saya tidak menemukan transkripsi
Dari firasat yang sepenuhnya amatir, ini terasa seperti karya seni yang rumit atau sebuah penipuan
Dengan PCA saja pemisahannya sudah terlihat jelas, tetapi UMAP atau t-SNE juga tampaknya bagus
Jika setiap klaster dipetakan berdasarkan semua klaster lainnya, itu bisa menjadi cara yang baik untuk menunjukkan apakah tidak ada lagi variabilitas yang tersisa dalam analisis
Namun benar bahwa menerapkan UMAP atau t-SNE bisa menangkap pola yang lebih halus atau kasus kegagalan dari sudut pandang nonlinier
Saya belum membuat matriks kemiripan antarklaster, tetapi setelah mendengarnya, itu terasa seperti langkah berikutnya yang alami untuk memverifikasi seberapa banyak sinyal nyata yang tertangkap
Saya ingin mencobanya pada embedding dari modality lain, tetapi pengalaman saya di NLP tidak banyak
Saya menghindari t-SNE dengan segala cara. Karena menurut saya jarak dalam gambar seperti itu hampir tidak bermakna
Ini bukan anjuran, hanya preferensi pribadi
Sangat menarik. Sebaiknya tautannya juga diposting di https://www.voynich.ninja/index.php
Saya tidak akrab dengan SBERT atau pemrosesan bahasa alami statistik modern secara umum, tetapi SBERT bekerja pada tingkat kalimat, sementara Naskah Voynich tidak memiliki pemisah kalimat yang jelas. Yang ada hanya pemisah kata dan paragraf
Saya juga khawatir dengan poin “menghapus sufiks umum dari kata-kata Voynich”. Kata-kata dalam Naskah Voynich tampak seperti prefiks + sufiks, dan karena prefiksnya cukup pendek, mungkin sekitar separuh informasinya sudah hilang sebelum analisis dimulai
Akan bagus jika diuji apakah metode ini bekerja pada teks bermakna dalam bahasa alami, dan apakah juga bekerja pada ocehan tak bermakna
Teks sandi berada di suatu tempat di antara keduanya; semakin sederhana sandinya semakin dekat ke bahasa alami, dan semakin kompleks sandinya semakin dekat ke ocehan tak bermakna
Gordon Rugg, Torsten Timm, dan saya sendiri telah menghasilkan teks yang sangat mirip dengan Naskah Voynich dengan metode yang berbeda-beda
Versi saya ada di sini: https://fmjlang.co.uk/voynich/generated-voynich-manuscript.h...
Versi EVA yang setara ada di sini: https://fmjlang.co.uk/voynich/generated-voynich-manuscript.t...
Mungkin saya melewatkannya di README, tetapi saya penasaran bagaimana enkode awal untuk “kata” dilakukan
Misalnya jika ada kata seperti "okeeodair", saya penasaran itu dipetakan ke mana dalam simbol aslinya
Jadi yang ditangani bukan glif itu sendiri, melainkan kata-kata transkripsi standar berdasarkan sistem EVA (European Voynich Alphabet)
Transkripsi yang digunakan bisa ditemukan di sini: https://www.voynich.nu/
Dalam proyek ini, semuanya tidak dipetakan kembali ke glif; semua berawal dari transkripsi EVA
Jadi jika ada "okeeodair" dalam dataset, itu karena seseorang yang jauh lebih pintar daripada saya melihat urutan glif tersebut dan sepakat untuk menyebutnya demikian
Saya melihat ini sebagai salah satu hipotesis paling menarik: http://voynichproject.org/
Penulisnya berasumsi bahwa Voynichese termasuk rumpun bahasa Germanik, dan tampaknya ada sedikit kemajuan
Saya juga pernah melihat klaim bahwa itu mungkin termasuk rumpun Uralik atau Finno-Ugrik
Pendekatan ini bagus, dan saya penasaran apakah bisa melangkah lebih jauh jika disesuaikan untuk rumpun bahasa tertentu
Situs Bernholz cukup baik, tetapi karya Child tidak benar-benar banyak menerangi upaya menguraikan naskah tersebut
Bisa jadi ini tiruan bahasa oleh seseorang yang tidak mengetahui aturan bahasa: https://en.wikipedia.org/wiki/Naïve_art
Maksudnya bukan masalah mental, melainkan fenomena yang jarang terjadi
Voynich cukup cocok dengan kriteria karya seni naïve
1.https://en.wikipedia.org/wiki/Edward_Kelley
2.https://en.wikipedia.org/wiki/Cardan_grille
Pada abad ke-15, alasan yang jelas untuk mengenkripsi teks kemungkinan adalah untuk menghindari Inkuisisi dan kekerasan keagamaan lain pada masa itu
Jadi akan menarik jika pemrosesan bahasa alami yang sama diterapkan pada Injil untuk mencari korelasi
Menurut saya, perbandingan berbasis “kata” perlu dilakukan terlebih dahulu, lalu perbandingan berbasis “karakter”. Dengan kata lain, membandingkan graf Alkitab dengan graf Voynich
Selain itu, mungkin ada karakter yang disisipkan untuk membingungkan
Misalnya, simbol mirip huruf kapital “P” yang aneh dengan beberapa variasi tampak muncul terlalu sering untuk merepresentasikan bahasa nyata, sehingga bisa saja merupakan simbol obfuscation yang dihapus sebelum penguraian
Karakter lain yang muncul sangat sering secara tidak normal juga bisa saja karakter dummy yang tidak digunakan
Tentu saja, fenomena “terlalu banyak P” juga cocok dengan penjelasan bahwa semuanya murni fiksi
Jika buku tulisan tangan seperti itu hanyalah ocehan dan bukan sandi jenis apa pun, maka rasanya gaya, kaligrafi, kata-kata yang ditulis, bahkan huruf-hurufnya sendiri seharusnya berubah dari halaman 1 hingga halaman terakhir
Tentu saja halamannya mungkin telah diurutkan ulang, tetapi tetap saja semestinya terlihat
Kecuali jika penulisnya sudah pernah menulis puluhan buku seperti itu dan semuanya tidak hilang
Mungkin ini bukan ide yang benar-benar baru, tetapi saya penasaran apakah ada analisis tentang pola semacam itu
Saya belum pernah melihat penyebutan tentang konsistensi antarhalaman di mana pun
Penyalinnya kadang dianggap ada 2 orang (lihat Prescott Currier), sedangkan Lisa Fagin Davis berpendapat ada 5 orang
Diskusi eksperimen berdasarkan pandangan Fagin Davis ada di sini: https://www.voynich.ninja/thread-3783.html