Skip to content

研读顶会论文,复现论文相关代码

Notifications You must be signed in to change notification settings

niyeming/nlp_paper_study

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

【关于 NLP】 那些你不知道的事

作者:杨夕

项目地址:https://github.com/km1994/nlp_paper_study

个人介绍:大佬们好,我叫杨夕,该项目主要是本人在研读顶会论文和复现经典论文过程中,所见、所思、所想、所闻,可能存在一些理解错误,希望大佬们多多指正。

目录

介绍

会议收集篇

NLP 学习篇

经典会议论文研读篇
  • ACL2020
    • 【关于 CHECKLIST】 那些你不知道的事
      • 阅读理由:ACL2020 best paper ,利用 软件工程 的 思想 思考 深度学习
      • 动机:针对 train-val-test 分割方法 评估 模型性能容易出现 不全面、偏向性、可解性差问题;
      • 方法:提出了一种模型无关和任务无关的测试方法checklist,它使用三种不同的测试类型来测试模型的独立性。
      • 效果:checklist揭示了大型软件公司开发的商业系统中的关键缺陷,表明它是对当前实践的补充好吧。测试使用 checklist 创建的模型可以应用于任何模型,这样就可以很容易地将其纳入当前的基准测试或评估中管道。

理论学习篇

经典论文研读篇
transformer 学习篇
预训练模型篇
  • Bert_study:Bert论文研读
  • 【关于 Bert 模型压缩】 那些你不知道的事
    • 【关于 Bert 模型压缩】 那些你不知道的事
      • 阅读理由:Bert 在工程上问题上的改进
      • 动机:
        • 内存占用;
        • 功耗过高;
        • 带来很高的延迟;
        • 限制了 Bert 系列模型在移动和物联网等嵌入式设备上的部署;
      • 介绍:BERT 瘦身来提升速度
      • 模型压缩思路:
        • 低秩因式分解:在输入层和输出层使用嵌入大小远小于原生Bert的嵌入大小,再使用简单的映射矩阵使得输入层的输出或者最后一层隐藏层的输出可以通过映射矩阵输入到第一层的隐藏层或者输出层;
        • 跨层参数共享:隐藏层中的每一层都使用相同的参数,用多种方式共享参数,例如只共享每层的前馈网络参数或者只共享每层的注意力子层参数。默认情况是共享每层的所有参数;
        • 剪枝:剪掉多余的连接、多余的注意力头、甚至LayerDrop[1]直接砍掉一半Transformer层
        • 量化:把FP32改成FP16或者INT8;
        • 蒸馏:用一个学生模型来学习大模型的知识,不仅要学logits,还要学attention score;
      • 优点:BERT 瘦身来提升速度
      • 缺点:
        • 精度的下降
        • 低秩因式分解 and 跨层参数共享 计算量并没有下降;
        • 剪枝会直接降低模型的拟合能力;
        • 量化虽然有提升但也有瓶颈;
        • 蒸馏的不确定性最大,很难预知你的BERT教出来怎样的学生;
    • 【关于 AlBert 】 那些你不知道的事
      • 模型压缩方法:低秩因式分解 + 跨层参数共享
      • 模型压缩方法介绍:
        • 低秩因式分解:
          • 动机:Bert的参数量大部分集中于模型的隐藏层架构上,在嵌入层中只有30,000词块,其所占据的参数量只占据整个模型参数量的小部分;
          • 方法:将输入层和输出层的权重矩阵分解为两个更小的参数矩阵;
          • 思路:在输入层和输出层使用嵌入大小远小于原生Bert的嵌入大小,再使用简单的映射矩阵使得输入层的输出或者最后一层隐藏层的输出可以通过映射矩阵输入到第一层的隐藏层或者输出层;
          • 优点:在不显著增加词嵌入大小的情况下能够更容易增加隐藏层大小;
        • 参数共享【跨层参数共享】:
          • 动机:隐藏层 参数 大小 一致;
          • 方法:隐藏层中的每一层都使用相同的参数,用多种方式共享参数,例如只共享每层的前馈网络参数或者只共享每层的注意力子层参数。默认情况是共享每层的所有参数;
          • 优点:防止参数随着网络深度的增加而增大;
      • 其他改进策略:
        • 句子顺序预测损失(SOP)代替Bert中的下一句预测损失(NSP)
          • 动机:通过实验证明,Bert中的下一句预测损失(NSP) 作用不大;
          • 介绍:用预测两个句子是否连续出现在原文中替换为两个连续的句子是正序或是逆序,用于进一步提高下游任务的表现
      • 优点:参数量上有所降低;
      • 缺点:其加速指标仅展示了训练过程,由于ALBERT的隐藏层架构采用跨层参数共享策略并未减少训练过程的计算量,加速效果更多来源于低维的嵌入层;
    • 【关于 FastBERT】 那些你不知道的事
      • 模型压缩方法:知识蒸馏
      • 模型压缩方法介绍:
        • 样本自适应机制(Sample-wise adaptive mechanism)
          • 思路:
            • 在每层Transformer后都去预测样本标签,如果某样本预测结果的置信度很高,就不用继续计算了,就是自适应调整每个样本的计算量,容易的样本通过一两层就可以预测出来,较难的样本则需要走完全程。
          • 操作:
            • 给每层后面接一个分类器,毕竟分类器比Transformer需要的成本小多了
        • 自蒸馏(Self-distillation)
          • 思路:
            • 在预训练和精调阶段都只更新主干参数;
            • 精调完后freeze主干参数,用分支分类器(图中的student)蒸馏主干分类器(图中的teacher)的概率分布
          • 优点:
            • 非蒸馏的结果没有蒸馏要好
            • 不再依赖于标注数据。蒸馏的效果可以通过源源不断的无标签数据来提升
    • 【关于 distilbert】 那些你不知道的事
    • 【关于 TinyBert】 那些你不知道的事
      • 模型压缩方法:知识蒸馏
      • tinybert的创新点:学习了teacher Bert中更多的层数的特征表示;
      • 模型压缩方法介绍:
        • 基于transformer的知识蒸馏模型压缩
          • 学习了teacher Bert中更多的层数的特征表示;
          • 特征表示:
            • 词向量层的输出;
            • Transformer layer的输出以及注意力矩阵;
            • 预测层输出(仅在微调阶段使用);
        • bert知识蒸馏的过程
          • 左图:整体概括了知识蒸馏的过程
            • 左边:Teacher BERT;
            • 右边:Student TinyBERT
            • 目标:将Teacher BERT学习到的知识迁移到TinyBERT中
          • 右图:描述了知识迁移的细节;
            • 在训练过程中选用Teacher BERT中每一层transformer layer的attention矩阵和输出作为监督信息
  • 【关于 Perturbed Masking】那些你不知道的事
    • 论文:Perturbed Masking: Parameter-free Probing for Analyzing and Interpreting BERT
    • 论文链接:https://arxiv.org/pdf/2004.14786.pdf
    • 代码链接:https://github.com/bojone/perturbed_masking
    • 动机: 通过引入少量的附加参数,probe learns 在监督方式中使用特征表示(例如,上下文嵌入)来 解决特定的语言任务(例如,依赖解析)。这样的probe tasks 的有效性被视为预训练模型编码语言知识的证据。但是,这种评估语言模型的方法会因 probe 本身所学知识量的不确定性而受到破坏。
    • 方法介绍:
      • Perturbed Masking
        • 介绍:parameter-free probing technique
        • 目标:analyze and interpret pre-trained models,测量一个单词xj对预测另一个单词xi的影响,然后从该单词间信息中得出全局语言属性(例如,依赖树)。
    • 思想:整体思想很直接,句法结构,其实本质上描述的是词和词之间的某种关系,如果我们能从BERT当中拿到词和词之间相互“作用”的信息,就能利用一些算法解析出句法结构。
  • LCF: A Local Context Focus Mechanism for Aspect-Based Sentiment Classification
  • 【关于 语义相似度匹配任务中的 BERT】 那些你不知道的事
    • 阅读理由:BERT 在 语义相似度匹配任务 中的应用,可以由很多种方式,然而,你真的了解这些方式的区别和优缺点么?
    • 动机:BERT 在 语义相似度匹配任务 中的应用,可以常用 Sentence Pair Classification Task:使用 [CLS]、cosine similairity、sentence/word embedding、siamese network 方法,那么哪种是最佳的方式呢?你是否考虑过呢?
  • 【关于 MPCNN】 那些你不知道的事
    • 论文:Multi-Perspective Sentence Similarity Modeling with Convolution Neural Networks
  • 【关于 RE2】 那些你不知道的事
    • 论文:Simple and Effective Text Matching with Richer Alignment Features
    • 动机: 可以使用多个序列间比对层构建更强大的模型。 代替基于单个对准过程的比较结果进行预测,具有多个对准层的堆叠模型将保持其中间状态并逐渐完善其预测。但是,由于底层特征的传播效率低下和梯度消失,这些更深的体系结构更难训练。
    • 介绍:一种快速强大的神经体系结构,具有用于通用文本匹配的多个对齐过程。 我们对以前文献中介绍的文本匹配方法中许多慢速组件的必要性提出了质疑,包括复杂的多向对齐机制,对齐结果的大量提炼,外部句法特征或当模型深入时用于连接堆叠块的密集连接。 这些设计选择会极大地减慢模型的速度,并且可以用重量更轻且效果相同的模型代替。 同时,我们重点介绍了有效文本匹配模型的三个关键组成部分。 这些组件(名称为RE2代表)是以前的对齐特征(残差矢量),原始点向特征(嵌入矢量)和上下文特征(编码矢量)。 其余组件可能尽可能简单,以保持模型快速,同时仍能产生出色的性能。
  • 【关于 DSSM】 那些你不知道的事
    • 论文:Deep Structured Semantic Model
    • 论文会议:CIKM2013
    • 问题:语义相似度问题
      • 字面匹配体现
        • 召回:在召回时,传统的文本相似性如 BM25,无法有效发现语义类 Query-Doc 结果对,如"从北京到上海的机票"与"携程网"的相似性、"快递软件"与"菜鸟裹裹"的相似性
        • 排序:在排序时,一些细微的语言变化往往带来巨大的语义变化,如"小宝宝生病怎么办"和"狗宝宝生病怎么办"、"深度学习"和"学习深度";
      • 使用 LSA 类模型进行语义匹配,但是效果不好
    • 思路:
      • 利用 表示层 将 Query 和 Title 表达为低维语义向量;
      • 通过 cosine 距离来计算两个语义向量的距离,最终训练出语义相似度模型。
    • 优点
      • 减少切词的依赖:解决了LSA、LDA、Autoencoder等方法存在的一个最大的问题,因为在英文单词中,词的数量可能是没有限制,但是字母 n-gram 的数量通常是有限的
      • 基于词的特征表示比较难处理新词,字母的 n-gram可以有效表示,鲁棒性较强;
      • 传统的输入层是用 Embedding 的方式(如 Word2Vec 的词向量)或者主题模型的方式(如 LDA 的主题向量)来直接做词的映射,再把各个词的向量累加或者拼接起来,由于 Word2Vec 和 LDA 都是无监督的训练,这样会给整个模型引入误差,DSSM 采用统一的有监督训练,不需要在中间过程做无监督模型的映射,因此精准度会比较高;
      • 省去了人工的特征工程;
    • 缺点
      • word hashing可能造成冲突
      • DSSM采用了词袋模型,损失了上下文信息
      • 在排序中,搜索引擎的排序由多种因素决定,由于用户点击时doc的排名越靠前,点击的概率就越大,如果仅仅用点击来判断是否为正负样本,噪声比较大,难以收敛
  • 【关于 ABCNN 】那些你不知道的事
    • 论文:ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs
    • 会议:TACL 2016
    • 论文方法:采用了CNN的结构来提取特征,并用attention机制进行进一步的特征处理,作者一共提出了三种attention的建模方法
  • 【关于 ESIM 】那些你不知道的事
    • 论文:Enhanced LSTM for Natural Language Inference
    • 会议:TACL2017
    • 自然语言推理(NLI: natural language inference)问题:
      • 即判断能否从一个前提p中推导出假设h
      • 简单来说,就是判断给定两个句子的三种关系:蕴含、矛盾或无关
    • 论文方法:
      • 模型结构图分为左右两边:
      • 左侧就是 ESIM,
      • 右侧是基于句法树的 tree-LSTM,两者合在一起交 HIM (Hybrid Inference Model)。
      • 整个模型从下往上看,分为三部分:
        • input encoding;
        • local inference modeling;
        • inference composition;
        • Prediction
  • 【关于 BiMPM 】那些你不知道的事
    • 论文:Bilateral multi-perspective matching for natural language sentences
    • 会议:IJCAI2017
    • 方法:
      • Word Representation Layer:其中词表示层使用预训练的Glove或Word2Vec词向量表示, 论文中还将每个单词中的字符喂给一个LSTM得到字符级别的字嵌入表示, 文中使用两者构造了一个dd维的词向量表示, 于是两个句子可以分别表示为 P:[p1,⋯,pm],Q:[q1,⋯,qn].
      • Context Representation Layer: 上下文表示层, 使用相同的双向LSTM来对两个句子进行编码. 分别得到两个句子每个时间步的输出.
      • Matching layer: 对两个句子PP和QQ从两个方向进行匹配, 其中⊗⊗表示某个句子的某个时间步的输出对另一个句子所有时间步的输出进行匹配的结果. 最终匹配的结果还是代表两个句子的匹配向量序列.
      • Aggregation Layer: 使用另一个双向LSTM模型, 将两个匹配向量序列两个方向的最后一个时间步的表示(共4个)进行拼接, 得到两个句子的聚合表示.
  • Prediction Layer: 对拼接后的表示, 使用全连接层, 再进行softmax得到最终每个标签的概率.
  • 【关于 DIIN 】那些你不知道的事
    • 论文:Densely Interactive Inference Network
    • 会议:TACL2017
    • 模型主要包括五层:嵌入层(Embedding Layer)、编码层(Encoding Layer)、交互层(Interaction Layer )、特征提取层(Feature Extraction Layer)和输出层(Output Layer)
  • 【关于 DC-BERT】 那些你不知道的事
    • 论文名称:DC-BERT : DECOUPLING QUESTION AND DOCUMENT FOR EFFICIENT CONTEXTUAL ENCODING
    • 阅读理由:Bert 在 QA 上面的应用
    • 动机:Bert 无法处理传入问题的高吞吐量,每个问题都有大量检索到的文档;
    • 论文方法:具有双重BERT模型的解耦上下文编码框架:
      • 一个在线BERT,仅对问题进行一次编码;
      • 一个正式的BERT,对所有文档进行预编码并缓存其编码;
  • 【关于 tBERT 】那些你不知道的事
    • 论文:tBERT: Topic Models and BERT Joining Forces for Semantic Similarity Detection
    • 会议:ACL2020
    • 论文地址:https://www.aclweb.org/anthology/2020.acl-main.630/
    • 论文代码:https://github.com/wuningxi/tBERT
    • 动机:未存在将主题模型和BERT结合的方法。 语义相似度检测是自然语言的一项基本任务理解。添加主题信息对于以前的特征工程语义相似性模型和神经网络模型都是有用的其他任务。在那里目前还没有标准的方法将主题与预先训练的内容表示结合起来比如 BERT。
    • 方法:我们提出了一种新颖的基于主题的基于BERT的语义相似度检测体系结构,并证明了我们的模型在不同的英语语言数据集上的性能优于强神经基线。我们发现在BERT中添加主题特别有助于解决特定领域的情况。
  • 【关于 DeepType】 那些你不知道的事
    • 阅读理由:这篇论文属于 实体消歧 领域 比较经典的论文,而且调研了很多相关竞赛,很多 Top 大佬 都会用到它,所以想学习一下!【目前还没看完!!!】
  1. 【关于 Domain/Intent Classification 】那些你不知道的事
  2. 【关于 槽位填充 (Slot Filling)】那些你不知道的事
  3. 【关于 上下文LU】那些你不知道的事
  4. 【关于 自然语言生成NLG 】那些你不知道的事
  5. 【关于 DSTC 】那些你不知道的事
  6. 【关于 E2E 】那些你不知道的事
    1. 【关于 TC_Bot(End-to-End Task-Completion Neural Dialogue Systems) 】那些你不知道的事
  1. 【关于 rasa 安装 】那些你不知道的事
  2. 【关于 rasa 基本架构 】那些你不知道的事
  3. 【关于 rasa中文对话系统】那些你不知道的事
  4. 【关于 rasa中文对话系统构建】那些你不知道的事
  5. 【关于 rasa->NLU 】那些你不知道的事
  6. 【关于 rasa -> Core -> FormAction 】那些你不知道的事
  7. 【关于 rasa -> Core -> Stories 】那些你不知道的事
  8. 【关于 rasa -> Core -> Action 】那些你不知道的事
  • Unsupervised Data Augmentation (UDA)
    • 【关于 UDA】 那些你不知道的事
      • 阅读理由:UDA(Unsupervised Data Augmentation 无监督数据增强)是Google在2019年提出的半监督学习算法。该算法超越了所有现有的半监督学习方法,并实现了仅使用极少量标记样本即可达到使用大量标记样本训练集的精度。
      • 动机: 深度学习的模型训练通常依赖大量的标签数据,在只有少量数据上通常表现不好;
      • 思路:提出了一种基于无监督数据的数据增强方式UDA(Unsupervised Data Augmentation)。UDA方法生成无监督数据与原始无监督数据具备分布的一致性,而以前的方法通常只是应用高斯噪声和dropout噪声(无法保证一致性)。UDA方法利用了一种目前为止最优的方法生成更加“真实”的数据。
      • 优点:使用这种数据增强方法,在极少量数据集上,六种语言任务和三种视觉任务都得到了明显的提升。

实战篇

重点推荐篇
推荐篇

视频学习篇

Elastrsearch 学习篇

推荐系统 学习篇

竞赛篇

About

研读顶会论文,复现论文相关代码

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 46.2%
  • Python 29.7%
  • Jupyter Notebook 23.1%
  • Cython 0.5%
  • Shell 0.2%
  • CMake 0.2%
  • C 0.1%