间隔重复插件obsidian-spaced-repetition-recall 分享

测试了新版本, 正反卡片学习记录错位和5-10分钟不能review的问题已FIX.

有一个建议, 集中存放进度记录后,想了解某卡片的学习情况,现在要利用集中复习某笔记,然后遍历其中的卡片到所要,再查看进度数据.
建议简单修改集中复习某笔记的代码,让当前光标所在的卡片在repeat队列的第一个显示,这样就一定程度解决了查看学习记录困难的问题.

另外,显示学习记录时, 建议也把卡片的行号和Hash值也显示出来, 并且对于丢失学习记录的,在新的行号和hash值打上*号标示出来,引起注意.

在原版及supermemo里,对惰性考虑不足,若是拖延过久才复习时,不管是hard,good,easy,都会导致next interval变得越来越长.
recall里引入了balance函数, 受此启发,是否可以这样应对惰性问题:
当选择hard时,越是偏离学习计划超过某数值,一律回炉再造,当作新卡片来对待,调整学习记录;
当选择good和easy, 偏离学习计划超过某数值,也调整学习记录,让重温时间不致于太久远;
每次建立review对列,随机选择数个计划较久远的卡片, 进入队列提前重温;
建立new和review队列后,把new和review合并成study队列并随机打乱,避免长时间学习某标签或发彩信类卡片.

为了获得hard和非hard的计数, 修复一下还是有必要的.
似乎是recall 引入了again这个选项,导致option移位,不再是1对应hard,而是2对应hard.
简单修改代码把比较值改为2就能解决?

我注意到文章学习里是有again这个按钮,是否也为卡片添加again按钮.
again按钮,我理解是对新卡片学习时,先不作评价,让其重新排进队列继续学习一次. 卡片里有个reset功能,稍类似,但点击不方便,其把卡片放到队尾, 达不到强化学习的目的,是否应把卡片插入到第N个卡片之后,较好?

#104
查看光标处卡片信息这个建议挺好的,后续可以试着实现下。

丢失记录打*就没太大必要了,如果真丢失就已经是按新的处理了,打不打没区别,根据实际记忆情况再评分就好。
暂时保持现状吧。

#105
调整记录,没有必要,按算法的排程就好。如果因为临时使用(如考试前突击),可以通过集中复习。
随机排序,最新版已经有了,直接设置就好。

#106
这个是正常的,reset/again就是答案错误的时候用,答案正确才进行排程,至于是放队列尾(默认)还是5分钟后(Fsrs),都大差不差的。实际情况可能,还没全复习完,就关了窗口,再次打开时会重新排序,也不一定在队列尾。
这块不会改的。

关于105,我是指这个:

当偏离计划时间有几天,就会导致hard,good,easy的间隔天数都大幅度增加。
最起码,选择hard时,我是想尽快复习的。
为此,我忽略了延时效应,不管什么时候复习,都按准时复习了计算间隔。
或这不是最好的方法,但对于工作了、有家了、有小孩了的人来说,不能按时复习是常态的。
同学怎么看。

我也有许多堆积的卡片,确实是常态。

你截图中的两个间隔分别是什么,括号外像是正常计算的?

这里是间隔计算的源代码 https://github.com/open-spaced-repetition/fsrs.js/blob/c27c7054d2f1dea90db604b7ce53348a220f90d3/src/index.ts#L195

fsrs算法,是根据复习状态计算间隔的,新学习或重新学习,hard就几分钟。 在State.Review时,会根据之前复习得到的参数计算间隔的,你那应该是对应这个状态。
想用更小的间隔,可以从设置项中修改算法w参数就行了。
最后两个参数影响比较大些,
源码 https://github.com/open-spaced-repetition/fsrs.js/blob/c27c7054d2f1dea90db604b7ce53348a220f90d3/src/index.ts#L307

建议有空可以详细看下具体的说明,间隔计算都是可以从设置w参数进行调整的。

括号里的间隔,就是按时复习的间隔。
可以看到,因为延迟了十多天复习,间隔就会被拉长,这在supermemo和原版都是这样。

