9月份投了自己第一篇文章, 但是很大程度是老板带着完成. 这篇文章主要就把当时老板给出一些论文写作的要求和提示稍微总结了一下, 以便后续论文的产出~
(下面给出的写作顺序是不一定的, 可根据自己的实际情况做出临时改进)
作为工科生, 在论文在打磨出来之前, 我们还是主要采用代码来完成一些基本的测试和想法.
往往会在代码跑出来的结果还比较可观的时候着手开始论文.
以我的第一篇的尝试来看, 可以先试着将算法关键部分的伪代码写出来.
\begin{algorithm}[tbh!]
%\textsl{}\setstretch{1.8}
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}
\caption{the name of algorithm}
\label{algorithm: the label of algorithm}
\begin{algorithmic}[1]
\REQUIRE
Input content.
\ENSURE
Output content.
\STATE ...;
\FOR {$1 \leq i \leq n$}
\STATE ...;
\STATE ...;
\ENDFOR
\STATE ...;
\end{algorithmic}
\end{algorithm}
伪代码位于The proposed approach部分的相关算法的某个分支的位置.
计算机方向的The proposed approach主要是对算法过程的描述.
之前先完成伪代码相当于是整理自己代码的一些关键地方的思绪. 之后根据这些思绪, 试着把算法的几个核心流程整理出来, 即algorithm decomposition.
举个例子, 对于一个数据集, 我们首先进行预处理, 这可能是一些特征提取或者特征分解. 然后将特征丢到一个特殊设计的网络中进行训练, 训练出一个完善的模型. 最后将我们的测试数据再丢到这个模型中, 完成测试.
上述这个过程可以分解为典型的三个过程: 特征提取->网络训练->模型测试
它们会构成The proposed approach的三个分支, 这些分支中又可以延伸出更多分支. 当然这只是一个例子, 具体还得看你的算法是什么.
在写The proposed approach的过程, 不要放过任何一个可能的创新点, 也许你只是在论文中提到了某种距离公式, 或者一种特殊的选点方案. 在文章中你都可以试着展开说, 从逻辑层面分析它的意义 (灌水). 如果这个方案有明显的效果, 后续在实现部分也可以基于这个小idea做个消融. (太好了, 论文又变长了)
在The proposed approach中的某些能拔高的地方, 即关注 于某个算法设计的 “Why” 问题的时候, 我们不要沉溺于描述一些简单的事实, 也就是这种方案的表相, 而更应该体现the idea behind. 简单来说, 写出更多设计的理念.
没必要写出审稿人一眼看过去就能了解的东西, 要写出我们会用这个方案而不是其他的方案的够硬的idea.
从伪代码开始, 我们就可以时刻维护自己论文的符号系统了.
符号系统往往可以用一个表格来表示, 没必要用文字逐字逐句去描述它.
下面是一个常规的多标签系统的描述:
实验的写法有很多, 但主旋律还是比较. 一个算法的可行性与高效性总是在与其他算法的外部比较中得到的. 使用评价指标的表格比较是一个常用的方案:
此外, 除了验证算法的可行性与高效性, 还有一个工作就验证算法中各个组件的有效性. 这个时候我们就要做内部比较, 常见的有消融实验 (Ablation studies). 消融实验就是把算法中那些很具有创新点的想法换成很简单的原始方法, 然后在不同的评价指标和数据集环境下去跑一遍, 并对比分析结果.
算法的复杂度分析也可以在这部分来做实验.
算法的复杂度分析是一个跨章的任务, 准确来说, 应该先在The proposed approach部分专门留一个章节来从算法设计细节上逐步分析复杂度.
而实验部分是用数据集的实际时间开销变化曲线图来验证在The proposed approach中分析的正确性.
(何为验证? 例如, 分析的复杂度是 O ( m 2 n ) O(m^2n) O(m2n); 那么实验部分的图像表示的 n n n相关曲线是线性的, m m m相关曲线是二次的, 那么分析就正确)
关于实验部分若干实验的排列顺序, 主要遵循的原则是 : 重要的实验放在后面, 且先有内部比较, 再有外部比较. 因此上述实验方案的排列应该是: 复杂度分析实验->消融实验->评价指标比对.
最后, 实验部分的limitation和discussion.
最后总结一句, 实验部分是个长跑, 非常耗人! 以我第一次的经验来看. 当你做完了一次完整的实验, 做出了一个excel表格之后. 你永远都不要幻想当前的实验结果一定就是最终结果了, 你不会知道你下一次你推翻这个结果再重做是什么时候.
偷个懒:
老板的这个写得挺好的!
https://blog.csdn.net/minfanphd/article/details/121404902
摘要的目的在于精炼, 每句都写得尽可能简单些 (当你不断暗示自己要写简单句的时候, 你的内容自然不弯弯绕绕了)
当然部分核心的句子还是要尽可能详尽, 至少要把我们的创新表达出来
如果论文已经做到这个部分了, 那么恭喜, 你已经可以不用去做太多技术向的事情了, 不用担心算法的效果的问题了.
但是很不幸的是, 大量的文笔和查论文的工作摆在你的面前了.
Introduction是你论文的缩略, 读者或者审稿人在看完你的Introduction后基本对你的文章就有一个大概的方向了. 因此这个部分一定要不遗余力地把文章中最核心的东西拿出来.
思路就是采用与摘要类似的节奏, 即摘要中的每一句都是我们Introduction中的一段的主题句.
句子长度来看, 每段不能太长, 每段应该是有5~10句, 100左右的的单词. (最多150)
计算机专业要学会在introduction中放出一张能大概囊括整个算法的一张图, 好的图一方面能抓人眼球, 另一方面可以诠释算法的大概过程, 或者解释算法的特征. 例如说下面这张图用非常强烈的色彩感一下抓住了人们的眼球, 紧接着人们的注意力从图中的色彩框挪到了右边的彩色字体, 在引导下阅读了图中文字, 从而了解到了本篇算法的目的是处理有噪声情况下的多标签问题.
图来自多标签算法PML-NI
Xie, M.-K., & Huang, S.-J. (2022). Partial multi-label learning with noisy label identification. IEEE Transactions on Pattern Analysis and Machine Intelligence, (pp. 1–12).
下面以某篇论文的Introduction的流程为例来看下Introduction的特点 (注意, 写法是灵活, 下面仅供参考):
\begin{enumerate}[$\bullet$] ... \end{enumerate}
), 枚举的每点都是一段, 且每段都关联论文中算法方法论的一个分支. 最省脑子的做法就是: 每个分支都与The proposed approach中的分支一一对应.
在有些论文中, Related Work第一部分可能是Data model, 关于这个详见第3点.
Related Work中的重头戏是对于前人算法的集中描述, 要写好这部分需要事先确定自己论文研究方向中的那些已有的流派, 然后选择其中那些与我们论文的方向交集最多的流派, 将这些流派展开描述, 一个流派用一段去写.
每段第一句是总述这个流派的重要性, 特征, 方法, 然后后续每句都引用一篇论文的算法来论述这个流派的实际成果, 每句的论述着重用简练的语言去描述算法的主要技巧. (可以视为对这个算法的评述)
尽可能地, 一个算法只用一个句子. 以及, 段内多个算法的枚举按照一定的逻辑顺序, 可以是时间, 也可以算法本身的某个特征点的发展顺序.
总结与展望中说说我们算法的优点, 同时也说说算法的不足与还未解决的问题. 后者将是主要要写的.
还未解决的问题可以通过分点枚举的方式表明出来, 对于每个还为解决的内容, 我们需要承认其复杂性, 同时我们也得表明我们今后直面他们的勇气.
可以说 “这都是我们下一步即将研究的问题” , “Hence we are also planning to enter this challenging and promising field.”
在文内引用时, 使用\cite{}. 具体细节上请注意:
\bibliographystyle{model5-names}
\bibliography{XXXX}
这里的model5-names是一个风格文件的名称, 它对应于.tex所在根目录下的model5-names.bst
不同期刊会议可能会给出自己的bst文件.
而XXXX是具体的bib文件, 它对应于.tex所在根目录下的XXXX.bib
.bib是我们实际应用论文需要修改的文件
其中关于文章期刊的引用类似于:
@article{Shu-2022-IS-IMCC,
title = {Incorporating multiple cluster centers for multi-label learning},
author = {Senlin Shu and Fengmao Lv and Yan Yan and Li Li and Shuo He and Jun He},
journal = {Information Sciences},
volume = {590},
pages = {60--73},
year = {2022}
}
关于会议的引用类似于
@inproceedings{Liu-2017-SIGIR-Deep,
title = {Deep learning for extreme multi-label text classification},
author = {Jingzhou Liu and Wei-Cheng Chang and Yuexin Wu and Yiming Yang},
booktitle = {SIGIR},
pages = {115--124},
year = {2017}
}
关于bib文件中的错误引用问题可以参考下面连接:
https://blog.csdn.net/minfanphd/article/details/121952396
我这里主要强调下我踩过的坑:
}
后不要忘记打逗号哟[$\bullet$]
为 ∙ \bullet ∙枚举\begin{enumerate}[1)]
\item ...
\item ...
\end{enumerate}
Instance | right or wrong |
---|---|
This is a sentence (for example) | √ |
This is a sentence(for example) | × |
论文中没必要专门用个 “Note: XXX” 这个句子来表示需要注意的内容, 之间用一个常规的句子说明就好了!
无论是在使用图片还是表格, 其\begin{figure}[]后方都有一个中括号表达式, 其内部的相关描述能影响图片或表格的固定与浮动位置. 我的老板建议我用[tbh], [tbh]可以让图片基于全局灵活调整, 这样文章中不会出现一大段一大段的白色空白.
若在一个算法的片段中我们需要引入一个核心图片来介绍这一段, 我不应该藏着掖着在最后放出这个图片. 相反地, 我们应当在片段的开始就开门见山地引出这个图片, 并且在文章的开始就对这段进行描述. (导师: 这些核心图片有关的描述就是骨头, 其他的都是肉或膘灌水的 )
从一个新的章节 X X X开始, 每节应当有个简单的介绍, 避免新的 X X X章开始后立马开始 X . 1 X.1 X.1
一些重要的, 有原创性概念, 例如一些评价指标, label specific feature… 我们要找出第一个提出的论文; 一些常规的研究方向内的特征性的东西, 比如极限多标签中的标签和数据稀疏性, 要印证这些内容需要引用那些最新的, 顶刊顶会的论文.
latex论文的版本管理是一个非常关键的问题, 建议一天的任务完成后, 第二天直接把第一天的文件夹拷贝个新的, 更新版本号然后继续做. (可以用个专门的txt文档来记录每天添加的内容, 相当于一个更新日志log, 这样我们在出现错误时更快更准确回推到旧版本) (当然如果你用git当我没说 )
在给出一个表格或者图片, 后续要对这个图片或者表格做介绍的时候, 直接用Table \ref{table: XX}或者Figure \ref{figure: XX}做主语就好了. 直接明了, 不拖泥带水. 这样的文字更硬, 能方便读者直接找到图片的位置与解释.
写文章更重要是突出内容, 包装方面尽可能标准化
在说明一个内容点或者公式的时候, 若整体内容很少. 我们可以使用倒序的方式, 直接摆出公式或者内容核心, 然后用 “where” 来说明内容, 从总到分. 但是若内容很多, 必须从头到尾去叙述, 从分到总.
实验部分涉及一些评价指标, 对于期刊论文, 讲究complete, 即我们不需要看另外的论文就能读懂. 因此需要对于一些评价指标, 我们的论文必须做出必要的解释! (这个解释必须用自己的话去描述)
为保证tex的通用性, 不要用些奇奇怪怪的包, 因为期刊系统不一定支持. 图表控制尽可能简单.
初稿挤一点没有关系, 因为真正的版面字体要小些. (交稿后, 编辑会帮你完成了期刊的适应性编辑)
tex首部的\documentclass[preprint]{elsarticle}替换为\documentclass[5p]{elsarticle}就可以将单排的论文变为双排的排版. 其中, 表格\begin{table}改为\begin{table*}就可以将让表格在双排的排版中占据两排.
表格中的一些常规的提示字可以在多个类似的表格标题中重复写, 比如说: “Bold indicates best performance, italics indicates second best.”
\vspace与\hspace要尽可能少用, 因为之后编辑在调整你的论文时, 这些部分会让他们发疯.
当表格没有居中的时候, 其实没必要用\centering. 可以通过调整表格的宽度实现居中的调整.
在论文中如果要论述多个内容时, 分点永远要比不分点看着让人清晰明了. (关于这个, 实际上并不局限于论文)
甚至有时候, 必要的表格梳理也是能利于流程的理解:
在开始一个多分支的大章节时(X.1, X.2 …), 可以在X与X.1交界的地方用多个分点的形式详细阐述本章我们大概会讲的内容, 相当于先读者一个预告. 这种方式在The proposed approach中的算法分解部分是非常重要的.
为了说清楚一个东西, 宁愿去多写一些分支! 假如: 你在写算法分解中的某一部分时内容过多且有明显的分阶段的语言, 那么试着再去把这部分细化为更小的分支.
“分支这种东西能更好地说清楚结构”.
论文中语言描述在层次上可以分为Why, What, How. 在精神上, 这三者之间的关系是 Why > What > How. 也许我们能很自然想到一个算法的处理流程, 但是说清楚这些算法的本质是什么, 乃至于为什么要在用这个算法才是真正困难的东西. 说好Why和What需要作者在设计算法时有足够的motivation, 而motivation需要阅读一定的论文和算法来积累.
(待补)
My 老板 said that:
如果一个单词在别的论文中没用过, 就别用它 !
便于之后直接copy
\documentclass[preprint]{elsarticle}
%\documentclass[final,5p,times,twocolumn]{elsarticle}
\usepackage{rotating}
\usepackage{natbib}
\usepackage{multirow}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{latexsym}
\usepackage{threeparttable}
\usepackage{algorithm}
\usepackage{algorithmic}
\usepackage{array}
\usepackage{graphicx}
\usepackage{epstopdf}
\usepackage{subfigure}
\usepackage{url}
%\usepackage{stmaryrd}
\usepackage{bm}
\usepackage{color}
\usepackage{xcolor}
\usepackage{comment}
\usepackage{tikz} % 用于latex画图整花活
\usetikzlibrary{decorations.pathreplacing} % 用于latex画图整花活
\usepackage{float}
\usepackage{caption}
\usepackage{tabularx}
\usepackage{subfigure}
%\usepackage{subcaption}
\usepackage{chngpage}
\usepackage{array}
\DeclareMathOperator*{\sign}{sign}
\newtheorem{property}{Property}
\newtheorem{example}{Example}
\newtheorem{proposition}{Proposition}
\newtheorem{lem}{Lemma}
\newtheorem{rem}{Remark}
\newtheorem{corollary}{Corollary}
\newtheorem{problem}{Problem}
\newproof{proof}{Proof}
\newtheorem{theorem}{Theorem}
\newdefinition{definition}{Definition}
\newtheorem{assumption}{Assumption}
\newtheorem{conj}{Conjection}
\DeclareMathOperator*{\argmax}{argmax}
\DeclareMathOperator*{\argmin}{argmin}
\newcommand{\tabincell}[2]{\begin{tabular}{{}#1@{}}#2\end{tabular}}
\hyphenation{classifi-cation cha-llenge costs correla-tions discrimi-nant}