Anki理解笔记

Anki是我从2013年开始使用的卡牌软件,用于学习一门外语,或者突击复习材料繁多的考试。Anki自定义卡牌非常强大。近期花时间阅读了官方英文文档,在这里写下自己的翻译和理解。

本文最后更新于:2020年2月29日

简介

在背英语单词时,相信有人使用过一种“纸卡片”的方法:找一叠扑克牌大小的卡片,正反两面写上英文和中文意思,然后不断翻阅卡片,从正面英文思考背面中文,或者从背面中文思考正面英文,反复记忆,通常能达到比“机械地记忆”更好的效果。

Anki就是一个类似于纸卡片工作原理的软件,可以制作几乎所有类型的卡片,方便随时随地复习。

Anki is a program which makes remembering things easy. Because it is a lot more efficient than traditional study methods, you can either greatly decrease your time spent studying, or greatly increase the amount you learn.

Anki应用领域非常广

  • 语言学习:Arabic(阿拉伯语),Chinese(汉语),English(英语)...
  • 备考:高考,USMLE(美国执业医师执照考试),司法考试...
  • 科学:解剖,病理学,化学,地理,音乐...
  • 琐事:练习吉他和弦,温习唐诗宋词,生活记事本...

Anki主要特点

  • 免费、开源,基于python+Qt
  • 使用流行的SuperMemo算法记忆曲线
  • 自定义卡片的CSS,支持Javascript,支持音频图片导入,LeTex公式
  • 卡片组支持导入导出纯文本(为使用Excel批量制作卡片组提供了思路)
  • 跨平台,支持windows/linux/macOS/Android/iOS(收费)
  • 支持同步到AnkiWeb云端

Anki凭借自己独特的应用方式和使用思路已经完爆Anki的师傅/父亲:SuperMemo!!全球各地的前辈们自己使用着的卡片已经分享到了AnkiWeb了!!

让我搜集一下大家都在怎么使用Anki学习/复习的:

网友认为Anki适合收集零碎知识:

日常学习就是看到一些零散的知识点,想快速地记下来。最常用的方法就是,写文档或记在笔记中(印象笔记、OneNote),然而这些记录大多都石沉大海,少有重温之时。

既然是零碎的知识,有时就很难作为一篇笔记,分类上就很纠结。作为知识的最小单元,一张卡片可能真的是最合适的。但是不能花过多时间在制作卡片上,否则不就是本末倒置。

关于零碎知识,可以拿它来当作随时摘录英语句子的笔记本

有人拿它来当作一个小词典

有人拿它来准备地理考试

甚至还有人读医的在用Anki,是不是要做与2019-nCoV有关的研究呢?

有人闲的蛋疼还恶搞川帝。。。

看来Anki这个软件简直就是通用的记忆/复习软件,我们也有必要去学习一下它是怎么使用,先从基本的术语开始。

术语

Anki中基本名词定义

英文 中文 备注
Card 卡片 带有正反两面(含有问题和答案)的卡片,即"a question and answer pair"
Deck 卡牌集合(卡片组) 一个集合,里面装有很多卡片,可以导出为apkg文件
Note 笔记 生成卡片的一条数据库记录,一个笔记可以生成一张或者多张卡片
Field 字段 一个笔记的字段,类似于数据库的字段,常用的字段:"FrontContent","BackContent","ImageFile"
Note Type 笔记类型 利用笔记生成卡片所用到的模板(Template),类似于PowerPoint的母版
Interval 复习间隔 概念不是学习步骤(learning step)中的"时间",Interval是卡片毕业后,该卡片下次出现的时间间隔
Collection 收藏集 Anki中所有的资料,包括笔记、卡片、牌组、卡片类型
Due 到期的卡片数目 到期=正在学习+复习队列,也就是卡片组三个数字中的棕色+绿色之和

添加卡片组

获取卡片组

可以下载别人已经制作好的(pre-made)卡片组合,也可以自己创建(self-made)卡片组合。

Decks Pros Crons
pre-made 方便快捷,来源广泛 词库庞大,不一定适合每一个人
self-made 自定义,符合个人记忆思路,效果更好 制作卡片花费时间较长

'Self-made' vs 'pre-made'

