Представьте, что человек спрашивает о смене профессии и вытягивает три карты: Повешенный → Маг → Колесница. Из одной и той же последовательности можно собрать несколько правдоподобных историй: о паузе и переосмыслении, о найденных ресурсах или о риске принять резкое действие за настоящее решение. Карты одинаковые, а смысловые маршруты — разные. Как интерпретатор выбирает один из них? И можно ли описать этот выбор так же, как поиск гипотезы в распознавании речи, машинном переводе или языковой модели?
От множества трактовок к лучшему пути
Ниже — учебная модель такого процесса. Она ничего не утверждает о мистических свойствах Таро и не оценивает вероятность будущего события. Её предмет — выбор связной интерпретации из нескольких допустимых.
Карта и контекст не дают готовый текст ответа. Сначала система строит несколько структурированных смысловых кандидатов, затем выбирает связный маршрут и только после этого формулирует объяснение для человека.

Исходная гипотеза: карта как функция отображения
Моя исходная идея состоит в том, что механизм работы карты Таро можно рассматривать как функцию отображения. На вход поступают описанный человеком контекст и нативное, словарное значение карты. Функция помещает их сочетание в диапазон допустимых трактовок.
Здесь — контекст,
— нативное значение карты
,
— пространство интерпретаций, а
— множество кандидатов. Затем выбирается вариант, который лучше других согласуется с ситуацией:
Но эта формула сразу выдаёт лучший результат и не показывает, как трактовки влияют друг на друга в раскладе. Следующая карта может сделать более убедительным не только продолжение, но и одно из значений предыдущей карты. Поэтому единицей поиска должен стать не отдельный ответ , а полный смысловой путь.
Общая архитектура
Полезно разделить пять операций: извлечение контекста, построение кандидатов, поиск смыслового пути, переоценку лучшего набора и генерацию понятного человеку объяснения.
Это разделение принципиально. Viterbi и beam search не обязаны писать человеческий текст. Их задача — найти структурированный смысловой маршрут. Отдельный модуль уже превращает этот маршрут в объяснение.
Сначала пример, потом математика
Вернёмся к вопросу о смене профессии. Оставим пять смысловых состояний:
Застой Переосмысление Ресурсы Действие Переход
Их можно представить как станции. Контекст определяет, на каких станциях человек мог находиться до расклада. Каждая карта открывает несколько дорог к следующим станциям, а вес дороги показывает, насколько естественным считается переход внутри модели.
Начальные веса:
Состояние |
Вес |
|---|---|
Застой |
0.42 |
Переосмысление |
0.28 |
Ресурсы |
0.16 |
Действие |
0.09 |
Переход |
0.05 |
Самое вероятное начало — «Застой». Для «Повешенного» переходы из него выглядят так:
Следующее состояние |
Вес |
|---|---|
Застой |
0.22 |
Переосмысление |
0.58 |
Ресурсы |
0.10 |
Действие |
0.05 |
Переход |
0.05 |
Жадная стратегия выбирает на каждом шаге самый сильный доступный вариант. Она получает путь:
Застой → Переосмысление → Действие → Переход
Его вес равен:
Но существует более сильный полный маршрут:
Переосмысление → Ресурсы → Действие → Переход
Он начинается с более слабого локального варианта, но выигрывает за счёт последующих переходов. Его вес примерно на выше. Именно такую ошибку локального выбора должен устранить Viterbi.
Почему матрицы заданы вручную
Это не статистика реальных чтений. Матрицы специально сконструированы как контролируемый контрпример, в котором greedy проигрывает глобальному поиску. Такой пример позволяет проверить код и объяснить алгоритм. Для продуктовой или научной модели веса пришлось бы оценивать на размеченных данных, отдельно проверяя устойчивость словаря состояний и переносимость между контекстами.
Формальная модель
Обозначим наблюдаемый вход:
где — контекст,
— вопрос,
— карта, а
— её позиция. Пусть
— смысловое состояние после шага
.
Начальное распределение зависит от контекста и вопроса:
Текущая карта задаёт стохастическую матрицу переходов:
Марковское допущение утверждает, что вся необходимая память уже содержится в последнем состоянии:
Тогда условная вероятность пути факторизуется:
а задача поиска имеет вид:
В примере есть путей. Их можно перебрать, но при росте числа карт и состояний полный перебор становится экспоненциальным.
Это условная неоднородная цепь Маркова, а не классическая HMM: карты здесь не являются наблюдениями, порождёнными скрытым состоянием. Однако задача поиска максимального пути имеет ту же динамическую структуру, что и декодирование Viterbi для HMM [1].
Этап 1. Viterbi сохраняет лучшего победителя для каждой станции
Перейдём к логарифмам:
Для невозможного перехода принимается . Обозначим через
лучшую оценку префикса, который заканчивается в
:
Для восстановления маршрута запоминается предшественник:
Если два пути пришли в одно состояние, а все будущие переходы зависят только от этого состояния, проигравший путь уже не сможет обогнать победителя. Поэтому Viterbi хранит не все истории, а одного победителя для каждого конечного состояния. Он находит точный максимум за операций при
[1].
Упрощённый псевдокод:
for card in cards: for next_state in states: best[next_state] = max( previous[current_state] + log_transition(card, current_state, next_state) for current_state in states )
В учебном примере Viterbi и полный перебор находят один путь с весом 0.0923552, а greedy остаётся на 0.076734.
Две разные логики отсечения

