怎样从别人那里获得代码/论文/模型/数据?

2023-10-09 13:01:34 浏览数 (3)

作者:吴建鑫@南京大学人工智能学院

编辑:东岸因为@一点人工一点智能

原文地址:https://cs.nju.edu.cn/wujx/HowToRequestCode.html

01  为什么有人能要到代码/论文/模型/数据,而我就要不到?

身为科研人(科研狗?),想必少不了向别人要求代码/论文/预训练模型/数据集/套磁的经历。有些人一般都能成功要到,而有些人就不行了。

在发表了论文之后,想必也会有别人向你要求代码/论文/预训练模型/数据集/套磁。我也经常收到这样的邮件。有些给了,有些就不想给。

那么,为什么呢?

1.1 一个虚拟的故事

先做一个假想的思维实验吧。

某天,你在实验室充满热忱的(痛苦不堪的?)写着代码/论文/报告,忽然一个带着丝袜头套(银行劫匪经典款)的人指着你的鼻子:“把你的代码发给我!”,那么,你会乐意吗?哪怕你已经决定一个月以后就开源这个代码,在这种情况下,你打心底里乐意吗?

又或者,一个至少看上去正常的人,满脸真诚的对你说:“X先生/女士,我是从事和你一样研究领域的某某某,读了您的论文,觉得特别好,真的是现在最好的方法了。我想把我们这边研究的方法和您的比较一下,能把代码拷给我吗?我保证只用于研究目的,只在我们实验室内部用,绝不外传的”,那么,你会乐意吗?

1.2 两段真实的经历

如果你的答案分别是愿意、不愿意,那么抱歉,我们不在一个频道,下面的内容不如就别看了吧。

如果你的答案分别是不愿意、愿意,那么我们的看法差不多。不如继续往下看看我的两段真实经历。

这两件事情都是关于座机电话的。

现在座机电话已经很少了,一般只有机构(公司啊,机关啊,学校啊)才会保留,而且很多号码其实早就不用了,但是外人也不知道。

1.2.1 第一段电话

曾经接到过一个电话,“我是XX编辑部的,找Z老师”。

Z老师是我们这边的大牛,当然了,找他的人也特别多。

“我不是Z老师啊,是不是打错电话了啊?”

“我知道啊,那你把Z老师的手机号给我吧!”

“请问您是哪位?找Z老师有什么事吗?”

“这你就别问了,把他手机号码给我就行。我有急事找他。”

Z老师和我这种闲散人员不同,那是知名学者,手机号码并没有公开。

“这个是Z老师比较重要的个人信息,没有得到他同意的话,我这边没有办法替他公开的啊。”

“你们这帮搞研究的就是事情多...”

啪!电话挂断了

1.2.2 槽点

从我个人的生活经验来看,这位大概率不是骗子,只是这段对话槽点还是过多了一些。

为什么就一定不能透露你的信息呢?难道我是“贞子派”的,会顺着电话线过去用长头发替你扫地?再说,我也不是“缅北派”的,也不会顺着电话线爬过去噶那个啥来着呀!

为啥你那么自信,自己做为一个“丝袜头套派的人物”,别人就必须满足你、告诉你第三方的私密信息?

这里推荐去听一下经典相声《小偷公司》:

代码语言:javascript复制
(小偷公司做广告):    
本公司的联系人:不宜外传    
电话号码:暂时保密    
电报挂号:无可奉告    
公司地址:打一枪换一个地方

(严重泄漏年龄了...,卡卡卡)

我们“这帮搞研究的”得罪谁了啊?啊?

再说了,如果不是骗子,正常人有事的话,也应该委托我和Z老师说一下“有这么个谁谁谁找你,留了一个联系方式是XYZ”。要是真重要的事情,Z老师也能及时和对方取得联系。

怎么就变成了我不把Z老师的隐私信息给她,就犯了错了呢?

我得罪了谁了啊?啊?

1.2.3 第二段电话

我办公室的座机号码其实之前是我们这边办公室主任Z主任的座机号码。

“喂,您好,我找Z主任。”

“这个号码以前是Z主任用的,现在他不用了。”

“那能麻烦给一下Z主任的联系方式吗?”

“请问找他有什么事情啊?”