Creating your own deck is the most effective way to learn a complex subject. Subjects like languages and the sciences can’t be understood simply by memorizing facts — they require explanation and context to learn effectively. Furthermore, inputting the information yourself forces you to decide what the key points are, leading to a better understanding.

"Do not learn if you do not understand." -- SuperMemo

总之,要“基于理解地记忆”,绝对不能是机械的记忆!对于记忆方法,强烈推荐看一下这篇文章Effective learning: 20 rules of formulating knowledge,我花了不少时间理解其中的精髓!

如果您正在学习某本课本,而刚好有人分享了该课本的卡片组,这可以让你节省一些制作卡片的时间。不提倡直接拿别人的卡片,因为把别人的卡片组打开后会发现卡片很难懂,因为缺少相关背景资料和介绍。

我的通常做法是,先去社区找找有没有pre-made卡片组,有的话就可以参考别人,筛选自己认为有用的卡片,根据记忆的上下文,增加适合的字段或删除不必要的字段,改造成self-made的卡片组。

学习

Anki采用"Learning Steps"概念进行卡片的学习,每点击Show Answer按钮,出现几个"Again","Good","Easy"按钮进行"Reset Step","Next Step","Graduate"的步骤。

每出现一次卡片,称为一个Learning Step,默认情况下只有;2个Step:"1m, 10m"(意思Step1会卡片每1分钟出现一次。只要进入了step 2,那么大约10分钟后卡片再现。)

Learning Step是可以自定义的,比如我最近在学习日语记忆日文生词时,采用了这个自定义步骤(单位:分钟):

2 5 10 30 60

这里就有5个步骤,时间间隔如下

Step 设置时间(分钟) 意义
1 2 初始步骤(点击Again会进入该步骤),在此步骤点击Good后,会约2分钟后卡片再现
2 5 Step1->Step2,在此步骤点击Good后,约5分钟后卡片将再次出现
3 10 Step2->Step3,在此步骤点击Good后,约10分钟后卡片将再次出现
4 30 Step3->Step4,在此步骤点击Good后,约30分钟后卡片将再次出现
5 60 Step4->Step5,在此步骤点击Good后,约60分钟后卡片将再次出现

如果在Step5记住了卡片(点击了"Good"或者"Easy"),那么卡片毕业了(Card is graduated),卡片进入Review队列。Anki默认在下一天会再次出现(或者复习),随后将逐步增加出现的间隔(符合记忆曲线)。

建议每个人根据学习材料的难度,修改自定义步骤,不采用默认的"1 10"步骤

每张卡片都会经理三个阶段:新卡片、学习中、毕业。他们转换的关系如下:

  • 对新卡片点击Good会进入学习中,点击Easy会直接毕业
  • 对学习中的卡片点击Easy会直接毕业
  • 对学习中的卡片完成所有学习步骤,卡片毕业
  • 毕业后的卡片会按照一定的算法在将来重新出现,若点击Again会进入学习中
  • 毕业后的卡片可以通过卡片浏览器中的Reschedule操作,重新变成学习中的卡片

Learning

对于新卡片,才有学习模式(Learning Mode或Learning Phrase)这个概念。

已经毕业的卡片不属于学习模式,在下文Reviewing小节会单独介绍毕业卡片,其打分界面会有所不同。

学习模式下从左到右有三个打分按钮:Again,Good,Easy,桌面版的Anki,这三个按钮的快捷键是:1,2,3

下面分别介绍按钮的意义,对应的Learning Step处理方式。

Again

点击后将回到Step 1,没有任何副作用,生疏的卡片谁能一眼就记住呢?大家都是从不断的Again走过来的。

Anki旧版本这个按钮是"Soon"

Good

点击后将进入Next Step,当处于Last Step时,卡片毕业(card is graduated),卡片被放入待复习的队列。

Easy

点击后将使得卡片毕业(card is graduated),卡片被放入待复习的队列。

Reviewing

对于已经学习的卡片(已经毕业的卡片)复习。

从左到右有四个打分按钮:Again,Hard,Good,Easy。桌面版的Anki,这三个按钮的快捷键是:1,2,3,4

Again

标记该卡片为回答错误(incorrect),并且要求Anki在未来尽可能地再现此卡片。

回答错误称为失误(card was lapsed),关于失误后的默认处理是Anki将卡片的interval更改为1,即明天到期,并在接下来的10分钟内进入学习队列。

