复习推荐如何结合IRT、BKT、FSRS

什么是IRT

IRT 是 Item Response Theory(项目反应理论),中文常译为“项目反应理论”或“题目反应理论”。

它常用于把题目按“从易到难”分级,也可以估计学生/用户的能力水平。核心思想是:

题目的难度不是只看答对率,而是结合“作答者能力”和“题目参数”来建模。

最常见的 IRT 模型会估计:

  • θ:作答者能力,能力越高越容易答对
  • b:题目难度,难度越高越难答对
  • a:题目区分度,题目能不能区分高低能力者
  • c:猜测参数,低能力者靠猜也可能答对的概率

一个常见的三参数模型是:

P(答对) = c + (1 - c) / (1 + e^(-a(θ - b)))

简单理解:

  • 如果一个题的 b 很低,它是容易题
  • 如果 b 很高,它是难题
  • 通过估计每道题的 b,就可以把题目从易到难排序
  • 通过估计每个人的 θ,可以知道其能力水平

所以你说的“从易到难分级(IRT算法)”,大概率指的是:
用 IRT 模型根据用户答题数据估计题目难度,再按难度参数排序或分层。

什么是BKT

BKT 是 Bayesian Knowledge Tracing(贝叶斯知识追踪),常用于判断:学生是否已经掌握某个知识点

它回答的问题不是“这道题多难”,而是:

这个学生现在会不会这个知识点?

BKT 的核心状态

对每个学生、每个知识点,BKT 通常维护一个隐藏状态:

掌握 / 未掌握

因为我们看不到学生脑子里是否真的掌握,只能通过答题表现来推断,所以它用贝叶斯方法不断更新概率:

P(掌握)

BKT 常见四个参数

  1. P(L0):初始掌握概率
    学生一开始就会这个知识点的概率。

  2. P(T):学习概率
    学生经过一次练习后,从“未掌握”变成“掌握”的概率。

  3. P(G):猜对概率
    学生没掌握,但答对了。

  4. P(S):失误概率
    学生掌握了,但答错了。

更新逻辑

学生做一道题后,BKT 根据答对/答错更新 P(掌握)

如果答对:

P(掌握) 会上升

如果答错:

P(掌握) 会下降

然后再考虑一次练习带来的学习效果:

P(掌握 after practice)

举个例子

假设某学生对“分数加法”的掌握概率是:

P(掌握) = 0.40

他答对了一道分数加法题,系统会认为:

他可能更会了,P(掌握) 上升到比如 0.65

再考虑这次练习让他学会了一点:

P(掌握) 可能进一步上升到 0.72

如果连续答对,掌握概率越来越接近 1;如果连续答错,掌握概率会保持较低。

BKT 和 IRT、FSRS 的区别

BKT:学生是否掌握某个知识点
IRT:题目难度与学生能力匹配
FSRS:记忆什么时候会忘,什么时候复习

一句话总结

BKT 是一种用答题对错来动态估计学生“会不会某个知识点”的算法,特别适合知识点掌握追踪和自适应学习路径推荐。

什么是FSRS

卡片复习推荐算法介绍——FRSR(Free Spaced Repetition Scheduler)

如何结合IRT、BKT、FSRS

可以把三者组合成一个完整的自适应学习系统:

BKT:判断学生是否掌握某个知识点
IRT:判断题目难度和学生能力是否匹配
FSRS:判断什么时候该复习,防止遗忘

一个合理架构是:

学生做题/复习
   ↓
记录结果:对错、用时、自评、题目、知识点
   ↓
BKT 更新知识点掌握概率
   ↓
IRT 更新学生能力 θ 和题目难度 b
   ↓
FSRS 更新记忆稳定度、难度、下次复习时间
   ↓
推荐下一题/下一次复习

三者各自负责什么

模型 负责的问题 输出
BKT 这个知识点会不会 P(mastery)
IRT 这道题对学生难不难 P(correct)、题目难度 b、能力 θ
FSRS 什么时候会忘 retrievabilitystabilitynext_review

怎么一起用

  1. 先用 BKT 判断知识点掌握

    如果某知识点 P(mastery) 很低,系统应该继续安排基础题。

    P(mastery) < 0.6 → 继续学习/练习
    P(mastery) > 0.85 → 进入复习或提高难度
    
  2. 再用 IRT 选合适难度的题

    在同一个知识点下,选择难度接近学生能力的题。

    item_difficulty ≈ student_ability
    

    太简单会浪费时间,太难会挫败。

  3. 最后用 FSRS 安排复习时间

    对已经掌握的知识点或卡片,用 FSRS 判断什么时候复习。

    retrievability 低 → 近期复习
    stability 高 → 间隔拉长
    

一个推荐策略

如果 P(mastery) 低:
    用 BKT 驱动学习路径,安排基础题

如果 P(mastery) 中等:
    用 IRT 选略高于当前能力的题,促进提升

如果 P(mastery) 高:
    用 FSRS 安排间隔复习,防止遗忘

更具体一点

可以给每个“学生-知识点”维护三类状态:

BKT:
  mastery_probability

IRT:
  ability_theta

FSRS:
  stability
  difficulty
  retrievability
  next_review_at

每次学生作答后:

1. 根据对错更新 BKT 的 mastery_probability
2. 根据题目难度和结果更新 IRT 的 ability_theta
3. 根据答题质量更新 FSRS 的 stability/difficulty
4. 根据三者输出决定下一步:
   - 学新内容
   - 继续练习
   - 提高难度
   - 安排复习

简单产品规则示例

优先级 1:FSRS 到期复习
  如果某知识点 retrievability < 0.8,先复习

优先级 2:BKT 补薄弱知识点
  选择 P(mastery) 最低的知识点

优先级 3:IRT 选题
  在该知识点下选择难度接近 θ 的题

一句话总结:

BKT 决定“学哪个知识点”,IRT 决定“做哪道题”,FSRS 决定“什么时候复习”。