BestLemoon / nlp_paper_study

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

【关于 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矩阵和输出作为监督信息
  • 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,对所有文档进行预编码并缓存其编码;
  • 【关于 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 】那些你不知道的事

实战篇

重点推荐篇
推荐篇

视频学习篇

Elastrsearch 学习篇

推荐系统 学习篇

竞赛篇

  • 项目目标
    • 实现一个 基于 百度百科 的 ES 全文检索平台
  • 项目流程
    • step 1: 编写 网络爬虫 爬取 百度百科 数据;
    • step 2: 爬取数据之后,需要进行预处理操作,清洗掉 文本中噪声数据;
    • step 3: 将输入 导入 ES ;
    • step 4: 利用 python 编写 后台,并 对 ES 进行查询,返回接口数据;
    • step 5: ES 数据前端展示;
    • step 6: 百度百科 知识图谱构建
    • step 7:百度百科 知识图谱检索与展示
  • 数据介绍:
    • 本项目通过编写爬虫爬取 百度百科 数据,总共爬取 名称、链接、简介、中文名、外文名、国籍、出生地、出生日期、职业、类型、中文名称、代表作品、民族、主要成就、别名、毕业院校、导演、制片地区、主演、编剧、上映时间 等400多个 指标,共爬取数据 98000 条。
  • 数据预处理模块

爬取的数据根据名称可以分为 人物、地点、书籍、作品、综艺节目等。

类别 指标量 数量 筛选方式
人物 109 27319 国籍、职业、出生日期、出生地有一个不为空
地点 124 9361 地理位置、所属地区有一个不为空
书籍 45 3336 作者 不为空
作品 45 8850 主演为空,中文名称不为空
综艺节目 108 5600 主演、导演都不为空
  • 1、wordCount

  • 2、RDDStudy

    • 内容:RDD编程,熟悉算子,读写文件
    • 第3章 Spark编程基础
      • 3.1 Spark入门:RDD编程
      • 3.2 Spark入门:键值对RDD
      • 3.3 Spark入门:共享变量(提升-分布式必备)
      • 3.4 数据读写
        • 3.4.1 Spark入门:文件数据读写
  • 3、sparkSQLStudy

    • 内容:DataFrame,SparkSQL
    • 第4章
      • 4.1 Spark SQL简介
      • 4.2 DataFrame与RDD的区别
      • 4.3 DataFrame的创建
      • 4.4 从RDD转换得到DataFrame
  • 4、Parquet_JDBC_IO_Study

  • 5、MLlibStudy

    • 内容:MLlib流设计,特征工程
    • 第6章 Spark MLlib
      • 6.1 Spark MLlib简介
      • 6.2 机器学习工作流
        • 6.2.1 机器学习工作流(ML Pipelines)
        • 6.2.2 构建一个机器学习工作流
      • 6.3 特征抽取、转化和选择
        • 6.3.1 特征抽取:TF-IDF
        • 6.3.4 特征变换:标签和索引的转化
        • 6.3.5 特征选取:卡方选择器

About

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


Languages

Language:C++ 45.3%Language:Python 31.8%Language:Jupyter Notebook 22.4%Language:CMake 0.2%Language:Shell 0.2%Language:C 0.1%