对失误(lapses)的处理,可以有更多的自定义:

点击:Deck Option(卡片组选项) -> Lapses(失误)
  1. New interval(新间隔)设定的是Anki对于回答失误的卡片的新复习时间间隔(interval)的百分值,基数是卡片的上一个时间间隔(last interval)。举个例子:一张卡片上一次的复习间隔是100天,New interval设置为20表示20%,那么失误后,新的interval被设定为20天。
  2. Min interval(最小间隔)有效值值为不少于1的整数。默认值是1,表示Anki先通过New interval百分比计算得出的interval值,若该计算值大于Min interval,则被设定为Min interval值。
  3. Leech threshold(难点阈值)指定连续"Again"失误的阈值,超过阈值将采取特定动作。
  4. Leech action(难点动作)默认是到达记忆难点阈值后暂停卡片。(其实可以选择另一个选项:标记该卡片)

如果一张卡片进入了记忆难点(多次按Again达到难点阈值)被暂停,建议:

  • Waiting,等到真正学习机会再学
  • Delete it,删掉它,花时间学点简单的比死扣牛角尖更值得
  • Edit it,修改笔记,也许改一下Hint,加几个图片,或者重新排版一下CSS,让大脑接受新的学习环境再去攻克它

Hard

设定该卡片的新interval值为稍大于Good的interval值。效果是要求Anki在未来尽可能地再现此卡片(频率没有Again按钮高)。

Good

标记卡片的难度尚可,符合记忆曲线,告诉Anki不需要修正卡片的难度曲线(the card easiness doesn’t need to be adjusted down or up)。Anki默认将下次复习的间隔(interval)设定为250%乘以上一次的interval值。举例:上次看见卡片是10天前,今天看到后标记卡片Good,那么25天后才能再次看到这卡片。

Easy

标记卡片的难度变简单了,让Anki加长interval来让Anki在未来尽可能地不显示此卡片。通常对“确实特别简单的卡片”才这么做。一般建议点击Good即可。

Overview数值

学习过程中有从左到右的三个带颜色数值:

12 + 34 + 56

数字 颜色 说明
12 蓝色 是新卡片数量
34 棕色 正在学习的卡片数量
due to be studied today which are currently in the learning phase
56 绿色 待复习卡片数
due for review. (i.e. cards which have already graduated from the learning phase)

卡片动作

  • Mark Note(标记笔记),将卡片所对应的笔记添加标签"Marked",以便于在卡片浏览器中快速筛选。
  • Bury Card(隐藏卡片),将当前的笔记隐藏,下一天将自动取消隐藏。目的是留给明天学习(复习),至于手动取消隐藏,可以通过Deck Overview下的Unbury取消。隐藏卡片用于那些自己暂时不想学习的卡片。
  • Suspend Car(暂停卡片)将当前的笔记暂停,直到手动取消暂停。常用于确实不想学习的卡片(或者特别难记的卡片,没学过的卡片...)

笔记类型

预置笔记

  • Basic
    最基本的卡片,只有两个字段:正面反面。

  • Basic(Reverse)
    可以从一个Note中生成两张卡片Card1,Card2,正反面能互相映射。

  • Basic(Optional R.)
    可控地从一个Note中生成两张卡片Card1,Card2。只需往Add Reverse字段填入任意字符就能生成Card2。如果Add Reverse为空则不生成Card2。

  • Cloze
    产生如下的填空题,用法详见知乎专栏《cloze模板》

自建笔记

因为最近自学日语,以建立日语生词卡片为例。

新建一个卡片类型

add new from basic,名字“标准日语初级生词”。

字段我自订为如下表

字段 意义
Chinese 中文意思
AudioFile 媒体文件
Japanese_1 假名
Japanese_2 日本繁体汉字
Hint_ch2jp 自己写的提示,从中文联想出日文,或者写上自己的
理解,书中出现的页码数,也可以是例句等等
Part_of_speech 词性

这里有个勾选某个字段作为卡片浏览器的主键(卡片浏览器中只显示该字段,并进行排序),如果在卡片浏览器很难找到对应的卡片,可能需要重新勾选合适的字段,这里我选用了Chinese作为主键字段。

下一步就是自定义卡片的模板了

