FSRS: Algoritme pengulangan berjarak yang modern dan efisien
(github.com/open-spaced-repetition)- Wiki
ABC of FSRSmilik FSRS untuk mengoptimalkan jadwal tinjauan belajar telah dipindahkan dari fsrs4anki ke wiki baruawesome-fsrs - Materi riset MaiMemo yang ditautkan masing-masing membahas optimasi penjadwalan pengulangan berjarak dan pemodelan dinamika memori dalam makalah ACM KDD dan IEEE TKDE
- Tulisan terpisah memperkenalkan proses penelitian algoritme pengulangan berjarak melalui pengalaman seorang mahasiswa sarjana yang menerbitkan makalah ACM KDD
FSRS-Anki-20kdananki-revlogs-10kjuga diperkenalkan sebagai dataset open-source yang mencakup karakteristik deret waktu- FSRS adalah proyek open-source independen yang dipimpin komunitas, dan dukungan dari organisasi seperti MaiMemo Inc. menopang partisipasi berkelanjutan para kontributor inti
ABC of FSRS pindah ke wiki baru
- Halaman
ABC of FSRStelah dipindahkan ke wiki baru - Lokasi baru: https://github.com/open-spaced-repetition/awesome-fsrs/wiki/ABC-of-FSRS
Materi riset pengulangan berjarak
- Ada dua makalah MaiMemo yang ditautkan
- A Stochastic Shortest Path Algorithm for Optimizing Spaced Repetition Scheduling: makalah ACM KDD yang membahas optimasi penjadwalan pengulangan berjarak
- Optimizing Spaced Repetition Schedule by Capturing the Dynamics of Memory: makalah IEEE TKDE yang membahas optimasi jadwal pengulangan berjarak melalui penangkapan dinamika memori
- Kedua makalah juga menyediakan tautan versi bahasa Mandarin
Tulisan tentang pengalaman riset
- How did I publish a paper in ACMKDD as an undergraduate?: tulisan tentang pengalaman riset terkait algoritme pengulangan berjarak
Dataset publik
- Disediakan dataset open-source terkait pengulangan berjarak yang mencakup karakteristik deret waktu
Proyek komunitas dan dukungan
- FSRS adalah proyek open-source independen yang dipimpin komunitas
- Menyampaikan terima kasih atas dukungan dari organisasi seperti 墨墨背单词 (MaiMemo Inc.)
- Dukungan MaiMemo memungkinkan kontributor inti seperti Jarrett Ye mencurahkan waktu dan keahlian mereka ke FSRS
- Kolaborasi semacam ini membantu FSRS tetap menjadi algoritme pengulangan berjarak terdepan yang tersedia bebas untuk semua orang
1 komentar
Komentar Hacker News
Cara yang sangat diremehkan untuk meningkatkan spaced repetition adalah membuat kartu menjadi lebih mudah. Saya menyadari bahwa kartu yang efektif ternyata boleh saja sangat mudah
Awalnya, saat menghafal kosakata bahasa Prancis dengan Anki, saya membuat kartu dua arah Inggris↔Prancis, tetapi setelah jumlah kartu mencapai ratusan, terlalu banyak sinonim membuatnya menyiksa
Setelah itu, mengikuti saran Katzumoto untuk belajar bahasa Jepang, saya menempelkan seluruh paragraf dari e-book atau halaman web dan membuat kartu cloze yang hanya menutupi satu kata; mudah, tetapi efektif
Lalu saya makin malas: hanya menutupi setengah kata, atau menebalkan kata dan menganggapnya lulus jika saya kira-kira bisa mengingatnya dalam konteks. Justru itu bekerja lebih baik
Saat sebuah kartu muncul dan saya merasa “ah, kartu itu lagi?”, saya menghapusnya, dan saya mengatur Anki agar menangguhkan permanen kartu yang salah 3 kali. Kalau itu memang kata yang benar-benar perlu saya ketahui, saya akan segera melihatnya lagi dalam konteks yang lebih baik, jadi tidak masalah, dan kosakata bahasa Prancis saya terus bertambah cepat
Menurut saya, peningkatan terbesar kemungkinan datang dari perbaikan format kartu, bukan dari algoritme spaced repetition yang lebih baik, dan ternyata cukup sulit membuat kartu yang terlalu mudah untuk dianggap berguna. Ini hasil dari lebih dari 35.000 review Anki dalam tiga bahasa
Saya sering melihat orang memasukkan ribuan kartu ke Anki pada bulan pertama belajar sesuatu, lalu satu-dua bulan kemudian kewalahan oleh jumlah review, review terasa seperti pekerjaan remeh yang membosankan, dan akhirnya berhenti
Ada dua nasihat yang membuat perbedaan. Buat kartu sedikit ‘terlalu’ mudah, dan cukup selektif soal kartu apa yang dimasukkan
Saat pertama membuat kartu, topiknya masih segar karena baru saja dipelajari, sehingga kita ingin membuat kartu yang menarik dan menantang bagi diri kita saat itu. Namun 1–2 minggu kemudian, kartu yang cukup mudah untuk sekadar menyentuh ingatan biasanya lebih baik daripada kartu yang membingungkan
Alih-alih memasukkan kalimat dari satu buku penuh ke Anki, lebih baik berjalan pelan seperti di kebun buah dan memetik hanya satu-dua apel terbaik. Apel busuk, yaitu kartu yang tidak menarik atau terlalu sulit, akan mencemari seluruh deck dan membuat kita menghindari review itu sendiri
Review biasanya lewat dengan cepat, jadi waktu pembuatan ternyata mengambil porsi yang cukup besar dari total waktu belajar per kartu. Belakangan saya memasukkan konteks semakin sedikit, dan sering kali kartu sederhana bawaan yang dibuat plugin kamus sudah cukup
Menambahkan konteks ke sisi depan kartu hampir selalu hanya saya lakukan ketika itu adalah istilah teknis yang hanya muncul dalam konteks tersebut. Artinya ketika kata itu tidak bernilai untuk dipelajari secara mandiri
Namun saya setuju bahwa bersikap malas dan murah hati kepada diri sendiri itu baik. Saat menilai jawaban pun, saya cukup longgar: patokannya bukan penguasaan sempurna setingkat penutur asli, melainkan apakah saya benar-benar memahaminya cukup untuk menghindari kebingungan
Itu akan sangat meningkatkan kualitas kartu
Misalnya, kita bisa saja memaksa hafalan nada di fretboard dengan spaced repetition secara kasar, tetapi dalam praktiknya mencampur konteks lebih efektif
Ada minggu ketika saya malas dan hanya drill nama nada, minggu lain saya mengutak-atik tangga nada aneh seperti Hungarian scale, dan minggu lainnya saya mencoba mereproduksi progresi chord arpeggio atau power chord, atau suara dan feel lagu tertentu
Seiring waktu, otak mulai membuat koneksi. Muncul pencerahan seperti “ini cuma tangga nada G minor”, “ini G mayor tetapi melewati nada-nada itu”, atau “dengan pola ini, bukankah saya bisa memainkannya seperti itu?”
Ada juga perasaan aneh bahwa laju saya menyadari apa yang tidak saya ketahui meningkat jauh lebih cepat daripada apa yang saya kira sudah saya ketahui. Meski begitu, saya sedang mempertimbangkan memakai algoritme spaced repetition yang memberi tugas gitar 5–10 menit untuk mengembangkan muscle memory dan koneksi saraf sekaligus
Mungkin karena materinya lebih beragam daripada hanya bahasa, pengaruh format kartu terasa besar. Bahkan pada deck buatan orang lain, saya sering mengubah kata-kata di sisi jawaban, dan ada perbedaan yang terasa pada retensi
Jawaban yang ringkas dan mengalir alami lebih mudah melekat. Jika ada kartu yang terasa canggung, sebaiknya jangan ragu untuk memperbaikinya
Saya menghafal puluhan ribu kata bahasa asing dengan Anki, dan gambar pada kartu selalu membantu saya mengingat kata
Sekarang saya sedang mengerjakan proyek yang mungkin agak konyol: menghafal 750 kartu permainan kuis bersama keluarga. Semua kartunya berisi pertanyaan yang jawabannya adalah tahun. Contoh: “Coca Cola Light keluar pada tahun berapa?”
Membuat gambar untuk kartu dengan Midjourney membuatnya jauh lebih mudah diingat
Saya memakai sistem yang menempatkan tokoh representatif untuk tiap abad. Einstein mewakili 1900–2000, Marie-Antoinette mewakili 1700–1800
Benda mewakili dekade. Mobil tahun 60-an berarti 60-an, jaket bantalan bahu berarti 80-an, dan seterusnya. Digit terakhir juga diperlakukan dengan cara serupa
Saya meminta Midjourney membuat elemen-elemen ini menjadi gambar bergaya kartun, lalu menyimpan gambar yang paling lucu atau absurd untuk dimasukkan ke sisi belakang kartu Anki. Gambar sering kali lebih mudah diingat daripada tahunnya sendiri
Kedua, karena ingatan dalam situasi nyata tanpa gambar bisa memburuk, sebaiknya uji secara berkala dengan dan tanpa gambar secara terpisah
Ketiga, saya penasaran apakah kuis itu Trivial Pursuit. Seorang teman sengaja menghafal semua kartu edisi Genus asli
Menarik. Menurut benchmark, dengan algoritme ini kita hanya perlu meninjau 20–30% lebih sedikit kartu dibanding algoritme Anki klasik
Beberapa hari lalu saya merilis implementasi Python dari algoritme SM-2 klasik yang dipakai di https://python.cards, dan mungkin bisa diganti ke FSRS: https://github.com/vlopezferrando/simple-spaced-repetition
Saya juga penasaran apakah ada kemungkinan web app-nya dijadikan open source. Sepertinya ini bisa menjadi cara populer untuk menampilkan flashcard di bidang tertentu, seperti siswa yang belajar X
Dari penjelasannya, FSRS tampaknya masih memberi tanggal tinjauan yang tepat pada tiap kartu. Fitur inilah yang membuat saya berhenti memakai Anki
Saya bukan mahasiswa dan tidak sedang mengikuti ujian, jadi saya hanya ingin berlatih saat ingin saja. Mungkin ada jeda panjang antar-sesi, dan saya tidak ingin merasa ada kartu tertunda yang menumpuk
Anki adalah aplikasi yang hebat, tetapi alih-alih memberi tanggal tinjauan, saya berharap ada algoritme yang mengambil sampel kartu secara acak, namun proporsional terhadap probabilitas bahwa kartu itu perlu segera ditinjau
Saya berharap pendekatan seperti https://github.com/fasiha/ebisu bisa tersedia sebagai plugin Anki, atau ada aplikasi serupa yang memakai format kartu terbuka
Hanya saja, kalau semua yang “tertunda” sudah dibereskan, Anda tidak bisa lagi berlatih kapan pun Anda mau, dan harus menunggu beberapa waktu sampai bisa berlatih lagi
Mengulang fakta yang masih diingat terasa menjengkelkan, dan banyak hal yang sudah terlupa ternyata benar-benar terlupakan. Jadi pengulangan hampir tidak ada gunanya dan progresnya sangat lambat
Intinya adalah mengulang tepat sebelum hampir lupa, dan itu sulit tanpa tenggat dan penjadwalan
Dalam praktiknya kami tidak memakai tenggat, dan selain beberapa fitur analitik yang diminta, kami berusaha menjaga pengguna berada di beberapa tingkat kesulitan
Kami menganggap terus maju lebih penting daripada selalu menghapus 100% yang tertunda. Kalau sebuah kata benar-benar penting, pengguna akan memfavoritkannya atau melihatnya lagi
Ini bukan aplikasi flashcard publik, dan sangat berfokus pada penambangan kalimat otomatis untuk bahasa asing. Meski begitu, saya dengan senang hati menjawab pertanyaan tentang pengalaman memodifikasi FSRS
Informasi tentang produknya bisa dilihat di https://blog.phrasing.app/phrasing-first-look/
Saya sudah memakai FSRS selama 3 bulan, dan rasa sakit karena harus menyesuaikan algoritme penjadwalan SM2 lama lewat trial-and-error akhirnya terselesaikan
Isi tiap dek dapat sangat memengaruhi tingkat retensi optimal, dan sekarang jika bobot tiap dek dilatih ulang setiap beberapa bulan, sistem akan beradaptasi dengan baik
Makalahnya[0] juga layak dibaca jika ingin melihat analisis ketat tentang sains spaced repetition dalam lingkungan nyata berskala besar
Karena benchmark-nya luas, bagi kebanyakan orang menyesuaikan ulang bobot untuk koleksi sendiri tidak akan memberi banyak manfaat sampai terkumpul ribuan review. Penulis merekomendasikan lebih dari 1.000 kali
Ini juga bekerja baik ketika kartu dikerjakan terlambat. Probabilitas recall didasarkan pada stabilitas dan waktu tinjauan terakhir, dan jika Anda masih mengingatnya setelah melewati tenggat, stabilitasnya diperbarui menjadi sedikit lebih panjang
[0] https://dl.acm.org/doi/10.1145/3534678.3539081?cid=99660547150
[1] https://github.com/open-spaced-repetition/fsrs4anki/wiki/The-Algorithm
Karena saya menyukai flashcard sebagai hobi, setiap hari saya memakai beberapa aplikasi spaced repetition untuk bersenang-senang. Saya juga sudah mencoba FSRS dan bagus, tetapi belum setara dengan SuperMemo terbaru
Kalau memasukkan materi yang sama atau mirip ke dua aplikasi atau lebih, perbedaannya terlihat. Meski begitu, FSRS jauh lebih baik daripada hampir semua yang ada sekarang, dan sepertinya akan segera menjadi lebih baik daripada SuperMemo
Saya memakai Mochi Cards sekitar 1 tahun; rasanya lumayan saja, sedikit lebih baik daripada instalasi Anki bawaan. Mnemosyne juga mirip. Aplikasi SaaS SuperMemo juga oke, tetapi saya kurang suka cara mereka menyusun materi bahasa
Untuk kosakata bahasa saya memakai Clozemaster, lalu setelah menjawab benar saya memasukkan kalimat itu ke SuperMemo. Karena algoritma SuperMemo memang jauh lebih baik. Ada juga penjelasan ChatGPT untuk tiap kata, jadi itu juga saya masukkan ke SuperMemo
Bagian tersulit jelas membuat kartu yang bagus. Untuk mendapat lebih banyak ide, http://arxiv.org/abs/2401.01257 dan https://rust-book.cs.brown.edu membantu
Saya belum menemukan program flashcard yang memungkinkan membuat kartu secepat SuperMemo. Di SuperMemo, cukup tempelkan blok teks (ctrl-n), pilih kata yang ingin dijadikan cloze deletion, lalu tekan alt-x. Ini bisa dilakukan berkali-kali pada potongan teks yang sama, dan setiap kali, kartu cloze baru masuk ke jadwal ulasan
Di kebanyakan aplikasi lain, kartu harus dibuat satu per satu. Sepertinya karena mereka terlalu terikat kuat pada metafora kartu dan deck. SuperMemo mengorganisasi semuanya dalam struktur tree, dan itu membuat perbedaan besar. Sebenarnya tidak perlu selalu diorganisasi, tetapi orang-orang bertindak seolah materi yang dipelajari akan terklasifikasi rapi sebagai deck di dalam kepala
Setiap grup cloze akan memiliki “kartu” sendiri
Mengingat pentingnya spaced repetition, saya merasa mungkin diperlukan pendekatan modular, tidak seperti Anki
Bukankah ada tiga hal yang terpisah?
Struktur datanya memang tidak sepenuhnya modular, tetapi dengan tetap menjaga kompatibilitas dengan deck Anki lama dan add-on, ini sedekat yang secara realistis memungkinkan
Bahkan sekarang ada tombol untuk menghitung ulang sepenuhnya semua interval dan tingkat kesulitan hanya berdasarkan riwayat dan nilai penyesuaian algoritma saat ini. Jika sudah memakai FSRS dan nilai penyesuaiannya tidak berubah, perhitungan ulang tidak menghasilkan efek apa pun, karena sama saja dengan perhitungan inkremental setelah tiap ulasan
Pada prinsipnya, ini bisa dilihat sebagai pure function yang dihitung tepat waktu, dengan data yang dihasilkan di-cache demi kompatibilitas lama dan performa
Sebagai promosi diri tanpa malu-malu yang terkait, saya membuat tool gratis dan open source untuk membuat kartu Anki dari video YouTube: https://youtube2anki.fly.dev/
Saya ingin mendapat masukan. Kodenya ada di GitHub: https://github.com/vacmar01/youtube2anki
Saya sudah beberapa kali berbicara dengan Xiaojun tentang FSRS dan Anki. Dalam sistem spaced repetition tradisional seperti Anki+FSRS, pelajar sering meninjau pengetahuan selalu dalam konteks yang sama, sehingga bisa memahami pengetahuan sebagai unit terisolasi, bukan sebagai bagian dari jaringan yang lebih besar
Misalnya, mempelajari kata secara terpisah tidak cukup mempersiapkan seseorang untuk memakai bahasa dalam kehidupan nyata. Dalam situasi nyata, konteks, kolokasi, dan penggunaan sangat berperan
Cara belajar bahasa yang lebih baik daripada pengulangan terisolasi adalah membuat pelajar menjumpai kata dalam berbagai konteks dan kombinasi, sehingga mereka memahami bagaimana kata terbentuk secara alami menjadi chunk dan kalimat
Karena itu, untuk pembelajaran bahasa, kami sedang membuat sesuatu yang menampilkan video pendek kehidupan nyata, bukan kartu Anki. Setiap video adalah skenario kecil yang menunjukkan bagaimana bahasa dipakai dalam situasi nyata
Siswa tidak hanya menghafal kata, tetapi juga melihat penggunaannya dalam konteks alami, termasuk petunjuk visual dan gestur. Pendekatan ini dapat membantu memahami penerapan nyata kata dan ungkapan, sehingga pembelajaran menjadi lebih imersif dan efektif. Karena alasan utama kegagalan belajar bahasa asing adalah tidak bisa bertahan melakukannya
Hal lain yang kurang dari Anki adalah kuis berbasis situasi nyata, bukan sekadar “ingat tidak?”. Siswa perlu menerapkan apa yang dipelajari dalam lingkungan yang menyenangkan dan rendah tekanan
Algoritma SRS hanyalah sebagian dari solusi, bukan obat mujarab. Ada banyak faktor dalam ingatan, seperti pengaruh emosi terhadap encoding. Kita tidak perlu SRS untuk mengingat ciuman pertama atau hari kelulusan
Orang-orang belajar bahasa ibu dengan lancar tanpa SRS apa pun, tetapi untuk bahasa asing, kebanyakan tidak menjadi fasih meskipun memakai SRS
Pemerolehan bahasa pertama dan pemerolehan bahasa kedua itu berbeda seperti apel dan bacon. Otak bayi dan orang dewasa berbeda, begitu pula kebutuhan, kemampuan, dan konteksnya