How to write a paper(MEGUMI版)

随着Submission deadline is now这几个字出现在USENIX Security 2023的投稿网站上,如地狱一般的改论文环节结束了。就像仙侠小说中的闭关修炼,随着论文从破败不堪到勉强不错,我的写作能力也有了较大突破。虽然连续七天每天改十多小时的论文很辛苦,但是这个经历确实让我收获满满。趁健忘的我还记得,我想结合这七天改论文的经历以及感想,说一下我目前理解的论文写作方法。

我将从论文的前置准备、行文思路、结构中的每个章节来讲解如何行文。

1 论文的前置准备

1.1 写作逻辑

在写论文之前,需要首先定下文章要素,从而梳理写作逻辑。我总结的文章要素有如下几个:

  • background:本工作研究领域的背景,有什么需求
  • motivation:现有解决该需求的方案有什么缺陷
  • method:论文使用的技术,设计的方案
  • advantage:论文的方案有什么好处(呼应motivation)
  • challenge:为了达到这些好处遇到的难题,如何解决(和drawback的区别:drawback是现有方案本就存在的老问题,challenge是使用新技术解决drawback时会引入的新问题
  • contribution:advantage和challenge

把文章要素用一些过渡句串起来串起来形成写作逻辑:background的需求诞生了一些现有方案(background)。但是现有方案有些缺陷导致不能很好地满足需求,本文想要解决这些缺陷(motivation)。为了解决缺陷使用了什么技术,设计了什么方案(method)。这个method有什么好处(advantage)。但是由于引入新技术会造成新的问题,方案中如何解决新问题(challenge)。我们的贡献如下:(contribution)。

1.2 定义符号

在写论文之前预先定义符号可以避免符号冲突,节省很多写作时间。定义符号具体工作分为如下两点:

  • 定义字体:哪些字体表示哪些类型,比如粗体 $\mathbf{a}$ 表示向量,等线 $\mathtt{A}(\cdot)$ 表示函数
  • 定义符号:哪些符号表示什么意思

2 行文思路

论文本质上还是八股文,行文思路较为固定,按照结构往上面填空就行:

一篇论文大致有如下部分:

  • Abstract:用最简单的话总结论文,包括background,motivation,method,contribution
  • Introduction:Abstract的细化
  • Related Work:论文中使用的各项技术的现有工作
  • Preliminary:在引入具体方案之前需要让读者知道的知识
  • Definition:从背景到motivation再到method的转折段落,用于进一步解决读者的疑惑
  • Method:论文中提出的具体方案
  • Analysis:从理论上分析contribution,比如证明密码方案的安全性、AI方案的有效性
  • Experiment:做了什么实验,有哪些结果,对结果进行分析

写论文需要以贡献为核心,围绕贡献进行行文:摘要说明贡献,引言总结贡献,相关工作铺垫贡献,先验知识帮助读者理解方案进而理解贡献,问题定义说明研究问题再次强调贡献,具体方案表明贡献,实验和分析证实贡献,总结突出贡献。

3 Abstract

摘要中简短说明background,motivation,method,contribution等要素,行文顺序如下所示:

  1. 一句话说明研究背景,然后一句话说明motivation(如果有多点motivation就用逗号隔开或者用and等来合并)
  2. method,只需要说明用了什么技术(如果用了什么办法可以用很短的句子来概括那也可以加上)。
  3. contribution,它的篇幅在abstract中占比最高。

对于安全的论文,一般摘要的最后都会说类似的内容:安全分析说明了方案具有足够安全性,实验结果说明方案具有足够的效率,但是任何论文都可以这样说,并不具有论文本身的特色。我们可以将这句话中加上能让读者一下就get到的具有方案特色的关键词,来体现出论文本身的特色。

摘要的篇幅通常在200个单词以内,在有限的篇幅里让读者获悉论文大体的全貌比较困难,很考察英文写作功底。解决这个问题有一套我总结的比较通用的办法,我们可以先通过要素列出一个较长的摘要然后剪枝,具体方法可以参照如下几点:

  1. background只留一句
  2. motivation着重突出现有方法的问题(由于篇幅限制可以不说明),后果尽量用名词性短语描述,然后利用连接词或者从句拼到同一个句子中
  3. 如果篇幅依然较长,method只列出最主要的技术,并精简地说有什么advantage
  4. 说明解决了什么challenge(这里也可以看情况删去)
  5. 实验和安全证明的结果如何

4 Introduction

引言是摘要的进一步扩充,读者在读完摘要的时候对方案的background,motivation,method,contribution依然比较模糊,需要引言来继续深入。

引言需要萌新友好(特别是交叉领域,比如AI和密码的交叉,AI的读者不知道密码学的概念,密码学的读者不知道AI的概念)。我看很多写论文的文章都在说,写作的过程中,把自己当作小白,反复读引言,如果自己认为读不明白就需要换一种表达方式。这说着简单实现起来却非常难,首先,引言的目的是让读者进一步明白要素的内容和之间的联系,如果一板一眼地、一句接一句地分析因果可能会造成文章语言啰嗦;其次,引言中需要尽量避免使用过于专业的或者是论文新造的词汇,如果有就需要对专业词汇做出足够精简的解释。

这导致写引言时不能不能过于深入分析导致语句啰嗦,同时不能通过自己提出的名词或者过于专业的词汇来精简引言的表达,因为考虑到读者不一定有相应的知识积累,可能不能获悉想要表达的意思。最简单的解决办法是在引言介绍background和motivation的时候把introduction中要用到的名词顺带介绍一下(比如在说motivation时,现有方案把二进制串作为水印嵌入到模型中,读者就能知道水印是潜入到模型的二进制串,既介绍了现有方法又帮助读者学习到了水印这一名词),在引言后文用到名词的时候就不用再特意介绍。读者读到引言后文遇到对应名词时可以根据前文有个大致概念。

引言的行文:

  1. 第一段介绍研究背景
  2. 第二段介绍现有研究工作以及大致实现流程
  3. 第三段介绍method,如果需要的话,可以在介绍method过后简单说一下这项工作的challenge是什么,自己是如何解决的
  4. 第四段分点总结contribution

4.1 第一段

介绍background是什么,用于什么地方,目前有什么问题。

第一段相对比较简单,需要注意的要点只有说服力。说明增强说服力的几种方式:

  1. 根据目前热点事件来说明
  2. 引用参考文献:\cite{xx}
  3. 从理论上来论述:为避免篇幅过长,在引言中简单说明,然后\ref到具体介绍的章节

4.2 第二段

介绍现有方法尝试解决这些问题、分点列举缺陷(你们的motivation)

注意:

  1. 其他方案的方法的描述越简短越好,因为这是别人的工作,不是重点。

  2. motivation的描述需要分点,读者可以通过Introduction很快get到你的motivation有几点,分别是什么。

    例子:motivation

    1. 现有方案需要可信第三方
    2. 现有方案不具有可证明安全性
    3. 。。。。
  3. 具体说明motivation分点时,需要适当深入到具体会会造成什么问题。

    例子:虽然目前已经提出了一些解决background的方案,但是现有方案需要可信第三方。该例犯了motivation不够深入的问题。读者(特别是零基础的或者交叉领域的读者)很容易出现一个疑问:为什么需要可信第三方是现有方案的问题?

    修改一下上述例子:虽然目前已经提出了一些解决background的方案,但是可能遇到xx安全问题,现有方案需要使用可信第三方来避免该问题。在现实,对验证者过分的信任可能会导致隐私从第三方泄露。修改后,读者很容易地知道现有方案有隐私泄露的问题。

    同时,motivation的行文需要注意篇幅和深刻程度的权衡,深刻阐述的同时对句子进行压缩。

4.3 第三段

第三段首先要介绍利用什么技术,怎样实现了一个怎样的东西,然后和上一段提出的motivation相呼应,来简单阐述论文解决了现有工作的缺陷。

具体步骤:

  1. 用一句话简单介绍method用了什么技术,具体使用方法
  2. 呼应motivation,对motivation中的每点都要说明由于方案具有什么性质,所以能解决motivation的问题
  3. 接着说明challenge,达到这项好处会遇到怎样的挑战,如何解决

这段要注意的地方并不多,语言尽可能精简,避免使用前文没有出现的过于专业的或者自己提出的词汇让读者困惑就行。

4.4 第四段

总结自己的contribution,分点列出来,表达的意思在和前文保持一致的同时做到尽可能精简(同时别过于精简造成contribution没表现完)。

相关工作感觉要注意的地方不是太多,每个文献简要说明做了什么有什么贡献。按照一个技术一个subsection来分点,每个subsection最后说明现有技术还有还有哪些问题有待解决等内容,进一步突出自己的contribution。引用的文献尽量引顶刊顶会。此外别因为别人的工作和自己的太相似,就不引用,不然可能因为这一点被拒稿。

6 Preliminary

先验知识需要首先说明符号规范并列举文中用到的主要符号,然后介绍需要哪些方向的基础知识(密码学、AI)。

为了避免自己表达错误造成读者误解,写基础知识时需要参考其他文献的表达方式,并用自己的语言重述(即使有自己提出的一些新理论,也需要参考灵感来源的相关文献),进而更加准确的向读者传递新工具的各种性质。同时,其他人提出来的工具需要cite参考文献,不然读者可能会误以为是自己提出来的。

7 Definition

虽然Definition内容和Introduction中的内容差不多,但Definition需要在读者已经获取了Preliminary下,对方案的问题和系统进行进一步更加详细的定义。具体需要按照问题定义、系统模型、威胁模型(或安全模型)来阐述。

7.1 问题定义

继续深入说明background、motivation以及其他的东西。引言相当于在店门外的吆喝把食客吸引来,问题定义相当于服务员为走进店门的食客介绍菜品和本店特色。

引言由于篇幅有限且不能使用自己制造和太过专业的词汇,可能导致对background和motivation只能说个大概,而读者在有了Preliminary的积累之后就可以对读者进行进一步的介绍。比如:

  1. 现有xx攻击,大概的攻击方法;
  2. 现有方案为什么有如上缺点
  3. 我们的方法用了哪些技术,为什么能解决这些问题
  4. 实现这些基础有什么challenge,我们是如何解决的

由于问题定义中有很多结论性的句子,需要在这些句子中cite参考文献增加文章的说服力

7.2 系统模型

系统模型主要说明系统中的实体有哪些,简要说明每个实体的任务。说明任务不必按着方案一板一眼地说,否则可能会造成懂的读者能看懂,没懂的读者看了也不知道在说什么。用联邦版权验证来举例子:

错误示范:

联邦中分为三个实体:客户端、服务器和验证者。

  • 客户端负责生成水印和训练模型,并把模型和水印上传给服务器,并嵌入全局水印
  • 服务器获取客户端的模型和水印,聚合成全局模型和全局水印,将他们发给客户端
  • 验证者获取可以模型和服务器发送的全局水印,于客户端交互验证客户端对水印的版权

上述示范就是按照方案一板一眼地说,想通过简单几句话把方案说清楚,这并不现实。懂了方案怎么做的读者看到这里没毛病,没看方案怎么做的读者看到这里也看不懂,对理解论文没有帮助不说语句还啰嗦。在系统模型中我们只是想要说明每个实体要干什么,而不是说明他们之间的交互过程。

正确示范:

联邦中分为三个实体:客户端、服务器和验证者。

  • 客户端负责训练模型,提交本地模型和生成水印
  • 服务器负责联邦聚合和水印聚合
  • 验证者负责验证对客户端对可疑模型的版权

这样修改读者可以很直观的看到每个实体的作用。

7.3 威胁模型

对于系统模型中各个实体的信任假设:可信、半诚实、恶意,这里的信任假设在能自圆其说的前提下越严格越好,不然投安全会的话会被审稿人抨击信任假设过强(说多了都是泪)。

攻击者的攻击能力:攻击者具体可能发起哪些攻击手段,一一列举并说明,对别人提出的攻击得有文献cite,花较短篇幅来说明;对自己提出的攻击需要说明是自己提出的,并花更多的篇幅来说明。

7.4 安全模型

对攻击者的形式化定义,一般来说,提出一个cryptosystem都有现成模板。如果有自己提出的安全模型建议放到分析部分,并在引出安全模型之前,分析为什么安全模型得这样构造。

8 方案

方案部分的结构如下:首先总体说明流程,然后再分点详写。期间需要保持符号统一,以及直观表达。行文时不能平铺直叙,需要介绍一个环节后突出对应的contribution,比如通过这项技术能达到什么样的好处,能解决什么challenge,简单地分析一下原因(详细分析放到analysis部分)。

8.1 符号统一

由于写具体方案时,为便于描述,往往会修改(包括增加、删除、改名)在Preliminary中预先定好的符号,需要更新预先定好的符号。改符号很蛋疼,简直是牵一发而动全身,改一次符号就要在全文搜索符号出现的位置,把这些符号都改一次。

修改符号有很多种原因:

  1. 符号表述不清,需要更清晰的表达(比如加下标)
  2. 符号冲突(一个符号表示多个含义)
  3. 符号不规范(向量没有加粗等)

在一开始就定义好方案中哪些变量对应哪些符号,哪些符号需要下标表示,各符号的字体是什么等,定义好符号后记得找是否有符号冲突。这样可以大幅缩减写论文中途改符号的次数,提升论文写作效率

8.2 突出贡献

写方案并不是单纯为了让读者知道论文是怎么做的,还得知道论文为什么这么做,进而突出contribution。写方案的时候需要避免单纯地平铺直叙方案的流程。

举个例子:比如在写方案的时候常常会一个步骤分一个subsection。每个subsection最开始需要一一两句话对这个步骤做总领,在总领中就可以说明用到了什么技术,有什么好处(和contribution相对应),这样能加深读者对这论文的contribution的认知。

分析和实验

感觉这部分没啥好说的,主要看自己理论的基本功,保证表达顺畅就行。

对分析:在保证正确性的前提下,把分析表达的直白明了,在contribution对应的部分着重强调contribution。

对实验:实验的图表尽可能多(越多的图标代表越多的工作量),在讲解实验结果的时候也要和方案部分一样突出你的贡献、效率和有效性。

10 总结

  1. 说明论文主题
  2. 归纳用了什么技术
  3. 强调contribution

11 补充

11.1 \ref引用

由于读者在读到文章某个部分的时候,可能并没有需要的信息储备(比如在Introduction中读者的信息不足,可能不知道你具体在讲什么;或读者读到中间,已经忘了之前讲过什么)。这时通过引用对应图表、章节,可以让想了解具体信息的读者直接跳转到对应页面,有助于读者阅读论文。

同时\ref还可以帮助突出contribution。比如在Introduction的最后一段总结contribution时,可以\ref到详细分析该contribution的章节,说明contribution有实际的分析,让读者可以直观地感受到。

后记

由于我目前才完成了三篇论文,对写论文的理解目前较为片面,如有不足之处还请海涵。如果之后有写论文的新感悟,我将继续更新这个文章。


2023.10.9更新:今年我已经连续吃了USENIX Security, ACM CCS, ACM MM, NDSS, AAAI 五篇拒信了。联邦场景相关的setting不明确以及水印鲁棒性的实验不全面成为了论文被拒稿的主要原因。但每个审稿人都对我的安全证明赞赏有加,这至少是对我负责部分的肯定,也算一些微小的慰藉。总之,投论文真的是很看运气的事,希望再战USENIX Security能顺利吧,不行就转投TDSC了。