“是这样的,我家小孩XX在南大读书,最近成绩下降的厉害,想找学校了解下情况。网上查到的其他号码都打不通,只有这个Z主任的通了,还... 不好意思啊,能不能麻烦一下?”

虽说这个事情其实和我没有关系,但是我觉得这个忙还是该帮的,所以请对方等了一下。

Z主任的私人手机号还是不能给,但是我们单位办公室是有座机的,而且是在使用中的。

我在乱七八糟的桌上开始挖掘,费劲巴拉找到尘封了很久的纸质电话簿,然后在里面找到办公室的座机号码,告诉了对方。

可怜天下学生狗...,都大学了还是逃不掉父母对成绩的关注 ...

可怜天下父母心...,都大学了还是要关心孩子的成绩 ...

可怜我们这些当老师的,平时成绩占总分50分,有些学生吧,你一次作业都不交,我怎么让你及格?

02  要素

所以,从我的个人观点来看,一般来说能成功要到代码/论文/模型/数据,需要具备以下的要素:

1. 若要公道,打个颠倒

2. 让对方觉得诚实可靠

第1个要素说的是态度。没有人欠你代码/论文/模型/数据,请务必不要因为没有要到代码/论文/模型/数据而对原作者生出怨怼。

这是一段甲方对上乙方的关系,代码/论文/模型/数据的原作者是甲方,而你是乙方。如果没有要到,不妨回头看看你的邮件,是不是这个邮件让你在对方看来属于是“丝袜头套派”的不合理要求?

所以,若要公道,打个颠倒。仔细看着那封要代码的邮件,不妨想象一下你自己是甲方,这种情况下你会乐意给出代码吗?如果你自己都觉得不妥,那怎么能指望别人会乐意呢?

第2个要素说的是方法。重点是让对方觉得你诚实可靠。

你自己是否诚实可靠小郎君,其实是没有办法证实的。

甲方收到一封要代码的邮件,如果代码还没有公开的话,那么愿意给出代码的底线至少是:对方不是一个骗子,也不会用我的代码来做一些坏事。

2.1 齐天大圣孙悟空是怎么要代码的?

在最初,大圣可是自报家门的:

祖师道:“你是那方人氏?且说个乡贯姓名明白再拜。”

猴王道:“弟子乃东胜神洲傲来国花果山水帘洞人氏。”

祖师喝令:“赶出去!他本是个撒诈捣虚之徒,那里修甚么道果!”

猴王慌忙磕头不住道:“弟子是老实之言,决无虚诈。”

祖师道:“你既老实,怎么说东胜神洲?那去处到我这里,隔两重大海,一座南赡部洲,如何就得到此?”

猴王叩头道:“弟子飘洋过海,登界游方,有十数个年头,方才访到此处。”

祖师道:“既是逐渐行来的也罢。你姓甚么?”*

菩提祖师第一个想知道的就是“who are you”,而孙大圣也绝不是丝袜头套派的。

至于求法,悟空反复追问

似这般可得长生么?,

这就是对“我要代码来干吗”的回答了。

到最后,菩提老祖对孙悟空说:

你这去,定生不良。凭你怎么惹祸行凶,却不许说是我的徒弟。

对吧?这就是甲方的底线了。

甲方给代码是为了学术交流,为了推广研究成果,但是根本底线却是:出了事不要连累我。

2.2 你觉得自己诚实可靠,但这并不重要

所以,两个要素结合起来,归根到底,还是要从态度和方法上,让甲方相信你诚实可靠。

至于你是否真的诚实可靠,或者你是否相信自己确实诚实可靠,这些都不相干的。

要我(甲方)觉得,不要你(乙方)觉得。

如果一个的的确确是诚实可靠的人写信向你要代码,但是吧,你唯一能看到的就是那封电子邮件,里面只写着“把xxx论文的代码发给我吧!” --- 你会把代码发过去吗?

你真的会把代码发过去吗?

如果你的答案是yes,那建议仔细看看这个文档的最后一部分。

03  中英文邮件的对比

那么,怎么让对方觉得你确实诚实可靠呢?这其实是有八股格式的。

可惜的是,根据我的个人经验来看,向我要代码/论文/模型/数据的邮件当中:

  1. 如果是中文的,大概只有1/4包含了全部或部分的要素。
  2. 如果是英文的,情况就大不相同了。大概有95%的和下面的八股格式一样或者相似。(除了某一类特殊要求)

