paper-kits

Deep learning paper kits


Keywords
paper, nlp, deep, learning, kits, bert, dialogue, nlp-machine-learning, pytorch, speech, tensorflow2
License
MIT
Install
pip install paper-kits==1.0.1

Documentation

NLP-Paper

Blog Paper Support Stars Thanks PRs Welcome

更新一些在我学习过程中阅读过的且感觉不错的论文,对于一些经典或思路很新奇的论文,会进行精读,并写一些阅读笔记同步上传更新。(内容同步更新到知乎CSDN),论文按照时间顺序排放

注:

  • 文本相似度计算相关的复现代码以及工具包(Tf/Pytorch双版本)在这个仓库 ☞ Text-Similarity
  • 对话系统构建项目在这个仓库 ☞ Nlp-Dialogue
  • 对部分复现论文代码以及NLP其他工具代码放在这 ☞ paper-code

Contents | 内容

Summarize | 综述

Pretraining | 预训练

  • Character-Aware Neural Language Models:提供一种功能强大,功能强大的语言模型,其可编码子词相关性,同时解决先前模型的罕见字问题,使用更少的参数获得可比较的表现力。 | Yoon et al,2015

  • Neural Machine Translation of Rare Words with Subword Units:就是我们所熟知的Byte Pair Encoding,是一种使用一些出现频率高的byte pair来组成新的byte的方法 | Sennrich et al,2015

  • Achieving Open Vocabulary Neural Machine Translation with Hybrid Word-Character Models:一个非常出色的框架,主要是在word-level进行翻译,但是在有需要的时候可以很方便的使用Character-level的输入。 | Luong et al,2016

  • Learning Character-level Representations for Part-of-Speech Tagging:Character-level去构建word-level,该网络结构主要是对字符进行卷积以生成单词嵌入,同时使用固定窗口对PoS标记的字嵌入进行操作。 | Jason et al,2016

  • A Joint Model for Word Embedding and Word Morphology:该模型的目标与word2vec相同,但是使用的是Character-level的输入,它使用了双向的LSTM结构尝试捕获形态并且能够推断出词根。 | Kris et al,2016

  • Enriching Word Vectors with Subword Information:word2vec的升级版,对于具有大量形态学的稀有词和语言有更好的表征,它也可以说是带有字符n-gram的w2v skip-gram模型的扩展。 | Piotr et al,2016

  • Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation:wordpiece作为BERT使用的分词方式,其生成词表的方式和BPE非常相近,区别在于BPE选择频率最高的相邻字符对进行合并,而wordpiece是基于概率生成的。 | Yonghui et al,2016

  • Fully Character-Level Neural Machine Translation without Explicit Segmentation:比较经典的Character-Level的Subword算法模型 | Jason et al,2016

  • Deep contextualized word representations | 阅读笔记:ELMo模型原paper,想了想还是放在预训练里吧。ELMo模型很经典了,在Transformer这个大杀器提出后,依旧以LSTM为核心结构提出新的SOTA语义编码结构,还是尤其独到之处(ps:同年BERT也被提出了)。ELMo的结构可以分为两侧各一个多层LSTM,左侧的多层LSTM负责编码文本的正向语义,右侧的负责编码反向语义,然后对左右两边每一层的输出进行concat并乘上一个权重,最后的ELMo向量就是每一层输出的和。ELMo最大的亮点就是编码了文本的双向语义,因此相对于一些单向、静态编码器来讲,效果更好,但是问题也在这,这种将正反向的语义分开编码方式,就比不上BERT这种融合式的双向编码了,事实上也证明了这一点 | Matthew E. Peters et al, 2018

  • Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates:unigram在给定词表及对应概率值下,直接以最大化句子的likelihood为目标来直接构建整个词表 | Kudo et al,2018

  • BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding | 阅读笔记:BERT的顶顶大名,使用Transformer的Encoder双向架构 | Devlin et al,2018

  • How to Fine-Tune BERT for Text Classification? | 阅读笔记:BERT在Text Classification上的一些微调实验 | Xipeng Qiu et al,2019

  • Pretraining Methods for Dialog Context Representation Learning | 阅读笔记:作者列举了四种针对对话上下文表示的预训练方法,其中两种是作者新提出的 | Shikib et al,2019

  • XLNet: Generalized Autoregressive Pretraining for Language Understanding | 阅读笔记:XLNet--自回归语言模型的复兴,30多项任务超越BERT | Zhilin Yang et al,2019

  • RoBERTa: A Robustly Optimized BERT Pretraining Approach:论文发现原BERT的预训练并不充分,因此作者提出了四点Bert的改进:1):使用更大的batch在更大的数据集上对Bert进行深度训练;2):不在使用NSP(Next Sentence Prediction)任务;3):使用更长的序列进行训练;4):动态改变训练数据的MASK模式;其中动态MASK就是在每次数据输入的时候进行MASK,而不是在数据预处理的时候就预先MASK好,这种方式相当于不重复看数据,使模型学习到更多的pattern | Yinhan Liu et al,2019

  • NEZHA: Neural Contextualized Representation For Chinese Language Understanding | 阅读笔记:具体来说没有啥特别的创新点吧,在位置编码部分改成了相对位置编码。其他的比如WWM、混合精度训练、优化器自适应学习率,都是屡见不鲜的东西,整体效果而言也没有令人惊艳 | Junqiu Wei et al,2019

  • CTRL: A Conditional Transformer Language Model For Controllable Generation | 阅读笔记:CTRL语言模型,提供Control Code进行定向文本生成,相较于GPT可对文本风格进行控制 | Keskar et al,2019

  • ALBERT: A Lite BERT For Self-superpised Learning Of Language Representations | 阅读笔记:Albert大大缩小了模型参数量,并且加快了训练速度,增加了模型效果。其主要对BERT做了3点改进,第一:把embedding size(E)和hidden size(H)分开可以更高效地利用参数,因为理论上存储了context信息的H要远大于E。第二:跨层参数共享,就是不管12层还是24层都只用一个transformer。第三:使用Inter-sentence coherence loss,即SOP(sentence order prediction) | Zhenzhong Lan et al,2019

  • Pre-trained Models for Natural Language Processing: A Survey | 阅读笔记:超详细的NLP预训练语言模型总结清单 | Xipeng Qiu et al,2020

  • ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators | 阅读笔记:BERT使用MLM进行训练,而ELECTRA考虑到BERT的MLM模型随机选择一部分Token进行Mask的这个操作过于简单了,想要增加一下它的难度。所以它借鉴了GAN的思想,用普通的方式训练一个MLM模型(生成器),然后根据MLM模型对输入句子进行采样替换,将处理后的句子输入到另外一个模型(判别器)中,判断句子哪些部分是被替换过的,哪些部分是被没被替换的。生成器和判别器是同步训练的,因此随着生成器的训练,判断难度会慢慢增加,直观想象有利于模型学到更有价值的内容。最后只保留判别器的Encoder来用,生成器一般就不要了。由于这种渐进式的模式使得训练过程会更有针对性,所以ELECTRA的主要亮点是训练效率更高了 | Kevin Clark et al,2020

  • TOD-BERT: Pre-trained Natural Language Understanding for Task-Oriented Dialogue | 阅读笔记:任务导向型对话的预训练自然语言理解模型 | Chien-Sheng Wu et al,2020

  • DeBERTa: Decoding-Enhanced Bert With Disentangled Attention | 阅读笔记:DeBERTa的一大亮点在于改动位置编码的介入时机,在论文中叫作Disentangled Attention。具体做法是将原本和输入embedding混合相加的pos embedding(relative)单独拎出来,然后再用位置编码和content 编码计算attention,进而增加了“位置-内容” 和 “内容-位置” 注意力的分散Disentangled Attention。然后一些其他的改动比如:1):因为我们在精调时一般会在 BERT 的输出后接一个特定任务的 Decoder,但是在预训练时却并没有这个 Decoder,所以本文在预训练时用一个两层的 Transformer decoder 和一个 SoftMax 作为 Decoder;2):为了弥补一下只有相对位置的损失,因此在decoder前加入一层绝对位置embedding;3):bert的训练策略中,mask有10%的情况是不做任何替换,而DeBeta将不做替换改成了换位该位置词绝对位置的pos embeding | Pengcheng He et al,2020

  • Making Pre-trained Language Models Better Few-shot Learners | 阅读笔记:文中提出的LM-BFF是一套简单的技术组合,用于仅在少量训练样本上对预训练的LM进行微调,其中包括:(1)基于Prompt的微调以及自动生成prompt的新方法;(2)一种动态的、有选择的在上下文中引入demonstration的方法。这里稍微介绍一下背景概念,Prompt方法主要分两种不同的研究方向:(1)基于prompt的fine-tuning(被认为是更适合小LM的few-shot learner);(2)而对于大模型,fine-tuning比较困难,因此是希望固定他们的参数,通过不同的prompt将它们应用在不同的任务上。对于第二个研究方向,prompt分为Discrete Prompts和Soft Prompts,可以简单的认为discrete是选随机token,而soft则是直接用随机向量替换Embedding。然后还有除了Prompt之外,还有demonstration(in-context learning, 一种新的meta-learning方式),prompt和demonstration都是GPT-3很成功的设计,demonstration是多sample+input text作为模型输入,其中也有很多优化的方法 | Tianyu Gao et al,2020

  • LogME: Practical Assessment of Pre-trained Models for Transfer Learning | 阅读笔记:一种通用且快速的评估选择适合下游任务的预训练模型的打分方法,logME | Kaichao You et al,2021

  • Are Pre-trained Convolutions Better than Pre-trained Transformers? | 阅读笔记:将Transformer的Attention换成了卷积,尝试预训练模型新方式 | Yi Tay et al,2021

  • Rethinking the Role of Demonstrations: What Makes In-Context Learning Work? | 阅读笔记:本文主要探讨分析Prompt范式下,预训练语言模型是如何学习并work的。主要的结论是在in-context learning 学习中,学习并不是输入与标注之间的关联,而是通过展示数据形式,来激活与训练模型的能力。此外附带两个结论:在meta learning环境下,in-context leanring的这个特点更为明显;因为标签不重要,所以可以用无标注领域内数据做in-context zero shot learning | Sewon Min et al,2022