右上方有个加号,点一下可以添加一张新的卡片Card2,这样就可以利用一条Note记录产生正反对应的两张卡片,方便自己复习。

注意对Card1和Card2都要修改正反面的模板,不能两张卡都是单向映射对吧!要做到"中->日"和"日->中"的两张映射。

  • Anki支持HTML+CSS的布局渲染,加上Javascript(内嵌,不能外部引用)也是很好的
  • 通过不同div class渲染不同的颜色
  • 使用{ {hint:Hint_ch2jp} }能创建一个提示,当Hint字段不为空时候可以在学习卡片中显示Tips
  • 使用Conditional Replacement可以生成不同的卡片,比如判断Part_of_speech为非空内容时候显示该词的词性

最后关闭卡片界面,到主菜单中添加卡片,卡片类型记得选中“标准日语初级生词”哦!

开始学习了,可以设置自动播放音频

通过设置卡片

卡片浏览器

浏览器的目的用于选中某些卡片进行修改等,或者调用正则表达式的批量替换。

侧栏

左侧显示了所有的Deck和Tag,卡片状态等

侧栏支持按键多选的逻辑:

  • 按住Ctrl多选:产生逻辑AND
  • 按住Shift多选:产生逻辑OR
  • 按住Alt多选:产生逻辑 '-',即排除

搜索语法

在查找栏输入特定的查找命令匹配collection里面的所有卡片

更多搜索语法,请参考anki文档的"Searching"小节。

普通词如下

查找命令 匹配 匹配举例
dog 含有dog 'doggy' 'underdog'
dog cat 一句话里面含有dog和cat 'a dog and a cat'
dog or cat 要么含有dog,要么含有cat 'doggy' 'catttt'
dog(cat or mouse) dog和cat同时出现或者dog和mouse同时出现 -
-cat 不含cat 'mouse'
-cat -mouse 既不含猫也不含老鼠 'dog'
"a dog" 精确匹配a dog 'a dog'
-"a dog" 精确排除a dog 'a cat'
d_g 等价于正则表达式d[a-z]g 'dig' 'dzg'
d*g 等价于正则表达式d.?g 'd2g' 'dzzzg' 'dg'

限定搜索字段:

查找命令 匹配
front:dog 字段front含有dog
front: 字段front为空
front:_* 字段front非空
tag:animal 标签为animal
tag:ani* 标签开头为ani
tag:none 没有标签
deck:french -deck:french::* 属于french卡片组,但不属于french子卡片组
deck:filtered 已过滤卡片
card:1 卡片1
note:basic 卡片类型为basic

限定卡片状态:

查找命令 匹配
prop:ivl>=10 卡片的复习间隔>=10天
prop:due=1 明天到期的卡片
prop:due=-1 昨天到期的卡片,也就是没有及时复习的卡片
prop:due>-1 prop:due< 1 介于昨天和明天过期的卡片
prop:reps< 10 回答次数少于10次
prop:lapses>3 失误大于3
added:1 今天添加的卡片
added:7 上周添加的卡片
rated:1 今天回答过的卡片
rated:1:2 今天回答过的卡片中选过Hard(2)的卡片
rated:7:1 近7天回答过的卡片中选过Again(2)的卡片
is:suspended 是否暂停
is:due 是否到期的卡片(即将学习或复习)

选中某卡片后的选项

电脑版与Android版这个界面稍有不同,可以参考对应客户端的文档。下图为AnkiDroid 2.9版本的选中几个卡片后点击菜单键的界面:

英文 中文 备注
Reposition 重新定位 仅对新卡片有效:改变卡片出现顺序,如让B出现在A前面
Reschedule 重新计划 会询问用户设定一个天数N,将卡片设定未来N天内进入学习队列末尾,不改变revision history
Reset progress 重设进度 (Android版独有)立即放入复习队列末尾(不是学习队列,是复习队列哦)

对于Reschedule卡片设定新的学习进度,我从这篇reddit帖子看到一种说法是:

  • 你想快速复习(强调re-review)一下曾经记住过的卡片吗?那么可以创建过滤卡片组,方法举例:

    1. 从CardBrowser中找出你要复习的卡片,全部创建一个标签,比如ToBeReviewed
    2. 创建过滤卡片组,使用deck: "XXX" tag: "ToBeReviewed"将其挑选出来
    3. 可选步骤:重新设定过滤卡片组的顺序、学习步骤。然后Rebuild重建
  • 你想重新学习(强调re-learn)卡片吗?那么可以使用Reschedule将卡片变成新卡片,如:设定2天后作为新卡片。

