Giter Club home page Giter Club logo

nlp-paper's Introduction

NLP-Paper

Blog Paper Support Stars Thanks PRs Welcome

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

注:

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

Contents | 内容

Summarize | 综述

Pretraining | 预训练

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

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 | 评估

nlp-paper's People

Contributors

dengbocong avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.