Model | 模型

Dialogue | 对话系统

Speech | 语音系统

Clustering | 聚类

  • Accelerating exact k-means algorithms with geometric reasoning | 阅读笔记:K-Means引入计算机中的那片论文,K-Means属于Partition-based methods,思想是初始化中心点,然后通过启发式算法,达到”类内的点都足够近,类间的点都足够远“的目标 | et al Dan Pelleg,1999

  • Mean Shift: A Robust Approach toward Feature Space Analysis | 阅读笔记:实现的方法是滑动窗口的算法,在每次迭代中,通过将中心点移动到窗口内所有点的平均值位置(因此得名),将滑动窗口中心移向密度较高的区域。滑动窗口内的密度与其内部的点数成正比。通过转换到窗口内点的平均值位置,窗口将逐渐移动到有着更高点密度的区域。优点:Mean-Shift的最大优势就是可以自动发现簇的数量而不需要人工选择;簇的中心向最大密度点聚合的事实也是非常令人满意的,因为它可被非常直观地理解并很自然地契合数据驱动;可以处理任意形状的簇类;算法只需设置半径这一个参数,半径影响数据集的核密度估计;算法结果稳定,不需要进行类似K均值的样本初始化;缺点:不足就是窗口大小/半径“r”的选择可能是非平凡的;半径设置的太小,收敛太慢,簇类个数过多;半径设置的太大,一些簇类可能会丢失。对于较大的特征空间,计算量非常大 | Dorin Comaniciu et al,2002

  • k-means++: The Advantages of Careful Seeding | 阅读笔记:原始K-Means(随机选择簇中心)对于初始化簇中心敏感,因此k-means++进行了改进,随机选择第一个初始中心点,计算其他点与该中心点的距离,按照距离远的以较大的概率被选中来选择第二个初始中心点,一次类推 | et al David Arthur,2006

  • Clustering by Passing Messages Between Data Points | 阅读笔记:其基本思想是将全部样本看作网络的节点,然后通过网络中各条边的消息传递计算出各样本的聚类中心。聚类过程中,共有两种消息在各节点间传递,分别是responsibility和availability 。AP算法通过迭代过程不断更新每一个点的吸引度和归属度值,直到产生m个高质量的Exemplar。优点是无需指定聚类“数量”参数;聚类中心点由实际的样本点中产生;初始值不敏感,且对距离矩阵的对称性没要求。AP通过输入相似度矩阵来启动算法,因此允许数据呈非对称,数据适用范围非常大,鲁棒性很好;误差低;缺点是AP聚类应用中需要手动指定Preference和Damping factor,这其实是原有的聚类“数量”控制的变体,且算法复杂度较高 | Brendan J. Frey et al,2007

  • A Tutorial on Spectral Clustering | 阅读笔记:不是原论文,但是这一篇对Spectral Clustering讲的非常好,谱聚类(Spectral Clustering),就是先用Laplacian eigenmaps对数据降维(简单地说,就是先将数据转换成邻接矩阵或相似性矩阵,再转换成Laplacian矩阵,再对Laplacian矩阵进行特征分解,把最小的K个特征向量排列在一起),然后再使用k-means完成聚类。谱聚类是个很好的方法,效果通常比k-means好,计算复杂度还低,这都要归功于降维的作用。优点:谱聚类只需要数据之间的相似度矩阵,因此对于处理稀疏数据的聚类很有效。这点传统聚类算法比如K-Means很难做到;由于使用了降维,因此在处理高维数据聚类时的复杂度比传统聚类算法好。缺点:如果最终聚类的维度非常高,则由于降维的幅度不够,谱聚类的运行速度和最后的聚类效果均不好;聚类效果依赖于相似矩阵,不同的相似矩阵得到的最终聚类效果可能很不同 | Ulrike von Luxburg et al,2007

  • Scalable K-Means++ | 阅读笔记:K-Means++由于它的采样策略,所以难以并行,限制了其用于大规模数据集上。为了解决这个问题,k-means II 改变取样策略(以oversampling的方式),初始化一个中心点,然后循环log(n)次,每次按照一个概率计算公式选择多个point加入到中心集,最后得到的候选中心集再通过k-means++对候选中心集进行聚类,选出k个簇中心 | Bahman Bahmani et al,2012

  • Approximate K-Means++ in Sublinear Time | 阅读笔记:K-MC2区别于k-means II的采样方法,使用MCMC采样,其主要思想是将K-Means++中的采样方法替换为基于MCMC(马尔科夫链蒙特卡洛)采样方法(MCMC的介绍可以参考:MCMC随机采样)。用MCMC的方法采样出长为M的数列,取最后(K-1)个数作为中心点初始化,target distribution是距离的函数,满足距离越远,概率越大(表达的含义同k-means++),proposal distribution是一个常函数,1/样本数。 | Olivier Bachem et al,2016

  • Fast and Provably Good Seedings for k-Means | 阅读笔记:AFK-MC2基于K-MC2改进,由于K-MC2的proposal distribution是常函数,不够鲁棒,因此AFK-MC2将与距离有关的分布作为一个term加入原始的分布中,优化proposal distribution | Olivier Bachem et al,2016

  • Robust and Rapid Clustering of KPIs for Large-Scale Anomaly Detection | 阅读笔记:关于快速时序聚类的文章,提出ROCKA系统架构,包括了数据预处理、基线提取、相似性度量、基于密度的聚类算法。ROCKA算法仅仅是使用了派发策略,单是并未在有效的利用过程中的计算结果,导致在派发过程中复杂度较高 | Zhihan Li et al,2018