Эта схема показывает важное различие. Viterbi не является «beam с большой шириной»: он использует структуру задачи и объединяет эквивалентные префиксы. Beam search просто ограничивает число живых гипотез.
Где Viterbi перестаёт быть достаточным
Для описанной цепи Viterbi уже решает задачу точно. Beam search здесь не нужен. Он появляется после расширения модели.
Сравним два пути:
Застой → Переосмысление → Действие Ресурсы → Ресурсы → Действие
Оба заканчиваются состоянием «Действие», поэтому локальная цепь считает их эквивалентными для будущего. Но их повествовательный смысл различается. Интерпретация может зависеть от всей истории: от противоречий между картами, повторов, соответствия контексту и разнообразия альтернатив.
Расширенную оценку запишем так:
где оценивает соответствие контексту,
— глобальную связность, а
штрафует повторы и противоречия.
Если эти компоненты зависят от всей истории или от свободного текста, оптимальная подструктура исчезает. Историю можно включить в расширенное состояние, но число состояний быстро растёт. Теперь нужен приближённый поиск.
Этап 2. Beam search сохраняет несколько историй
Начальный beam содержит лучших стартовых состояний:
Пусть — набор из
живых префиксов. На следующем шаге строятся все допустимые продолжения:
Затем остаются кандидатов с наибольшей доступной оценкой префикса:
При это жадный поиск. Если каждая гипотеза имеет не более
продолжений, beam оценивает порядка
кандидатов. В задачах генерации последовательностей такой декодер приближённо максимизирует условную вероятность при ограниченном бюджете [2].
На нашем контрпримере:
Метод |
Лучший путь |
Вес пути |
|---|---|---|
Greedy / beam |
Застой → Переосмысление → Действие → Переход |
0.076734 |
Beam |
Переосмысление → Ресурсы → Действие → Переход |
0.092355 |
Viterbi |
Переосмысление → Ресурсы → Действие → Переход |
0.092355 |
Полный перебор |
Переосмысление → Ресурсы → Действие → Переход |
0.092355 |

