Cool Papers更新:简单搭建了一个站内检索系统
By 苏剑林 | 2024-05-07 | 35532位读者 |自从《更便捷的Cool Papers打开方式:Chrome重定向扩展》之后,Cool Papers有两次比较大的变化,一次是引入了venue分支,逐步收录了一些会议历年的论文集,如ICLR、ICML等,这部分是动态人工扩充的,欢迎有心仪的会议的读者提更多需求;另一次就是本文的主题,前天新增加的站内检索功能。
本文将简单介绍一下新增功能,并对搭建站内检索系统的过程做个基本总结。
简介 #
在Cool Papers的首页,我们看到搜索入口:
搜索功能的特点如下:
1、只搜索title和summary两个字段,暂不支持指定;
2、可以指定搜索arxiv分支或者venue分支,不支持两个分支混合搜索;
3、搜索query中的特殊字符(非英文字母和数字)都会被去掉;
4、搜索query的单词不会自动主干化,这意味你搜索images不会命中image;
5、在搜索结果页面,可以跟原本的页面内搜索功能混合使用。
总的来说,目前只是一个非常简单的文本搜索功能,先满足一部分用户的简单需求。对于更复杂的需求,后面再逐步更新。想象中会逐步引入的功能,包括指定字段、搜索Kimi FAQ内容、按stars排序、指定日期/分类(对于arxiv)、指定会议(对于venue)甚至放开像普通搜索引擎那样的加减法运算(可以用排除某些关键字)等,这些看用户的后续反馈吧,没有固定排期~
总结 #
事实上,站内搜索这个需求,在年初Cool Papers刚面向公众开放时就有用户提出了,之所以一直迟迟未上,主要原因是Cool Papers的论文是逐日收录的,一开始的论文数并不多,站内搜索没有太大意义。经过四个多月的累积,Cool Papers收录的Arxiv论文数到了8万多篇,加上venue分支的会议论文也达到了8万多,目前近17万篇论文,可以拿来搜一搜了。
确定了可以做,那么接下来就是怎么做了。基于关键字检索文章内容的检索系统,我们称为“全文检索(Full-text Search)”,一般都是基于倒排索引和BM25相似度构建的,也就是说在算法上是成熟的。在实现上,Cool Papers的后端是BottlePy,所以我们要寻找Python下可用的全文检索库,才比较方便整合到Cool Papers中。
“Python + Full-text Search”的组合选择并不多,最经典的是一个名为Whoosh的库,从功能上来看它也确实能满足Cool Papers的需求。但Whoosh的问题是自从2016年4月后就再也没更新,所以总让人担心它会有什么隐患。另外一种选择是直接换带有全文检索功能的数据库来存数据,比如MongoDB。如果一开始就是用MongoDB来存数据的话,这无异是最简捷的方案,但Cool Papers选择的是Python自带的key-value数据库Shelve,如果现在切换到MongoDB工程量太大,而且在Cool Papers的简单场景,MongoDB的速度也比不上Shelve。
经过多次寻觅无果之后,笔者在某次搜索中意外发现了一个Whoosh的非常小巧但强大的替代品——tantivy,这是一个Rust写的全文检索库,但提供了python-binding可以作为一个Python库用,API跟Whoosh差不多,但依然在持续更新。众所周知Rust以高效著称,所以可以说tantivy满足了笔者对全文检索库的所有完美想象——速度、小巧、简洁。
选定了全文检索库之后,剩下的就是前端工作了。在《新年快乐!记录一下 Cool Papers 的开发体验》中,笔者就已经说过自己是个完全没有艺术细胞的前端小白,设计UI这种工作对笔者来说可谓异常艰难,只能不断搜索查找、复制粘贴以及求助GPT4和Kimi。在各种东拼西凑和修修补补之下,总算勉强做出来了一个可用的界面。在开发过程中,还顺手把原本自带的页面搜索优化了一下,现在使用页面搜索应该速度会明显感觉到更快了。
末尾 #
在大家都在看KAN(Kolmogorov-Arnold Networks)的五一假期,笔者偷了个懒,没有看论文,而是给Cool Papers补上站内搜索功能。不敢说“千呼万唤始出来”,但也是部分用户催了很久的特性,在此做个简单介绍,并总结一下搭建经验。
转载到请包括本文地址:https://kexue.fm/archives/10088
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (May. 07, 2024). 《Cool Papers更新:简单搭建了一个站内检索系统 》[Blog post]. Retrieved from https://kexue.fm/archives/10088
@online{kexuefm-10088,
title={Cool Papers更新:简单搭建了一个站内检索系统},
author={苏剑林},
year={2024},
month={May},
url={\url{https://kexue.fm/archives/10088}},
}
May 7th, 2024
Cool Papers 的RSS 可以拉去到全部的文章更新,有什么办法可以拉去这个博客的全量更新呀? 目前博客RSS默认只拉取最新的10篇文章
RSS的本意是提供最新的更新,Cool Papers的RSS也只能拉到最新一天某个分类下的全部文章,更早的也是不行的。这个博客平均每周也就更新一篇,10篇已经是两个多月的量了,作为RSS来说明显已经足够。如果你要全量,那只能写脚本自己爬了。
May 13th, 2024
CVPR.2023 - Accpet
网页上的单词可能写错了,应该是 Accept.
感谢反馈,已修正。
May 13th, 2024
我非常喜欢你的博客,我自己读的同时,将你的博客推荐给许多本科生当做课外读物。
谢谢认可。
May 24th, 2024
能不能出个每个论文评论的内容,会不会也挺有趣的... 而且也方便分享大家对不同论文的看法
你的意思是每篇paper加上一个评论区吗?主要担心内容不可控,而且现在也没有注册机制,评论有问题的话就不大好追溯了。
确实是会存在这个问题...感谢回复了
hhhh,如果这个观点成立的话,应该把现在这个评论区也关闭了?
ps:我是支持文章评论区的
pss:评论可见之前可以route给kimi辨识下内容是否toxic甚至与文章内容相关
事实上,按照严格的规定,博客的这个评论区确实是不能开的,我是顶着风险一直保留着的...
Cool Papers的评论区,一直也没想到什么好的展示形式,不想单纯重复别的论文阅读网站已有的内容,所以暂时不考虑了,什么时候有比较巧妙的想法再考虑~
有道理。
这个问题可能有点不厚道,那有什么其他“论文阅读网站”推荐么
同时,我觉得cool papers的价值点:
1. (特别是对国内用户)比较及时的更新
daily更新已经够用了,再快就得出app了。。
2. 合理的分类
我不确定现在按conference花费了作者多少精力,如果是足够智能化的话可以考虑按一些topic组织
3. 通过kimi智能总结
仅仅做单篇文章context看多了感觉价值有限。
这里并不是Kimi的问题,更多是文章作者能力/价值,很多文章本身就是水文,或者价值点没有很好表达出来,总结出来的效果更多就是大概做了啥\怎么做的。
可以考虑用kimi做的更智能一点,比如:
- 价值判断:逻辑打分,清晰度打分,是否啰嗦
- long context对比:跟引用文章对比
- structured信息提取:github/organization/topic/pseudo code提取甚至总结。毕竟这些信息也很大程度能反应文章的“专业程度”,过滤到一些水文。。
4. (智能)检索
现在search很火,做好也挺难的。不过如果只做论文这种相对structured的细分应该能好做一点。
anyway,这里很多建议更多是期待,大概远远超出作者“随便刷刷论文”的初衷。
实际上,papers cool目前效果已经比我之前常用的 https://github.com/karpathy/arxiv-sanity-lite 更好了。
但是梦想还是要有的,万一作者实现了呢 :-P
非常感谢你的意见,我也会尽力将它做得更好一些,当然这个本质上仍然还只是一个个人网站,所以请大家多多包涵。
其他论文阅读网站,我用过的是readpaper.com ,作为一个论文阅读器来用还行,主要是它没有及时同步arxiv列表,所以对我来说它还不能取代刷arxiv。
对,readpaper感觉在“智能化”上越走越远,在arxiv同步上越来越慢。。
我也是先打开arxiv再用它同步才能用。。
同时它的笔记更多是个人或组内共享,要是能基于paper讨论就好了
May 30th, 2024
是否有考虑在每个论文的旁边单独link一下arxiv的网址呢,感觉很有用,谢谢!
每篇论文标题左上角带#的数字就是。
June 6th, 2024
请问可否开源一下cool papers 网站的代码呢,搜索这部分想参考一下。我本地也下载了很多 arxiv paper,早就想自己写个搜索工具了。大神这个刚好和我需求一致,所以想参考一下。
我现在这个是每日下载 pdf,然后汇总到 markdown 里,高亮一些关注的会议和作者。
https://github.com/wbbeyourself/arxiv_paper_downloader
Cool Papers全站的代码不能开源。
如果你只想看检索部分,本文已经说了,检索系统的后端是tantivy搭建的,其教程一共就没几行字,看看试试就知道了,很容易上手的。
June 20th, 2024
请问下cool papers可以支持收藏 + 基于收藏的推荐功能吗,类似https://arxiv-sanity-lite.com/
阅读记录其实是保存在本地的,但没有展示出来。推荐的话,这个工程量貌似有点大,我需要构思一下。
https://github.com/karpathy/arxiv-sanity-preserver,是否可以参考这个呢0.0,感觉现在cool papers和arxiv-sanity相比,缺少的就是对某类阅读过的paper打tag然后基于tag能推荐些相似的工作
已经有一些想法,就等什么时候有时间开发了哈哈
July 9th, 2024
请问可以支持在搜索框中直接贴arxiv的地址不,然后搜出对应的论文不,谢谢~
类似这样的
https://arxiv.org/pdf/2406.xxxxx
https://arxiv.org/abs/2406.xxxxx
可以加个特殊处理,我抽空补充上去。