For AI agents: the complete documentation index is available at https://open-spaced-repetition.github.io/ts-fsrs/ja-JP/llms.txt, the full documentation bundle is available at https://open-spaced-repetition.github.io/ts-fsrs/ja-JP/llms-full.txt, and this page is available as Markdown at https://open-spaced-repetition.github.io/ts-fsrs/ja-JP/guide/model/fsrs-7.md.

FSRS-7

移行ガイド

記憶状態だけを再構築し、既存カードの次回復習日時を変更しない移行手順は v6 と FSRS-7 への移行ガイドを参照してください。

FSRS-7 は 34 個の重みと二つの記憶成分を使います。記憶状態は stability(遅い成分)、stabilityFast(速い成分)、difficulty で構成されます。

記憶状態と記号

共通の記号に加え、SsS_s を stability、SfS_f を stabilityFast とします。どちらも単位は日ですが、混合した想起確率が 90% に達する間隔とは一致しません。難易度は遅い成分の曲線と混合重みの両方に影響します。

数式には範囲内に制限した復習前の状態を使います。両方の安定度は [0.0001, 36500]、難易度は [1, 10] です。経過時間 tt は小数の日数で、曲線では max⁡(t,0)\max(t,0) を使います。「速い」「遅い」は成分の名前であり、二つの安定度の大小関係を保証しません。

初期記憶

新しい記憶状態について、CsC_s と CfC_f を遅い成分と速い成分の安定度の範囲へのクリップ、CDC_D を [1, 10] へのクリップとします。

Ss,0=Cs(wG−1),Sf,0=Cf(0.8Ss,0)S_{s,0}=C_s(w_{G-1}),\qquad S_{f,0}=C_f(0.8S_{s,0})
D0(G)=w4−ew5(G−1)+1,Dinitial=CD(D0(G))D_0(G)=w_4-e^{w_5(G-1)}+1,\qquad D_{initial}=C_D(D_0(G))

二成分の忘却曲線

速い成分:

df=−clamp⁡(w23Sfw33−0.3,0.01,0.95)d_f=-\operatorname{clamp}(w_{23}S_f^{w_{33}-0.3},0.01,0.95)
Ff=exp⁡(min⁡(ln⁡w25df,60))−1F_f=\exp\left(\min\left(\frac{\ln w_{25}}{d_f},60\right)\right)-1
Rf(t)=(1+FftSf)dfR_f(t)=\left(1+F_f\frac{t}{S_f}\right)^{d_f}

遅い成分:

ds=−clamp⁡(w24,0.01,0.95)d_s=-\operatorname{clamp}(w_{24},0.01,0.95)
Fs=(w261/ds−1)e(D−5)(w32−0.3)F_s=(w_{26}^{1/d_s}-1)e^{(D-5)(w_{32}-0.3)}
Rs(t)=(1+FstSs)dsR_s(t)=\left(1+F_s\frac{t}{S_s}\right)^{d_s}

混合重みと想起確率

二つの重みは正の非正規化係数です。経過時間ではなく記憶状態で決まります。成分そのものの想起確率は、混合結果への寄与とは異なります。

af=w27Sf−w29,as=w28Ssw30e(D−5)(w31−0.5)a_f=w_{27}S_f^{-w_{29}},\qquad  a_s=w_{28}S_s^{w_{30}}e^{(D-5)(w_{31}-0.5)}
R(t)=afRf(t)+asRs(t)af+as(1−2ε)+ε,ε=10−5R(t)=\frac{a_fR_f(t)+a_sR_s(t)}{a_f+a_s}(1-2\varepsilon)+\varepsilon,\qquad\varepsilon=10^{-5}

algorithm.curve(t, state) は fast、slow、fastWeight、slowWeight、retrievability、derivative を返します。最初の二つは成分そのものの想起確率であり、混合時には重みを正規化します。最後の微小な調整により確率は 0 と 1 を避けるため、R(0)=0.99999R(0)=0.99999 です。

復習後の安定度

成分の安定度 xx、想起確率の入力 qq、パラメーターのオフセット kk に対し、忘却後の値と想起成功時の更新を次のように定義します。