Совпадение при относится только к этому примеру. Удалённая из beam гипотеза не возвращается, поэтому общей гарантии оптимальности нет. Более того, увеличение ширины может улучшать внутреннюю вероятность и одновременно ухудшать внешнюю метрику качества [3].
Обычный beam также часто возвращает несколько почти одинаковых формулировок. Diverse Beam Search добавляет штраф за сходство между группами гипотез и направлен на получение содержательно разных вариантов [4].
Поиск пути и генерация текста — разные задачи
Пусть поисковый модуль вернул множество структурированных путей:
LLM может сначала переоценить этот небольшой набор:
а затем превратить выбранный путь в текст:
Здесь — оценка кандидата языковой моделью, а
— модель вербализации. Один и тот же LLM технически может выполнять обе операции, но архитектурно их полезно разделять: тогда можно проверить, ошибся поиск, reranking или генератор текста.
Работы по информационному поиску показывают, что LLM действительно можно использовать для переупорядочивания конечного списка документов [14]. Перенос этого приёма на смысловые пути остаётся гипотезой, которую необходимо проверять отдельно: высокая языковая убедительность ещё не означает корректную интерпретацию.
Результаты поиска и соседние методы
Итоговая схема сопоставляет Viterbi, beam search, diverse beam, A*, MCTS и LLM reranking по глобальности поиска и вычислительной стоимости.