换句话说,由着性子来的话,绝大部分中文来信要代码/论文/模型/数据的,我应该会直接不回信。

只是过去时间相对比较多,有时候还是会给的,只是给的非常不情愿(而且会有顾虑)。

到现在呢,整天忙得焦头烂额,就大部分不回信了。

这也是我花了不少时间,写下现在这个文档的原因。咱们中国同学总要和国外的研究人员要求代码/论文/模型/数据,或者套磁申请研究生,那么看看这个文档也许会有帮助吧。

04  八股

4.1 邮件标题

简明扼要且礼貌的标题是必不可少的。

没有标题的邮件有较大几率会被直接分为垃圾邮件。

正如学术论文的标题一样,邮件的标题需要说明要点,让人点进去看详情、而不是直接删掉。

4.2 称呼

正确而礼貌的称呼重要性其实也很高。

因为国家留学基金委的缘故,我们国内教师经常会收到索要录用证明的邮件,通常标题是"Request for acceptance letter"而称呼是"Respected Sir/Madam"。

这种信件我通常会直接删掉。就从Respected Sir/Madam这个称呼来看,这就是典型的海王啊,几百封邮件往外群发。那我为什么要花时间看信的内容呢?这就是上面说的“某一类特殊要求”啦。

而很多中文来信则比这更加神奇 --- 人家就根本没有称呼。

还遇到过奇怪的信,开头的称呼是“ZJ教授”,我是“W老师”好吗?

所以,正确的称呼收信人(最好表现适度的礼貌),其重要性不言而喻。

4.3 我是谁?

邮件正文的第一部分,必须是自我介绍(如果和收件人不认识的话)。

正如前面的例子所说,你不会很乐意给一个遮遮掩掩、丝袜套头的人帮助吧?一个完全不认识又不自我介绍的人,看上去就不会是诚实可靠的吧?

所以自我介绍(Who am I?)是绝对必要的。

我的姓名?来自哪里?我的研究方向是什么?等等

简短而诚恳。这是要点,可以体现在很多方面。

比如说,email发件地址最好使用单位邮箱(例如.edu.cn)。

又比如,自己和所在实验室的主页,必要时这是可以提供更多的信息和可信度的。

哪怕你在邮件的末尾有个人签名,提供了一些信息,也不能替代在邮件最开头的个人简介。

4.4 我的要求/请求是什么?

简明扼要,比如:

I am writing to request access to the pretrained model of your method XXX, published at CVPR 2023.

我个人偏好将这个部分放在下一部分之前单独列出。

4.5 为什么要代码/论文/模型/数据?

提供合理、诚恳的理由。

一般来说,这里会表达一下对甲方工作的赞赏之情,而篇幅可以稍微长一点点,因为需要把话说清楚。例如:

I sat in your talk about your "XXX" method at CVPR 2023. "XXX" is a novel and beautiful method for self-supervised learning, and has achieved state-of-the-art results on a variety of downstream tasks. I am also working on SSL (前面说的,第一部分简要介绍自己的研究方向), and want to build our research on the basis of your "XXX" method.

4.6 会怎样使用对方的代码/论文/模型/数据?

这是中文邮件中特别容易被忽略的部分。在这个文档(除结束语外的)最后一部分会有相关的吐槽。

比如可以说

“We will use the code strictly following the copyright notice accompanying your code.”

或者,

 “We will only use the code inside our research group for academic research purposes only”。

这部分的目的是表明“诚实可靠”,就是不会使用要求的内容去做违反法律、约定、规则的事情。换句话说,就是“就算大闹天宫了,也不会把师父您牵扯出来”的意思。

4.7 结语

类似于下面之类的:

“Looking forward to your kind reply.”

4.8 落款

正式的落款,类似于下面这种(总之要体现“诚实可靠”):

XXX, Graduate Student

School of YYY

ZZZ University

email@X.Y / https://a.b.c

4.9 建议

在写信时的风格上,有如下的建议:

[A] 真诚。真话比假话更有力量。

[B] 简洁。简明扼要,不要流水账。

[C] 有备。先做功课,了解甲方对发代码、招学生等等有什么要求,而不是盲目去要。

[D] 及时。检查邮箱,有回复时及时回应,别发信以后就不管了。