Lk(x,q)=min⁡(x,wk+3((x+1)wk+4−1)e(1−q)wk+5)L_k(x,q)=\min\left(x,w_{k+3}((x+1)^{w_{k+4}}-1)e^{(1-q)w_{k+5}}\right)
Hk,G={wk+6,G=21,G≠2,Ek,G={wk+7,G=41,G≠4H_{k,G}=\begin{cases}w_{k+6},&G=2\\1,&G\ne2\end{cases},\qquad E_{k,G}=\begin{cases}w_{k+7},&G=4\\1,&G\ne4\end{cases}
Uk(x,q,G)=x[1+ewk−1.5(11−D)x−wk+1(e(1−q)wk+2−1)Hk,GEk,G]U_k(x,q,G)=x\left[1+e^{w_k-1.5}(11-D)x^{-w_{k+1}}(e^{(1-q)w_{k+2}}-1)H_{k,G}E_{k,G}\right]
Tk(x,q,G)={Lk(x,q),G=1max⁡(Lk(x,q),Uk(x,q,G)),G∈{2,3,4}T_k(x,q,G)=\begin{cases}L_k(x,q),&G=1\\\max(L_k(x,q),U_k(x,q,G)),&G\in\{2,3,4\}\end{cases}

遅い成分には k=7k=7 と混合確率 RR、速い成分には k=15k=15 と速い成分そのものの確率 RfR_f を使います。すべて復習前の難易度を使います。retrievability を明示すると、遅い成分と難易度の更新に使う RR を置き換えますが、速い成分の RfR_f は置き換えません。

Again では、新しい速い安定度を新しい遅い安定度の 80% 以下に制限してから、状態の範囲を適用します。

S~s=T7(Ss,R,G),S~f=T15(Sf,Rf,G)\widetilde S_s=T_7(S_s,R,G),\qquad \widetilde S_f=T_{15}(S_f,R_f,G)
Ss′=Cs(S~s),Sf′=Cf({min⁡(S~f,0.8S~s),G=1S~f,G≥2)S'_s=C_s(\widetilde S_s),\qquad S'_f=C_f\left(\begin{cases}\min(\widetilde S_f,0.8\widetilde S_s),&G=1\\\widetilde S_f,&G\ge2\end{cases}\right)

復習後の難易度

Again は混合想起確率で難易度の変化を調整します。平均回帰係数は 0.01 固定です。

ΔD=−w6(G−3){R+0.1,G=11,G≥2\Delta D=-w_6(G-3)\begin{cases}R+0.1,&G=1\\1,&G\ge2\end{cases}
D′=CD(0.01D0(4)+0.99(D+10−D9ΔD))D'=C_D\left(0.01D_0(4)+0.99\left(D+\frac{10-D}{9}\Delta D\right)\right)

実装は三つの新しい状態値を小数点以下 8 桁に丸め、各範囲にクリップします。FSRS-7 はゼロを含む小数の経過日数に同じ更新式を使い、enableShortTerm で制御する別の同日更新式はありません。学習ステップのスケジューリングは引き続き middleware のポリシーです。

間隔の計算

nextInterval(state, r) は混合曲線が目標確率に達する経過時間を数値的に求めます。三つの状態フィールドすべてに依存し、小数の日数を返します。

R(I;Ss,Sf,D)=rR(I;S_s,S_f,D)=r

実装は 0<r<10<r<1 を検証し、目標を [0.0001, 0.9999] に制限します。上限の目標ではゼロを返します。それ以外は対数時間で最大 7 回の有界 Newton 更新を行い、想起確率の誤差が 0.001 を超える場合は二分探索に切り替えます。結果は sMax で制限されるため、極端な目標には到達できない場合があります。

設定と移行

FSRS-7 には専用の 34 個の重みが必要です。パラメーター移行関数は空の入力に既定値を補いますが、空でない入力には 34 個の重みが必要です。FSRS-3〜6 の重みと記憶状態を FSRS-7 に直接変換することはできません。カードデータを移行するには、FSRS-7 を使うスケジューラーで reschedule により復習履歴を再生し、小数の経過日数を保持して記憶状態を再構築してください。上記の 0.8 係数は初期化と Again の更新に使います。