You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在词汇学习Web应用中实现基于掌握度的概率随机抽词功能

可行实现方案

前置准备:给单词对象新增统计字段

先为每个单词的对象结构补充答题统计属性,用于后续计算抽词概率:

  • correctCount:累计答对次数,初始值为0
  • wrongCount:累计答错次数,初始值为0
  • continuousCorrect:连续答对次数,初始值为0
  • lastAnsweredAt:最后一次作答的时间戳,初始值为null

方案1:加权随机抽样(改造成本最低)

核心逻辑是给每个单词计算权重,权重越高被抽到的概率越大,最低保留基础权重避免已掌握的单词完全不出现。
权重计算公式可以根据需求灵活调整,示例逻辑:未答过的单词权重最高,答错次数越多权重越高,答对次数越多权重越低。
代码实现参考:

// 计算单个单词的抽词权重
const getWordWeight = (word) => {
  // 从未作答过的单词权重最高
  if (word.correctCount === 0 && word.wrongCount === 0) return 5
  // 最低保留0.2的基础权重,避免已掌握单词完全不会被抽到
  return Math.max(0.2, (word.wrongCount + 1) / (word.correctCount + 1) * 2)
}

const newIndex = () => {
  // 生成所有单词的权重数组,计算总权重
  const weightList = words.map(getWordWeight)
  const totalWeight = weightList.reduce((sum, weight) => sum + weight, 0)
  // 生成0~总权重区间的随机数
  let randomValue = Math.random() * totalWeight
  // 匹配随机数落在的权重区间,返回对应单词索引
  for (let i = 0; i < words.length; i++) {
    randomValue -= weightList[i]
    if (randomValue <= 0) return i
  }
  return 0 // 异常场景兜底
}

该方案优势:原有业务逻辑几乎不需要改动,只需要替换抽词函数即可上线,权重参数可以随时调整适配不同的学习节奏。


方案2:简化版间隔重复逻辑(学习效果最优)

参考记忆软件的间隔重复设计,根据用户的掌握程度调整单词下次出现的间隔,示例规则:

  • 答错的单词:10分钟后再次出现
  • 第一次答对:1天后再次出现
  • 连续答对2次:3天后再次出现
  • 连续答对3次:7天后再次出现
  • 连续答对5次以上:30天后再次出现
    抽词时优先抽取已经到了复习时间的单词,剩余配额再从还没到复习时间的单词里做加权随机抽取,更符合艾宾浩斯记忆曲线规律,适合长期词汇学习使用。

方案3:熟练度分级池方案(逻辑最直观易维护)

把所有单词按照掌握程度拆分到四个独立的池子里:

  • 未学习池:从未作答过的单词
  • 不熟练池:答错次数 ≥ 答对次数的单词
  • 熟练池:答对次数比答错次数多2次及以上的单词
  • 已掌握池:连续答对5次及以上的单词
    每次抽词时按固定比例从不同池子抽取:60%从不熟练池抽,25%从未学习池抽,10%从熟练池抽,5%从已掌握池抽。
    该方案逻辑非常直白,后续想要调整不同熟练度单词的出现频率,直接修改抽词比例即可,不需要调整复杂的权重计算公式。

通用注意事项

每次用户提交答题结果后,要及时更新对应单词的统计字段,保证抽词概率计算准确。以上三种方案都保留了随机性,不会出现固定的抽词顺序,避免用户靠位置记忆单词。

内容的提问来源于stack exchange,提问作者btm2424

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:42:03