[E] 礼貌。说实话,从我收到的要代码等等的中文邮件来看,这个本不应该需要说的事情,看样子很有必要强调。

05  一些吐槽

可能有些人(特别是经历比较少的同学)会觉得上面的八股太啰嗦了,而上面的建议也太限制自由发挥了。

“明明我是诚实可靠小郎君,为什么要搞这么复杂,直接把代码发给我不好吗?”

不好!

因为这个世界上有形形色色的人,各种各样的事。

而且,曾经掉进坑里的人,以后会特别小心。

就如网上说的,“每一个离谱的规定背后一定有一个更离谱的真实故事” --- 某校的校规为什么从“禁止男女同学之间谈恋爱”,到“禁止同学谈恋爱”,到“禁止谈恋爱”呢?

所以这个文档的最后部分是一些吐槽,针对上面一些看上去可能没必要的八股内容和建议。

5.1 没有人欠你代码/论文/模型/数据

所以,请礼貌些,表示出尊重和感谢。

我个人赞同所有的研究都公开代码、论文、模型、数据这些。

但是这个世界很复杂,比如,一项研究可能是某公司赞助的,而项目合同规定知识产权(IP)归公司所有,所以研究人员是没有权限公开或共享这些IP的。

5.2 大家都很忙,而且越来越忙

所以简洁很重要。现在审稿系统都有TL;DR了(too long; didn't read)啊!

一篇文字啰里啰唆、没有独立风格、明显缺乏真诚的邮件,别人不愿意花时间看,也是人之常情啊。

5.3 你拿了我的代码/论文干吗呢?

你现在可能感觉把还没发布的论文发给他人是很正常的。没错,很正常。

可是,如果你像我这样,遇到过三次以上论文被“洗稿”的不幸事件,那之后你的选择会改变吗?

还有,你看过别人开源代码的版权声明吗?严格遵照执行了吗?

有听说过因为使用了别人开源的代码出现bug,竟然向开源方索赔的事情吗?

那现在就能理解为啥开源代码版权声明的第一句,一般来说不是保护代码的版权,而是声明这个代码是“provided AS IS”,换句话说,就是“我提供代码没收你钱,所以你出了错我不负责”。

所以啊,菩提祖师在收孙悟空之前,难道吃过苦头?

5.4 商用和非商业是不一样的

SIFT (scale invariant feature transform)就是一个例子。对于研究、学术等性质的使用,可以免费使用SIFT作者提供的可执行文件。

但是,如果需要商用的话,人家UBC申请了专利,是要交钱的。

所以,在邮件中清楚说明代码将会怎么使用,在有些情况下还是很重要的。

5.5 有bear来

在写信给作者索要之前,需要先做做功课。

作者是否已经在(例如github)上开源了?是否已经在其主页提供下载了?是否已经明确说明了提供代码需要满足的前置条件?

如果什么功课都没做(其实这些功课做起来非常容易),那么作者看到信的时候,心情可能就不那么美好了。

5.6 及时反馈

这里有一个例子。以前在新加坡的时候,课上有一个学生写邮件要求讨论:

信是16号上午写的;

要求的是约在17号上午讨论;

然后我在16号上午回信说“可以”;

但是呢,一直到17号下午也没见到人;

所以继续回信,问怎么回事啊?

结果到18号下午才收到回信,

说,“哦,我这两天没看邮箱”

呵呵,是不是感觉有哪里不太对?

那就算了,不用讨论了。

那比如作者可以提供代码,但要求你先完成一些前置要求。可是,你一个月以后才看邮箱、回信。作者会怎么看?

又比如作者提供了一个下载链接,有效期是7天。你一个月以后才去下载,然后又跑去和作者抱怨下不了,那作者会怎么看?

06  结束语

Take home message:

怎样从别人那里要求获得代码/论文/模型/数据?

礼貌、真诚、简洁的表达意愿 从对方的角度出发思考,表达对其工作的赞赏,打消对方可能的疑虑。

其实很简单,就这样。

1. 清华大学刘知远:好的研究方法从哪来

2. 字节跳动李航:AI for Science的一些探索和进展

3. AI近十年盘点:纵览AI发展历程,探寻AI未来走向

4. 雷军:小米研发大模型的方向是轻量化和本地部署

5. 走出新手村:十次CV论文会议投稿的经验总结

0 人点赞