Лаборатория · запись ·
Тупая биграмма обыграла мою модель
Сборщик повторяет любую разобранную страницу рукописи Войнича слово в слово. Потом я выставил против него простейший алгоритм из учебника и проиграл по всем метрикам.
Что собирает сборщик
Для каждой разобранной страницы есть рецепт в виде файла. Слова разложены на приставку, корень, суффикс и окончание. Строки размечены по роли: первый абзац, продолжение, подпись у правого края. Отдельно записано, как текст обтекает рисунок и из каких частей нарисовано растение.
Скрипт читает рецепт и собирает страницу заново. Расхождение с оригиналом — ноль слов и ноль сегментов. Так на всех 62 разобранных страницах.
Чего эта точность стоит
Нисколько, пока не названо, с чем сравнивать. Воспроизвести страницу из её же рецепта — это запомнить и распечатать.
Первая проверка: перемешать ленту слов в рецепте и собрать заново. Расхождение — 97,9 %. Значит, порядок слов несёт реальную информацию и сборка нетривиальна.
Проверка слабая. Она говорит только о том, что я не копирую случайный шум. Вопрос был другой: объясняет ли моя разметка, как этот текст порождался.
Противник — символьная биграмма
Самая примитивная модель текста: смотрим на две предыдущие буквы, берём следующую по частоте. Ни морфологии, ни слотов, ни знания о рукописи. Тридцать строк кода.
Сравнение на 30 страницах — средняя ошибка по числу разных слов на странице и по доле слов, встречающихся однажды:
| модель | ошибка по разным словам | ошибка по редким словам |
|---|---|---|
| символьная биграмма | 6,9 | 7,5 |
| моя слотовая модель | 28,2 | 14,7 |
| перемешивание (нуль) | 0,0 | 0,0 |
Меньше — лучше. Нуль у перемешивания означает вырожденную проверку: оно сохраняет сам набор слов и ломает только порядок, поэтому для этих метрик не годится как эталон сравнения.
Разложение слова на независимые слоты теряет то, как морфемы сочетаются друг с другом, и недобирает разнообразие. Биграмма ничего не знает и попадает точнее.
Дальше стало хуже
Я прогнал цепочки разной глубины: от одной предыдущей буквы до четырёх. Ожидание было простое — чем глубже память, тем лучше.
| глубина | ошибка | новых слов | списано дословно |
|---|---|---|---|
| 1 буква | 0,223 | 80,9 % | 29,2 % |
| 2 буквы | 0,263 | 60,5 % | 51,9 % |
| 3 буквы | 0,460 | 34,0 % | 75,3 % |
| 4 буквы | 0,628 | 10,8 % | 92,7 % |
Глубокая память не учит порождать — она списывает. К четвёртой букве 93 % выданного текста дословно скопировано из обучающей страницы.
Минимум ошибки — на глубине в одну букву. Всё, что сложнее, ухудшает результат и повышает долю списанного.
Отдельная проверка без возможности списать: обучить на двадцати девяти страницах и попросить воспроизвести тридцатую, которой модель не видела. Результат почти такой же, как при обучении на самом себе — 0,225 против 0,223.
Страницы статистически взаимозаменяемы. Процесс, породивший текст, общий для всей книги, и он очень низкого порядка.
Что из этого следует про рукопись
У войнического текста есть жёсткие правила позиции: знак n стоит в конце слова в 99 случаях из 100, знак i — только в середине. Это выглядит как доказательство системы и языка внутри.
Цепочка глубиной в одну букву воспроизводит обе закономерности. Их даёт низкоуровневая статистика, и ссылаться на них как на довод против бессмысленного набора я больше не могу.
Обратное тоже неверно. Процесс первого порядка совместим и с языком, и с шифром, и с бессмысленной генерацией. Чтобы различить эти случаи, нужны проверки на связность текста длиной от 1200 слов — такие куски в разобранной части пока не набраны.
Что это меняет в проекте
Символьная цепочка первого порядка встроена в проверку и запускается вместе с любой новой моделью. Не обыграла — модель не нужна, какой бы сложной она ни была.
Открытый вопрос сформулирован так: существует ли модель, которая бьёт первый порядок по числу разных слов и по доле редких и при этом не списывает со страницы. Кандидат есть — общий словарный запас всей книги плюс разложение слова на части. Его тоже придётся гнать против биграммы.
Отдельно записано, к чему эти метрики слепы. Число разных слов и доля редких слепы к трём вещам. Что cthar.cthar стоит рядом дважды. Что строка ведёт себя как самостоятельная единица. Что её начало устроено иначе, чем конец. На страницах всё это есть. Проверять такое нужно метриками связности на кусках от 1200 слов, а столько подряд в разобранной части пока не набрано.
И честная граница вывода: процесс первого порядка уживается и с языком, и с шифром, и с порождением бессмыслицы. Проигрыш моей модели закрыл одну ветку объяснений. Вопрос остался открытым.
Данные: транскрипция IVTFF / EVA, транскрибёр H, voynich.nu (René Zandbergen, Gabriel Landini). Рукопись: Beinecke Rare Book & Manuscript Library, Yale University, MS 408 (public domain). Таблица сигнатур по 62 страницам выложена на странице проекта.