注意:Reschedule不会改变某张卡片的回答历史(revision history)。历史是指:用户点击Good、Again的次数,历史会参与数据统计。Reschedule仅仅改变了卡片的状态(已毕业的卡片变成新卡片),如果确实需要重置某卡片的回答历史,则需要导出该笔记,然后删掉该笔记,重新导入。

附上AnkiDroid的统计图,均是从卡片的回答历史生成的(感觉比PC版统计的要好用)

过滤卡片组

过滤卡片组(Filtered Deck)可以从某个Deck中抽取一部分卡片,用于特殊的学习目的

  • 突击考试,不能全部复习,只能随机复习卡片
  • 只复习特定的tag
  • 累积已久老卡片复习
  • 提前复习

已过滤的卡片不能使用已暂停(suspended)或者已隐藏(buried)的卡片。也不能使用已经被加入其它filtered deck的卡片。某个时刻一张卡片只能放在一个deck中。

删除filtered deck时候卡片被归回原来的卡片组(Home Deck)。

卡片选择排序(Filtered Deck Option选项下):

排序 说明
Oldest seen first 按某卡片距离上次你看见它的时间排序,最长时间的优先
Random 随机,没有任何优先顺序
Increasing interval 按复习间隔从小到大排序
Decreasing intervals 按复习间隔从大到小排序
Most lapases 失误最多的卡片排前面
Ordered due 最近到期的优先,对正在学习、处于复习队列中的卡片优先展示
Ordered added 添加顺序:从旧到新
Latest(Ordered) added first 添加顺序:从新到旧
Relative overdueness 相关已过期,比如考虑如下2张卡片:卡片A的interval为5d,已经过期了2天还没复习;卡片B的interval为400d,已经过期7天,按照本排序算法,那么卡片A优先于B。这种排序方式通常用于筛选出最处于濒临忘记状态,但是只要抓住机会就有可能记起来的卡片。此策略将那些最可能牢牢记住的卡片尽量忽略

Excel导入

首先创建合适的笔记类型,还是以上面的“标准日语初级生词”卡片类型为例。

导入目的是含有所需笔记(Note)的TXT文档,若该文档满足卡片类型字段要求,Anki会自动映射字段并添加到特定Deck中。

字段

  • Chinese
  • AudioFile
  • Japanese_1
  • Japanese_2
  • Hint_ch2jp
  • Part_of_speech
  • 标签

因为我电脑没有安装Office,故暂时使用LibreOffice代替表格处理软件。

将该表格另存为TAB分割的txt纯文本,编码为utf-8。直接导入到Anki即可,注意指定合适的字段。

有时候由于词条重复(即便导入的词条不属于这个待导入的deck),Anki忽略某些笔记。此时可以勾选”Import even if existing notes has same first field“(中文翻译:即便现有笔记含有相同字段仍然导入)强制导入到Deck。

媒体文件(mp3,jpg)放入collection.media下,不应该有子目录(官方文档是这么说的)

打开Deck即可看到新导入的卡片

可选步骤:定制不同的卡片,定制CSS显示样式(可能绿色背景对眼镜更舒服??)

其它杂碎

  1. 删除某个deck不会自动删除其对应的媒体文件,需要手动执行“Check Media”检查媒体才能彻底删掉没有被引用的媒体文件。
  2. Anki同步失败时,需要间隔几分钟才能重试,否则被服务器拒绝。
  3. 在定制卡片过程中,CSS功能很强大,本文虽然没有介绍,但仍然值得大家学习。Anki可以灵活使用div/span/table/a实现不同的显示样式(包括表格、latex、超链接)。具体操作可以参考官方文档的Card Styling章节。它甚至给出了卡片生动效果的YouTube效果视频。

参考资料

Anki官方文档
AnkiDroid官方文档
Anki设置自定义学习步骤:Software Review Redux: Anki
翻譯Anki用戶指南@大學生活紀事 - blogspot
Effective learning: Twenty rules of formulating knowledge
知乎专栏:Anki-近乎完美的神器