How-to-retrieve-papers-XHU
目录
嗯,由于github的readme
添加目录比较麻烦,所以这里就手动写个目录。Section 1
是如何检索论文;Section 2
是推荐阅读的论文与不推荐阅读的,其中包括如何检索论文分区(中科院JCR分区和CCF评级),期刊评级(CCF评级),以及中科院预警期刊;Section 3
是关于我个人推荐的阅读论文的方式。
1 如何检索论文
1.1 SCI-HUB
有的论文不是免费获取的(比如 springer 旗下的会议或者期刊),这个时候就需要使用 doi
去搜索论文。在比如 Engineering village
上搜索论文,找到论文的 doi
,然后百度 SCI-HUB
(因为 SCI-HUB 的链接经常换,所以这里就不贴链接了),在 SCI-HUB
中搜索 doi
一般都能下载你想要的论文。
1.2 dblp
dblp
算是我平时最喜欢用的搜文献的工具。
百度搜索dblp
,第一个就是了。或者dblp
网址:https://dblp.org/
在检索栏就可以进行检索,包括关键字
,文章名
,作者名
,期刊名
,会议名
等等,都可以检索。
在检索页中,其排序方式是按照年份进行排序的。可以看得到作者名
,论文名
,发表刊物
。同时,在左侧会有颜色的标记,其中:
红色:
期刊论文;蓝色:
会议论文;灰色:
未发表论文,比如arxiv,CoRR等;黄色:
书籍;其余颜色查看:
https://blog.csdn.net/DXY587542/article/details/114306545
至于在dblp上下载论文,把鼠标放置论文前这一坨上,选择electronic edition via DOI
,如果论文可以免费下载,会有 (open access)
的字样。
通过这个链接进入后,一般来说都可以下载论文,如果下载要钱,那么你可以在页面里面找到DOI
,然后SCI-HUB
,你懂我意思。(当然这个截图是个错误示范,IEEE Access
尽管是个二区,但是是中科院预警期刊,就是属于那种审稿人看着你参考文献里面有个Access
的论文估计都会看低你两眼的那种……食之无味,弃之可惜)。或者说你可以在dblp
里面有没有相同的论文,只是说发表在arxiv
或者CoRR
里面的论文,那个就是免费下载的,就比如下图:
dblp中还可以选择下载RIS
,导入EndNote
中做文献管理,但是 DBLP 中千万别下载会议论文的 RIS,因为 DBLP 上会议论文的 RIS 下载下来的类型是 Conference paper,而正常的会议论文类型为 Conference procedding,格式有问题,就会导致你导出论文引用时会有问题;也可以下载BibTex
,从此不用再纠结于一个字一个字敲参考文献:
1.3 arxiv
百度搜索arxiv
,第一个就是。或者arxiv
网址:https://arxiv.org/ 或者:https://arxiv.org/corr (后者就是计算机的了)
写了论文怕被审稿人嫖走了,就可以投稿在arxiv
上宣告主权。
1.4 ReadPaper
ReadPaper
是沈向洋博士创办的一个论文社区,网址为:https://readpaper.com/。
ReadPaper
是国内的网站,所以检索速度很快,并且每篇论文你都可以直观的看到分区
、CCF 评分
、是否有PDF
、引用量
等。同时,ReadPaper
每篇论文都有个讨论社区,能够讨论论文中的一些问题。关于 ReadPaper
的详细介绍可以看我之前写的一篇评测博客:https://blog.csdn.net/qq_35357274/article/details/126627945。
1.5 Papers with code
百度搜索Paperswithcode
,第一个就是,或者Paperswithcode
网址:https://paperswithcode.com/
这里面可以搜索到想要的论文,以及其在github
上公开的代码:
2 论文哪些可读,哪些不可读?
最直白的查看论文可不可读的方法,就是搜索论文的分区。这里推荐的期刊查询的是letpub
,网址在这里:https://www.letpub.com.cn/ (虽然该网站广告就像小网站一样,但是确实不错)
进入页面后,选择智库资源
中的最新SCI期刊信息查询系统
:
输入要检索的期刊,就可以查看到简略信息,也可以点击进入查看详细信息:
其中有两个分区信息,第一个是美国那边的评级(没啥参考价值):
第二个就是中科院的JCR分区:
当然,上面还可以看到论文审稿速度啊巴拉巴拉的,可以自行探索。
这里推荐的呢,对于期刊论文,就是中科院分区一区二区的论文。当然,对于有些学校申请博士可能看的是CCF上的内容,这个的搜索方式就是上CCF官网进行检索:https://www.ccf.org.cn/ ,网站上最新版的CCF推荐的国际期刊和会议的网址如下:https://www.ccf.org.cn/Focus/2019-04-25/663625.shtml
同样,还有中科院预警期刊。这个就百度中科院预警期刊
即可查看到预警期刊,比如20年底发布的:https://www.zhihu.com/question/437284270
最后呢,就是经验之谈啦,因为我的了解的面不够,所以我这里就谈谈我自己觉得可以的和不可以的:
- 可以的:AAAI,ACL,EMNLP,SIGIR,NLPCC,KBS,information science,neurocomputing,ICLR,IEEE trans…
- 不行的:再次鞭尸
IEEE Access
,食之无味,弃之可惜。
3 如何阅读论文?
对于一个做科研的人来说,读论文就像是吃饭喝水一样,是每个科研人都绕不开的坎,所以这里我就分享下我这两年读论文的经验。
3.1 前期工作
实际上做科研这件事情,是一件需要赶时间的工作,也许你想到了一个点,但是你做的比别人慢了,你刚收笔,就发现别人论文发出来了,都是很正常的一件事。但是在这种情况下,就更不应该一来就上手读论文,而是应该先做前期准备工作,正所谓工欲善其事,必先利其器。以下是我觉得应该花 3 - 6 个月做的工作:
3.1.1 数学
数学永远是工科生绕不开的一个坎,以我们实验室的研究方向来说,如果你做社会网络,矩阵你得会吧,概率论你得会吧,图论你得会吧;如果你做深度学习,那你天天看的都是 $y=\sigma(Wx+b)$。那么数学应该看什么?应该怎么看?
其实数学这东西,你过段时间没看也就忘了,这些都不是关键,最重要的是,当你看论文,看到某个数学符号,你得知道这个符号是什么,然后再去回忆或者百度。同时我们工科生对于数学而言不是说要会做题,那些都是交给计算机去做的,我们要的只是知道这个是什么,怎么用就行了,就比如矩阵你只用知道是一种映射关系就好。
线性代数
:或者叫矩阵论也行,这是怎么都绕不开的东西,无论是论文里面的公式,还是你写的代码,都是矩阵(用矩阵写代码能够有效提高代码的并行计算效率)。当然,你用的同济大学线性代数教材可以丢了,用来擦屁股都嫌纸硬的,考研的东西也没必要,就是八股文。线代我最推荐的是3Blue1Brown
的课程,打开你新世界的大门。链接:【【官方双语/合集】线性代数的本质 - 系列合集】 https://www.bilibili.com/video/BV1ys411472E?share_source=copy_web&vd_source=be19fd8057d8c92fcca5f91666f9b006 。不过这个是初级课程,里面没有涉及到谱
这些内容,要中高级的内容,可以看《程序员的数学》
。概率论
:概率论和矩阵论一样,都是随时用到的东西。比如经典的PageRank
或者传染病模型
都是随机游走模型。概率论实际上浙江大学版的概率论就很可以的,不过还是比较晦涩,全是公式,要简明版的,也可以看《程序员的数学》
。
数学的话,差不多就要花费3个月左右的时间,先看数学能够有效提升你论文公式阅读的速度(虽然你论文看多了就会发现公式都是大同小异的,尤其是深度学习),同时你还能够在以后写论文的时候提升你自圆其说的能力。
3.1.2 代码
如果说数学是你看懂论文的基础,那么代码就是你实现论文的地基。你有再多的想法,不会写代码一样白搭。代码的话,用 Python
就够了,不过在 Python
的基础上,还有你要看的东西。
Python
:如果你没学过Python
,先去 Github 上搜一下Python
的编程风格,每学一个语言先学这个语言的编程风格是个好习惯,这个差不多半天看得完。Python
的语法与自然语言很像,所以学起来很快,如果你有编程基础,并且也做过许多项目,那么看Python
半天就够了,就看看if
、for
、while
语句,再看看Python
中最重要的三个数据结构元组 (tuple)
、列表 (list)
、字典 (dict)
,最后看看文件操作
,差不多半天时间可以搞定(当然有空可以看看魔术方法,很酷炫,但是你不会也不影响,因为我也不会)。如果你一点代码基础都没有(别骗自己,没有就是没有),那么最多一个月也怎么都学得会。Anaconda
:Anaconda
是用于Python
的环境管理,简单来说你一个项目是用python 2
写的,下一个项目你要用python 3
,如果在电脑上又装python 2
,又装python 3
,可能会有冲突。Anaconda
就是用来管理环境的,比如有的环境用来管理python 2
,有的环境用来管理python 3
,有的用来管理django
,有的用来管理torch
。这个很简单,但是很重要,如果你不会anaconda
,哪天把师兄师姐服务器环境搞炸了我估计他会一波带走你的。具体的配置可以看我以前的博客:https://blog.csdn.net/qq_35357274/article/details/118582625 。这个也差不多半天可以搞定。Pytorch
:如果你不选择用深度学习,那么这个你可以跳过。如果你选择用深度学习,那么这里我强烈建议用torch
。根据 22 年 6 月发表的报告,工业界 80% 的企业已经放弃使用Tensorflow
改用torch
了,就足以见得现在Tensorflow
有多垃圾。Torch
一定要在你学会python
的基础上再学,别想着一口能吃成胖子。同时你也一定要先学完torch
后再去看别人的代码,不然你会一直在一些弱智问题上纠结浪费自己的时间,这样反而才是效率最低下的做法。Torch
的话推荐看Dive-into-Deeplearning
这本电子书,链接为:https://tangshusen.me/Dive-into-DL-PyTorch/#/ (不过这个链接经常打不开,不知道怎么回事)。Torch
要学差不多 20 - 40 天。注:这个时间是必须先花的,别想着省!!!如果你连 forward 在什么时候会被调用都不知道,那你是怎么敢省这个时间的?numpy
,scikit
等其他库:这些库不需要专门的学习,因为经常会用得上,所以遇到的时候再百度再学就够用了。
简而言之,代码这一块最需要花时间的还是在框架上,其余的都是遇到的时候再百度都来得及。代码不用纠结于你写的好不好看,是不是一个完整的程序,能跑通就行了,毕竟刚刚也说了,发论文就是个争分夺秒的事情,如果你太过于纠结写得好不好看反而是舍本逐末的事情。同时,学习代码的时候一定要学会看官方文档和看源码,像 torch
和 transformers
这些库的文档和源码比网上搜的博客清晰的多。
3.2 一篇论文该怎么读?
许多人,包括我,在最开始看论文的时候,都是从头到尾一句话一句话的翻译,这个也没错,但是这样反而会效率不高。我这里就从科研的读论文的顺序和读论文该用什么方式来写。
3.2.1 科研阶段读论文顺序
对于刚开始做科研的同学,最大的困惑就是不知道该读什么论文。通常都是导师丢一啪啦论文下来,或者直接找师兄师姐要一啪啦论文下来看,但是实际上这样我个人觉得是有问题的,因为很多论文,尤其是会议论文,都是建立在你是从事了这个行业一段时间的,如果你上来就硬看,可能看完一篇论文最大的收获就是学会了几个专有名词。这里关于论文的阅读顺序我整理如下:
- 初学者先问清导师团队的研究方向有哪些,然后搜相关的综述论文(一定要搜最新的那一篇,因为这一篇里面肯定会引用老的综述论文)。对于看论文还不熟练的同学可能看英语会很吃力,看专业名词看的头痛,很多百度都还百度不到的。这也没事,可以搜近两年这个方向清北的博士毕业论文来看,他们的毕业论文可以只用关注于第二章,即国内外研究现状,这一部分就是一篇顶级的中文综述,先了解下这个方向有哪些方法,然后再看看相关的基础知识。就比如你做自然语言处理的话,词嵌入你得知道吧,传统方法里面最经典的
Word2Vec
得知道吧,这两年最热门的transformer
得知道吧。 - 当有了方向的直观认识后,一定要尽快确定自己的研究方向,不然开题前换方向的话等于你之前的工作都白做了。这个阶段我推荐最多研一上期结束的时候就要确定。当确定了方向后,就去看看这个领域经典的论文,比如自然语言处理里面的
Word2Vec
,GloVe
,Transformer
,BERT
这些。 - 当上述的工作做完后,就可以开始看实际的论文了,这个阶段我推荐先从一区的论文开始看,一区以下的论文不太推荐,二区以下的碰都别碰,当然,二区的
IEEE ACCESS
也要避坑。这个时候你可能正好研一上期快结束了,但是实际上基础还是处于相对薄弱的阶段,所以这个时候看SCI
是个很好的过程。SCI 写的会很详细,有的时候你都会看到一句话翻来覆去写个几遍的。同时 SCI 会将模型的每个模块写的很详细,比如每篇跟LSTM
相关的论文,一定会有一套LSTM
相关的公式,这个阶段可以做到查漏补缺,不仅可以锻炼阅读论文的能力,也可以补充一下自己的基础知识。不过我个人不建议太过于纠结期刊论文的思想,因为一般也没有什么思想。 - 当看了一两个月的一区论文后,就可以进入到最后一个阶段了。这个阶段就只读顶会论文(除非你的研究方向只有 SCI,像我的研究方向顶会就只有个位数)。为什么说只读顶会论文,我这里借用 MIT AI LAB 他们的师兄给师弟师妹写的原话:你几乎无法在期刊论文里面找到任何有新意的东西。当然这句话是有局限性的,因为我发现这句话仅适用于部分计算机的领域,当然,人工智能属于这句话的范畴。实际上你仔细想一下自己领域所有著名的模型、方法,你会发现好像一篇出自期刊的论文都找不出来(nature science 不算)。我看过许多顶会论文,坦白的说,就算是 CCF-C 的会议论文的创新性,都能碾压大多数一区的论文了,虽然这些论文方法可能很简单。这类论文会很有趣,但是也会很晦涩。因为会议论文会有篇幅限制,所以大家都是能不写的东西就不写,比如你写期刊论文的时候,写 BERT 都可以写个四五页的,但是你写会议论文的时候,一句话加一个公式 $h = {\rm BERT}(x)$ 就结束了。所以对于基础不好的同学在看会议论文的时候会很煎熬,因为你没有扎实的知识储备。
- 当你会议论文看的最够多了后,就会有许多创意了。实际上如果你只看当年会议里最热门的话题(比如 18 年的
BERT
、GNN
;20 年的对比学习;21 年的提示学习),随便改一改,都是篇一区论文的质量了,所以我一直说发论文有手就行。 - 在这中间还有一个很重要的过程,就是学术报告,包括但不限于实验室的组会。
- 对于实验室的组会来说,这是个很好的阶段,能够让你在一小时内简单了解一篇论文,然后看你有没有需要,如果有需要,就找那个同学要原文来看。
- 还有就是一定一定一定要多参加国内外的会议,就算是国内的,不在 CCF 表上的会议(虽然我一直都认为 CCKS 要升 CCF-C 了,所以现在发个 CCKS 我觉得会很赚),都会请到许多行业大佬(比如你可以随时随地看到刘知远和黄明烈两个老师的名字)来做汇报,这些汇报就是他们最新的研究成果,并且由论文作者直接分享,比你自己去咬文嚼字看论文效果要好得多。同时在会议上老师们还会给你提供许多他们认为未来的可研究话题,这些对自己的选题都能有很好的帮助。
- 同时可以 B 站上关注一下 ReadPaper论文阅读,这里会不定期的请许多论文一作来分享他们的工作,所以也可以快速阅读一篇论文的思想。
3.2.2 看论文该怎么看?
我看过许多师弟师妹看论文都是一句话一句话的看,有的还是翻译成中文打印下来看,更有甚者不仅要一句话一句话翻译,还要用笔去一句话一句话抄……亚雷吗,是硕士三年太长了么……
首先这是个最大的误区,就是你论文一句话一句话的看。还是引用 MIT AI LAB 的话:你不可能写论文的时候每一句都写的很完美。那么同理,不是每一句话都是有必要去阅读的。
首先,一定要看英文原文!一定要看英文原文!一定要看英文原文! 这个有两个原因:
- 如果你看博客,假设搜的到的话,这个是别人 N 次咀嚼后的结果,可能第一个看论文的人看完后,得出错误的结论,第二个人看了这个错误的结论,然后以讹传讹下来,你看的博客不知道错了多少。
- 如果你全文翻译,有的句子翻译出来都不是原文表达的意思了,比如你输入一个长难句进翻译软件你看出来会不会有问题。
其次,阅读论文要分为 略读 和 精读。同时,看论文的顺序也不应该是自顶而下的看,根据我观察的来自 新加坡国立
,电子科大
,西南交大国家重点实验室
,贝壳找房
等诸位大佬的论文阅读习惯,再结合上我看论文的习惯而言,我将看论文的顺序总结为:摘要
,总结
,模型图
,实验结果的表和图
,引言
,其他
。
- 当你开始看一篇论文时,不能够确定这篇论文要精读还是要略读,所以就按照我之前总结的顺序来阅读。如果你确定这篇论文你是要精读的,那么就可以直接自顶而下阅读(不过对于没经验的人来说,很难能够确定论文是不是要精度的,所以没经验之前最好按照我给的顺序来阅读)。
- 通常看完摘要,看完总结,看完模型图后,你就能大概把握这篇论文是不是要略读了。最简单的判断办法就是你看模型图是不是 叠层数 或者 缝合怪,叠层数就是比如 LSTM 上加了个 ATT,缝合怪就是比如 LSTM + CNN。如果是这样的,那么稍稍看看实验结果就行了(这类论文的实验结果一般也是编的,一个敢编,一个敢收),然后这篇论文就到此为止了。
- 当你判断这篇论文不是属于略读的范畴的时候,那么就是精读。精读的话可以选择我刚刚的那个顺序来读,也可以选择从头开始读,核心目的就是看懂这篇论文。
当然,在阅读论文的时候,也不是要每一句话都读。通常一篇优秀的论文都是 总-分-总 结构,在看的过程中,你可以跳着看,比如每一段只看第一句,看下他这段话的中心思想是什么。同时,在遇到很多公式的时候(我相信大部分人都被这个难到了),实际上你只需要推导一两篇论文的公式,大部分论文的公式都是大同小异的,之后遇到都可以跳过了。比如我就从来不会看 LSTM
的公式,那一大坨我会直接跳过 (除非他这篇论文就是改进的 LSTM)。同时,一篇优秀的论文,你不看文字介绍,你只看图表以及它们的标题都可以看懂这个图表的内容,所以关于图表介绍的那一大坨文字也可以选择性跳过。
3.2.3 看论文主要看什么?
这里我就引用一下沈向洋博士和华刚博士提出的 论文十问:
- ** 论文试图解决什么问题?
- 这是否是一个新的问题?
- * 这篇文章要验证一个什么科学假设?
- 有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?
- * 论文中提到的解决方案之关键是什么?
- * 论文中的实验是如何设计的?
- * 用于定量评估的数据集是什么?代码有没有开源?
- * 论文中的实验及结果有没有很好地支持需要验证的科学假设?
- * 这篇论文到底有什么贡献?
- 下一步呢?有什么工作可以继续深入?
* 代表了我认为最重要的问题。
看论文我认为首先要看的是这篇论文的 motivation
。每篇论文的模型,实验全是围绕着这个 motivation
而展开的。motivation
会出没在 introduction
中。通常 introduction
里面第一段是背景介绍(一般是废话,当然看作者水平),第二段或者第三段会提出一个问题(这里通常会有例子,包括但不限于文字、图、表),再下一段会说明为了解决这个问题,他们怎么怎么做的,而这个问题与解决方案就是这篇论文的 motivation
,抓住了这个 motivation
才能准确把握住作者后面写的东西。
当知道作者的 motivation
后,可以看下模型图中,他们提出了什么新的模块,来解决他们发现的问题,这也就是对应了 论文中提到的解决方案之关键是什么? 通常一篇好的论文,你可以直接从 motivation
和 模型框架图
知道这篇论文 80% 的内容。
接着就是实验部分,你得分析下作者用了什么实验来验证他们的解决思路。实验通常会有几个板块,一个主试验(即对比实验),和别人的模型对比,看下自己创新的模块是否带来了提升。如果性能上的提升只有一点点,那么你就得开始怀疑究竟是这个数据集太难了,还是说这个模型本身就不能够解决这个问题,只是某一组跑出来的效果好了那么一点点。通常还得有一个消融实验,将模型创新的部分给删掉,看下性能上会损失多少,以此来说明这个模块是对模型性能有帮助的。这也就是 论文中的实验是如何设计的? 当你论文看得多了,自然也就知道自己该做什么实验了。
3.2.4 论文的实验要不要复现?
这个问题我秉持着怀疑的态度,我在这个问题上没有很好的方法论,因为我也没怎么复现过别人的实验。从我个人的角度上讲,我是特别不想复现别人的实验的,因为你会发现很多论文是不公布代码的;或者只公布一点点代码;或者关键代码不公布;或者公布出来你跑出来实验结果差了很多;或者你照着他的模型、参数给跑一遍,然后发现连基线模型都比不过。都是有可能的。
所以在这个问题上,我只会选择看他们模型的代码(即 models 文件夹下的内容),然后我只跑通这一个模块的内容。我不会选择去把他们的实验给实现,因为这个过程是个很费时费力的过程,而且有可能还跑不通。由于我用别人的模型的时候,一般都是放在新数据集上运行(如果你是在这篇论文的数据集上做实验,那么一般就是直接用别人论文里面的结果,不用自己跑),所以我只用关注于把别人的 model 给运行正常即可。
3.2.5 看论文方法流
自问自答式读论文,自己提出一个问题,自己从论文或者各种渠道去找到答案,然后再更根据上一个问题的答案再提出另一个问题,直到没有问题可以提问,注意提问题时应该以一个纯小白的角度提出问题,而且通常的第一个问题是这篇论文想干什么,也就是motivation