卡片笔记太多,回忆不起来?快用人工智能帮你自动找寻关联
编注:
本文是少数派 2021 年度征文 活动 #效率 21
标签下的入围文章。本文仅代表作者本人观点,少数派对标题和排版略作调整。
和往年不同,今年文章的数据表现将很大程度上决定征文活动的最终走向,包括「双倍稿酬(由飞书赞助)」活动奖励、最终票选名单以及征文奖品类型。如果你喜欢这篇文章,不妨通过充电或评论的方式支持作者。
题图:Photo by Kelly Sikkema on Unsplash
「卡片笔记写作法」用久了,你总会遇到一个问题,就是卡片太多。
这一方面是个效率问题。你要是想把卡片笔记当成严肃的工具,那么底层就得用数据库来组织信息,而非文件系统。Logseq 目前正在做这种迁移。在卡片少的时候,这二者的效率看不出差别,甚至文件组织方式因为直观显得更加友好。但是卡片到了 10 万级别的时候,效率的差别就会显现。效率不达标,随便查找个东西,你都能感受到「卡」。
以我个人的 Roam Research 数据统计为例。虽然「页面」(Page)只有 1 万多,但是别忘了 Roam Research 下的真正卡片单位,是按「块」(block)来计算。
Roam Research 里 Page 的真正含义是什么呢?我觉得是「盒子」,卡片盒嘛。虽不是物理意义上的盒子,有固定形态,但它确实是承载卡片的容器。在 Roam Research 中,如果你的链接都在页面层级,而不是块引用(block reference),那么你其实并没有发挥出它「细粒度」的特性。
效率问题,还只是一个方面。更要命的,是卡片数量庞大之后,你会忘记自己曾经记过某些东西。本文主要讨论的,便是这个恼人的事儿。
最近,「合桃派」团队邀请医学博士 Lan 分享自己的块引用实践。她结合 Cite to write 和 Roam Untangled 两门课程里的方法,利用块引用自底向上构造「问题」,然后用「问题」的块引用来组织论文。她的第一篇综述论文靠着双链笔记工具的加持,超出预期快速写就,且已被录用。 Lan 这种学以致用的精神,很值得钦佩。
讨论环节,我问了她一个问题 —— 若是很久前(一两年前)记录的卡片,内容忘记了怎么办?新的笔记若与之相关,怎么回忆、识别并且链接呢?
Lan 回答,她依靠头脑人工记忆完成链接。
这个回答,很实在。对于她来说,记忆这些卡片,没有感觉到什么负担。但我们考察知识管理系统,不能以个案的主观感受作为依据。在 Lan 的这个系统中,人的头脑所承载的,就不仅仅是思考的功能,还包括了跨越时间的记忆。这样,「第二大脑」就必须靠着「第一大脑」的协助,才能正常工作。对于部分人,尤其是我这样的懒人来说,这个负担就有些繁重了。
很多人曾经提过的,长期笔记(permanent note)一定要精选。笔记盒里不应该放太多内容,否则会变成噪声。原因之一,恐怕也是记多了笔记,头脑回忆不起来某条笔记存在,卡片也就会「沉底儿」了,白费功夫,没有效果。
可是笔记真的是记得「少而精」,便于头脑记忆才好吗?
这恐怕就是「削足适履」了。
我请教过 《卡片笔记写作法》一书作者 Sönke Ahrens 。他说笔记不应该面向项目,否则就失去了卢曼卡片盒的独特价值。一则灵感笔记,可能对当前项目没有用处。但是将来某个项目中,它可能成为重要的一环。所以,我们不应该设置这样一个「是否符合当前项目需求」的门槛。
雪小豹(李娟)也在文章中提过:
独立性要求最低程度的复杂性。卡片盒需要数年时间才能达到临界水平。在此之前,它仅仅是一个容器,我们可以从中获取所放入的内容。但这种情况会随着卡片盒的规模和复杂性的增加而发生改变。
我们一直啧啧称奇的「知识复利」其实都来自于这种卡片规模与网络链接的复杂性。所以,「少记笔记」肯定不是一个好的解决办法。
那糟糕了。卡片笔记,记少了不管用,记多了会忘掉。这可怎么办呢?
周五晚合桃派直播之后,我带着这个疑问,跟吴刚老师聊了聊。他提到《卡片笔记写作法》中最大的一个缺失,就是这里面有一个默认的回顾过程。如果不进行定期回顾,你基本上就会忘记之前记录的内容,无法把久远的记载与新的笔记有效链接起来。可是书的作者 Sönke Ahrens 似乎内化了这种回顾方式,并没有特别强调。
岂止是没有特别强调啊,Sönke 在文中直接提出,他不认同 ANKI 间隔记忆的方式。
Sönke 对 ANKI 负面看法这个事儿,我问过《卡片笔记写作法》的译者陈琳。他觉得对于卡片笔记来说,类似 ANKI 的回顾是很必要的。虽然他在翻译的时候忠于原作,但是书中对 ANKI 的评价他不认同。
吴刚老师目前在合桃派带着大家做 30 天卡片记录的训练营,「合桃派」视频号里面有群组入口。他在尝试把 Supermemo 这样的 SRS (间隔记忆系统)融入到卡片的记录与回顾中,帮助大家形成回顾笔记的习惯,让卡片笔记系统得以正常运转。
吴刚老师说,大多数人一旦形成了习惯,很多困境(例如写作障碍、拖延症)都迎刃而解。关键是要扫清障碍,尽早迈出第一步。
我俩在交流中,各自讲述「偷懒」的事迹,愈加投缘,哈哈。
不过若是比「懒」,我觉得自己更加突出一些。吴刚老师所做的,还是潜移默化帮助你构建习惯;而我则希望更进一步,让你不必作出改变,也能把「偷懒」进行到底。
换句话说,有没有更低成本方式,解决远期卡片的回顾和连接呢?
这个当然可以有。因为我们有人工智能嘛。
很多人揶揄,说现在的「人工智能」不如叫做「人工智障」。对于机器做的很多事情,都不屑一顾。
但我不是这样看。目前机器虽不具备强人工智能,可在某些特定领域,早就把人类这种碳基生物甩得远远的。
不服?你去和 AlaphaGo 下盘围棋试试。
我这篇文章的草稿,是对着 Roam Research 里卡片搭建的纲要,用语音输入自动转换文字生成,识别率很高。背后就是人工智能模型。
我现在做视频已经不用绿幕了,嫌麻烦。随便找个背景录制之后,机器自动视频抠像。效果虽然不能说完美,但是我觉得够用。没有机器学习,这显然无法实现。
我在课上展示几种不同大型猫科动物的图片,让学生来分辨。他们分辨效果不好, 能错1/3,甚至一半儿。同样的问题,拿给迁移学习训练出来的机器模型,准确率都在 99% 以上。
就连考试的时候,不允许你带电子设备,不也是怕你开外挂吗?别人考英语翻译纯凭记忆搜肠刮肚,你这边开个 OCR + DeepL ,那岂不成了碾压?
创作知识不是一场考试。我们应该把所有能开的外挂,都给它开开。
让机器帮忙找寻相关的自然语言内容,其实并不是什么新的功能。Devonthink 就有。
我第一次听说 DEVONthink,就是看到万维钢老师这段文字:
人脑发挥创造力最重要的一个手段,就是把两个不同的想法连接起来。这个连接越是意想不到,创造出来的东西就可能越有意思。想要让想法连接,你得先拥有很多很多想法才行,而现在你可以把想法寄存在一个外部工具里,让计算机帮你建立连接! ……DEVONthink,能用更复杂的算法提供更多的相关内容,而且还有量化的相关度评估。
不过 DEVONthink 更善于英文的相关度评估。中文处理上,尽管 3.x 版本已经有了显著提升,却还有待改进。
我于是就想,干脆把 DEVONthink 的文本近似度计算,直接迁移到 Roam Research 上,不就好了?
目标有了,其实解决起来非常简单。这几年,我的研究一直跟人工智能打交道。
自然语言处理领域,目前研究出的 Transformer 模型是越来越大。咱们个人使用,杀鸡焉用牛刀。 GPT-3 这种规模的模型就别用了,太贵。我直接拿一个几年前的 BERT 基础款模型,就把这事儿干了。
方法很简单。BERT 模型可以吃进文本,突出一串数字(向量)来表示它。我们只需要测量两串数字的近似程度,就能判断两个输入文本之间的关联度。
用 BERT 的好处,主要在于以下两个方面:
第一,见多识广。BERT 训练的时候,采用了大量的语料,因此大部分的通用词汇,都认得;
第二,无需预处理。什么分词、停用词查表、语序、词性…… 全都不用咱们用户考虑,简单粗暴。
靠着这俩优势,写出来的程序也是短小精悍。
为了把工具的不对称优势进行到底,我顺带着还用 Streamlit 做成了个 Web 应用。
你看,这是运行之后的基本界面。
你把最新的一则笔记,放到最上方的文本输入栏里面,然后下面 3 个输入框,提供一些搜寻的范围。
第一个输入框,是标签的白名单。
假如你喜欢把长期笔记都叫做 #evergreen
,那么就可以把这个标记放到其中。我不喜欢 #evergreen
,因为太长,懒得敲那么多字儿。于是我用的是 #zk
。
我这里包含的默认标签列表都是依照自己使用习惯设置的,逗号分隔。其中甚至包括一些 Readwise 自动导入的 Highlights ,以及 Cubox 链接。这样一来,即便你当初高亮的时候没有做任何批注和回顾,它也依然会因为高相似度关联过来。这样你再也不用漫无目的地回顾所有笔记,而是以「输入新的笔记内容」作为触发,唤起对应的久远记忆。
第二个输入框,是标签的黑名单。
我平时就把日记都放在 Roam Research 里面,检索的时候我不希望这些内容进来捣乱,直接通过标签排除掉它们即可。
第三个输入框,是你主动检索的关键词。
需要扩大搜寻范围,不局限上述标签涵盖内容时,你可以用这些关键词伸出「钩子」,把全库中包含这个关键词的所有笔记(block)都「捞进来」一起分析。
这个例子里,我这里选择默认的方式,不扩展关键词。
好了,点一下 start
,开始执行。
因为调用 Transformer 模型还是需要一些时间上的开销的。所以程序首先分析并且提示,这一轮你新加入了多少条笔记作为候选。
如果你看到数字过大,可能需要考虑重新调整一下过滤器的设置。不然为了看结果,可能得等上一段时间了。
确认要执行,点击一下 「Just do it」 按钮就行了。
将近 50 条新内容加入,分析过程大概持续 30 多秒。注意我做的这个应用有缓存机制。你这一轮已经分析过的卡片(block)内容,下次分析的时候,就不需要额外花时间调用 BERT 模型处理了。换句话说,你用得越久,这个工具执行速度就越快。不错吧?
如上图所示,结果提供的是一个字典。这个字典里,Roam Research 里面的 block id 作为键(key),而取值(value)是对应的块文本内容。
从结果来看,筛选出来的内容相关度挺高。
这个工具并非直接帮助你去建立链接,而是给你找寻一些候选卡片,由你自行决定是否连接起来。链接方法很简单,block id 都在这里呢,拷贝过来加两个括号(例如本例中((71qLjxnbS))
),就建立块链接了,对吧?这样保证了笔记之间细粒度的关联性。
之后我换一段内容输入,这次是历史相关内容,讲「佟佳氏」的记载。
你会看到,检索出来的相关内容,画风立刻为之一变。
结果大部分都是我平时阅读并且同步到 Readwise 里面的「历史」主题内容。可见,本应用基于 BERT 语义近似度的计算,确实能够根据输入文本的特征,钩沉不同类别的卡片内容。
注意这里分析的对象,并非直接调取 Roam Research 数据库。每隔一小时,Github Actions 会替我自动更新导出 Roam JSON 文件。我就是用这个一直更新的 JSON 文件做分析。
为什么不直接分析 Roam Research 数据库呢?因为没必要。我每天重度使用 Roam Research ,这个数据本身,就是不断变化的,读取的时候需要考虑太多细节。而静态 JSON 文件,分析起来要简单很多。不抄近道儿,还算是懒人吗?
这样分析静态的内容,会不会有功能欠缺?
我觉得不会。
因为你要关联的,是时间上的远距离记录,是你大概率已经忘掉的部分卡片。我想,你还不至于把一个小时以内写的东西,都忘记了吧?
对于 Roam Research 来说,只考虑文本语义相似度,图数据库的真实威力还远远没有发挥出来。下一步,应该加上块引用构成的网状结构,做图机器学习(Graph Machine Learning)。但是,相对于人工强制性定期回顾卡片,这种基于自然语言处理模型的自动化辅助方式,已经往前迈进了一大步。
讲到这里,有人可能又要开黑了。什么「机器准确度不到百分之百,只能做个参考」,「关键还得看人的能力」云云。
这些陈词滥调一点儿也不新鲜。最近总有人宣传「工具无用论」,说什么最重要的是头脑,而不是方法,更不是工具。
这话我同意一半。这一半,就是头脑的重要性。没办法,老天爷并没有给每一个人相同的智商。爱因斯坦那脑子,在专利局当办事员,也遮掩不住光芒万丈。
但是,工具没有用吗?
近视的人,可以通过戴眼镜来矫正视力。
不会四则口算的收银员,也可以按计算器来得出正确结果。
你从三岁练武,学了一身「五虎断魂枪」的上乘功夫。我手无缚鸡之力,但是手里端着把上膛的手枪,你也得忌惮三分不是?
都赛博格时代了,为什么还有人无视技术与工具的威力,甚至公开宣扬「工具无用论」呢?
因为技术和工具的进步,埋没了部分人先天的优势,甚至抵消掉后天的努力,让他们没有了可以炫耀的资本。
他们寒窗苦读很多年,才能无障碍阅读英文文献。
你往浏览器里装了个插件,英文文献瞬间变成了中文,看得津津有味。
他们拍废了无数胶卷,才知道如何处理摄像的景深,获得专业的画面质感。
你直接买了个 iPhone 13 Pro,抬起手来就拍得像大片。
换位思考一下,他们的气能顺吗?
他们徒劳地高呼,试图把人们拉回到那样一个必须付出高昂成本才能有所收获的时代。这样他们先天的优势,才能显露;他们付出过的辛苦,才没有白费。如果你没有那样的天赋,又不愿意付出同样的辛苦,他们能站在鄙视链的高处,笑着俯视你。
我能理解他们的心境,但是不赞同他们的做法。「工具无用论」的大力宣扬,会给很多知识管理的初学者,带来不必要的心智负担,甚至引入迷途。
知识创造的目的,不是为了勋章,而是为了满足好奇心,为了把世界变得更美好一点儿。
应该「万类霜天竞自由」,而不是所有生物一起去比爬树。这才是打破内卷的有效方式。
这些高呼「工具无用论」的人,出远门儿也愿意坐飞机高铁。交通工具也是工具,他咋不走着去呢?
如果你也是个懒人,请相信 ——「懒」是我们的特性,不是一种罪错。工具如果能让我效率更高,我就充分使用,不需有丝毫的负罪感。
只是注意「以物养己」,而不要「以物役己」,就好。
我做的这个人工智能辅助卡片回顾工具,你想不想试试?
我用 Streamlit 的 Cloud Sharing 功能,做了一个在线演示版本。请你访问这个链接,即可执行。
这里我提供了一个 demo.json 文件,包含了我自己发布的 6 篇文章,作为样例。
你可以尝试改写几次新输入内容,看看应用分别会给你反馈哪些卡片。
如果你想尝试自己的 Roam JSON,请私信联系我,并提供以下内容:
#zk
字样,block 内容不要有重复;请你把这些内容放到百度网盘或者 notion 页面,然后通过把链接分享给我。如果你的数据通过了我的本地测试,我会把允许上传自己 JSON 版本的应用链接地址发给你。你就可以自己操作,继续使用了。
因为读者众多,而 Streamlit Share 平台并发能力有限。我反馈联系到前10名读者后,本测试自动终止,不再回复新邮件。如果你的样例数据构造有问题,本地测试没有通过,恕不能给你回复邮件详细解释原因。敬请知悉。
测试结束并迭代改进后,我会发布一个公开的在线版本,以及相应的源代码。
注意传给我的内容,和后续上传到应用的内容,不要包括任何隐私信息。
给你说一个我的教训。前几天我在直播里面,讲如何用 Telegroam 插件移动端输入内容到 Roam Research 。因为提到了我自己建立的机器人(bot)名称,Roam Research 里,就出现了下面这些 block 。让我哭笑不得。
这显然是观众没有按照流程操作去建立自己的机器人,而是直接在我的机器人这儿试上了。害得我赶紧关闭掉这条输入路径,重新建立了新的机器人。
所以你看,隐私保护一定得注意啊。
我做的这个小应用,只是抛砖引玉。希望更多的双链笔记工具,能把这样的人工智能辅助功能添加集成进来。让用户(包括你我)记笔记的时候少一些顾虑,联想的时候多一些惊喜。
祝笔记愉快!
本文参与「少数派 2021 年度征文」活动。如果你觉得本文有用,请帮我「充电」投一票。谢谢!
如果本文可能对你的朋友有帮助,请转发给他们。
欢迎关注我的专栏「科研利器」,以便及时收到后续的更新内容。
> 下载少数派 客户端、关注 少数派公众号,找到数字时代更好的生活方式 🎊
> 年度回顾、好物推荐…… 更多精彩尽在 少数派 2021 年度盘点 🎉
© 本文著作权归作者所有,并授权少数派独家使用,未经少数派许可,不得转载使用。