FSRS: आधुनिक और कुशल spaced repetition एल्गोरिदम
(github.com/open-spaced-repetition)- सीखने के revision schedule को optimize करने वाले FSRS का
ABC of FSRSwiki, fsrs4anki से नएawesome-fsrswiki पर चला गया है - जुड़ी हुई MaiMemo research सामग्री spaced repetition scheduling optimization और memory dynamics modeling को क्रमशः ACM KDD और IEEE TKDE papers के रूप में कवर करती है
- एक अलग लेख बताता है कि एक undergraduate student ने ACM KDD paper प्रकाशित करने के अनुभव के जरिए spaced repetition algorithm research की प्रक्रिया कैसे देखी
FSRS-Anki-20kऔरanki-revlogs-10ktime-series विशेषताओं वाले open source datasets के रूप में साथ में प्रस्तुत किए गए हैं- FSRS community-driven independent open source project है, और MaiMemo Inc. जैसे संगठनों का समर्थन core contributors की निरंतर भागीदारी को सहारा देता है
नए wiki पर स्थानांतरित ABC of FSRS
ABC of FSRSpage नए wiki पर चला गया है- नया स्थान: https://github.com/open-spaced-repetition/awesome-fsrs/wiki/ABC-of-FSRS
Spaced repetition research सामग्री
- MaiMemo के 2 papers लिंक किए गए हैं
- A Stochastic Shortest Path Algorithm for Optimizing Spaced Repetition Scheduling: spaced repetition schedule optimization पर ACM KDD paper
- Optimizing Spaced Repetition Schedule by Capturing the Dynamics of Memory: memory dynamics capture के जरिए spaced repetition schedule optimization पर IEEE TKDE paper
- दोनों papers के Chinese version links भी साथ में दिए गए हैं
Research experience लेख
- How did I publish a paper in ACMKDD as an undergraduate?: spaced repetition algorithms से जुड़े research experience पर लेख
Public datasets
- time-series विशेषताओं वाले spaced repetition संबंधित open source datasets उपलब्ध कराए गए हैं
Community project और sponsorship
- FSRS community द्वारा संचालित independent open source project है
- 墨墨背单词 (MaiMemo Inc.) जैसे संगठनों के समर्थन के लिए आभार व्यक्त किया गया है
- MaiMemo का समर्थन Jarrett Ye जैसे core contributors को FSRS में समय और expertise लगाने में सक्षम बनाता है
- ऐसा collaboration FSRS को सभी के लिए freely available अग्रणी spaced repetition algorithm बने रहने में मदद करता है
1 टिप्पणियां
Hacker News की राय
spaced repetition को बेहतर बनाने का एक बहुत कम आंका गया तरीका है cards को आसान बनाना। मुझे पता चला कि प्रभावी cards हैरान करने लायक आसान भी हो सकते हैं।
शुरुआत में मैंने Anki से French vocabulary याद करते हुए English↔French दोनों दिशाओं वाले cards बनाए, लेकिन cards कुछ सौ होते ही synonyms इतने बढ़ गए कि यह तकलीफ़देह हो गया।
बाद में Katzumoto की Japanese सीखने की सलाह मानकर ebooks या web pages के पूरे paragraphs paste किए और सिर्फ़ एक शब्द छिपाने वाले cloze cards बनाए; वे आसान थे, लेकिन असरदार थे।
फिर मैं और आलसी हो गया: कभी शब्द का सिर्फ़ आधा हिस्सा छिपाता, या शब्द को bold कर देता और context में लगभग याद आ जाए तो pass मान लेता—और यह उल्टा बेहतर काम करने लगा।
जब कोई card आता और लगता “अरे, यह card फिर से?”, तो मैं उसे delete कर देता; और 3 बार गलत होने पर Anki को उसे permanent suspend करने के लिए set कर दिया। अगर वह शब्द सच में जानना ज़रूरी होता, तो जल्द ही किसी बेहतर context में फिर दिख जाता, इसलिए समस्या नहीं थी, और मेरी French vocabulary तेज़ी से बढ़ती रही।
मुझे लगता है सबसे बड़ा सुधार बेहतर spaced repetition algorithm से ज़्यादा card format सुधारने से आएगा, और सच कहें तो उपयोगी होने के लिए “बहुत आसान” cards बनाना आश्चर्यजनक रूप से कठिन है। यह तीन भाषाओं में Anki के 35,000+ repetitions के अनुभव के आधार पर कह रहा हूँ।
मैंने अक्सर देखा है कि लोग कुछ सीखने के पहले महीने में Anki में हज़ारों cards ठूंस देते हैं, और एक-दो महीने बाद review load से दब जाते हैं; review कामकाज जैसा लगने लगता है और वे छोड़ देते हैं।
फर्क डालने वाली सलाह दो हैं: cards को थोड़ा ‘बहुत’ आसान बनाइए, और कौन से cards डालने हैं इसमें काफ़ी चयनशील रहिए।
जब आप पहली बार card बनाते हैं, तो आप उस topic को अभी-अभी पढ़ रहे होते हैं और वह दिमाग़ में ताज़ा होता है, इसलिए अपने वर्तमान version के लिए मज़ेदार और challenging card बनाने का मन करता है। लेकिन 1–2 हफ्ते बाद ऐसा card बेहतर होता है जो भ्रमित करने के बजाय memory को हल्का-सा touch करे।
पूरी किताब के sentences को जस का तस Anki में डालने के बजाय, orchard में टहलने की तरह धीरे-धीरे देखिए और सिर्फ़ सबसे अच्छे एक-दो apples चुनिए। सड़े हुए apples—यानी boring या बहुत मुश्किल cards—पूरे deck को दूषित कर देते हैं और आपको review से ही बचने पर मजबूर करते हैं।
Review आमतौर पर तेज़ी से निकल जाते हैं, इसलिए प्रति card learning time में creation time surprisingly बड़ा हिस्सा ले लेता है। आजकल मैं context कम से कम डालता हूँ, और dictionary plugin जो basic simple cards बनाता है, वे अक्सर काफ़ी होते हैं।
Card के front पर खास तौर पर context जोड़ना लगभग हमेशा तभी होता है जब वह कोई ऐसा technical term हो जो उसी context में दिखता है—यानी independently सीखने लायक नहीं होता।
हालांकि आलसी रहना और अपने साथ उदार होना अच्छा है, ऐसा मुझे लगता है। Answer grade करते समय भी native-level perfect mastery नहीं, बल्कि क्या मैंने वास्तविक confusion से बचने लायक समझ लिया है—इसी आधार पर काफ़ी ढीलेपन से judge करता हूँ।
वे card quality को काफ़ी बेहतर कर देंगे।
उदाहरण के लिए fretboard notes को spaced repetition से brute-force किया जा सकता है, लेकिन असल में context मिलाना ज़्यादा प्रभावी रहा।
किसी हफ्ते आलस में सिर्फ़ note names drill करता हूँ, दूसरे हफ्ते Hungarian scale जैसी अजीब scales से खेलता हूँ, और किसी और हफ्ते arpeggio chords या power chord progressions, या किसी खास गाने की sound/feel recreate करने की कोशिश करता हूँ।
समय के साथ दिमाग़ connections बनाने लगता है। “यह तो बस G minor scale है”, “यह G major scale है, बस वे notes skip कर रहा है”, “इस pattern से क्या वैसा play कर सकते हैं?”—ऐसी समझ आने लगती है।
यह भी अजीब लगता है कि जो मैं जानता हूँ उससे कहीं तेज़ी से यह एहसास बढ़ता है कि मैं क्या नहीं जानता। फिर भी सोच रहा हूँ कि कोई spaced repetition algorithm इस्तेमाल करूँ जो 5–10 मिनट के guitar tasks दे, ताकि muscle memory और neural connections दोनों साथ बढ़ें।
शायद content सिर्फ़ language से ज़्यादा विविध है, इसलिए card format का प्रभाव बहुत ज़्यादा महसूस होता है। दूसरों के बनाए decks में भी मैं answer side के wording को अक्सर सुधारता हूँ, और retention में महसूस होने लायक फर्क पड़ता है।
संक्षिप्त और natural flow वाले answers बेहतर चिपकते हैं। अगर कोई card awkward लगे, तो बिना हिचक उसे सुधारना बेहतर है।
Anki से मैंने foreign language के दसियों हज़ार शब्द याद किए हैं, और card में picture हो तो शब्द याद रखने में हमेशा मदद मिली।
अभी मैं परिवार के साथ खेले जाने वाले quiz game के 750 cards याद करने का थोड़ा मूर्खतापूर्ण project कर रहा हूँ। ये वे cards हैं जिनमें हर सवाल का जवाब कोई year है। जैसे: “Coca Cola Light किस साल आया?”
Midjourney से card images बनाने पर याद करना बहुत आसान हो जाता है।
मैं हर century के लिए एक representative person वाला system इस्तेमाल करता हूँ। Einstein 1900–2000 को दिखाता है, Marie-Antoinette 1700–1800 को।
Objects decade को दिखाते हैं। 60s की car मतलब 60s, shoulder-pad jacket मतलब 80s, इसी तरह। आख़िरी digit को भी इसी तरह handle करता हूँ।
Midjourney से इन elements को cartoon-style image में बनवाता हूँ, और सबसे मज़ेदार या बेतुकी image save करके Anki card के back में डालता हूँ। Image अक्सर year की तुलना में ज़्यादा आसानी से याद आ जाती है।
दूसरी, जिन real situations में image नहीं होती, उनमें recall खराब हो सकता है, इसलिए समय-समय पर image के साथ और बिना image के अलग-अलग test करना चाहिए।
तीसरी, जिज्ञासा है कि क्या वह quiz Trivial Pursuit है। मेरे एक दोस्त ने original Genus edition के सारे cards जानबूझकर याद कर लिए थे।
दिलचस्प। बेंचमार्क के मुताबिक, इस algorithm का इस्तेमाल करने पर classical Anki algorithm की तुलना में 20~30% कम cards review करने पड़ते हैं
कुछ दिन पहले मैंने https://python.cards में इस्तेमाल होने वाले classical SM-2 algorithm की Python implementation public की थी, और शायद इसे FSRS पर switch किया जा सकता है: https://github.com/vlopezferrando/simple-spaced-repetition
यह भी जानना चाहूँगा कि web app को open source करने की संभावना है या नहीं। यह किसी खास domain में “students X सीख रहे हैं” जैसे तरीके से flashcards दिखाने का लोकप्रिय तरीका बन सकता है
विवरण से लगता है कि FSRS अब भी हर card के साथ सटीक review date जोड़ता है। इसी feature की वजह से मैंने Anki छोड़ दिया था
मैं college student नहीं हूँ और कोई exam भी नहीं दे रहा, इसलिए बस जब मन करे तब practice करना चाहता हूँ। Sessions के बीच लंबे gaps हो सकते हैं, और मैं यह महसूस नहीं करना चाहता कि pending cards जमा हो रहे हैं
Anki बेहतरीन app है, लेकिन review dates लगाने के बजाय काश कोई ऐसा algorithm होता जो cards को random sample करे, मगर इस probability के अनुपात में चुने कि उन्हें urgent review की कितनी जरूरत है
https://github.com/fasiha/ebisu जैसी approach Anki plugin के रूप में संभव हो, या खुले card format का इस्तेमाल करने वाली कोई मिलती-जुलती app हो, तो अच्छा होगा
बस, “pending” सब clear कर देने पर आप फिर जब चाहें practice नहीं कर सकते; दोबारा practice available होने तक एक तय समय इंतजार करना पड़ता है
जो facts याद थे, उन्हें repeat करना annoying था, और जो भूल गए थे उनमें से काफी कुछ पूरी तरह भूल चुका था। इसलिए repetition का मतलब लगभग नहीं बचता था और progress बहुत धीमी थी
मूल बात यह है कि लगभग भूलने से ठीक पहले repeat करना होता है, और यह deadlines और scheduling के बिना मुश्किल है
हम वास्तव में deadlines इस्तेमाल नहीं करते, और requested कुछ analytics features को छोड़ दें तो users को कई difficulty levels में बनाए रखने की कोशिश करते हैं
हमेशा 100% pending खत्म करने की तुलना में आगे बढ़ना हमारे लिए ज्यादा महत्वपूर्ण है। कोई word सचमुच important हो तो user उसे favorite कर देगा या फिर से देख लेगा
यह public flashcard app नहीं है, और foreign-language automatic sentence mining पर ज्यादा focused है। फिर भी FSRS को modify करने के अनुभव पर सवालों के जवाब देने में खुशी होगी
product के बारे में https://blog.phrasing.app/phrasing-first-look/ पर देखा जा सकता है
मैं FSRS को 3 महीने से इस्तेमाल कर रहा हूँ, और पुराने SM2 scheduling algorithm को trial-and-error से tune करने की तकलीफ आखिरकार खत्म हो गई है
हर deck की content optimal retention rate पर बड़ा असर डाल सकती है, और अब हर कुछ महीनों में हर deck के weights को retrain करने पर यह ठीक से adapt हो जाता है
अगर आप large-scale real-world spaced repetition science का rigorous analysis देखना चाहते हैं तो paper[0] भी पढ़ने लायक है
extensive benchmarks की वजह से, ज्यादातर लोगों को अपनी collection के हिसाब से weights फिर से tune करने से तब तक ज्यादा फायदा नहीं होगा जब तक reviews हजारों में न जमा हो जाएँ। author 1,000+ की सिफारिश करता है
Cards देर से करने पर भी यह अच्छा काम करता है। Recall probability stability और last review time पर based होती है, और due date निकल जाने के बाद भी अगर आपने याद कर लिया, तो stability को थोड़ा और लंबा update किया जाता है
[0] https://dl.acm.org/doi/10.1145/3534678.3539081?cid=99660547150
[1] https://github.com/open-spaced-repetition/fsrs4anki/wiki/The-Algorithm
मुझे flashcards hobby की तरह पसंद हैं, इसलिए मैं रोज़ कई spaced repetition apps मज़े के लिए इस्तेमाल करता हूँ। FSRS भी इस्तेमाल किया है और अच्छा है, लेकिन अभी तक latest SuperMemo जितना नहीं है
अगर वही या मिलती-जुलती सामग्री दो या ज़्यादा apps में डालकर देखें, तो फर्क दिखता है। फिर भी FSRS अभी उपलब्ध लगभग हर चीज़ से कहीं बेहतर है, और लगता है जल्द ही SuperMemo से भी बेहतर हो जाएगा
Mochi Cards करीब 1 साल इस्तेमाल किया; बस ठीक-ठाक था, और default Anki installation से थोड़ा बेहतर। Mnemosyne भी वैसा ही है। SuperMemo SaaS app भी ठीक है, लेकिन language material को organize करने का तरीका मुझे पसंद नहीं
भाषा की vocabulary के लिए Clozemaster इस्तेमाल करता हूँ, और सही जवाब देने के बाद उस वाक्य को SuperMemo में डाल देता हूँ। क्योंकि SuperMemo algorithm इतना ज़्यादा बेहतर है। हर शब्द के लिए ChatGPT explanations भी होते हैं, उन्हें भी SuperMemo में डालता हूँ
सबसे मुश्किल हिस्सा निश्चित रूप से अच्छे cards बनाना है। और ideas पाने में http://arxiv.org/abs/2401.01257 और https://rust-book.cs.brown.edu मददगार हैं
मुझे अभी तक ऐसा flashcard program नहीं मिला जो SuperMemo जितनी तेज़ी से cards बनाने दे। SuperMemo में text का chunk paste करें(ctrl-n), cloze deletion के लिए शब्द चुनें, फिर alt-x दबाएँ। उसी text piece में यह कई बार कर सकते हैं, और हर बार नया cloze card review में चला जाता है
दूसरी apps में ज़्यादातर cards एक-एक करके बनाने पड़ते हैं। शायद इसलिए कि वे card और deck वाले metaphor से बहुत मज़बूती से बंधी हैं। SuperMemo हर चीज़ को tree structure में organize करता है, जिससे बड़ा फर्क पड़ता है। असल में organize करना ज़रूरी भी नहीं है, लेकिन लोग ऐसे behave करते हैं जैसे सीखी हुई सामग्री दिमाग में साफ-सुथरे decks में classify हो जाएगी
हर cloze group का अपना “card” होगा
spaced repetition की अहमियत देखते हुए, Anki के उलट क्या modular approach की ज़रूरत नहीं है?
क्या ये तीन चीज़ें अलग-अलग नहीं हैं?
data structure सख्ती से modular नहीं है, लेकिन मौजूदा Anki decks और extensions की compatibility बनाए रखते हुए practical तौर पर जितना संभव है, उससे कहीं करीब है
असल में अब एक button है जो केवल history और current algorithm parameters के आधार पर सभी intervals और difficulties को पूरी तरह फिर से calculate करता है। अगर आप पहले से FSRS इस्तेमाल कर रहे हैं और parameters नहीं बदले हैं, तो recalculation का कोई असर नहीं होगा, क्योंकि वह हर review के बाद incremental calculation जैसा ही है
सिद्धांत रूप में इसे just-in-time calculation करने वाला pure function माना जा सकता है, और existing compatibility व performance की वजह से generated data को cache करने वाला रूप समझा जा सकता है
इससे जुड़ा थोड़ा shameless self-promotion: मैंने एक free open source tool बनाया है जिससे YouTube videos से Anki cards बनाए जा सकते हैं: https://youtube2anki.fly.dev/
feedback चाहिए। code GitHub पर है: https://github.com/vacmar01/youtube2anki
FSRS और Anki के बारे में Xiaojun से कई बार बात हुई है। Anki+FSRS जैसे traditional spaced repetition systems में learner अक्सर knowledge को हमेशा उसी context में review करते हैं, जिससे वे knowledge को किसी बड़े network के हिस्से की बजाय isolated units के रूप में समझ सकते हैं
उदाहरण के लिए, शब्दों को अलग-अलग सीखना real life में भाषा इस्तेमाल करने के लिए पर्याप्त तैयारी नहीं है। असली situations में context, collocations और usage बड़ी भूमिका निभाते हैं
isolated repetition से बेहतर language learning तरीका यह है कि words को अलग-अलग contexts और combinations में expose किया जाए, ताकि learner समझ सके कि words naturally chunks और sentences में कैसे बनते हैं
इसलिए language learning में Anki cards की जगह real-life के short videos दिखाने वाली चीज़ बना रहा हूँ। हर video एक छोटा scenario है, जो दिखाता है कि real situations में भाषा कैसे इस्तेमाल होती है
students सिर्फ शब्द याद नहीं करते, बल्कि visual cues और gestures तक शामिल natural context में उनका usage देखते हैं। यह approach words और expressions के real application को समझने में मदद करती है और learning को ज़्यादा immersive और effective बना सकती है। क्योंकि foreign language सीखने में failure की मुख्य वजह continuity बनाए न रख पाना है
Anki में एक और कमी है: “याद है?” नहीं, बल्कि real situation-based quizzes की। students को जो सीखा है उसे मज़ेदार और low-pressure environment में apply करना चाहिए
SRS algorithm solution का सिर्फ एक हिस्सा है, कोई cure-all नहीं। memory में emotion का encoding पर असर जैसे कई factors होते हैं। first kiss या graduation day याद रखने के लिए SRS की ज़रूरत नहीं होती
लोग बिना किसी SRS के अपनी मातृभाषा fluently सीख लेते हैं, लेकिन foreign language में SRS इस्तेमाल करने पर भी ज़्यादातर लोग fluent नहीं हो पाते
first-language acquisition और second-language acquisition सेब और bacon जितने अलग हैं। बच्चे और adults के brains अलग होते हैं, और जरूरतें, abilities व context भी बहुत अलग होते हैं