这带来两个问题
一是不可能记起什么时候该复习,只会一再延迟,最后越拉越长,失去了习得的作用。
二是延迟后,真的是忘了,本应该要频繁复习才能习得,但选hard也要数天后才复习。之后碰上了 又忘了,但延迟效应,选hard 仍然是要数天后才复习,结果就总是忘了。

嗯,Fsrs默认参数,在review状态时选 hard的间隔是依然比上次大,
@JarrettYe 是否考虑下修改默认参数?

卡片的这个Reset就和again的一样的,复习时如果忘记答案,就点这个。
后续加个选项,让again也在下边一起显示吧。之前好像也有朋友提到这个了。

hard肯定是大于等于上一次间隔的啊,忘了就选again。

他的意思应该是记得,但记得不牢固,像是sm中的猜对吧

这种情况稳定性是提高的,所有参数都是这样的,模型架构就是这么决定的。

举例:
某个卡片,due日是 2024-02-01,由于各种原因,没有按时复习,到2024-02-14才复习,elapsed_days 达到13天。
模型把elapsed_days考虑为熟练因数,认为越推迟学习,表示越熟悉,越可以把记忆曲线拉平,这显然是不合理的。
或许,当作出easy选择时,elapsed确是熟练加权因素,但作出hard选择时,我认为不应考虑elapsed,直接按duedate计算记忆曲线的间隔。

若hard,good,easy 都是记得的选择,只是提供三个下次学习的间隔,可能确是应把elapsed作为熟练加权因素。但这并不是为好好熟悉而推迟,因为这样把记忆曲线拉平,好像也不合理。

卡片的reset,似乎也不是把学习数据重置为新卡片状态,它也当作是累计学习次数,是否等效于10分钟后再学习,而下次学习时,把间隔重置为10分钟,1天,2天?
为了选择一致性,新卡片也应可以AGAIN。

@遥远
看看这是什么情况下出现的BUG,并不频繁出现,而且在学习当天,设置为5分钟,10分钟的卡片,确是数分钟后才能学习,而昨天好晚才复习的卡片,duedate加了一天,又似乎在早些时候又会把这些较晚的卡片也排入review队列,导致代码里触发的SSR学习提前提示。
1

又,或者可以把这段代码引伸为可以随机把较久远后才复习的卡片(如设置N天后),也排进review队列进行提前复习,这类似为闪念记忆。

这两 个截图是同一张卡片的么?
是今天刚复习过的,还是上次复习时间在今天之前的?
image
image

这个调试信息是为了解决今天刚复习过的卡片下次复习时间还是今天时,会提前复习的问题。但好像目前还没解决掉。

是同一张卡片。
比如昨晚0点前学习过的卡片,选择了1天间隔,过0点就提前出现了。
若按照duedate是今晚0点前复习才出现。

而且,提前复习了,good的间隔是1天,若到今晚0点前复习,good的间隔是2天。

btw
从这个方向 debug
选择5分钟和10分钟,不会提前,而1天的,会提前。

是的上次复习在今天前的,复习时间是今天内就必然会提前。

而上次复习时间在今天内的,目前的状态也有可能会提前,应该是要时间到才能复习。这块还没调好,后续有空再弄吧。

上次学习是今天,本次学习也是今天,没有调好,
表示也要调成提前?

这不好吧,现在这提前方式,导致0点后就要复习本应晾一天的卡片,而且间隔也被提前了。

当天的复习量,应分为 当天已到复习时间但尚未复习数量 ,当天已到时并已排进队数量 当天需要复习但未到时的数量。

之前 上次复习时间在今天,新复习时间也在今天(5分钟和10分钟)的,是要第二天才能复习。

请问你是修改了哪个地方(函数),才让数分钟后的卡片也可以当天复习了?我看看你修改的内容。

有多处,具体记不清了,说下大概思路吧:
打开卡片窗口时,
主函数识别笔记中卡片,加载时间信息,过滤现在可以复习的卡片到decks;
flashcard_modal.tsx(好像是这名吧) ui交互,反馈处理,从decks删除已复习的(只是复习队列中的删除,不是真删这个卡片的),打开下张卡片。