Show HN: 使用 SBERT 对《伏尼契手稿》建模以测试其结构
📜 《伏尼契手稿》结构分析
🔍 概述
这始于一个个人挑战,旨在弄清楚现代 NLP 能告诉我们关于《伏尼契手稿》的哪些信息 —— 而不陷入翻译猜测或模式幻觉。我不是语言学家或密码学家。我只是想看看像 Voynichese 这样奇怪的东西是否能在真正的语言建模下成立:聚类、词性推断、马尔可夫转换和特定章节的模式。
剧透:它确实成立了。
这个 repo 介绍了所有内容 —— 从后缀剥离到 SBERT 嵌入,再到构建词典假设。没有魔法,没有 GPT 猜测。只是对该手稿是否具有_表现得像语言的结构_的怀疑性测试,即使我们不知道它在说什么。
🧠 为何这很重要
《伏尼契手稿》仍然无法破译,没有一致的语言或密码学解决方案。 传统的分析通常分为两个阵营:统计熵检查_或_疯狂猜测。 本项目提供了一条中间道路 —— 使用计算语言学来评估该手稿是否编码了真实的、结构化的类语言行为。
📁 项目结构
/data/
AB.docx # 带有页码/行标签的完整音译
voynichese/ # 词根 .txt 文件
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
cluster_transition_matrix.csv
lexicon_candidates.csv
✅ 主要贡献
- 使用多语言 SBERT 对剥离后的词根进行聚类
- 识别类似功能词和类似内容词的聚类
- 聚类序列的马尔可夫式转换建模
- 基于对开本的句法结构映射(植物学、生物学等)
- 生成数据驱动的词典假设表
🔧 预处理选择
我做出的最重要的假设之一是如何在聚类之前处理 Voynich 单词。 具体来说:我从每个单词中剥离了一组重复出现的类似后缀的结尾 —— 诸如 aiin、dy、chy 和类似的变体。 目标是隔离看起来像是带有变化的重复词根形式,假设这些后缀可能是:
- 语音填充
- 语法粒子
- 圣歌式或助记式重复
- 或者……只是噪音
这确实改善了聚类行为 —— 相似的词干更紧密地聚集在一起,并且转换矩阵显示出更清晰的结构模式。 但这也是一个强烈的预处理决策,可能会:
- 移除实际的形态信息
- 掩盖有意义的屈折变体
- 引入对功能的偏向而不是内容
所以它不是中性的 —— 它有帮助,但也塑造了结果。 如果有人想 fork 这个 repo 并重新运行没有后缀剥离的 pipeline —— 或者将后缀视为它们自己的 token 类 —— 我将真正有兴趣进行比较。
📈 主要发现
- 聚类 8 表现出高频率、低多样性和频繁的行首 —— 可能是_功能词组_
- 聚类 3 具有高多样性和灵活的定位 —— 可能是_根内容类_
- 转换矩阵 显示出强大的内部结构,远非随机
- 聚类用法和词性模式因_手稿章节_而异(例如,生物学与植物学)
🧬 假设
该手稿使用音节填充和位置重复来编码结构化的构造或助记语言。 它表现出句法、功能/内容分离和章节感知的语言变化 —— 即使在没有直接翻译的情况下也是如此。
▶️ 如何重现
# 1. 安装依赖
pip install -r requirements.txt
# 2. 运行 pipeline 的每个阶段
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
📊 示例可视化
📌 图 1:SBERT 聚类嵌入 (PCA 降维)
📌 图 2:转换矩阵热图
📌 局限性
- 聚类到单词的映射是间接的 —— 频率估计可能重叠
- 后缀剥离是启发式的,可能会删除有意义的结尾
- 没有尝试语义翻译 —— 只有结构建模
✍️ 作者说明
这个项目是为了学习而构建的 —— 关于 AI、NLP 以及结构化分析可以在不假设您所看到的内容的情况下为您带来多大的帮助。 我不是来破解 Voynich 的。 但我确实相信,使用现代工具对其结构进行建模比希望翻译或学术驳斥要好。
所以如果你来这里是为了寻找罗塞塔石碑,那你就不走运了。
如果您来这里是为了为一个可能不想被建模的语言建模 —— 欢迎。