世界を動かす技術を、日本語で。

HNに表示: SBERTを用いてヴォイニッチ手稿の構造をモデル化しました

2025年5月19日原文(github.com)

概要

  • Voynich Manuscriptを現代NLPで構造解析したプロジェクトの要約
  • 翻訳やパターン憶測を避け、言語構造の有無のみを検証
  • SBERTクラスタリングやマルコフ遷移などを用いた手法を採用
  • サフィックス除去前処理の影響や限界も明記
  • 結果として、未知言語でも言語的構造が観察されたことを示唆

Voynich Manuscript 構造解析プロジェクト概要

プロジェクトの目的と背景

  • Voynich Manuscript(ヴォイニッチ手稿)は 未解読の15世紀写本 で、言語・暗号・人工言語・偽書など多様な仮説が存在
  • 本プロジェクトは NLP(自然言語処理)手法 で「構造的言語らしさ」の有無を検証することを目的とすること
  • 翻訳や意味推測 は行わず、 構造的特徴 (クラスタリング、品詞推定、遷移パターンなど)のみを分析対象とすること
  • 個人の学習目的 で始めたものであり、言語学者・暗号研究者ではないことを明記すること

プロジェクト構成

  • /data/
    • AB.docx:全フォリオ・行タグ付き転写データ
    • voynichese/:サフィックス除去済み根語テキスト
    • stripped_cluster_lookup.json:根語ごとのクラスタID
    • unique_stripped_words.json:全根語リスト
    • voynich_line_clusters.csv:行ごとのクラスタ系列
  • /scripts/
    • cluster_roots.py:SBERTクラスタリング+サフィックス除去
    • map_lines_to_clusters.py:各行をクラスタIDにマッピング
    • pos_model.py:クラスタ挙動から品詞的役割推定
    • transition_matrix.py:クラスタ遷移行列の構築・可視化
    • lexicon_builder.py:セクション別・役割別語彙仮説生成
    • cluster_language_similarity.py:実在言語とのクラスタ類似度比較(任意)
  • /results/
    • Figure_1.png:SBERTクラスタ(PCA可視化)
    • transition_matrix_heatmap.png:マルコフ遷移行列ヒートマップ
    • cluster_role_summary.csv、lexicon_candidates.csv等:分析結果ファイル

主な技術的貢献

  • サフィックス除去 後の根語クラスタリング(多言語SBERT利用)
  • 機能語的クラスタ内容語的クラスタ の識別
  • マルコフ遷移行列 によるクラスタ系列の構造的可視化
  • フォリオ(セクション)別 の統語構造の比較
  • データ駆動型語彙仮説テーブル の生成

前処理上の重要な選択

  • aiin, dy, chy等のサフィックス的語尾を除去 し根語を抽出すること
    • 目的:反復変化する語幹を抽出しクラスタリング精度を向上させること
    • 仮説:語尾が 音韻的パディング・文法的粒子・呪文的反復・ノイズ 等の可能性
    • 効果:クラスタのまとまり向上・遷移行列の構造化
    • リスク: 形態素情報の損失・有意味な屈折形の消失・機能語偏重のバイアス導入
    • サフィックスを独立トークン扱いする再分析も推奨すること

主な発見(例)

  • クラスタ8 :高頻度・低多様性・行頭出現が多く、機能語的性質を示唆
  • クラスタ3 :高多様性・柔軟な配置、内容語的性質を示唆
  • 遷移行列 :内部構造が強く、ランダム系列とは異なる
  • セクションごとのクラスタ利用・品詞推定パターン に違いが観察される(Botanical, Biological等)

仮説

  • 本写本は 音節パディングや位置的反復を伴う構造的人工言語または記憶術的言語 を符号化している可能性
  • 統語構造・機能語/内容語分離・セクションごとの言語変化 が観察されること

再現手順

  • 依存関係インストール
    • pip install -r requirements.txt
  • 各分析ステージのスクリプト実行
    • python scripts/cluster_roots.py
    • python scripts/map_lines_to_clusters.py
    • python scripts/pos_model.py
    • python scripts/transition_matrix.py
    • python scripts/lexicon_builder.py

可視化例

  • Figure 1 :SBERTクラスタ埋め込み(PCA次元圧縮)
  • Figure 2 :SBERTクラスタ埋め込み(UMAP次元圧縮)
  • Figure 3 :SBERTクラスタ埋め込み(PaCMAP次元圧縮)
  • Figure 4 :遷移行列ヒートマップ

限界・注意点

  • クラスタと語の対応が間接的であり、 頻度推定が重複する可能性
  • サフィックス除去はヒューリスティック であり、意味的語尾を除去している場合あり
  • 意味的翻訳は一切行わず、構造分析のみ

著者コメント

  • 本プロジェクトは NLPやAIの学習目的 で、「未知の構造的言語」に現代手法がどこまで迫れるかを検証するために実施
  • Voynich Manuscriptの 解読や翻訳を目指すものではなく、構造分析の可能性を示すことが主眼
  • Rosetta Stoneの発見を期待する人向けではなく、構造モデル化に関心のある研究者・愛好者向け

最近の拡張・貢献者への謝辞

  • UMAP・PaCMAP 等の非線形次元削減可視化サポート追加(CLI引数で切替可能)
  • モデルを all-MiniLM-L6-v2からparaphrase-multilingual-mpnet-base-v2 へ大型化
  • MacOS未対応(Windowsのみ動作確認済み)
  • @theElandor:UMAP実装・CLI改善・コード整理の貢献
  • @patcon:PaCMAP/LocalMAP次元削減アルゴリズム実装の貢献
  • コントリビューション・批評・拡張歓迎 (言語学者・暗号研究者・人工言語愛好家・計算言語学者など)