Метод |
Что сохраняется |
Когда полезен |
Ограничение |
|---|---|---|---|
Viterbi |
Один лучший префикс для каждого состояния |
Локальный score и конечная цепь |
Требует оптимальной подструктуры |
Beam search |
|
Большое ветвление, свободный текст |
Может рано удалить будущего победителя |
Diverse Beam Search |
Несколько групп с учётом различий |
Нужны разные перспективы |
Разнообразие зависит от выбранного штрафа |
A* |
Очередь путей по стоимости |
Есть информативная эвристика остатка |
Точная гарантия требует допустимой эвристики [11] |
MCTS / UCT |
Статистика выборочных продолжений |
Есть симулятор или дорогая итоговая награда |
При конечном бюджете результат приближённый [12] |
LLM reranking |
Уже найденный конечный список |
Нужна глобальная языковая оценка |
Нет гарантии поиска и возможны смещения модели |
A* особенно интересен, если можно построить верхнюю оценку будущего score или, после перехода к стоимости , нижнюю оценку оставшихся затрат. MCTS уместен только тогда, когда продолжения можно симулировать, а качество полного пути оценивается чёрным ящиком. Для трёх карт оба метода были бы избыточны.
Более общая математика: фактор-граф и CRF
Цепь Маркова — не единственный способ записать задачу. Если смысл первой и третьей карты взаимодействует напрямую или весь путь проверяется отдельным глобальным правилом, удобнее использовать фактор-граф:
Каждый фактор оценивает только связанное с ним подмножество переменных
. Обычная цепь получается, если оставить начальный фактор и попарные факторы соседних состояний. Фактор-граф делает явными более дальние зависимости, но точный вывод на графе с циклами может стать дорогим [9].
Ещё более естественный мост к NLP — linear-chain Conditional Random Field:
CRF сразу моделирует условное распределение пути при известном входе и позволяет включать произвольные признаки контекста, карты и позиции. Если факторы остаются локальными и попарными, MAP-путь всё ещё можно найти рекурсией Viterbi. Разница в том, что локальные переходные вероятности заменяются потенциалами признаков, а распределение по полным путям глобально нормируется через [10].
От пяти ярлыков к семантическим эмбеддингам
Пять состояний удобны для объяснения, но реальный смысл редко укладывается в фиксированный список. Альтернатива — представлять трактовку вектором :
Первый член оценивает близость трактовки к контексту и карте, второй — связность соседних смыслов. Современные sentence-embedding модели позволяют получать такие векторные представления текста [13].
Но непрерывное пространство нельзя просто перебрать рекурсией по пяти состояниям. Практический компромисс — сначала извлечь для каждой карты top- текстовых кандидатов по близости эмбеддингов, затем применить beam search или reranking к конечному набору.
Как превратить иллюстрацию в исследование
Качественное исследование AI-поддержки Таро описывает эту практику как согласование множественных смыслов в ситуации, где случайно выбранная карта не имеет причинной связи с вопросом [5]. Эксперименты с очными и слепыми чтениями, эффект персональной валидации и активная роль клиента показывают, почему контекст и обратную связь нельзя смешивать с вкладом самой карты [6–8].
Для проверки вычислительной модели нужен отдельный протокол:
До обучения зафиксировать словарь состояний и правила разметки.
Собрать обезличенные пары «контекст — карты» и несколько независимых интерпретаций для каждой пары.
Использовать нескольких аннотаторов и измерить их согласованность.
Учить веса только на training-части, а сравнивать алгоритмы на отложенных примерах.
Добавить контрольные варианты: ответ без карт, перемешанные значения карт, случайные слова и скрытый от интерпретатора контекст.
Раздельно оценивать качество смыслового пути, качество итогового текста, разнообразие альтернатив и инструментальную пользу для пользователя.
Сравнить greedy, Viterbi, beam, diverse beam и LLM reranking при одинаковом вычислительном бюджете.
Провести анализ чувствительности: возмущать веса и проверять, насколько устойчив лучший путь.
Если исследовательский вопрос касается предсказания внешних событий, это уже другой эксперимент: прогноз нужно фиксировать заранее, задавать временной горизонт и сравнивать с моделью, которая видит тот же контекст, но не видит карт.
Вывод: Таро здесь — наглядный интерфейс общей задачи
В этой постановке карта не выдаёт готовый ответ. Она меняет веса в пространстве возможных смыслов. Контекст задаёт начальные предпочтения, алгоритм поиска собирает связный путь, а генератор превращает структуру в текст.
Если оценка раскладывается по локальным переходам конечной цепи, Viterbi даёт точный максимум. Если важны полная история, свободный текст и несколько альтернатив, появляются beam search, diverse decoding, A*, MCTS и LLM reranking. Фактор-графы и CRF позволяют выразить более богатые зависимости, а эмбеддинги снимают ограничение фиксированного словаря состояний.
Та же схема возникает далеко за пределами Таро:
неоднозначный вход ↓ локальные варианты ↓ поиск глобально связной последовательности ↓ человекочитаемое представление
В распознавании речи локальными вариантами становятся фонемы или слова, в машинном переводе — токены перевода, в разметке текста — последовательности тегов, а в LLM — продолжения контекста. Таро здесь интересно не как исключение из вычислительной логики, а как необычно наглядный пример того, как система строит один связный смысл из множества допустимых.
Источники
Lawrence R. Rabiner. A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition. Proceedings of the IEEE, 1989.
Markus Freitag, Yaser Al-Onaizan. Beam Search Strategies for Neural Machine Translation. ACL, 2017.
Eldan Cohen, Christopher Beck. Empirical Analysis of Beam Search Performance Degradation in Neural Sequence Models. ICML, 2019.
Ashwin K. Vijayakumar et al. Diverse Beam Search for Improved Description of Complex Scenes. AAAI, 2018.
Susan J. Blackmore. Divination with Tarot Cards: An Empirical Study. Journal of the Society for Psychical Research, 1983.
Bertram R. Forer. The Fallacy of Personal Validation: A Classroom Demonstration of Gullibility. Journal of Abnormal and Social Psychology, 1949.
Christopher A. Roe. Persuasion in the Context of a Psychic Reading. PhD thesis, University of Edinburgh, 1996.
Frank R. Kschischang, Brendan J. Frey, Hans-Andrea Loeliger. Factor Graphs and the Sum-Product Algorithm. IEEE Transactions on Information Theory, 2001.
Peter E. Hart, Nils J. Nilsson, Bertram Raphael. A Formal Basis for the Heuristic Determination of Minimum Cost Paths. IEEE Transactions on Systems Science and Cybernetics, 1968.
Levente Kocsis, Csaba Szepesvári. Bandit Based Monte-Carlo Planning. ECML, 2006.
Nils Reimers, Iryna Gurevych. Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks. EMNLP-IJCNLP, 2019.
Weiwei Sun et al. Is ChatGPT Good at Search? Investigating Large Language Models as Re-Ranking Agents. EMNLP, 2023.
Дополнительные объяснения на русском: