FSRS: um algoritmo moderno e eficiente de repetição espaçada
(github.com/open-spaced-repetition)- A wiki
ABC of FSRSdo FSRS, que otimiza o cronograma de revisões de estudo, foi movida do fsrs4anki para a nova wikiawesome-fsrs - Os materiais de pesquisa vinculados da MaiMemo tratam, respectivamente, da otimização de cronogramas de repetição espaçada e da modelagem da dinâmica da memória em artigos da ACM KDD e da IEEE TKDE
- Um artigo separado apresenta o processo de pesquisa em algoritmos de repetição espaçada a partir da experiência de um estudante de graduação que publicou um artigo na ACM KDD
FSRS-Anki-20keanki-revlogs-10ksão apresentados juntos como datasets open source que incluem características de séries temporais- O FSRS é um projeto open source independente liderado pela comunidade, e o apoio de organizações como a MaiMemo Inc. sustenta a participação contínua de contribuidores-chave
ABC of FSRS movido para uma nova wiki
- A página
ABC of FSRSfoi movida para uma nova wiki - Novo local: https://github.com/open-spaced-repetition/awesome-fsrs/wiki/ABC-of-FSRS
Materiais de pesquisa sobre repetição espaçada
- Há links para dois artigos da MaiMemo
- A Stochastic Shortest Path Algorithm for Optimizing Spaced Repetition Scheduling: artigo da ACM KDD sobre otimização de cronogramas de repetição espaçada
- Optimizing Spaced Repetition Schedule by Capturing the Dynamics of Memory: artigo da IEEE TKDE sobre otimização de cronogramas de repetição espaçada por meio da captura da dinâmica da memória
- Ambos os artigos também oferecem links para versões em chinês
Artigo sobre experiência de pesquisa
- How did I publish a paper in ACMKDD as an undergraduate?: artigo sobre a experiência de pesquisa em algoritmos de repetição espaçada
Datasets públicos
- São disponibilizados datasets open source relacionados à repetição espaçada que incluem características de séries temporais
Projeto comunitário e patrocínio
- O FSRS é um projeto open source independente liderado pela comunidade
- O projeto agradece o apoio de organizações como 墨墨背单词 (MaiMemo Inc.)
- O apoio da MaiMemo permite que contribuidores-chave como Jarrett Ye dediquem tempo e expertise ao FSRS
- Essa colaboração ajuda o FSRS a permanecer um algoritmo de repetição espaçada líder e disponível gratuitamente para todos
1 comentários
Comentários do Hacker News
Uma forma muito subestimada de melhorar a repetição espaçada é tornar os cartões mais fáceis. Descobri que cartões eficazes podem ser surpreendentemente fáceis
No começo, eu memorizava vocabulário de francês com o Anki e fazia cartões bidirecionais inglês↔francês, mas quando os cartões chegaram às centenas, ficou doloroso por haver sinônimos demais
Depois, seguindo o conselho de Katzumoto para aprender japonês, comecei a colar parágrafos inteiros de e-books ou páginas da web e criar cartões de lacuna escondendo só uma palavra; era fácil, mas eficaz
Fiquei ainda mais preguiçoso e passei a esconder só metade da palavra, ou simplesmente deixava a palavra em negrito e considerava como acerto se eu a lembrasse mais ou menos pelo contexto; e isso funcionou ainda melhor
Quando um cartão aparecia e eu pensava “ah, esse cartão de novo?”, eu o apagava, e configurei o Anki para suspender permanentemente depois de 3 erros. Se fosse uma palavra que eu realmente precisasse saber, logo a veria de novo em um contexto melhor, então não havia problema, e meu vocabulário de francês continuou crescendo rápido
Acho que a maior melhora virá mais de melhorar o formato dos cartões do que de um algoritmo melhor de repetição espaçada, e considero surpreendentemente difícil criar cartões fáceis demais para não serem úteis. Digo isso depois de mais de 35.000 revisões no Anki em três idiomas
Vejo com frequência gente despejando milhares de cartões no Anki no primeiro mês estudando algo e, um ou dois meses depois, ficando tão sobrecarregada com as revisões que elas passam a parecer trabalho maçante, e aí a pessoa para
Há dois conselhos que fazem diferença. Faça os cartões um pouco “fáceis demais” e seja bastante seletivo com os cartões que vai colocar
Quando você cria os cartões pela primeira vez, ainda está estudando aquele assunto e tudo está vivo na cabeça, então dá vontade de criar cartões interessantes e desafiadores para o seu eu atual. Mas uma ou duas semanas depois, é melhor que sejam cartões fáceis, que só deem um leve empurrão na memória, em vez de causar confusão
Em vez de jogar no Anki frases suficientes para encher um livro, é melhor passear devagar por um pomar e colher só uma ou duas das melhores maçãs. Maçãs podres, ou seja, cartões sem interesse ou difíceis demais, contaminam o baralho inteiro e fazem você evitar a revisão em si
A revisão normalmente passa rápido, então o tempo de criação representa uma parte surpreendentemente grande do tempo total de estudo por cartão. Hoje em dia coloco cada vez menos contexto, e muitas vezes os cartões simples padrão criados por um plugin de dicionário já bastam
Quase só adiciono contexto na frente do cartão quando se trata de um termo técnico que aparece praticamente só naquele contexto. Quando não vale a pena aprendê-lo de forma isolada
Ainda assim, acho bom fazer isso de forma preguiçosa e ser generoso consigo mesmo. Na hora de corrigir a resposta, também sou bem frouxo: não cobro domínio perfeito de nível nativo, e sim se entendi o suficiente para evitar confusão na prática
Elas devem melhorar muito a qualidade dos seus cartões
Por exemplo, dá para forçar a memorização das notas do braço com repetição espaçada de forma bruta, mas na prática misturar contextos foi mais eficaz
Em uma semana, por preguiça, eu só treino nomes de notas; em outra, mexo com escalas estranhas como a escala húngara; em outra, trabalho progressões com acordes arpejados ou power chords, ou tento reproduzir o som ou a sensação de uma música específica
Com o tempo, o cérebro começa a criar conexões. Surgem percepções como “isso é só sol menor”, “isso é sol maior, mas pulando aquelas notas”, “com esse padrão talvez dê para tocar daquele jeito, né?”
Também há uma sensação curiosa de que a velocidade com que percebo o que não sei aumenta muito mais rápido do que a velocidade com que acho que sei algo. Mesmo assim, estou pensando em usar um algoritmo de repetição espaçada que me dê tarefas de guitarra de 5 a 10 minutos para desenvolver ao mesmo tempo a memória muscular e as conexões neurais
Talvez porque o conteúdo seja mais variado do que quando é só idioma, sinto muito a influência do formato dos cartões. Mesmo em baralhos feitos por outras pessoas, eu frequentemente ajusto o texto do lado da resposta, e há uma diferença perceptível na taxa de retenção
Respostas concisas e com fluxo natural fixam melhor. Se houver um cartão que soe estranho, vale a pena corrigi-lo sem hesitar
Memorizei dezenas de milhares de palavras de idiomas estrangeiros com o Anki, e quando os cartões tinham imagens, isso sempre ajudava a lembrar as palavras
Agora estou fazendo um projeto talvez meio tolo de memorizar 750 cartões de um jogo de perguntas que jogo com a família. São cartões em que todas as respostas são anos. Ex.: “Em que ano a Coca Cola Light foi lançada?”
Se eu criar imagens para os cartões com o Midjourney, consigo lembrar muito mais facilmente
Uso um sistema em que cada século tem uma figura representativa. Einstein representa 1900~2000, Marie-Antoinette representa 1700~1800
Objetos representam décadas. Um carro dos anos 60 representa os anos 60, uma jaqueta com ombreiras representa os anos 80, e assim por diante. O último dígito também é tratado de forma parecida
Faço o Midjourney gerar imagens em estilo de cartoon com esses elementos, salvo as mais engraçadas ou absurdas e as coloco no verso dos cartões do Anki. Muitas vezes as imagens são mais fáceis de lembrar do que o próprio ano
Segundo, sua recordação pode piorar em situações reais sem imagens, então você deveria testar periodicamente com e sem imagem
Terceiro, fiquei curioso se esse quiz é Trivial Pursuit. Um amigo meu memorizou de propósito todos os cartões da edição Genus original
Interessante. Segundo os benchmarks, com esse algoritmo dá para revisar 20~30% menos cartões do que com o algoritmo clássico do Anki
Há alguns dias publiquei uma implementação em Python do algoritmo clássico SM-2 usado em https://python.cards, e talvez dê para trocar para FSRS: https://github.com/vlopezferrando/simple-spaced-repetition
python.cardsparece bom. Seria legal adicionar alguns exemplosTambém fico curioso se existe a possibilidade de abrir o código do app web. Parece que isso pode virar um formato popular para mostrar flashcards em áreas específicas, tipo estudantes aprendendo X
Pela explicação, parece que o FSRS ainda atribui uma data exata de revisão a cada cartão. Foi por causa disso que parei de usar o Anki
Não sou universitário nem estou estudando para prova, então só quero praticar quando tiver vontade. Pode haver longos intervalos entre as sessões, e não quero ter a sensação de que existem cartões atrasados se acumulando
O Anki é um app excelente, mas eu queria que existisse um algoritmo que, em vez de definir datas de revisão, fizesse uma amostragem aleatória dos cartões, ponderada pela probabilidade de precisarem urgentemente de revisão
Seria ótimo se algo como https://github.com/fasiha/ebisu fosse possível como plugin do Anki, ou se houvesse um app parecido usando um formato aberto de cartões
Só que, se você zerar tudo o que está “atrasado”, não vai mais poder praticar quando quiser e terá de esperar algum tempo até ficar disponível de novo
Repetia de forma irritante coisas que eu lembrava, e uma boa parte das que eu esquecia acabava sendo esquecida por completo. Então a repetição quase não tinha sentido e o progresso era muito lento
O ponto central é repetir quase no momento em que você está prestes a esquecer, e isso é difícil sem prazos e agendamento
Na prática não usamos prazos e, tirando alguns recursos de análise que foram pedidos, tentamos manter o usuário em vários níveis de dificuldade
Damos mais importância a seguir em frente do que a eliminar 100% do atraso. Se uma palavra for realmente importante, a pessoa vai favoritá-la ou revê-la de novo
Não é um app público de flashcards; o foco é bem mais em mineração automática de frases para idiomas estrangeiros. Mesmo assim, ficarei feliz em responder perguntas sobre a experiência de modificar o FSRS
Dá para ver mais sobre o produto em https://blog.phrasing.app/phrasing-first-look/
Estou usando FSRS há 3 meses, e finalmente resolveu a dor de ter que ajustar por tentativa e erro o antigo algoritmo de agendamento SM2
O conteúdo de cada baralho pode influenciar muito a retenção ótima, mas agora basta retreinar os pesos de cada baralho a cada poucos meses para que ele se adapte adequadamente
O artigo[0] também vale muito a leitura se você quiser ver uma análise rigorosa da ciência da repetição espaçada em larga escala no mundo real
Por causa dos benchmarks extensivos, para a maioria das pessoas não deve haver muito ganho em recalibrar os pesos para a própria coleção antes de acumular alguns milhares de revisões. O autor recomenda mais de 1.000
Funciona bem mesmo quando você faz os cartões com atraso. A probabilidade de lembrar é baseada na estabilidade e no momento da última revisão, e se você ainda se lembrar depois do prazo, a estabilidade é atualizada para um período um pouco maior
[0] https://dl.acm.org/doi/10.1145/3534678.3539081?cid=99660547150
[1] https://github.com/open-spaced-repetition/fsrs4anki/wiki/The-Algorithm
Gosto de flashcards como hobby, então uso vários apps de repetição espaçada todos os dias por diversão. Já usei o FSRS e ele é bom, mas ainda não está no nível do SuperMemo mais recente
Se você colocar materiais iguais ou parecidos em dois ou mais apps, dá para ver a diferença. Mesmo assim, o FSRS é muito melhor do que quase tudo o que existe hoje, e parece que em breve vai ficar melhor que o SuperMemo
Usei o Mochi Cards por cerca de um ano e achei apenas ok, um pouco melhor que uma instalação padrão do Anki. O Mnemosyne é parecido. O app SaaS do SuperMemo também é razoável, mas não gosto da forma como ele organiza material de idioma
Para vocabulário de idiomas eu uso o Clozemaster e, depois de acertar, coloco a frase no SuperMemo. Isso porque o algoritmo do SuperMemo é tão melhor assim. Também tenho explicações do ChatGPT para cada palavra, e coloco isso no SuperMemo também
A parte mais difícil com certeza é fazer bons cartões. Para conseguir mais ideias, http://arxiv.org/abs/2401.01257 e https://rust-book.cs.brown.edu ajudam
Ainda não encontrei um programa de flashcards que permita criar cartões tão rápido quanto o SuperMemo. No SuperMemo, basta colar um bloco de texto (
ctrl-n), selecionar as palavras que vão virar cloze deletion e apertaralt-x. Dá para fazer isso várias vezes no mesmo trecho de texto, e a cada vez um novo cartão com lacuna entra na revisãoA maioria dos outros apps exige criar os cartões um por um. Acho que isso acontece porque eles ficam presos demais à metáfora de cartões e baralhos. O SuperMemo organiza tudo em uma estrutura em árvore, e isso faz uma grande diferença. Na verdade, nem precisa necessariamente organizar, mas as pessoas agem como se o material aprendido fosse se classificar em baralhos limpinhos dentro da cabeça
n, cola o texto comctrl-v, seleciona a palavra, cria a lacuna comctrl-le usactrl-[n]para criar o grupo de lacunas de 0 a 9Cada grupo de lacunas passa a ter o seu próprio “cartão”
Considerando a importância da repetição espaçada, fico pensando se não seria necessário uma abordagem modular, ao contrário do Anki
Não são três coisas separadas?
A estrutura de dados não é rigidamente modular, mas na prática chega o mais perto possível disso mantendo compatibilidade com os baralhos e extensões já existentes do Anki
Na verdade, agora existe um botão para recalcular completamente todos os intervalos e dificuldades usando apenas o histórico e os parâmetros atuais do algoritmo. Se você já usa FSRS e os parâmetros não mudaram, recalcular não faz efeito nenhum, porque é igual ao cálculo incremental após cada revisão
Em princípio, dá para ver isso como uma função pura calculada sob demanda, com cache dos dados gerados por motivos de compatibilidade legada e desempenho
Em um pouco de autopromoção relacionada, criei uma ferramenta gratuita e open source para fazer cartões do Anki a partir de vídeos do YouTube: https://youtube2anki.fly.dev/
Gostaria de receber feedback. O código está no GitHub: https://github.com/vacmar01/youtube2anki
Já conversei várias vezes com o Xiaojun sobre FSRS e Anki. Em sistemas tradicionais de repetição espaçada como Anki+FSRS, o aprendiz muitas vezes revisa o conhecimento sempre no mesmo contexto, o que pode fazer com que ele entenda esse conhecimento como uma unidade isolada, e não como parte de uma rede maior
Por exemplo, aprender palavras isoladamente não prepara o suficiente para usar um idioma na vida real. Em situações reais, contexto, colocações e uso têm um papel enorme
Uma forma melhor de aprender idiomas do que a repetição isolada é encontrar palavras em contextos e combinações variados, para entender como elas naturalmente se formam em blocos e frases
Por isso, para ensino de idiomas, estou criando algo que mostra vídeos curtos da vida real em vez de cartões do Anki. Cada vídeo é um pequeno cenário mostrando como o idioma é usado em situações reais
Os alunos não apenas memorizam palavras, mas veem o uso em um contexto natural que inclui pistas visuais e gestos. Essa abordagem ajuda a entender a aplicação real das palavras e expressões, tornando o aprendizado mais imersivo e eficaz, já que um dos principais motivos do fracasso no aprendizado de línguas estrangeiras é não conseguir manter a constância
Outra coisa que falta no Anki é um quiz baseado em situações reais, e não apenas “você se lembra?”. Os alunos precisam aplicar o que aprenderam em um ambiente divertido e de baixa pressão
Algoritmos de SRS são apenas parte da solução, não uma panaceia. Há muitos fatores na memória, como o efeito das emoções na codificação. Você não precisa de SRS para lembrar do primeiro beijo ou do dia da formatura
As pessoas aprendem a língua materna com fluência sem qualquer SRS, mas, mesmo usando SRS, a maioria não consegue ficar fluente em um idioma estrangeiro
Aquisição de primeira língua e aquisição de segunda língua são tão diferentes quanto maçãs e bacon. O cérebro de um bebê e o de um adulto são diferentes, e necessidades, capacidades e contexto também diferem muito