Text Similarity | 文本相似度/匹配/分类

  • Siamese Recurrent Architectures for Learning Sentence Similarity:Siamese LSTM,一个用来计算句对相似度的模型 | Jonas Mueller et al,2016

  • Learning Text Similarity with Siamese Recurrent Networks:网络包含4层BiLSTM(64-d hidden),最后一层的BiLSTM的hidden state和cell state进行concat,然后在timestep维度进行average处理,并接一个Dense层(激活函数为tanh),得到的两个Embedding Space进行Cosine sim计算,得到的相似度分数E用于损失函数计算,损失函数使用对比损失函数,计算方法为,损失函数正例:1/4(1-E)^2,负例:E^2(如果E<m),否则0 | Paul Neculoiu et al,2016

  • Bag of Tricks for Efficient Text Classification | 阅读笔记:比较经典的FastText,比较依赖Word Embedding的质量(槽点本身难点就在于embedding,结果文章不谈这个),整个网络结构使用N-gram,对得到的Embedding求和,并过两个Dense然后输出,本身网络结构就那没啥,当然fast啦,外加论文具体加了hashing trick,hierarchical softmax等进行加速、内存优化 | Armand Joulin et al,2016

  • Graph Convolutional Networks for Text Classification:将GCN应用于文本分类中,在不引入预训练模型的情况下,该方法的表现已经很优异了。该方法将每个独立的单词以及文档作为节点,即graph中包含单词级别和文档级别两类节点。初始化单词one-hot(不使用训练向量)。对于边,则包含(文档-单词)、(单词-单词)两类边,其中(文档-单词)使用tf-idf进行度量,(单词-单词)使用PMI指数。本文的模型结构的缺点在于,只考虑到共现度方面的信息,因此语义方面很低(作者原意就是不使用预训练embedding),而且可能会受到长尾问题的影响,因此可以使用注意力来辅助提升 | Liang Yao et al, 2018

  • Poly-encoders: Transformer Architectures and Pre-training Strategies for Fast and Accurate Multi-sentence Scoring | 阅读笔记:Poly-encoder主要的出发点就是想要保持Bi-encoder的推理速度的同时,兼顾Cross-encoder精准匹配的潜力。思想上比较好理解,Bi-encoder的主要问题在于它要求encoder将query的所有信息都塞进一个固定的比较general的向量中,而Cross-encoder为了得到更加均衡的语义表示,需要将句子对关联起来进行推理计算,导致在检索时速度极慢。因此Poly-encoder的方案就是每个query产生m个不同的vec,利用这m个vec动态的和candidate vec计算,得到最终的final_vec(作为query的最终表示),用final_vec和candidate vec进行计算得到分数 | Samuel Humeau et al,2019

  • Simple and Effective Text Matching with Richer Alignment Features | 阅读笔记:本文模型主打的是参数少,推理速度快(实际复现也确实很快,效果也不错)。模型的结果不复杂,采用对称结构,使用Encoder、Alignment、Fusion三个模块组成的block(模型是多block结构)进行Representation,其核心应该是对于网络中三个向量的使用,residual vectors, embedding vectors 和 encoded vectors。全文的模型结构不复杂,效果不错,值得一试的模型 | Runqi Yang et al,2019

  • Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks | 阅读笔记:和之前提出的InferSent结构如出一辙,妥妥的双塔结构,只是换成了Bert来进行特征表示。模型结构没有什么创新点,但是这个结构用起来效果挺好,速度也快,很适合工业界使用。论文中在针对句向量表示计算策略分别使用了CLS向量策略、平均池化策略、最大值池化策略三个策略进行实验,实验结果中平均池化策略最优 | Nils Reimers et al,2019

  • ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT | 阅读笔记:和前面的Poly-encoder出发点都是一样的,为了就是在获得BERT representation能力的同时,提高文本计算的效率。按照本文的说法,就是尽可能离线计算好Embedding,在通过Late Interaction的方式,弥补因为query和doc分离计算导致的效果损失。本文具体的模型结构是使用原生的BERT,对query和doc进行Embedding,不同之处是为了区分query和doc,分别在输入的seq的起始位置加上[Q]和[D]。Bert是编码器,CNN做维度变换,用来对BERT的隐层输出进行降维处理,Normalize是为后面计算余弦相似度做l2正则化处理,对于doc加个标点符号的mask | Omar Khattab et al,2020

  • SimCSE: Simple Contrastive Learning of Sentence Embeddings | 阅读笔记:基于Sentence-Bert,引入对比学习的思想,在无监督与有监督语义相似度计算任务达到SOTA。主要围绕对比学习质量指标Alignment和Uniformity来进行优化,对于Unsupervised,核心是使用dropout mask生成正样本,负样本是in-batch negatives。而Supervised则是NLI中entailment关系样例对。负例:a) in-batch negatives b)NLI中关系为contradiction的样例对 | Tianyu Gao et al,2021

  • Noisy Channel Language Model Prompting for Few-Shot Text Classification:本篇论文以实验探索为主,含有大量的实验对比,主要出发点就是在few-shot问题中,探讨控制训练参数对于direct model和channel model效果的影响,最终的论文的结论是Noisy Channel model明显优于direct model。论文中的direct model主要是指一般的P(c|x),其中x是输入,c是label,而direct++ model则是基于direct,强化文本间的差异,引入空文本,即P(c|x)/P(c|null),而channel model则是指使用贝叶斯公式重新参数化direct,P(c|x)=P(x|c)P(c)/P(x),其中P(c)就是label数分之一,即P(1/C),而P(x)独立于c,所以最终只需要计算P(x|c)。那么最后用形象一点的例子来解释direct和channel的差异就是,direct=x->c,channel=c->x。论文中对参数的控制采用了all finetuning、head tuning、transformation tuning和Prompt tuning(这里可以认为是soft prompt,即只需在输入序列中放入一些随机向量,与词汇表中的特定word embedding无关,并进行调整,同时固定预训练模型的其他部分)。在direct和channel的方法间,channel明显优于direct。在direct model的参数控制实验中,head tuning是最优的,但是当channel model配合soft prompt时,效果是最好的 | Sewon Min et al,2021

