I haven't studied for a while, and now the next due times are too big!
(얼마간 공부를 안하다가 다시 하려니. 이제 카드의 만기가 지나치게 늘어나 버렸다!)
매일 Anki를 사용하여 카드를 학습하면 올바르게 응답할 때마다 해당 카드의 다음 학습 간격은 늘어나게 된다.
간격이 매번 두 배씩 늘어난다고 가정하면 처음 학습 간격이 5일이었다면 이어서 10일, 20일, 40일 순으로 늘어나게 된다.
이런 시스템에서 몇 주 또는 몇 달 동안 공부를 하지 않다가 다시 카드뭉치를 학습하게 되면, 갑자기 늘어난 학습 간격에 종종 놀라곤 한다.
Anki는 사용자가 실제로 어느 정도의 시간이 지난 후 카드를 학습했는지 여부를 기준으로 학습간격을 설정하지 처음 예정되어있던 학습 일정을 그대로 고수하지 않는다.
따라서 처음 카드의 다음 학습 간격이 5일로 예정되어 있었지만 한 달 동안 그 카드를 학습하지 않았다면 다음 학습 간격은 5일의 2배인 10일 보다는 한 달의 두배인 두 달 즉, 60일에 가까울 것이다.
이건 좋은 일이라고 생각한다.
1개월이 지난 후에 카드를 성공적으로 기억해 냈다면, 더 오래 기다린 후에도 다시 기억할 가능성이 높다.
학습 기간이 초과된 이후에 학습을 할 때에도 평소에 사용되는 방식과 동일하게 간격반복시스템 SRS(Spaced Repetition System)를 효과적인 시스템으로 만들어주는 동일한 원리가 역시 적용되는 것이다.
오히려 카드를 한 달 이후에 쉽게 기억해냈다면 학습 간격을 다시 줄여서 10일 이후에 학습하는 것이 더 이해하기 어려운 일일 것이다.
카드뭉치를 초기화하는 것은 좋은 해결책이 아니라 매우 나쁜 해결책이라고 할 수 있다.
장기간 카드 학습을 방치하고 나서 다시 카드뭉치로 돌아왔다면 아마도 그동안 학습했던 많은 카드들의 내용이 잘 기억나지 않을 것이다.
그러나 전부 홀라당 까먹은 것은 아닐 수 있는데 전체 카드뭉치를 초기화 해버리면 이미 알고 있는 내용도 다시 공부하게 되어 시간을 낭비할 수밖에 없게 된다.
자 이제 당신은 이미 공부해야할 학습 시기를 놓쳤지만 여전히 기억은 환기할 수 있는 카드를 발견했다.
물론, 수월하게 기억되는 것은 아니다.
그 카드들은 학습이 이루어져야할 시기에 학습이 이루어지지 않았으므로 수월하게 기억하지 못하는 것은 매우 당연하다.
이러한 상황에 대한 해결책으로 Anki는 사용자가 평가한 난이도에 따라서 해당 카드의 다음 학습 기간을 다르게 설정하고 있다.
만일, 카드를 쉬움(easy)라고 평가했다면 마지막 학습 간격과 그동안 지연되었던 기간을 합산하여 산식에 넣고 계산하여 다음 학습 간격을 설정할 것이다.
만일, 알맞음(good)이라고 평가했다면 지연되었던 기간의 반만 합산할 것이고, 어려움(hard)라고 평가했다면 지연되었던 기간의 4분의 1만 사용될 것이다.
그래서 만일 당초 예정된 학습 간격이 5일인 카드를 20일 만기 초과되어 응답을 한 경우 그 다음 학습 간격은 평가한 난이도에 따라서 대략 다음과 같이 될 것이다.
Hard: (5 + 20/4) * 1.2 = 12일
Good: (5 + 20/2) * 2.5 = 37.5일
Easy: (5 + 20) * 3.25 = 81.25일
(카드뭉치 학습 퍼포먼스에 따라서 실제 학습간격을 조정하는 인자의 값도 변화한다.)
만일, 카드를 어려움(hard)이라고 평가하게 되면 그 카드의 다음 학습 간격은 상당히 보수적으로 결정되어 마지막 대기(25일)보다 짧게 나타난다.
그리고 카드를 알맞음(good)이라고 평가하면, 다음 학습 간격은 대략 50% 더 높게 나타난다. 그리고 쉬움(easy)의 경우는 평소처럼 학습 간격을 공격적으로 증가시킨다.
그러므로 한참 공부를 하지 않다가 Anki로 돌아왔다면 그저 평상시처럼 공부하는 것을 추천한다.
그러나 반드시 카드뭉치를 초기화해야 된다고 생각한다면, 브라우저에서 초기화를 수행할 카드를 골라 편집 → 일정조정을 사용하라.
Can I do multiple-choice questions?
(다지 선다형으로 객관식을 만들 수 있는가?)
다지 선다형의 객관식은 여러 가지 이유로 좋은 학습 도구라고 할 수 없다.
학교나 아카데미에서 객관식 형식을 일상적으로 사용하는 이유는 그것이 표기하기 쉽기 때문이고 이러한 객관식 문제 형태로 인하여 사람들이 스스로 답을 생각해낼 수 없더라도 여러가지 선택지에서 올바른 답을 인지할 수 있는 능력 갖추는 식으로 공부하는 것이 가능하기 때문이기도 하다.
객관식 문제를 잘 만들려면 정답과 유사하여 실제 정답을 헷갈리게 하는 혼란스러운 선택지(distractor)를 갖고 있다.
컴퓨터는 유사한 철자를 가진 단어들은 찾을 수 있지만 보다 복잡한 주제의 문제에서는 정답을 헷갈리게 하는 혼란스러운 선택지를 찾아낼 능력이 없다.
시험을 목적으로 공부하고 있고 다음과 같은 다지 선다형 문제로 시험을 치른다고 해보자.
Q: What animal has a really long neck?
A: 1. A monkey. 2. A giraffe. 3. A donkey. 4. A snail.
이 질의 방식은 Anki에서 다음과 같이 질문을 다시 작성되어야 한다.
Q: What animal has a really long neck?
A: A giraffe.
또는 자신 만의 선택을 질의에 추가시킬 수도 있다.
Q: What animal has a really long neck? (dog/cat/giraffe/penguin)
A: A giraffe.
Can I link cards together? Add dependencies? How should I handle synonyms?
(카드들 끼리 link를 서로 연결할 수 있는가? 서로 종속성을 추가할 수 있는가? 동의어는 어떻게 처리해야하는가?)
Anki는 하나의 노트에서 나온 카드들 사이의 링크를 지원하지만 서로 관련이 없는 카드들 사이의 링크는 지원하지 않는다.
일본어를 인지하고 동시에 말할 수 있도록 일본어를 공부하고 있다고 상상해보라.
"big"이라는 뜻의 "ookii"라는 단어를 입력하고 Anki에게 양방향으로 “ookii”→ “big”, “big” → “ookii” 카드를 생성하도록 지시 할 수 있다.
위의 상황에서 Anki는 두 유사카드가 노출되는 간격을 띄어놓음으로써 하나의 카드가 나타나고 바로 다음에 유사카드가 나타나는 상황을 피할 수 있다. (유사카드간 노출 간격 띄우기 참조).
어떤 사람들은 이러한 유사카드들 간의 링크를 임의의 카드 사이까지 확장하려고 한다.
그들은 Anki에게 "이 카드를 보여 주고 나서 저 카드를 보여줘" 또는 "이 카드를 충분히 숙지하기 전까지 그 카드는 보여주지 말아"라고 지시할 수 있기를 원한다.
이것은 이론상 좋은 생각처럼 들릴 수 있겠지만 실제로는 전혀 실용적이지 않다.
우선 첫 번째로는, 위의 유사카드 사례와는 달리, 임의의 카드 사이의 모든 관계를 직접 정의해야한다.
이러면 Anki에 새로운 노트를 추가하는 일이 매우 복잡한 절차를 수행하는 과정이 되어버린다.
카드뭉치를 검색하고 새로운 학습 자료와 이전의 자료 간의 관계를 일일이 설정해야 하는 등의 일이 생길 것이다.
두 번째로는, Anki는 학습 자료를 다시 보여줄 최적의 시간을 결정하기 위하여 알고리즘을 사용하고 있다는 점을 기억하라.
이러한 알고리즘에 카드들이 노출되는 규약들을 추가하게 되면 카드들은 좀 더 빨리 노출되거나 늦게 노출될 것이고 이는 간격 반복 시스템(SRS)의 효율성을 떨어뜨리게 될 것이다.
즉, 필요보다 더 많은 학습을 하게 되거나, 더 적게 학습하게 될 것이다.
Anki를 가장 효과적으로 사용하는 방법은 모든 노트들을 다른 노트와는 독립적으로 다루는 것이다.
유사한 단어들을 같이 다루기 위해 노력하는 대신에 유사한 단어들의 차이점을 결정하고 서로 떼어놓는 것이 나을 것이다.
동의어들이 서로를 완전히 상호 대체할 수 있는 경우는 매우 드물다.
언어에 어떤 뉘앙스가 붙는 경향이 있으며, 단어가 동의어로 대체될 경우 문장이 갑자기 이상해지는 경우도 적지 않다.
앞서 언급한 일본어의 경우로 좀 더 계속해보자.
“dekai”라는 단어를 배우고 싶다고 상상해보자.
이 단어도 대략 “big”이라고 번역될 수 있다.
하지만 이 단어는 훨씬 구어적인 표현이다.
여전히 앞뒤 양방향으로 학습을 하고 싶다면 아마도 영어 쪽의 단어를 “big(more casual)”이라고 쓰게 될 것이다.
하지만 언어 공부가 더 진척될수록 비슷한 단어들의 차이점을 세세하게 정의하는 것이 부담이 된다.
이러한 이유 때문에 특정 단어들에 대한 카드들을 만든다면 해당 학습 단계에 어울리는 것으로 만들고 이 카드를 업데이트할 필요는 없다.
그저 그대로 남겨놓는 것이 가장 좋다.
우리 모두는 수동적으로 사용하는 어휘들이 능동적으로 사용하는 어휘들 보다 훨씬 더 많기 때문에 기본적인 어휘를 습득하고 인지 기반의 학습이 이루어지면 공부가 진척됨에 따라 자연스럽게 좀 더 미묘한 차이를 이해할 수 있게 된다.
우선 좀 더 쉬운 학습 내용이 나타나고 그 뒤에 좀 더 어려운 학습 내용이 나타나게 하는 것을 보장할 수 있는 몇 가지 도구들이 있다.
하지만 새 카드들은 기본적으로 추가된 순서대로 나타나기 때문에 공부하려고 하는 자료가 본인의 학습 진도에 적절하게 맞고 제대로 등급에 따라서 난이도가 심화되고 있는 자료라면 이를 순서대로 추가하는 것만으로도 적절한 난이도에 따라서 학습 자료가 표시될 것이다.
Can I give my notes an arbitrary number of fields?
(내 노트에 필드 수를 마음대로 늘릴 수 있는가?)
노트는 밀접하게 연관된 정보들을 잘 연계하여 나타내기 위하여 디자인되어 있다.
그리고 해당 정보들이 카드의 어디서 나타나는지를 인지하기 쉽도록 만들어졌다.
가령, 언어 학습의 경우 구문과 해당 구문의 번역을 쌍으로 나타내거나, 구문-번역-읽기의 삼중으로 나타낼 때 등에 매우 유용하다.
여기서 언급하는 모든 관계는 1대1의 관계다.
즉, 주어진 구문에 대한 번역과 읽기는 오직 하나인 것이다. (1)
서로 연관된 정보를 함께 묶을 수 있는 이러한 노트의 기능 때문에 일부 사람들은 관련성이 적은 정보들도 함께 묶으려고 시도한다.
예를 들어, 다음과 같이 "completely"라는 단어가 두 개의 문장에 엮여서 오는 경우를 보자.
- He was completely confused.(그는 완전히 혼란스러웠다.)
- That was completely uncalled for.(그는 전혀 부름을 받지 않았다.)
단지, 이 두 개의 문장이 하나의 단어를 공유하고 있다는 관련성만으로 관련 있다고 판단하여 상기의 두 문장을 같은 노트에 넣는다.
하지만 또 다른 예문을 우연히 마주치게 되면 어떻게 될까?
- The book confused her.(그 책은 그녀를 혼란스럽게 만들었다.)
이 문장은 "confused"라는 단어를 위의 문장과 공유한다.
그렇다면 "confused"라는 노트에도 이 문장이 있어야 할까? 아니면 "completely"에 대한 노트? 아니면 둘 다?
위에서 언급한 구문-번역 쌍과 달리 동일한 단어를 공유하고 있는 문장들이 서로 관련성이 있다고 말하게 되면 문장들은 정말 지나치게 많은 관계를 형성하게 된다.
즉, 문장 A는 문장 B, C와 관련 될 수 있고, 문장 B는 A, D 등과 관련 될 수 있다.
관계들이 복잡하고 서로 겹치기 때문에 노트는 이러한 관계를 나타내기에 좋은 방법은 아니다.
사람들이 이러한 관계를 노트로 표현하려고 하는 것은 다음의 두 가지 주된 이유가 있는 것으로 보인다.
1) "한 곳에서 모든 정보를 모으는 것이 깔끔하기 때문에"
이 말이 사실인 것처럼 보일 수 있지만 실제로는 별로 그렇지 않다.
서로 다른 노트에 있는 “completely”라는 단어가 들어간 모든 예제 문장을 전부 알고 싶다면 그냥 “completely”라는 단어를 브라우저에서 검색하기만 하면 된다.
2) "동일한 단어가 있는 카드를 분리해서 복습하기 원하기 때문"
이것은 앞에서 제시된 FAQ 질문과 관련이 있다.
카드들 사이의 링크를 일일이 정의하는 작업은 무척 시간이 많이 소모되는 작업이다.
만일 이러한 작업이 자동으로 수행되어 단어를 공유하는 모든 카드가 단어를 공유하는 다른 카드와 분리되어 복습이 이루어지도록 할 수 있다고 해도, 일단 지나치게 많은 연산이 필요하므로 금지되어야 한다.
또, 모든 카드들이 다른 무언가와 링크가 발생하여 어떤 카드도 나타나지 않는 상황이 발생할 수 있다.
물론 이렇게 하고자 하는 의도에는 동의한다.
누가 생각해도 동일한 단어가 들어 있는 카드가 연달아 나타나는 것이 이상적인 상황일리 없다.
하지만 카드를 추가할 때 이를 임의의 순서로 했다면 그런 상황은 잘 일어나지 않는다.
그리고 부작용을 막기 위한 시도들이 그 정도의 수고를 들여야 할 가치가 없다고 생각한다.
그리고 만약의 경우 어떤 해결책이 있어 모든 단어의 최적화된 노출 순서를 만든다고 하더라도, 실제 세계에서 그 단어들과 조우하는 것을 막을 수는 없다.
(1) 사람들이 동일한 구를 각각 다른 방법으로 번역 할 수 있으며, 다양한 변증으로 인하여 동일한 단어가 다르게 읽을 수 있다.
그러나 이 문제는 지금의 논의와는 별다른 연관이 없다.
Can I host my own AnkiWeb?
(내가 나만의 AnkiWeb을 호스팅 할 수 있는가?)
미안하지만 AnkiWeb은 호스팅 서비스로만 제공된다.
Why is the Android version free when the iPhone version isn’t?
(왜 iPhone 버전과 달리 Android 버전만 무료인가?)
Anki 데스크톱, AnkiWeb 및 AnkiMobile에서 일하는 것이 내 풀타임 직업이다.
그리고 비용이 지출되고 있으므로 돈나올 곳이 필요하다.
데스크탑 및 웹 버전을 무료로 제공하기 때문에 개발 자금은 전적으로 iPhone 앱 판매에 의존하고 있다.
AnkiDroid는 별도의 자원 봉사자들이 제작했다.
그들이 AnkiDroid를 제작할 때 무료 데스크탑 버전을 기반으로 제작했고 카드뭉치 동기화는 무료 AnkiWeb에 의지하였기 때문에 그들은 AnkiDroid 역시 무료로 결정했다.
What spaced repetition algorithm does Anki use?
(Anki가 사용한 간격 반복 알고리즘은 무엇인가?)
Anki는 애초에 SuperMemo SM5(SM3+가 맞는 것 같지만 원문은 SM5로 되어 있음) 알고리즘을 기반으로 제작되었다.
하지만 Anki는 카드에 대해서 난이도를 평가하는 버튼을 누르기 전에 버튼에 따라서 다음 학습 간격이 미리 제시되어 있다.
이러한 Anki의 기본적인 설정이 SM5 알고리즘의 근본적인 문제를 드러냈다.
SM2와 알고리즘 개정판의 주요 차이점은 다음과 같다.
- SM2는 카드가 다시 학습될 일정을 결정함에 있어 사용자의 퍼포먼스를 이용한다.
- SM3+는 한 카드에 대한 사용자의 퍼포먼스를 이용하여 해당 카드 및 그와 유사한 카드들이 다시 학습될 일정을 결정한다.
후자의 접근법은 단일 카드에 대한 퍼포먼스뿐만 아니라 그룹에 대한 퍼포먼스까지 고려하므로 보다 정확한 학습 간격을 보장한다.
만일 공부하는 방식이 일관되어 있고 이러한 카드들의 난이도가 유사하다면 이러한 접근방법은 꽤나 잘 적용될 수 있다.
그러나, 이러한 산출식에 어떤 급격한 변인(가령, 카드의 난이도가 매우 다르거나 매일 동일한 시간에 공부하는 것이 아니라는 등)이 유입되면 SM3+ 알고리즘은 다음 학습 간격을 산출함에 있어 잘못된 추정을 하는 경향이 있다.
그 결과 카드가 너무 자주 노출되거나 또는 너무 늦게 나타나게 된다.
게다가 SM3+가 "최적화 요인" 표를 동적으로 조정하므로 그 결과 카드에 대하여 "어려움(hard)"이라고 응답한 것이 "쉬움(easy)"이라고 응답한 경우보다 학습 간격이 길어지는 경우가 종종 일어난다.
SuperMemo에서는 다음 학습 간격을 사용자에게 표시하지 않으므로 사용자는 이 사실을 결코 알지 못한다.
여러 가지 대안을 비교 평가해보고 나서 Anki 제작자는 잘못된 추정의 위험을 무릅쓰고 최적의 학습 간격을 얻는 것보다 SM2 알고리즘에 의해 유도된 최적에 근접한 학습 간격이 더 낫다고 결정했다.
SM2 접근 방식은 최종 사용자가 예측할 수 있고 직관적인 학습 간격을 제시하는 반면 SM3+ 접근 방식은 사용자에게 세부적인 사항을 숨기고 시스템이 실수할 수 있음에도 시스템에 대한 무조건적인 신뢰를 요구한다.
Anki SM2 알고리즘을 기반으로 하지만 일부 측면에서는 다르다.
SM2에서는 초기의 학습 간격을 1일 그리고 6일로 설정한다. Anki에서는 사용자가 초기 익힘 단계의 단계수와 간격을 완전히 제어한다. Anki는 새 카드를 기억하려면 그것을 여러 번 봐야한다는 사실을 이해하고 있다. 그래서 초기의 “실패(failures)”는 시행착오일 뿐, 몇 일간 실패한 카드를 여러 차례에 걸쳐 공부할 필요까지는 없다고 판단한다. 그래서 익힘 단계에서의 사용자의 퍼포먼스는 추후 해당 기억을 유지하는 단계에서의 퍼포먼스에 반영되지 않는다.
Anki는 복습 카드에 응답하기 위해 6가지가 아닌 4가지 선택 버튼을 사용한다. 이 중 실패 버튼은 3가지가 아닌 오직 하나만 있다. 이렇게 버튼을 배치한 이유는 전체 복습 중에서 실패하는 경우는 많지 않고 카드의 수월함(ease)을 조정하는 것은 긍정적인 응답 버튼을 변경하는 것만으로 충분히 가능하기 때문이다.
예정된 일정보다 늦게 카드에 응답하는 것도 다음 학습 간격 계산의 한 요소로 들어간다. 따라서 예정보다 늦게 응답했음에도 여전히 기억하고 있다면 그 카드의 학습 간격은 훨씬 늘어나고 해당 카드의 학습 진도는 빨라진다.
Anki의 실패 버튼은 SM2와 마찬가지로 카드의 학습 간격을 초기화하는 것이 기본이다. 그러나 사용자는 그 카드의 학습 간격을 완전히 초기화하지 않고 몇 단계 뒤로 되돌리는 방식을 취할 수 있다. 또한 성숙한 카드를 실패한 경우 이를 같은 날 복습하지 않고 다른 날에 복습하도록 선택할 수 있다.
쉽게 기억된다고 응답하면 것은 수월함 요소가 늘어날 뿐만 아니라 현재의 학습 간격 계산에서도 보너스가 추가되어 표준 SM2 알고리즘보다 조금 공격적이다.
익힘 중인 카드를 연속으로 실패한다고 해도 카드의 수월함은 더 이상 줄어들지 않는다. 표준 SM 알고리즘에 대한 공통적인 불만사항이 카드를 반복으로 실패할 경우 해당 카드가 “낮은 학습 간격 지옥”에 빠지게 된다는 것이다. Anki에서는 초기에 카드를 익히는 과정에서 일어난 일이 카드의 수월함 요소값에 영향을 미치지 않는다.
SM2 알고리즘에 대한 설명은 다음을 참조하길 바란다.
http://www.supermemo.com/english/ol/sm2.htm
또한 Anki의 소스 코드에서 학습 일정에 대한 코드인 sched.py를 확인할 수 있다.
다음은 요약이다(기울임 꼴로 표시된 옵션에 대한 카드뭉치 옵션 섹션 참조).
당신이 다음의 버튼을 누를 경우 ...
Again(다시)
카드가 재익힘 모드로 이동하고 수월함이 20% 포인트 감소한다(즉, 퍼센트 포인트 단위로 나타나 있는 수월함 값에서 20을 빼면 된다.). 그리고 현재의 학습 간격은 새로운 학습 간격과 곱해진다. 이 간격은 카드가 재익힘 모드에서 나올 때 사용된다.
Hard(어려움)
카드의 수월함은 15% 포인트 감소하고 현재 간격에는 1.2가 곱해진다.
Good(알맞음)
현재 간격에는 현재 수월함 값이 곱해진다. 수월함은 변함 없다.
Easy(쉬움)
현재 간격에 현재의 수월함 값과 쉬움 보너스가 곱해지고 수월함이 15% 증가한다.
Hard, Good 및 Easy의 경우 다음 학습 간격에는 간격 수정요소(modifier)가 추가로 곱해진다.
카드가 만기가 초과되어 늦게 복습되는 경우, 앞에서 언급한 것처럼 추가된 일수가 현재 학습 간격에 추가된다.
카드가 취할 수 있는 일정 조정 관련 값에는 몇 가지 제한 사항이 있다.
수월함은 결코 130% 이하로 떨어지지 않는다.
SuperMemo의 조사에 따르면 수월함 값이 130% 이하로 떨어지면 카드가 자주 만기가 되어 나타남으로써 필요 이상의 학습을 강요하고 사용자를 귀찮게 하는 경향이 있음을 보여준다.
학습 간격은 최대 학습 간격 이상으로 절대로 증가하지 않는다.
마지막으로, 모든 새로운 학습 간격(Again 제외)은 항상 이전 간격보다 최소 하루 이상 길다.
<주의>
난이도 평가 버튼을 선택하면 Anki는 이 버튼에 붙은 학습 간격에 약간의 변경을 임의의 “퍼지 논리”에 따라 부여한다.
이렇게 하면 카드들이 서로 붙어서 동일한 날 동시에 나타나는 것을 방지할 수 있다.
이러한 퍼지 요소는 버튼에 표시되지 않으므로 선택했던 버튼에 표시된 간격과 카드가 실제로 노출되는 간격 사이에 약간의 불일치가있는 경우 이것이 원인 일 수 있다.