付記

  • 本プロジェクトは NLP学習のために未知・未解読対象へ適用 した実験的試み
  • Voynich Manuscriptは 15世紀の未知文字写本 であり、解読不能・偽書・暗号・人工言語など諸説あり
  • サフィックス除去→SBERTクラスタリング→品詞推定→マルコフ遷移行列 という流れで構造のみを分析
  • セクションごとに 一貫した構造的パターン が観察されたことを強調
  • GitHubリポジトリ:https://github.com/brianmg/voynich-nlp-analysis
  • 詳細解説:https://brig90.substack.com/p/modeling-the-voynich-manuscrip...
  • NLP初心者としての実践例 であり、構造的言語モデリングや特殊ケースに関心のある方からの フィードバックを歓迎

Hackerたちの意見

READMEで見逃したかもしれないけど、「words」の初期エンコーディングはどうやったの?例えば、「okeeodair」って単語があるとしたら、それを元のシンボルにどうやって戻すの?

その通りだよ。「okeeodair」みたいな単語はEVAの音訳ファイルから直接来てて、元のボイニッチのグリフをASCIIの近似にマッピングしてるんだ。だから、グリフそのものを使ってるわけじゃなくて、EVA(ヨーロッパボイニッチアルファベット)システムに基づいた標準化された音訳単語を使ってるんだ。このプロジェクトではグリフに戻すことはしてなくて、すべてEVAの音訳を出発点にしてる。だから、「okeeodair」がデータセットに存在するのは、僕よりずっと賢い誰かが一連のグリフを見て、それをそう呼ぶことに同意したからなんだ。

UMAPやt-SNEがあればいいな、PCAでもきれいに分離できてるけど。各クラスタを他の全てにマッピングするのは、分析に残ってる変動がないことを示すいい方法だと思う。

いいポイントだね、ありがとう。PCAは最初の段階で驚くほどきれいな分離を見せてくれたから、そのまま使ったんだ。でも君の言う通り、UMAPやt-SNEを使えば、もっと微妙なパターン(あるいは失敗ケース)を捉える非線形の視点が得られると思う。そして、クロスクラスタの参照アイデアにも賛成だよ。クラスタ間の類似性マトリックスは作ってないけど、君が言ったことで、どれだけの信号が本当にキャッチされているのかをテストするのが明らかに次のステップに感じる。フォローアップとしてそれをやってみるかもしれない。考えさせてくれてありがとう。

PCAでいい分離が得られたときは、個人的にはUMAPを避ける傾向があるんだ。なぜなら、すべてのポイントの相対的な距離が解釈しやすいから。t-SNEは絶対に避けるよ、あのプロットの距離はほとんど意味がないから。(怒られないように言っておくけど、これは強制的なものじゃなくて、個人的な好みだよ。)

このリファレンスマッピングがどのように行われるかの例はありますか?異なるモダリティの埋め込みに興味があるんですが、NLPの経験はあまりないんです。

これが最も興味深い仮説の一つだと思ってる:http://voynichproject.org/ 著者はボイニッチ語がゲルマン語だと仮定していて、いくつか進展があったみたい。ウラル語族やフィン・ウゴル語族の可能性があるという話も聞いたことがある。君のアプローチは素晴らしいと思うし、特定の言語ファミリーに合わせて調整すれば、さらに進展があるかもしれないね。

このスレッドでは、いくつかの「解決策」が議論されていますね:https://www.voynich.ninja/thread-4341.html ベルンホルツのサイトはいいけど、チャイルドの研究は実際にMSを解読するのにはあまり役立たないですね。

エドワード・ケリーは、まさにその時その場所にいたんだよね。何年も前に読んだ記憶があるんだけど(今はそのソースが見つからないけど)、彼がカルダン・グリルに詳しかった証拠があったんだ。それが彼が著者である可能性が高いと納得させるのに十分だったし、その本はいたずらか詐欺を意図していたと思う。1. https://en.wikipedia.org/wiki/Edward_Kelley 2. https://en.wikipedia.org/wiki/Cardan_grille

この写本が解読不可能なことを考えると、私の個人的な理論は、これは素朴なアーティストの作品で、背後に言語はないというものだと思う。言語のルールを知らずに言語を真似しているだけの誰かだね: https://en.wikipedia.org/wiki/Naïve_art これは精神的な問題ではなく、ただ起こることが稀なことなんだ。ボイニッチは素朴なアーティストの作品としてはぴったりだよ。

ここで使われているテキスト埋め込みモデルはparaphrase-multilingual-MiniLM-L12-v2(https://huggingface.co/sentence-transformers/paraphrase-mult...)で、約4年前のものなんだ。NLPの世界では、これは実質的に古いもので、特に小さな埋め込みモデルの堅牢性がグローバルなLLMの改善によって情報表現や埋め込み空間での独自性が劇的に向上しているから。多言語サポートのために明示的に訓練されていない現代のテキスト埋め込みモデルでも、そのタイプのデータには非常にうまく機能するから、比較的知られていない言語であるボイニッチ手稿にはより良い結果が得られるかもしれない。接尾辞を取り除いたり品詞を特定したりする従来のNLP技術は、実際には埋め込みの質を改善するどころか悪化させる可能性があるんだ。なぜなら、それがグローバルな埋め込みから関連する文脈データを取り除いてしまうから。

それは完全に正しいね。速度と広い互換性のためにparaphrase-multilingual-MiniLM-L12-v2をデフォルトにしたけど、君の言う通り、今の基準では古いよね。all-mpnet-base-v2やtext-embedding-ada-002がどう動くのか見てみたいな、特に接尾辞を残して、ルート形に減らすのではなく、完全な文脈埋め込みに傾けた場合は。指摘してくれてありがとう、これは次のステップへの素晴らしい推進だね。

Hacker Newsで議論の続きを見る