FSRS: Thuật toán lặp lại ngắt quãng hiện đại và hiệu quả
(github.com/open-spaced-repetition)- Wiki
ABC of FSRScủa FSRS, dùng để tối ưu hóa lịch ôn tập, đã được chuyển từ fsrs4anki sang wikiawesome-fsrsmới - Các tài liệu nghiên cứu MaiMemo được liên kết lần lượt đề cập đến tối ưu hóa lịch lặp lại ngắt quãng và mô hình hóa động lực học của trí nhớ trong các bài báo ACM KDD và IEEE TKDE
- Một bài viết riêng giới thiệu quá trình nghiên cứu thuật toán lặp lại ngắt quãng thông qua trải nghiệm xuất bản bài báo ACM KDD của một sinh viên đại học
FSRS-Anki-20kvàanki-revlogs-10kđược giới thiệu cùng nhau như các bộ dữ liệu nguồn mở có đặc tính chuỗi thời gian- FSRS là một dự án nguồn mở độc lập do cộng đồng dẫn dắt, và sự hỗ trợ từ các tổ chức như MaiMemo Inc. giúp các cộng tác viên chủ chốt tiếp tục tham gia lâu dài
ABC of FSRS đã chuyển sang wiki mới
- Trang
ABC of FSRSđã được chuyển sang wiki mới - Vị trí mới: https://github.com/open-spaced-repetition/awesome-fsrs/wiki/ABC-of-FSRS
Tài liệu nghiên cứu về lặp lại ngắt quãng
- Có liên kết đến 2 bài báo của MaiMemo
- A Stochastic Shortest Path Algorithm for Optimizing Spaced Repetition Scheduling: bài báo ACM KDD về tối ưu hóa lịch lặp lại ngắt quãng
- Optimizing Spaced Repetition Schedule by Capturing the Dynamics of Memory: bài báo IEEE TKDE về tối ưu hóa lịch lặp lại ngắt quãng thông qua nắm bắt động lực học của trí nhớ
- Cả hai bài báo đều có kèm liên kết phiên bản tiếng Trung
Bài viết về trải nghiệm nghiên cứu
- How did I publish a paper in ACMKDD as an undergraduate?: bài viết về trải nghiệm nghiên cứu liên quan đến thuật toán lặp lại ngắt quãng
Bộ dữ liệu công khai
- Có cung cấp các bộ dữ liệu nguồn mở liên quan đến lặp lại ngắt quãng, bao gồm đặc tính chuỗi thời gian
Dự án cộng đồng và tài trợ
- FSRS là một dự án nguồn mở độc lập do cộng đồng dẫn dắt
- Bày tỏ sự cảm ơn đối với hỗ trợ từ các tổ chức như 墨墨背单词 (MaiMemo Inc.)
- Sự hỗ trợ của MaiMemo giúp các cộng tác viên chủ chốt như Jarrett Ye có thể dành thời gian và chuyên môn cho FSRS
- Sự hợp tác như vậy giúp FSRS tiếp tục là một thuật toán lặp lại ngắt quãng hàng đầu, được cung cấp miễn phí cho tất cả mọi người
1 bình luận
Ý kiến trên Hacker News
Một cách bị đánh giá thấp rất nhiều để cải thiện lặp lại ngắt quãng là làm cho thẻ dễ hơn. Tôi nhận ra rằng thẻ hiệu quả có thể dễ đến mức đáng ngạc nhiên
Ban đầu tôi học thuộc từ vựng tiếng Pháp bằng Anki, tạo thẻ hai chiều Anh↔Pháp, nhưng khi số thẻ lên đến vài trăm, có quá nhiều từ đồng nghĩa nên rất khổ sở
Sau đó, theo lời khuyên học tiếng Nhật của Katzumoto, tôi dán nguyên cả đoạn từ ebook hoặc trang web và tạo thẻ điền chỗ trống chỉ che một từ; chúng dễ nhưng hiệu quả
Tôi còn lười hơn, chỉ che nửa từ, hoặc tô đậm từ và nếu trong ngữ cảnh tôi nhớ mang máng được thì cho qua, vậy mà lại hoạt động tốt hơn
Khi thẻ hiện lên mà tôi nghĩ “à, lại cái thẻ đó à?” thì tôi xóa, và đặt Anki treo vĩnh viễn nếu sai 3 lần. Nếu đó là từ thật sự cần biết thì chẳng mấy chốc tôi sẽ gặp lại nó trong một ngữ cảnh tốt hơn, nên không vấn đề gì; vốn từ tiếng Pháp của tôi vẫn tiếp tục tăng nhanh
Tôi nghĩ cải thiện lớn nhất sẽ đến từ cải thiện định dạng thẻ hơn là từ thuật toán lặp lại ngắt quãng tốt hơn, và việc tạo ra những thẻ tưởng như quá dễ để hữu ích hóa ra lại khó bất ngờ. Đây là kết quả sau hơn 35.000 lượt ôn Anki ở ba ngôn ngữ
Tôi thường thấy người ta nhồi hàng nghìn thẻ vào Anki trong tháng đầu học thứ gì đó, rồi một hai tháng sau bị khối lượng ôn tập áp đảo, việc ôn cảm giác như việc vặt và họ bỏ
Có hai lời khuyên tạo ra khác biệt: làm thẻ hơi “quá” dễ, và phải khá chọn lọc xem đưa thẻ nào vào
Khi mới tạo thẻ, bạn vừa học chủ đề đó nên nó còn sống động trong đầu, khiến bạn muốn tạo những thẻ thú vị và thử thách với chính mình lúc này. Nhưng sau 1–2 tuần, những thẻ đủ dễ để chỉ khẽ chạm vào ký ức sẽ tốt hơn là làm bạn rối trí
Thay vì đưa nguyên cả lượng câu của một cuốn sách vào Anki, tốt hơn là chậm rãi nhìn quanh như đi trong vườn cây ăn quả và chỉ hái một hai quả táo ngon nhất. Táo thối, tức các thẻ không thú vị hoặc quá khó, sẽ làm ô nhiễm cả bộ thẻ và khiến bạn né luôn việc ôn tập
Việc ôn thường trôi qua rất nhanh, nên thời gian tạo thẻ lại chiếm tỷ trọng khá lớn trong tổng thời gian học cho mỗi thẻ. Gần đây tôi ngày càng đưa ít ngữ cảnh hơn, và nhiều khi các thẻ đơn giản mặc định do plugin từ điển tạo ra là đủ
Việc cố thêm ngữ cảnh vào mặt trước của thẻ hầu như chỉ xảy ra khi đó là thuật ngữ chuyên ngành chỉ xuất hiện trong ngữ cảnh ấy. Tức là khi nó không đáng học độc lập
Tuy vậy, tôi nghĩ làm một cách lười biếng và rộng lượng với bản thân là tốt. Khi chấm câu trả lời, tôi cũng chấm khá thoáng, dựa trên việc mình đã hiểu đủ để tránh nhầm lẫn trong thực tế hay chưa, chứ không phải mức làm chủ hoàn hảo như người bản ngữ
Nó sẽ cải thiện chất lượng thẻ rất nhiều
Ví dụ, bạn có thể dùng lặp lại ngắt quãng để nhồi các nốt trên cần đàn một cách thô bạo, nhưng trong thực tế trộn ngữ cảnh hiệu quả hơn
Có tuần tôi lười nên chỉ luyện tên nốt, tuần khác thì mày mò các thang âm kỳ lạ như thang âm Hungary, tuần khác nữa thì cố tái tạo arpeggio chord, chuỗi power chord, hoặc âm thanh/cảm giác của một bài cụ thể
Theo thời gian, não bắt đầu tạo liên kết. Những nhận ra kiểu “cái này chỉ là âm giai G thứ thôi”, “cái này là âm giai G trưởng nhưng bỏ qua mấy nốt kia”, “với mẫu này thì có thể thử chơi như thế kia nhỉ?” xuất hiện
Cũng có cảm giác kỳ lạ là tốc độ nhận ra những gì mình không biết tăng nhanh hơn nhiều so với những gì mình tưởng là đã biết. Dù vậy tôi đang nghĩ đến việc dùng một thuật toán lặp lại ngắt quãng giao cho mình các bài tập guitar 5–10 phút để cùng lúc phát triển trí nhớ cơ bắp và các kết nối thần kinh
Có lẽ vì nội dung đa dạng hơn so với khi chỉ có ngôn ngữ, tôi cảm nhận rất rõ tác động của định dạng thẻ. Ngay cả với bộ thẻ do người khác tạo, tôi cũng thường sửa câu chữ ở phần trả lời, và thấy khác biệt đáng kể về tỷ lệ ghi nhớ
Những câu trả lời ngắn gọn, tự nhiên, có mạch sẽ dễ bám hơn. Nếu có thẻ nào cảm thấy gượng gạo, tốt nhất là đừng ngần ngại sửa nó
Tôi đã học thuộc hàng chục nghìn từ nước ngoài bằng Anki, và việc có hình ảnh trên thẻ luôn giúp tôi nhớ từ
Hiện tôi đang làm một dự án có thể hơi ngớ ngẩn: học thuộc 750 thẻ của một trò đố vui chơi với gia đình. Tất cả các thẻ đều có đáp án là năm. Ví dụ: “Coca Cola Light ra mắt năm nào?”
Tạo ảnh cho thẻ bằng Midjourney giúp tôi nhớ dễ hơn nhiều
Tôi dùng một hệ thống trong đó mỗi thế kỷ có một nhân vật đại diện. Einstein biểu thị giai đoạn 1900–2000, Marie-Antoinette biểu thị giai đoạn 1700–1800
Đồ vật biểu thị các thập niên. Xe hơi thập niên 60 là những năm 60, áo khoác đệm vai là những năm 80, kiểu vậy. Chữ số cuối cũng xử lý tương tự
Tôi để Midjourney tạo các yếu tố này thành hình ảnh phong cách hoạt hình, rồi lưu hình vui nhất hoặc lố bịch nhất vào mặt sau thẻ Anki. Nhiều khi hình ảnh dễ nhớ hơn chính năm đó
Thứ hai, trong tình huống thực tế không có hình ảnh, khả năng hồi tưởng có thể kém đi, nên cần định kỳ kiểm tra tách riêng lúc có hình và lúc không có hình
Thứ ba, tôi tò mò không biết trò đố đó có phải Trivial Pursuit không. Một người bạn của tôi đã cố ý học thuộc toàn bộ thẻ của bản Genus gốc
Thú vị. Theo benchmark, dùng thuật toán này thì chỉ cần ôn ít hơn 20–30% số thẻ so với thuật toán Anki cổ điển
Vài ngày trước tôi đã công bố một bản triển khai Python của thuật toán SM-2 cổ điển dùng trên https://python.cards, và có lẽ có thể chuyển sang FSRS: https://github.com/vlopezferrando/simple-spaced-repetition
Tôi cũng tò mò liệu có khả năng mở mã nguồn web app này không. Nó có vẻ có thể trở thành một cách phổ biến để hiển thị flashcard trong một lĩnh vực cụ thể, kiểu như học sinh học X
Theo phần mô tả, có vẻ FSRS vẫn gắn ngày ôn tập chính xác cho từng thẻ. Chính tính năng này khiến tôi bỏ Anki
Tôi không còn là sinh viên đại học và cũng không thi cử gì, nên chỉ muốn luyện tập khi nào mình thích. Có thể có những khoảng nghỉ dài giữa các phiên, và tôi không muốn có cảm giác thẻ tồn đọng đang chất đống
Anki là một ứng dụng tuyệt vời, nhưng tôi ước có một thuật toán không gắn ngày ôn tập, mà lấy mẫu ngẫu nhiên các thẻ với xác suất tỷ lệ với mức độ cần ôn gấp
Sẽ rất tuyệt nếu cách như https://github.com/fasiha/ebisu có thể chạy như một plugin Anki, hoặc có một ứng dụng tương tự dùng định dạng thẻ mở
Chỉ là nếu bạn dọn hết phần “quá hạn” thì bạn không thể tiếp tục luyện tập tùy ý nữa, mà phải chờ một thời gian cho đến khi chúng lại sẵn sàng để ôn
Những kiến thức còn nhớ thì lặp lại rất khó chịu, còn nhiều thứ đã quên thì đã quên sạch. Vì vậy việc lặp lại gần như không còn ý nghĩa và tiến độ rất chậm
Điểm cốt lõi là lặp lại ngay trước khi gần quên, mà điều đó khó làm được nếu không có thời hạn và quản lý lịch trình
Thực tế chúng tôi không dùng thời hạn, và ngoài một số tính năng phân tích được yêu cầu, chúng tôi cố giữ người dùng ở nhiều mức độ khó khác nhau
Chúng tôi coi tiến về phía trước quan trọng hơn việc luôn xóa sạch 100% phần tồn đọng. Nếu là một từ thật sự quan trọng thì người dùng sẽ đánh dấu yêu thích hoặc gặp lại nó
Đây không phải ứng dụng flashcard công khai, mà tập trung nhiều vào việc tự động khai thác câu trong ngoại ngữ. Dù vậy tôi sẵn lòng trả lời các câu hỏi về kinh nghiệm chỉnh sửa FSRS
Có thể xem thông tin về sản phẩm tại https://blog.phrasing.app/phrasing-first-look/
Tôi đã dùng FSRS được 3 tháng, và nỗi khổ phải chỉnh thuật toán lịch trình SM2 cũ bằng thử-sai cuối cùng đã được giải quyết
Nội dung của từng bộ thẻ có thể ảnh hưởng lớn đến tỷ lệ duy trì tối ưu, và giờ đây cứ vài tháng huấn luyện lại trọng số cho từng bộ thẻ thì nó sẽ thích nghi phù hợp
Bài báo[0] cũng đáng đọc nếu bạn muốn xem một phân tích nghiêm ngặt về khoa học lặp lại ngắt quãng trong môi trường thực tế quy mô lớn
Vì các benchmark rất rộng, với phần lớn người dùng, việc tinh chỉnh lại trọng số cho bộ sưu tập của mình sẽ không đem lại nhiều lợi ích cho đến khi tích lũy được vài nghìn lượt review. Tác giả khuyến nghị từ 1.000 lượt trở lên
Nó vẫn hoạt động tốt ngay cả khi bạn làm thẻ muộn. Xác suất nhớ lại dựa trên độ ổn định và thời điểm ôn cuối cùng, và nếu bạn vẫn nhớ được sau khi quá hạn thì độ ổn định sẽ được cập nhật dài hơn một chút
[0] https://dl.acm.org/doi/10.1145/3534678.3539081?cid=99660547150
[1] https://github.com/open-spaced-repetition/fsrs4anki/wiki/The-Algorithm
Vì thích flashcard như một sở thích nên hằng ngày tôi dùng nhiều ứng dụng lặp lại ngắt quãng cho vui. Tôi cũng đã thử FSRS và thấy tốt, nhưng vẫn chưa bằng SuperMemo mới nhất
Nếu đưa cùng một hoặc tài liệu tương tự vào hai ứng dụng trở lên thì sẽ thấy khác biệt. Dù vậy FSRS vẫn tốt hơn hầu hết mọi thứ hiện có, và có vẻ sẽ sớm tốt hơn SuperMemo
Tôi đã dùng Mochi Cards khoảng 1 năm, thấy chỉ ở mức ổn, và nhỉnh hơn một chút so với cài đặt Anki mặc định. Mnemosyne cũng tương tự. Ứng dụng SuperMemo SaaS cũng ổn, nhưng tôi không thích cách nó tổ chức tài liệu ngôn ngữ
Với từ vựng ngôn ngữ, tôi dùng Clozemaster, và sau khi trả lời đúng thì đưa câu đó vào SuperMemo. Vì thuật toán của SuperMemo tốt hơn đến mức đó. Cũng có phần giải thích của ChatGPT cho từng từ, nên tôi cũng đưa vào SuperMemo
Phần khó nhất chắc chắn là tạo được thẻ tốt. Để có thêm ý tưởng, http://arxiv.org/abs/2401.01257 và https://rust-book.cs.brown.edu khá hữu ích
Tôi vẫn chưa tìm thấy chương trình flashcard nào cho phép tạo thẻ nhanh như SuperMemo. Trong SuperMemo, chỉ cần dán một đoạn văn bản (ctrl-n), chọn từ muốn biến thành chỗ trống, rồi nhấn alt-x. Có thể làm nhiều lần trên cùng một đoạn văn bản, và mỗi lần như vậy một thẻ điền khuyết mới sẽ được đưa vào phần ôn tập
Hầu hết ứng dụng khác phải tạo từng thẻ một. Có lẽ vì chúng bị ràng buộc quá chặt vào ẩn dụ thẻ và bộ thẻ. SuperMemo sắp xếp mọi thứ theo cấu trúc cây, tạo ra khác biệt lớn. Thực ra cũng không nhất thiết phải sắp xếp, nhưng mọi người hành xử như thể tài liệu đã học sẽ được phân loại gọn gàng trong đầu thành các bộ thẻ
Mỗi nhóm chỗ trống sẽ có “thẻ” riêng của nó
Nghĩ đến tầm quan trọng của lặp lại ngắt quãng, tôi tự hỏi có phải cần một cách tiếp cận mô-đun khác với Anki không
Chẳng phải có ba thứ tách biệt sao?
Cấu trúc dữ liệu không hoàn toàn mô-đun nghiêm ngặt, nhưng trong khi vẫn giữ tương thích với các bộ thẻ Anki hiện có và tiện ích mở rộng, nó đã gần đến mức thực tế có thể
Thực tế là giờ đã có một nút tính toán lại hoàn toàn mọi khoảng cách và độ khó chỉ từ lịch sử và các giá trị điều chỉnh hiện tại của thuật toán. Nếu bạn đã dùng FSRS và các giá trị điều chỉnh không đổi, việc tính toán lại sẽ không có tác dụng gì, vì nó tương đương với phép tính tăng dần sau mỗi lần ôn tập
Về nguyên tắc có thể xem nó như một hàm thuần tính toán đúng lúc, và dữ liệu được sinh ra chỉ là cache vì lý do tương thích ngược và hiệu năng
Nhân tiện tự quảng bá một chút về thứ liên quan: tôi đã làm một công cụ mã nguồn mở miễn phí để tạo thẻ Anki từ video YouTube: https://youtube2anki.fly.dev/
Tôi muốn nhận phản hồi. Mã nguồn có trên GitHub: https://github.com/vacmar01/youtube2anki
Tôi đã nói chuyện với Xiaojun nhiều lần về FSRS và Anki. Trong các hệ thống lặp lại ngắt quãng truyền thống như Anki+FSRS, người học thường ôn kiến thức trong cùng một ngữ cảnh, nên có thể hiểu kiến thức như những đơn vị cô lập thay vì một phần của mạng lưới lớn hơn
Ví dụ, học riêng lẻ từng từ không đủ để chuẩn bị cho việc dùng ngôn ngữ trong đời sống thực. Trong tình huống thực tế, ngữ cảnh, cụm từ thường đi cùng nhau và cách dùng đóng vai trò rất lớn
Một cách học ngôn ngữ tốt hơn so với lặp lại cô lập là cho người học gặp từ trong nhiều ngữ cảnh và tổ hợp khác nhau, để họ hiểu cách từ tự nhiên hình thành thành cụm và câu
Vì vậy, trong học ngôn ngữ, tôi đang làm thứ hiển thị các video ngắn đời thực thay vì thẻ Anki. Mỗi video là một kịch bản nhỏ, cho thấy ngôn ngữ được dùng như thế nào trong tình huống thực tế
Học viên không chỉ ghi nhớ từ, mà còn thấy cách dùng trong ngữ cảnh tự nhiên, bao gồm cả gợi ý thị giác và cử chỉ. Cách tiếp cận này có thể giúp họ hiểu ứng dụng thực tế của từ và biểu đạt, làm việc học nhập vai hơn và hiệu quả hơn. Vì lý do chính khiến việc học ngoại ngữ thất bại là không duy trì được
Một điểm nữa Anki còn thiếu là các câu đố dựa trên tình huống thực tế, chứ không phải “có nhớ không?”. Học viên cần áp dụng điều đã học trong môi trường vui và ít áp lực
Thuật toán SRS chỉ là một phần của giải pháp, không phải thuốc chữa bách bệnh. Trí nhớ có nhiều yếu tố, chẳng hạn tác động của cảm xúc lên quá trình mã hóa. Bạn không cần SRS để nhớ nụ hôn đầu hay ngày tốt nghiệp
Mọi người học tiếng mẹ đẻ trôi chảy mà không cần bất kỳ SRS nào, nhưng với ngoại ngữ thì phần lớn vẫn không thể trôi chảy ngay cả khi dùng SRS
Tiếp thu ngôn ngữ thứ nhất và tiếp thu ngôn ngữ thứ hai khác nhau như táo với thịt xông khói vậy. Não của trẻ sơ sinh và người trưởng thành khác nhau, nhu cầu, năng lực và ngữ cảnh cũng khác nhau rất nhiều