Что такое FSRS
FSRS расшифровывается как Free Spaced Repetition Scheduler — открытый алгоритм планирования интервальных повторений. Он не выдаёт всем одинаковую последовательность вроде «через день, три дня и неделю». Вместо этого хранит состояние каждой карточки, учитывает историю оценок и рассчитывает срок следующей проверки.
FSRS является механизмом внутри системы повторений. Пользователю не нужно вычислять формулы или следить за версиями параметров во время занятия. Его задача — сначала попытаться вспомнить ответ и затем оценить реальную попытку. Очередь, сроки и сохранение состояния берёт на себя приложение.
Difficulty, Stability и Retrievability простым языком
Официальное описание FSRS использует модель DSR: Difficulty, Stability и Retrievability. Эти величины нужны для расчёта, но их нельзя воспринимать как лабораторные показатели человека.
| Величина | Что означает в модели | Как проявляется в занятии |
|---|---|---|
| Difficulty — сложность | Насколько трудно улучшать устойчивость этой карточки. | Карточка, которая регулярно даётся тяжело, не уходит далеко. |
| Stability — стабильность | Масштаб времени, на котором воспоминание сохраняется. | Уверенные повторения обычно позволяют увеличить интервал. |
| Retrievability — извлекаемость | Расчётная вероятность вспомнить ответ в выбранный момент. | С течением времени она снижается и влияет на новый срок. |
В FSRS-6 состояние памяти представлено сложностью и стабильностью, а извлекаемость рассчитывается для конкретного момента. Официальная документация описывает 21 параметр и формулы их применения. Для понимания пользовательского процесса достаточно знать направление: забытый ответ сокращает путь до следующей проверки, уверенный — обычно позволяет его увеличить. Официальное описание алгоритма FSRS-6.
Как из ответа получается следующая дата
- Система читает текущее состояние карточки. Для новой карточки история ещё отсутствует; для изучаемой известны предыдущая оценка, срок и параметры памяти.
- Пользователь пытается вспомнить ответ. Сам просмотр лицевой стороны не изменяет расписание.
- Оценка сообщает результат попытки. Четыре варианта различают забывание, трудное, обычное и лёгкое воспроизведение.
- FSRS обновляет состояние. Новые значения зависят от прежней стабильности, сложности, прошедшего времени и оценки.
- Планировщик выбирает срок. Он сопоставляет новое состояние с желаемым удержанием и максимальным интервалом.
- Приложение сохраняет решение. При наступлении срока карточка снова становится доступна в очереди.
Сразу после первого знакомства или забывания карточка может несколько раз вернуться через короткие промежутки. Эти learning и relearning steps помогают завершить начатый цикл. Когда ответ становится устойчивее, интервалы переходят к дням, неделям и более длинным периодам.
Что означает желаемое удержание
Желаемое удержание — целевая вероятность, при которой планировщик старается назначать следующую проверку. Например, ориентир 0,90 не означает, что человек гарантированно вспомнит ровно 90% карточек. Это входной параметр модели, определяющий компромисс между длиной интервалов и объёмом работы.
Более высокая цель обычно сокращает интервалы и увеличивает число повторений. Более низкая уменьшает ежедневную нагрузку, но допускает больше забываний. Поэтому настройку следует менять по реальному времени и результатам, а не стремиться к максимальному проценту.
Идея оптимизировать расписание через модель динамики памяти описана в работе Е и соавторов. Авторы чередуют предсказание памяти и оптимизацию расписания на данных повторений. Их результаты показывают свойства исследованной модели и наборов данных, но не являются гарантией результата для конкретной интеграции CardReplay. IEEE Transactions on Knowledge and Data Engineering, 2023.
Как четыре оценки изменяют модель
| Оценка | Сигнал для планировщика | Когда выбирать |
|---|---|---|
| Снова / Again | Ответ не извлечён; требуется переучивание. | Ключевой смысл появился только после переворота. |
| Трудно / Hard | Воспроизведение удалось с серьёзным затруднением. | Ответ в целом получен, но медленно, неуверенно или неполно. |
| Хорошо / Good | Обычное успешное самостоятельное воспроизведение. | Нужный смысл получен без критической подсказки. |
| Легко / Easy | Уверенный ответ допускает более длинный путь. | Ответ появился сразу, полно и без заметного усилия. |
Оценка нужна не для управления желаемой датой, а для описания текущей попытки. Если выбирать «Легко» ради длинного интервала или «Снова» из стремления к идеальному знанию, история перестаёт соответствовать реальным ответам и прогноз становится менее содержательным.
Планировщик и оптимизатор — не одно и то же
Планировщик применяет набор параметров к состоянию карточки и решает, когда она вернётся. Оптимизатор анализирует большую историю конкретного пользователя и подбирает параметры модели под эти данные. FSRS может работать с общими параметрами без персональной оптимизации.
Используемая CardReplay библиотека Java-FSRS реализует планирование, расчёт извлекаемости, шаги обучения и четыре оценки, но её официальная документация прямо указывает, что оптимизация параметров в пакете не поддерживается. Для неё нужны отдельные инструменты и достаточная качественная история повторений. Документация Java-FSRS.
Почему это различие важно
Фраза «использует FSRS» ещё не означает, что параметры уже обучены на истории каждого человека. Можно надёжно применять открытый планировщик с проверенными параметрами по умолчанию, а персональную оптимизацию добавлять только после накопления достаточных данных и контроля качества.
Как FSRS-6 внедрён в CardReplay
CardReplay использует FSRS-6 через официальный JVM-пакет версии 1.0.0. Алгоритм изолирован на backend: браузер показывает очередь и варианты оценок, но не назначает итоговую дату самостоятельно. В состоянии и журнале сохраняется версия `fsrs-6/java-fsrs-1.0.0`, чтобы будущие изменения можно было отличить от прежних решений.
- Для карточки хранятся стабильность, сложность, срок, последняя проверка, этап обучения и ревизия.
- Дневная очередь учитывает новые, назначенные и просроченные карточки, часовой пояс и общие лимиты пользователя.
- Сервер заранее возвращает интервалы для четырёх возможных оценок и после выбора атомарно сохраняет новое состояние.
- Идемпотентный ключ защищает от двойной отправки, а ожидаемая ревизия — от записи решения поверх уже изменившейся карточки.
- Свободный прогресс хранится отдельно: включение расписания не превращает статусы «Изучается / Освоено / Трудно» в искусственную историю FSRS.
Сейчас используются 21 параметр FSRS-6 по умолчанию. Персональная оптимизация по истории пользователя намеренно отложена до накопления достаточного числа качественных повторений. Поэтому точная публичная формулировка — «CardReplay рассчитывает расписание через FSRS-6», а не «алгоритм уже полностью обучен лично на вас».
Пользовательский сценарий и переключение со Свободного режима подробно показаны на странице Повторения по расписанию.
Какие выводы из FSRS делать нельзя
- «Алгоритм знает точный момент забывания». Извлекаемость является вероятностной оценкой модели, а не измерением конкретного воспоминания.
- «90% удержания гарантирует 90% ответов». Это целевой параметр планирования; реальные результаты зависят от данных, карточек, поведения и контекста проверки.
- «FSRS заменяет понимание». Расписание возвращает к вопросу, но не объясняет тему и не создаёт перенос на новую задачу.
- «Чем чаще, тем лучше». Слишком короткие интервалы увеличивают нагрузку и могут превращать воспроизведение в узнавание недавнего ответа.
- «Название алгоритма доказывает эффективность продукта». Корректность интеграции подтверждают код, тесты и наблюдаемое поведение; учебный результат требует отдельных пользовательских данных и не обещается заранее.