Nearest Neighbor | 向量检索

Deep Learning | 深度学习

Machine Learning | 机器学习

  • Parameter Server for Distributed Machine Learning | 阅读笔记:论文里说本篇所介绍的Parameter Server属于第三代PS,提供了更加通用的设计,架构上包括一个Server Group和若干个Worker Group,提供了如下几个特点:Efficient Communication、Elastic Scalability、Fault Tolerance and Durability、Ease of Use | Mu Li et al,2013

  • Scaling Distributed Machine Learning with the Parameter Server | 阅读笔记:在PS中,每个 server 实际上都只负责分到的部分参数(servers共同维持一个全局的共享参数),而每个 work 也只分到部分数据和处理任务。较它之前一篇PS进行了更加细节的描述,并对一些细节进行了扩展,两篇结合起来看受益颇多 | Mu Li et al,2014

  • Optimal Whitening and Decorrelation:提供五种白化方法的数学证明 | Agnan Kessy et al,2015

  • Gaussian Error Linear Units (GELUS) | 阅读笔记:GELU的目标就是希望在激活(拥有非线性拟合的能力)中加入正则化的思想。ReLU会确定性的将输入乘上一个0或者1,Dropout则是随机乘上0。而GELU也是通过将输入乘上0或1来实现这个功能,但是输入是乘以0还是1,是在同时取决于输入自身分布的情况下随机选择的。换句话说,是0还是1取决于当前的输入有多大的概率大于其余的输入。而由于神经元的输入x往往遵循正态分布(尤其是深度网络中普遍存在Normalization),所以GELU就可以被定义为“标准正态分布的累积分布函数”,利用erf就可以得到公式:x/2*(1+erf(x/sqrt(2))) | Dan Hendrycks et al,2016

  • An overview of gradient descent optimization algorithms | 阅读笔记:对当前主流的梯度下降算法进行概述 | Sebastian Ruder et al,2016

  • Sigmoid-Weighted Linear Units for Neural Network Function Approximation in Reinforcement Learning:提出SILU激活函数,其实从某种角度讲就是GELU激活的一种近似,x*sigmoid(x) | Stefan Elfwing et al,2017

  • SWISH: A SELF-GATED ACTIVATION FUNCTION:提出的Swish激活函数,通SILU激活函数一样,没啥差别,x*sigmoid(x) | Prajit Ramachandran et al,2017

  • Covariate Shift: A Review and Analysis on Classifiers | 阅读笔记:通过几种分类算法,在四种不同的数据集下验证几种方法处理Covariate Shift问题后的性能分析 | Geeta et al,2019

  • Monte Carlo Gradient Estimation in Machine Learning | 阅读笔记:本文是一篇关于Monte Carlo gradient estimation的survey,本文主要总结的内容是:随机梯度估计方法的相关背景知识,包括蒙特卡洛采样和随机优化;几种经典应用,包括变分推断、强化学习中的Policy gradient、敏感性分析、实验设计;两类经典的梯度估计算法 | Shakir Mohamed et al,2019

Dataset | 数据集

Evaluate | 评估