1.学术能力培养
全部论文资料下载:
-
将论文和 GitHub 资源库匹配
- papers with code https://paperswithcode.com/
- OpenGitHub 新项目快报
- Github pwc:https://github.com/zziz/pwc
- GitXiv:http://www.gitxiv.com/
-
文章撰写
-
Overleaf
-
[Authorea]
-
Code ocean
-
-
阅读和写论文评论: shortscience 和 openreview;Scirate.
- Shortscience:http://www.shortscience.org/;
- OpenReview:https://openreview.net/;
- Scirate:https://scirate.com/
-
论文和作者分析:Google scholar; Semantic scholar
- Google scholar:https://scholar.google.co.il/
- Semantic scholar:https://www.semanticscholar.org/
- Semantic Scholar: author profile page
NLP__32">2. NLP 学习篇
- [ GLM 】
- 论文名称:GLM: General Language Model Pretraining with Autoregressive Blank Infilling
- 论文地址:https://aclanthology.org/2022.acl-long.26.pdf
- github : https://github.com/THUDM/GLM
- 动机:预训练语言吗模型大体可以分为三种:自回归(GPT系列)、自编码(BERT系列)、编码-解码(T5、BART),它们每一个都在各自的领域上表现不俗,但是,目前没有一个预训练模型能够很好地完成所有任务。
- GLM的核心是:Autoregressive Blank Infilling
- GLM 对于文档和句子采用不同的空白填充方式:
- 文档:span的长度从原始长度的50%-100%的均匀分布中抽取。该目标旨在生成长文本;
- 句子:限制masked span必须是完整的句子。多个span(句子)被取样,以覆盖15%的的原始标记。这个目标是针对seq2seq任务,其预测往往是完整的句子或段落。
- GLM 模型架构
- 在 Transformer 的 架构上进行 修改:
- 调整layer normalization和residual connection的顺序;
- 使用单一线性层进行输出token预测;
- 将ReLU激活函数替换为GeLUs;
- 在 Transformer 的 架构上进行 修改:
2.1 transformer 篇
- 为什么要有 Transformer?
- Transformer 作用是什么?
- Transformer 整体结构怎么样?
- Transformer-encoder 结构怎么样?
- Transformer-decoder 结构怎么样?
- 传统 attention 是什么?
- self-attention 长怎么样?
- self-attention 如何解决长距离依赖问题?
- self-attention 如何并行化?
- multi-head attention 怎么解?
- 为什么要 加入 position embedding ?
- 为什么要 加入 残差模块?
- Layer normalization。Normalization 是什么?
- 什么是 Mask?
- Transformer 存在问题?
- Transformer 怎么 Coding?
2.2 transformer 改进篇
- transformer 长文本改进篇
- 论文:Longformer: The Long-Document Transformer
- 发表会议:naacl2021
- 论文地址:https://arxiv.org/abs/2004.05150
- github:https://github.com/allenai/longformer
- 动机:
- 基于传统Transformer的模型,因为 每一个token都要与其他所有token进行交互,其self-attention的点积计算量都是 O(n^2) ,(其中 n 为输入序列长度),因此对于长序列的处理存在内存瓶颈(self-attention的计算可以并行化,所以时间复杂度仍然是 O(n) )。这也是传统Transformer模型把输入长度限制在512个token以内的原因之一。
- 在面对超过长度限制的长文档时,往往需要进行切片、截断或者抽取重要片段等处理,这种做法 导致不同的text span之间无法进行交互,因而必然存在大量information loss,既繁琐又破坏了原始文本的完整性。
- 通过添加一些其他机制来加强这种text span之间的交互。但这种新增机制实现起来通常比较复杂,而且往往是task-specific的,通用性不强
- 论文方法
- 对于每一个token,只对固定窗口大小的附近token计算local attention,并结合具体任务,计算少量的global attention。该方法的优点包括:
- 复杂度低,将attention机制的复杂度降至 O(n)
- 通用性强,可用于各类文档级任务
- 部署容易,作者在cuda内核上直接实现了Longformer的attention pattern,并提供了开源代码。
- 对于每一个token,只对固定窗口大小的附近token计算local attention,并结合具体任务,计算少量的global attention。该方法的优点包括:
-
[【关于 Transformer-XL】
- 动机
- RNN:主要面临梯度消失或爆炸(gradient vanishing and explosion),解决方法集中在优化方法、初始化策略、辅助记忆单元的研究上。
- vanilla Transformer:最长建模长度是固定的,无法捕捉更长依赖关系;等长输入序列的获取通常没有遵循句子或语义边界(出于高效考虑,往往就是将文本按长度一段段截取,而没有采用padding机制),可能造成上下文碎片化(context fragmentation)。
- 方法
- 引入循环机制(Reccurrence,让上一segment的隐含状态可以传递到下一个segment):将循环(recurrence)概念引入了深度自注意力网络。不再从头计算每个新segment的隐藏状态,而是复用从之前segments中获得的隐藏状态。被复用的隐藏状态视为当前segment的memory,而当前的segment为segments之间建立了循环连接(recurrent connection)。因此,超长依赖性建模成为了可能,因为信息可以通过循环连接来传播。
- 提出一种新的相对位置编码方法,避免绝对位置编码在循环机制下的时序错乱:从之前的segment传递信息也可以解决上下文碎片化的问题。更重要的是,本文展示了使用相对位置而不是用绝对位置进行编码的必要性,这样做可以在不造成时间混乱(temporal confusion)的情况下,实现状态的复用。因此,作为额外的技术贡献,文本引入了简单但有效的相对位置编码公式,它可以泛化至比在训练过程中观察到的长度更长的注意力长度。
- 动机
-
[【关于 Linformer 】
- 论文标题:《Linformer: Self-Attention with Linear Complexity》
- 来源:ACL 2020
- 链接:https://arxiv.org/abs/2006.04768
- 参考:https://zhuanlan.zhihu.com/p/149890569
-
[【关于 Performer 】
- 阅读理由:Transformer 作者 Krzysztof Choromanski 针对 Transformer 问题的重新思考与改进
- 动机:Transformer 有着巨大的内存和算力需求,因为它构造了一个注意力矩阵,需求与输入呈平方关系;
- 思路:使用一个高效的(线性)广义注意力框架(generalized attention framework),允许基于不同相似性度量(核)的一类广泛的注意力机制。
- 优点:该方法在保持线性空间和时间复杂度的同时准确率也很有保证,也可以应用到独立的 softmax 运算。此外,该方法还可以和可逆层等其他技术进行互操作。
-
[ A Survey on Long Text Modeling with Transformers]
- 论文名称:A Survey on Long Text Modeling with Transformers
- 论文地址:https://arxiv.org/abs/2302.14502
2.2 transformer 变体综述篇
- 关于 Efficient Transformers: A Survey
- 一、摘要
- 二、Transformer 介绍
- 三、Efficient Transformers
- 3.1 Fixed patterns(FP)
- 3.1.1 Fixed patterns(FP) 介绍
- 3.1.2 Fixed patterns(FP) 类别
- 3.2 Combination of Patterns (CP)
- 3.2.1 Combination of Patterns (CP) 介绍
- 3.2.2 Combination of Patterns (CP) 类别
- 3.2.3 Fixed patterns(FP) vs 多Combination of Patterns (CP)
- 3.3 Learnable Patterns (LP)
- 3.3.1 Learnable Patterns (LP) 介绍
- 3.3.2 Learnable Patterns (LP) 类别
- 3.3.3 Learnable Patterns (LP) 优点
- 3.4 Memory
- 3.4.1 Memory 介绍
- 3.4.2 Memory 类别
- 3.5 Low-Rank 方法
- 3.5.1 Low-Rank 方法 介绍
- 3.5.2 Low-Rank 方法 类别
- 3.6 Kernels 方法
- 3.6.1 Kernels 方法 介绍
- 3.6.2 Kernels 方法 代表
- 3.7 Recurrence 方法
- 3.7.1 Recurrence 方法 介绍
- 3.7.2 Kernels 方法 代表
- 3.1 Fixed patterns(FP)
- 四、Transformer 变体 介绍
- 4.1 引言
- 4.2 Memory Compressed Transformer
- 4.3 Image Transformer
- 4.4 Set Transformer
- 4.5 Sparse Transformer
- 4.6 Axial Transformer
- 4.7 Longformer
- 4.8 Extended Transformer Construction (ETC)(2020)
- 4.9 BigBird(2020)
- 4.10 Routing Transformer
- 4.11 Reformer(2020)
- 4.12 Sinkhorn Transformers
- 4.13 Linformer
- 4.14 Linear Transformer
- 4.15 Performer(2020)
- 4.16 Synthesizer models(2020)
- 4.17 Transformer-XL(2020)
- 4.18 Compressive Transformers
2.4 Bert系列
-
阅读理由:NLP 的 创世之作
- 动机:word2vec 的多义词问题 && GPT 单向 Transformer && Elmo 双向LSTM
- 介绍:Transformer的双向编码器
- 思路:
- 预训练:Task 1:Masked LM && Task 2:Next Sentence Prediction
- 微调:直接利用 特定任务数据 微调
- 优点:NLP 所有任务上都刷了一遍 SOTA
- 缺点:
- [MASK]预训练和微调之间的不匹配
- Max Len 为 512
-
论文:SpanBERT: Improving Pre-training by Representing and Predicting Spans
- 论文地址:https://arxiv.org/abs/1907.10529
- github:https://github.com/facebookresearch/SpanBERT
- 动机:旨在更好地表示和预测文本的 span;
- 论文方法->扩展了BERT:
- (1)屏蔽连续的随机 span,而不是随机标记;
- (2)训练 span 边界表示来预测屏蔽 span 的整个内容,而不依赖其中的单个标记表示。- [【关于 XLNet 】
- 阅读理由:Bert 问题上的改进
- 动机:
- Bert 预训练和微调之间的不匹配
- Bert 的 Max Len 为 512
- 介绍:广义自回归预训练方法
- 思路:
- 预训练:
- Permutation Language Modeling【解决Bert 预训练和微调之间的不匹配】
- Two-Stream Self-Attention for Target-Aware Representations【解决PLM出现的目标预测歧义】
- XLNet将最先进的自回归模型Transformer-XL的思想整合到预训练中【解决 Bert 的 Max Len 为 512】
- 微调:直接利用 特定任务数据 微调
- 预训练:
- 优点:
- 缺点:
- [【关于 XLNet 】
-
[【关于 Bart】
- 论文:Bart: Denoising sequence-to-sequence pre-training for natural language generation, translation, and comprehension
- 来源:Facebook
- 论文地址:https://mp.weixin.qq.com/s/42rYlyjQsh4loFKRdhJlIg
- 开源代码:https://github.com/renatoviolin/Bart_T5-summarization
- 阅读理由:Bert 问题上的改进
- 动机:
- BERT:用掩码替换随机 token,双向编码文档。由于缺失 token 被单独预测,因此 BERT 较难用于生成任务;
- GPT:使用自回归方式预测 token,这意味着 GPT 可用于生成任务。但是,该模型仅基于左侧上下文预测单词,无法学习双向交互
- 介绍:用于预训练序列到序列模型的去噪自动编码器
- 思路:
- 预训练:
- (1) 使用任意噪声函数破坏文本;
- Token Masking(token 掩码):按照 BERT 模型,BART 采样随机 token,并用 [MASK]标记 替换它们;
- Sentence Permutation(句子排列变换):按句号将文档分割成多个句子,然后以随机顺序打乱这些句子;
- Document Rotation(文档旋转):随机均匀地选择 token,旋转文档使文档从该 token 开始。该任务的目的是训练模型识别文档开头;
- Token Deletion(token 删除):从输入中随机删除 token。与 token 掩码不同,模型必须确定缺失输入的位置;
- Text Infilling(文本填充):采样多个文本段,文本段长度取决于泊松分布 (λ = 3)。用单个掩码 token 替换每个文本段。长度为 0 的文本段对应掩码 token 的插入;
- (2) 学习模型以重建原始文本。
- Two-Stream Self-Attention for Target-Aware Representations【解决PLM出现的目标预测歧义】
- XLNet将最先进的自回归模型Transformer-XL的思想整合到预训练中【解决 Bert 的 Max Len 为 512】
- (1) 使用任意噪声函数破坏文本;
- 微调:
- Sequence Classification Task 序列分类任务: 将相同的输入,输入到encoder和decoder中,最后将decoder的最后一个隐藏节点作为输出,输入到分类层(全连接层)中,获取最终的分类的结果;
- Token Classification Task 序列分类任务: 将完整文档输入到编码器和解码器中,使用解码器最上方的隐藏状态作为每个单词的表征。该表征的用途是分类 token;
- Sequence Generation Task 序列生成任务: 编码器的输入是输入序列,解码器以自回归的方式生成输出;
- Machine Translation 机器翻译: 将BART的encoder端的embedding层替换成randomly initialized encoder,新的encoder也可以用不同的vocabulary。通过新加的Encoder,我们可以将新的语言映射到BART能解码到English(假设BART是在English的语料上进行的预训练)的空间. 具体的finetune过程分两阶段:
- 第一步只更新randomly initialized encoder + BART positional embedding + BART的encoder第一层的self-attention 输入映射矩阵。
- 第二步更新全部参数,但是只训练很少的几轮。
- 预训练:
- 优点:它使用标准的基于 Transformer 的神经机器翻译架构,尽管它很简单,但可以看作是对 BERT(由于双向编码器)、GPT(带有从左到右的解码器)和许多其他最近的预训练方案的泛化.
- 缺点:
- [【关于 RoBERTa】
- 阅读理由:Bert 问题上的改进
- 动机:
- 确定方法的哪些方面贡献最大可能是具有挑战性的
- 训练在计算上是昂贵的的,限制了可能完成的调整量
- 介绍:A Robustly Optimized BERT Pretraining Approach
- 思路:
- 预训练:
- 去掉下一句预测(NSP)任务
- 动态掩码
- 文本编码
- 微调:直接利用 特定任务数据 微调
- 预训练:
- 优点:
- 缺点:
-
[【关于 Perturbed Masking: Parameter-free Probing for Analyzing and Interpreting BERT】(https://github.com/km1994/nlp_paper_study_bert/tree/master/bert_study/ACL2020_UnsupervisedBert/)
- 论文链接: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当中拿到词和词之间相互“作用”的信息,就能利用一些算法解析出句法结构。
-
[【关于 GRAPH-BERT】(https://github.com/km1994/nlp_paper_study_bert/bert_study/T2020_GRAPH_BERT))
- 论文名称:GRAPH-BERT: Only Attention is Needed for Learning Graph Representations
- 论文地址:https://arxiv.org/abs/2001.05140
- 论文代码:https://github.com/jwzhanggy/Graph-Bert
- 动机
- 传统的GNN技术问题:
- 模型做深会存在suspended animation和over smoothing的问题。
- 由于 graph 中每个结点相互连接的性质,一般都是丢进去一个完整的graph给他训练而很难用batch去并行化。
- 传统的GNN技术问题:
- 方法:提出一种新的图神经网络模型GRAPH-BERT (Graph based BERT),该模型只依赖于注意力机制,不涉及任何的图卷积和聚合操作。Graph-Bert 将原始图采样为多个子图,并且只利用attention机制在子图上进行表征学习,而不考虑子图中的边信息。因此Graph-Bert可以解决上面提到的传统GNN具有的性能问题和效率问题。
-
[【关于自训练 + 预训练 = 更好的自然语言理解模型 】
- 论文标题:Self-training Improves Pre-training for Natural Language Understanding
- 论文地址:https://arxiv.org/abs/2010.02194
- 动机
- 问题一: do pre-training and self-training capture the same information, or are they complementary?
- 问题二: how can we obtain large amounts of unannotated data from specific domains?
- 方法
- 问题二解决方法:提出 SentAugment 方法 从 web 上获取有用数据;
- 问题一解决方法:使用标记的任务数据训练一个 teacher 模型,然后用它对检索到的未标注句子进行标注,并基于这个合成数据集训练最终的模型。
-
[【关于 Bart】(https://github.com/km1994/nlp_paper_study_bert/bert_study/BART)
- 论文:Bart: Denoising sequence-to-sequence pre-training for natural language generation, translation, and comprehension
- 来源:Facebook
- 论文地址:https://mp.weixin.qq.com/s/42rYlyjQsh4loFKRdhJlIg
- 开源代码:https://github.com/renatoviolin/Bart_T5-summarization
- 动机
- BERT:用掩码替换随机 token,双向编码文档。由于缺失 token 被单独预测,因此 BERT 较难用于生成任务;
- GPT:使用自回归方式预测 token,这意味着 GPT 可用于生成任务。但是,该模型仅基于左侧上下文预测单词,无法学习双向交互
- 预训练方法
- 通过破坏文档再优化重建损失:
- Token Masking(token 掩码):按照 BERT 模型,BART 采样随机 token,并用 [MASK]标记 替换它们;
- Sentence Permutation(句子排列变换):按句号将文档分割成多个句子,然后以随机顺序打乱这些句子;
- Document Rotation(文档旋转):随机均匀地选择 token,旋转文档使文档从该 token 开始。该任务的目的是训练模型识别文档开头;
- Token Deletion(token 删除):从输入中随机删除 token。与 token 掩码不同,模型必须确定缺失输入的位置;
- Text Infilling(文本填充):采样多个文本段,文本段长度取决于泊松分布 (λ = 3)。用单个掩码 token 替换每个文本段。长度为 0 的文本段对应掩码 token 的插入;
- 通过破坏文档再优化重建损失:
-
[【关于 MacBERT】
- 论文名称:Revisiting Pre-trained Models for Chinese Natural Language Processing
- 会议:EMNLP 2020
- 论文地址:https://arxiv.org/abs/2004.13922
- 论文源码地址:https://github.com/ymcui/MacBERT
- 动机:主要为了解决与训练阶段和微调阶段存在的差异性
- 方法:
- MLM
- 使用Whole Word Masking、N-gram Masking:single token、2-gram、3-gram、4-gram分别对应比例为0.4、0.3、0.2、0.1;
- 由于finetuning时从未见过[MASK]token,因此使用相似的word进行替换。使用工具Synonyms toolkit 获得相似的词。如果被选中的N-gram存在相似的词,则随机选择相似的词进行替换,否则随机选择任意词替换;
- 对于一个输入文本,15%的词进行masking。其中80%的使用相似的词进行替换,10%使用完全随机替换,10%保持不变。
- NSP
- 采用ALBERT提出的SOP替换NSP
- MLM
-
[【关于 SpanBERT 】
- 论文名称:SpanBERT: Improving Pre-training by Representing and Predicting Spans
- 会议:EMNLP 2020
- 论文地址:https://arxiv.org/abs/1907.10529
- 论文源码地址:https://github.com/facebookresearch/SpanBERT
- 动机:旨在更好地表示和预测文本的 span;
- 论文方法->扩展了BERT:
- (1)屏蔽连续的随机跨度,而不是随机标记;
- (2)训练跨度边界表示来预测屏蔽跨度的整个内容,而不依赖其中的单个标记表示。
- 实验结果:
- SpanBERT始终优于BERT和我们更好调整的基线,在跨选择任务(如问题回答和共指消解)上有实质性的收益。特别是在训练数据和模型大小与BERT-large相同的情况下,我们的单一模型在1.1班和2.0班分别获得94.6%和88.7%的F1。我们还实现了OntoNotes共指消解任务(79.6%F1)的最新发展,在TACRED关系抽取基准测试上表现出色,甚至在GLUE上也有所提高。
-
[【关于 Flan-T5 】
- 论文名称:Scaling Instruction-Finetuned Language Models
- 会议:
- 论文地址:https://arxiv.org/abs/2210.11416
- 论文源码地址:https://huggingface.co/google/flan-t5-xxl
- 动机:是否有这种方案:通过在超大规模的任务上进行微调,让语言模型具备了极强的泛化性能,做到单个模型就可以在1800多个NLP任务上都能有很好的表现呢?即 实现 One model for ALL tasks?
- Flan-T5 介绍:这里的Flan 指的是(Instruction finetuning ),即"基于指令的微调";T5是2019年Google发布的一个语言模型了。注意这里的语言模型可以进行任意的替换(需要有Decoder部分,所以不包括BERT这类纯Encoder语言模型),论文的核心贡献是提出一套多任务的微调方案(Flan),来极大提升语言模型的泛化性。
- Flan-T5 实现机制
- step 1: 任务收集:收集一系列监督的数据,这里一个任务可以被定义成<数据集,任务类型的形式>,比如“基于SQuAD数据集的问题生成任务”。需要注意的是这里有9个任务是需要进行推理的任务,即Chain-of-thought (CoT)任务。
- step 2: 形式改写:因为需要用单个语言模型来完成超过1800+种不同的任务,所以需要将任务都转换成相同的“输入格式”喂给模型训练,同时这些任务的输出也需要是统一的“输出格式”。
- 训练过程:采用恒定的学习率以及Adafactor优化器进行训练;同时会将多个训练样本“打包”成一个训练样本,这些训练样本直接会通过一个特殊的“结束token”进行分割。训练时候在每个指定的步数会在“保留任务”上进行模型评估,保存最佳的checkpoint。
- 总结:
- 微调很重要
- 模型越大效果越好
- 任务越多效果越好
- 混杂CoT相关的任务很重要
- 整合起来
-
[【关于 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) 作用不大;
- 介绍:用预测两个句子是否连续出现在原文中替换为两个连续的句子是正序或是逆序,用于进一步提高下游任务的表现
- 句子顺序预测损失(SOP)代替Bert中的下一句预测损失(NSP):
- 优点:参数量上有所降低;
- 缺点:其加速指标仅展示了训练过程,由于ALBERT的隐藏层架构采用跨层参数共享策略并未减少训练过程的计算量,加速效果更多来源于低维的嵌入层;
-
[【关于 TinyBert】
- 模型压缩方法:知识蒸馏
- tinybert的创新点:学习了teacher Bert中更多的层数的特征表示;
- 模型压缩方法介绍:
- 基于transformer的知识蒸馏模型压缩
- 学习了teacher Bert中更多的层数的特征表示;
- 特征表示:
- 词向量层的输出;
- Transformer layer的输出以及注意力矩阵;
- 预测层输出(仅在微调阶段使用);
- bert知识蒸馏的过程
- 左图:整体概括了知识蒸馏的过程
- 左边:Teacher BERT;
- 右边:Student TinyBERT
- 目标:将Teacher BERT学习到的知识迁移到TinyBERT中
- 右图:描述了知识迁移的细节;
- 在训练过程中选用Teacher BERT中每一层transformer layer的attention矩阵和输出作为监督信息
- 左图:整体概括了知识蒸馏的过程
- 基于transformer的知识蒸馏模型压缩
-
[【关于 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的影响,然后从该单词间信息中得出全局语言属性(例如,依赖树)。
- Perturbed Masking
- 思想:整体思想很直接,句法结构,其实本质上描述的是词和词之间的某种关系,如果我们能从BERT当中拿到词和词之间相互“作用”的信息,就能利用一些算法解析出句法结构。
-
[【关于中文预训练模型】
- 【关于ChineseBERT】那些你不知道的事
- 论文名称:ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information
- 会议: ACL2021
- 论文地址:https://arxiv.org/abs/2106.16038
- 论文源码地址:https://github.com/ShannonAI/ChineseBert
- 模型下载:https://huggingface.co/hfl/chinese-bert-wwm-ext/tree/main
- 动机:最近的中文预训练模型忽略了中文特有的两个重要方面:字形和拼音,它们为语言理解携带重要的句法和语义信息。
- 论文工作:提出了 ChineseBERT,它将汉字的 {\it glyph} 和 {\it pinyin} 信息合并到语言模型预训练中。
- embedding 层:将 字符嵌入(char embedding)、字形嵌入(glyph embedding)和拼音嵌入(pinyin embedding) 做拼接;
- Fusion Layer 层:将 拼接后的 embedding 向量 做 Fusion 得到 一个 d 维的 Fusion embedding;
- 位置拼接:将 Fusion embedding 和 位置嵌入(position embedding)、片段嵌入(segment embedding)相加;
- Transformer-Encoder层;
- 改进点:
- 在底层的融合层(Fusion Layer)融合了除字嵌入(Char Embedding)之外的字形嵌入(Glyph Embedding)和拼音嵌入(Pinyin Embedding),得到融合嵌入(Fusion Embedding),再与位置嵌入相加,就形成模型的输入;
- 抛弃预训练任务中的NSP任务。 由于预训练时没有使用NSP任务,因此模型结构图省略了片段嵌入(segment embedding)。实际上下游任务输入为多个段落时(例如:文本匹配、阅读理解等任务),是采用了segment embedding;
- 实验结果:在大规模未标记的中文语料库上进行预训练,提出的 ChineseBERT 模型在训练步骤较少的情况下显着提高了基线模型的性能。 porpsoed 模型在广泛的中文 NLP 任务上实现了新的 SOTA 性能,包括机器阅读理解、自然语言推理、文本分类、句子对匹配和命名实体识别中的竞争性能。
- 【关于ChineseBERT】那些你不知道的事
-
[【关于 Bert trick】
- [【关于 Bert 未登录词处理】
- 动机
- 中文预训练BERT 对于 英文单词覆盖不全问题。由于 中文预训练BERT 主要针对中文,所以词表中英文单词比较少,但是一般英文单词如果简单的直接使用tokenize函数,往往在一些序列预测问题上存在一些对齐问题,或者很多不存在的单词或符号没办法处理而直接使用 unk 替换了,某些英文单词或符号失去了单词的预训练效果;
- 专业领域(如医疗、金融)用词或中文偏僻词问题。NLP经常会用到预训练的语言模型,小到word2vector,大到bert。现在bert之类的基本都用char级别来训练,然而由于 Bert 等预训练模型都是采用开放域的语料进行预训练,所以对词汇覆盖的更多是日常用词,专业用词则覆盖不了,这时候该怎么处理?
- 方法
- 方法一:直接在 BERT 词表 vocab.txt 中替换 [unused]
- 方法二:通过重构词汇矩阵来增加新词
- 方法三:添加特殊占位符号 add_special_tokens
- 方法对比
- 方法一:
- 优点:如果存在大量领域内专业词汇,而且已经整理成词表,可以利用该方法批量添加;
- 缺点:因为 方法1 存在 未登录词数量限制(eg:cased模型只有99个空位,uncased模型有999个空位),所以当 未登录词 太多时,将不适用;
- 方法二:
- 优点:不存在 方法1 的 未登录词数量限制 问题;
- 方法三:
- 优点:对于一些 占位符(eg:),方法一和方法二可能都无法生效,因为 <, e, >和 均存在于 vocab.txt,但前三者的优先级高于 ,而 add_special_tokens会起效,却会使得词汇表大小增大,从而需另外调整模型size。但是,如果同时在词汇表vocab.txt中替换[unused],同时 add_special_tokens,则新增词会起效,同时词汇表大小不变。
- 方法一:
- 动机
- [【关于 Bert 未登录词处理】
3. Prompt篇
-
[【关于 OpenPrompt 】
- OpenPrompt: An Open-source Framework for Prompt-learning
- 论文链接:https://arxiv.org/abs/2111.01998
- 论文 github 地址:https://github.com/thunlp/OpenPrompt
- 动机:
- 目前还没有提出 Prompt-learning 的标准实施框架,大多数现有的 Prompt-learning 代码库,往往是不规范的,只为特定场景提供有限的实现;
- 由于在 Prompt-learning 中需要考虑许多细节,如模板策略、初始化策略和口语化策略等,从业者在快速调整所需的提示学习方法以适应其应用方面面临着障碍。
- OpenPrompt 特点
- OpenPrompt是一个便于研究的框架,它具有高效、模块化和可扩展性,其可组合性允许在一个统一的范式中自由组合不同的PLM、任务格式和提示模块;
- 用户可以方便地部署 Prompt-learning 框架,并评估它们在不同的NLP任务上的泛化性,不受限制
-
【关于 Prompts2QA
-
[【关于 基于反向提示的预训练模型可控文本生成】
- 论文名称:Controllable Generation from Pre-trained Language Models via Inverse Prompting
- 会议:KDD 2021 Research Track
- 论文链接:https://www.aminer.cn/pub/605869d391e011537aff4c3c
- 动机:大规模预训练语言模型在生成仿真文本时有强大的功能。但控制生成的结果使之符合给定的需求仍然有着巨大的困难。之前能够控制生成的方式寥寥无几,比如“给定前文”的方法,只能够控制生成文本中开头的一些文字的导向,而后面则会随着生成的长度渐渐增加而渐渐离题万里。
- 论文方法:提出了“反向提示”(Inverse Prompting)的方法,在搜索最佳生成结果的过程中以“能否还原给定的主题”为搜索准则,生成文本。
- 实验结果:生成的诗歌和问答在真人评分中均获得了很好的结果,取得了接近人类的水平。
-
[【关于 Response Generation with Context-Aware Prompt Learning】
- 论文名称:Response Generation with Context-Aware Prompt Learning
- 论文链接:https://arxiv.org/pdf/2111.02643.pdf
- 思路:该论文设计了一个新颖的动态prompt编码器来鼓励上下文感知的prompt learning,以更好地重利用大规模预训练语言模型中的知识并生成更有知识的回复。
- 首先将上文文本的embedding送入可学习的prompt编码器中获得感知上文的prompt编码表示,再同时利用prompt的编码表示和上文文本来预测下文。
-
[【关于 Planning with Learned Entity Prompts for Abstractive Summarization】
- 动机:我们引入了一种简单而灵活的机制来学习中间计划,以实现抽象摘要的生成。
- 做法:
- 在目标摘要前加上(or prompt)实体链——摘要中提到的实体的有序序列;
- 然后训练 Transformer-based sequence-to-sequence models 生成实体链,然后继续生成以实体链和输入为条件的摘要;
3.1 关于 Prompt For NER
- [【关于 templateNER】
- 论文名称:Template-Based Named Entity Recognition Using BART
- 会议:ACL 2020
- 论文链接:https://aclanthology.org/2021.findings-acl.161/
- 论文 github 地址:https://github.com/Nealcly/templateNER
- 小样本NER:源领域数据多,目标领域数据少
- 现有方法:基于相似性的度量
- 缺点:不能利用模型参数中的知识进行迁移
- 论文方法:提出基于模板的方法
- NER看作一种语言模型排序问题,seq2seq框架
- 原始句子和模板分别作为源序列和模板序列,由候选实体span填充
- 推理:根据相应的模板分数对每个候选span分类
- 数据集
- 在 CoNLL03(资源丰富的任务)上达到了 92.55%的 F1score
- 明显优于在 MIT Movie、MIT Restaurant 和ATIS(低资源任务)
- [【关于 LightNER】
- 论文名称:LightNER: A Lightweight Generative Framework with Prompt-guided Attention for Low-resource NER
- 会议:
- 论文链接:https://arxiv.org/pdf/2109.00720.pdf
- 论文 github 地址:
- 论文动机
- 传统的 NER 方法:
- 方法:在BERT的顶层加classifier来做token-level的分类;
- 存在问题:低资源场景下泛化性不强。在低资源场景中,即target domain上的带标注数据比较有限的时候,source domain和target domain的label可能会不同,没法共享一个classifier,对target domain上unseen class的泛化性并不好
- 低资源的NER传统方法:
- 方法:基于度量学习的方式
- 存在问题:因为在test set上执行预测的时候是依靠相似度度量,不涉及到模型参数更新,所以需要source domain和target domain具有相似的pattern,这样就会导致在cross-domain的问题上表现不好。
- template-based NER:
- 方法:迭代所有可能的span,然后对每个span构造一个template去预测
- 存在问题:复杂度高,同时也需要设计template
- 传统的 NER 方法:
- 论文方法:
- BARTNER的框架:
- 输入:一个句子;
- 输出是:实体的序列;
- 每个实体包括:实体span在输入句子中的start index,end index,以及实体类型(tag,实际也是index);
- 在decoder端,输出的hidden state与输入序列的编码以及tag序列的编码做点积+softmax,转换为在输入句子词表+tag词表中的概率分布。
- Semantic-aware Answer Space:实际就是说NER中很多实体类型比较复杂,是由多个单词组合而成的,比如:return_date.month_name。因此,针对这个tag,把他分解成单个word进行编码,然后加权得到tag的表示,这个权重也是学出来的。
- Prompt-guided Attention:实际就是使用soft prompt,是在encoder和decoder的每层的attention部分加入key和value的可微调参数,其他都是固定的。
- BARTNER的框架:
3.2 通用信息抽取 UIE
-
研究动机
-
不同的输出结构使得很难对所有信息抽取任务统一化建模,这样就产生了三个问题:
- 由于不同的任务、不同的设置(全监督、低资源、少样本、零样本)、不同的作用场景(医学、金融等),研究人员需要设计大量针对特定情况的模型,这是一件极其耗费资源的事情;
- 不同的任务有很多可以公用的知识,比如从图1中的(a)图可以看出:关系抽取需要用到命名实体识别的结果,事件抽取中的论元也是实体,而现在存在大量的针对特定任务的模型无法做到共享这些实体知识。
- 信息抽取的数据标注是一件极其耗费时间和人力的事情,但由于任务之间的独立,需要对每一个任务都标注数据。
-
-
论文贡献
- 设计了一种结构化抽取语言(Structural Extraction Language, SEL),它能够将四种信息抽取任务的不同结构统一描述,使得模型的输出结构针对不同任务都是一致的。
- 由于模型可以做多个任务,所以需要一种方式去指导模型做指定的任务,因此作者设计了结构化模式指导器(Structural Schema Instructor, SSI),其实这就是一种prompt。
- 由于模型的输出都是符合SEL语法的结构化信息,而目前常用的生成式预训练模型如T5、BART都是以生成自然语言为主,若直接采用这种预训练模型会影响到模型性能,因此作者专门针对text to structure的结构来预训练了一个大模型
-
[【关于 USM 】
- 论文:Universal Information Extraction as Unified Semantic Matching
- 会议:AAAI2023
- 论文地址:https://arxiv.org/abs/2301.03282
- 动机:
- 传统的信息抽取方法:需要针对特定的任务进行模型设计和数据标注,使得难以推广到新的模式中,极大限制了IE系统的使用;
- UIE 由于Seq2Seq的生成模型的黑盒特性,导致无法判断跨任务或跨模式的迁移在什么情况下会成功or失败
- 思路:提出了一种统一的语义匹配框架——USM,它联合编码提取模式和输入文本,并行统一提取子结构,并根据需要对目标结构进行可控解码。
-
【关于 实体关系联合抽取】
- 论文名称:《Packed Levitated Marker for Entity and Relation Extraction》
- 会议:ACL2022
- 论文地址:https://arxiv.org/abs/2109.06067v4
- 源码地址:https://github.com/thunlp/PL-Marker
- 动机:现有作品的一个主要限制是它们忽略了span(对)之间的相互关系。
- 论文工作:提出了一种新的span表示方法,称为 Packed Levitated Markers (PL-Marker):
- 通过战略性地在编码器中 packing the markers 来考虑span(对)之间的相互关系。
- 提出了一种 neighborhood-oriented packing strategy ,该策略综合考虑了邻域span,以更好地建模实体边界信息。
- 对于那些更复杂的span对分类任务,我们设计了一种面向主题的 packs 策略,将每个主题及其所有对象 packs ,以模拟同一主题span对之间的相互关系。实验结果表明,通过增强标记特征,
- 论文结果:在六个 NER 基准上推进了基线,并且在 ACE04 和 ACE05 上比之前的最先进模型更快地获得了 4.1%-4.3% 的严格关系 F1 改进.
-
[【关于 PURE】
- 论文:A Frustratingly Easy Approach for Joint Entity and Relation Extraction
- 阅读理由:反直觉!陈丹琦用pipeline方式刷新关系抽取SOTA
- 方法:建立两个 encoders,并独立训练:
- encoder 1:entity model
- 方法:建立在 span-level representations 上
- encoder 2:relation model:只依赖于实体模型作为输入特征
- 方法:builds on contextual representations specific to a given pair of span
- encoder 1:entity model
- 优点:
- 很简单,但我们发现这种流水线方法非常简单有效;
- 使用同样的预先训练的编码器,我们的模型在三个标准基准(ACE04,ACE05,SciERC)上优于所有以前的联合模型;
- 问题讨论:
- Q1、关系抽取最care什么?
- 解答:引入实体类别信息会让你的关系模型有提升
- Q2、共享编码 VS 独立编码 哪家强?
- 解答:由于两个任务各自是不同的输入形式,并且需要不同的特征去进行实体和关系预测,也就是说:使用单独的编码器确实可以学习更好的特定任务特征。
- Q3:误差传播不可避免?还是不存在?
- 解答:并不认为误差传播问题不存在或无法解决,而需要探索更好的解决方案来解决此问题
- Q4:Effect of Cross-sentence Context
- 解答:使用跨句上下文可以明显改善实体和关系
- Q1、关系抽取最care什么?
-
[【关于 PRGC】
- 论文:PRGC: Potential Relation and Global Correspondence Based JointRelational Triple Extraction
- 来源:ACL 2021
- 论文地址:https://arxiv.org/pdf/2106.09895
- 开源代码:https://github.com/hy-struggle/PRGC
- 动机:从非结构化文本中联合提取实体和关系是信息提取中的一项关键任务。最近的方法取得了可观的性能,但仍然存在一些固有的局限性:
- 关系预测的冗余:TPLinker 为了避免曝光偏差,它利用了相当复杂的解码器,导致了稀疏的标签,关系冗余;
- span-based 的提取泛化性差和效率低下;
- 论文方法:
- 从新颖的角度将该任务分解为三个子任务:
- Relation Judgement;
- Entity Extraction;
- Subject-object Alignment;
- 然后提出了一个基于 Potential Relation and Global Correspondence (PRGC) 的联合关系三重提取框架:
- Potential Relation Prediction:给定一个句子,模型先预测一个可能存在关系的子集,以及得到一个全局矩阵;
- Relation-Specific Sequence Tagging:然后执行序列标注,标注存在的主体客体,以处理 subjects and object 之间的重叠问题;
- Global Correspondence:枚举所有实体对,由全局矩阵裁剪;
- 实验结果:PRGC 以更高的效率在公共基准测试中实现了最先进的性能,并在重叠三元组的复杂场景中提供了一致的性能增益
- 从新颖的角度将该任务分解为三个子任务:
-
[【关于 PFN】
- 论文名称:PFN:A Partition Filter Network for Joint Entity and Relation Extraction
- 会议:EMNLP2021
- 论文地址:https://arxiv.org/abs/2108.12202v8
- 源码地址:https://github.com/Coopercoppers/PFN
- 动机:
- 在联合实体和关系提取中,现有工作要么顺序编码任务特定的特征,导致任务间特征交互的不平衡,即后来提取的特征与先提取的特征没有直接联系。
- 或者它们以并行方式编码实体特征和关系特征,这意味着每个任务的特征表示学习在很大程度上是相互独立的,除了输入共享。
- 论文方法:提出了一个分区过滤网络来适当地模拟任务之间的双向交互,
- 其中特征编码被分解为两个步骤:分区和过滤。
- 在我们的编码器中,我们利用两个门:实体门和关系门,将神经元分割成两个任务分区和一个共享分区。
- 共享分区代表对两个任务都有价值的任务间信息,并在两个任务之间均匀共享,以确保正确的双向交互。
- 任务分区代表任务内信息,并通过两个门的共同努力形成,确保任务特定特征的编码相互依赖。
- 其中特征编码被分解为两个步骤:分区和过滤。
- 论文实验:在六个公共数据集上的实验结果表明,我们的模型比以前的方法表现得更好。此外,与之前的工作所声称的相反,我们的辅助实验表明关系预测对命名实体预测的贡献是不可忽略的。
-
[【关于 实体关系联合抽取】
- pipeline 方法
- 思路:先命名实体识别( NER) , 在 关系抽取(RE)
- 问题:
- 忽略两任务间的相关性
- 误差传递。NER 的误差会影响 RE 的性能
- end2end 方法
- 解决问题:实体识别、关系分类
- 思路:
- 实体识别
- BIOES 方法:提升召回?和文中出现的关系相关的实体召回
- 嵌套实体识别方法:解决实体之间有嵌套关系问题
- 头尾指针方法:和关系分类强相关?和关系相关的实体召回
- copyre方法
- 关系分类:
- 思路:判断 【实体识别】步骤所抽取出的实体对在句子中的关系
- 方法:
- 方法1:1. 先预测头实体,2. 再预测关系、尾实体
- 方法2:1. 根据预测的头、尾实体预测关系
- 方法3:1. 先找关系,再找实体 copyre
- 需要解决的问题:
- 关系重叠
- 关系间的交互
- 实体识别
- 论文介绍
- 【paper 1】Joint entity recognition and relation extraction as a multi-head selection problem
- 【paper 2】Joint Extraction of Entities and Relations Based on a Novel Decomposition Strategy[ACL2017]
- 【paper 3】GraphRel:Modeling Text as Relational Graphs for Joint Entity and Relation Extraction [ACL2019]
- 【paper 4】CopyMTL: Copy Mechanism for Joint Extraction of Entities and Relations with Multi-Task Learning [AAAI2020]
- 【paper 5】Span-based Joint Entity and Relation Extraction with Transformer Pre-training [ECAI 2020]
- 【paper 6】A Novel Cascade Binary Tagging Framework for Relational Triple Extraction[ACL2020]
- 【paper 7】END-TO-END NAMED ENTITY RECOGNITION AND RELATION EXTRACTION USING PRE-TRAINED LANGUAGE MODELS
- 论文名称:Joint Extraction of Entities and Relations Based on a Novel Decomposition Strategy
- pipeline 方法
-
[【关于 GraphRel】
- 论文名称:论文名称:GraphRel: Modeling Text as Relational Graphs for Joint Entity and Relation Extraction
- 动机
- 想要自动提取特征的联合模型
- 通过堆叠Bi-LSTM语句编码器和GCN (Kipf和Welling, 2017)依赖树编码器来自动学习特征
- 用以考虑线性和依赖结构
- 类似于Miwa和Bansal(2016)(一样是堆叠的)
- 方法
- 每个句子使用Bi-LSTM进行自动特征学习
- 提取的隐藏特征由连续实体标记器和最短依赖路径关系分类器共享
- 问题
- 然而,在为联合实体识别和关系提取引入共享参数时:
- 它们仍然必须将标记者预测的实体提及通过管道连接起来
- 形成关系分类器的提及对
- 然而,在为联合实体识别和关系提取引入共享参数时:
- 方法
- 类似于Miwa和Bansal(2016)(一样是堆叠的)
- 考虑重叠关系
- 如何考虑关系之间的相互作用
- 2nd-phase relation-weighted GCN
- 重叠关系(常见)
- 情况
- 两个三元组的实体对重合
- 两个三元组都有某个实体mention
- 推断
- 困难(对联合模型尤其困难,因为连实体都还不知道)
- 情况
- 方法:
- 学习特征
- 通过堆叠Bi-LSTM语句编码器和GCN (Kipf和Welling, 2017)依赖树编码器来自动学习特征
- 第一阶段的预测
- GraphRel标记实体提及词,预测连接提及词的关系三元组
- 用关系权重的边建立一个新的全连接图(中间图)
- 指导:关系损失和实体损失
- 第二阶段的GCN
- 通过对这个中间图的操作
- 考虑实体之间的交互作用和可能重叠的关系
- 对每条边进行最终分类
- 在第二阶段,基于第一阶段预测的关系,我们为每个关系构建完整的关系图,并在每个图上应用GCN来整合每个关系的信息,进一步考虑实体与关系之间的相互作用。
- 学习特征
- 想要自动提取特征的联合模型
-
[【关于 关系抽取 之 HBT】
- 论文名称:A Novel Hierarchical Binary Tagging Framework for Relational Triple Extraction
- 论文会议:ACL 2020
- keras4bert 版本:https://github.com/bojone/lic2020_baselines 【苏神 Lic2020 baseline】
- pytorch 版本:https://github.com/powerycy/Lic2020- 【逸神 pytorch 复现版本】
- 动机:
- pipeline approach
- 思路
- 实体抽取:利用一个命名实体识别模型 识别句子中的所有实体;
- 关系分类:利用 一个关系分类模型 对每个实体对执行关系分类。 【这一步其实可以理解为文本分类任务,但是和文本分类任务的区别在于,关系分类不仅需要学习句子信息,还要知道 实体对在 句子中 位置信息】
- 问题
- 误差传递问题:由于 该方法将 实体-关系联合抽取任务 分成 实体抽取+关系分类 两个任务处理,所以 实体抽取任务的错误无法在后期阶段进行纠正,因此这种方法容易遭受错误传播问题;
- 思路
- feature-based models and neural network-based models
- 思路
- 通过用学习表示替换人工构建的特征,基于神经网络的模型在三重提取任务中取得了相当大的成功。
- 问题
- 大多数现有方法无法正确处理句子包含多个相互重叠的关系三元组的情况。
- 思路
- 基于Seq2Seq模型 and GCN
- 思路:
- 提出了具有复制机制以提取三元组的序列到序列(Seq2Seq)模型。 他们基于Seq2Seq模型,进一步研究了提取顺序的影响,并通过强化学习获得了很大的改进。
- 问题:
- 过多 negative examples:在所有提取的实体对中,很多都不形成有效关系,从而产生了太多的negative examples;
- EPO(Entity Pair Overlap) 问题:当同一实体参与多个关系时,分类器可能会感到困惑。 没有足够的训练样例的情况下,分类器就很难准确指出实体参与的关系;
- 思路:
- pipeline approach
- 方式:实现了一个不受重叠三元组问题困扰的HBT标注框架(Hierarchical Binary Tagging Framework)来解决RTE任务;论文并不是学习关系分类器f(s,o)→r,而是学习关系特定的标记器fr(s)→o;每个标记器都可以识别特定关系下给定 subject 的可能 object(s)。 或不返回任何 object,表示给定的主题和关系没有 triple。
- 核心思想:把关系(Relation)建模为将头实体(Subject)映射到尾实体(Object)的函数,而不是将其视为实体对上的标签。
- 思路:
- 首先,我们确定句子中所有可能的 subjects;
- 然后针对每个subjects,我们应用特定于关系的标记器来同时识别所有可能的 relations 和相应的 objects。
- 结构:
- BERT Encoder层:使用 Bert 做 Encoder,其实就是 用 Bert 做 Embedding 层使用。
- Hierarchical Decoder层
- Subject tagger 层:用于 提取 Subject;
- Relation-Specific Object Taggers 层:由一系列relation-specific object taggers(之所以这里是多个taggers是因为有多个可能的relation);
3.3 命名实体识别
-
[【关于 kNN-NER】
- 论文名称:<kNN-NER: Named Entity Recognition with Nearest Neighbor Search >
- 会议:
- 论文地址:https://arxiv.org/pdf/2203.17103.pdf
- 论文代码:https://github.com/ShannonAI/KNN-NER
- 动机:在推理阶段,加入kNN机制,以一种集成的思路来做NER,的确是一种较为简洁的方式提升识别效果。
- 论文方法:
- 在训练阶段,按正常的序列任务训练一个常规的NER模型;
- 在推理阶段,由常规模型预测一个分布+由kNN检索出来的一个分布,两个分布融合作为最终的预测分布,从而达到提高NER识别效果。
- 实验结果:
- kNN-NER框架在处理长尾数据(long-tail)及小样数据(few-shot)问题上,比常规的NER模型表现更好,而这也正是业务场景容易遇到的问题。
- 在对比的baseline下,加入kNN机制都有提升,在Weibo数据集上最高达1.23个点提升,还是很明显的。
- 在训练集5%的情况,kNN-NER对比常规序列模型有近2个点的提升,说明论文在小样本学习上表现更好。
-
[【关于 Label Semantics for Few Shot NER】 【推荐理由:ACL2022 SOTA】
- 论文名称:Label Semantics for Few Shot Named Entity Recognition
- 会议:ACL2022
- 论文地址:https://arxiv.org/abs/2203.08985
- 动机:命名实体识别的少数镜头学习问题。
- 论文方法:
- 利用标签名称中的语义信息作为为模型提供额外信号和丰富先验的一种方式;
- 提出了一种由两个 BERT 编码器组成的神经架构:
- 一个用于编码文档及其标记;
- 一个用于以自然语言格式对每个标签进行编码。
- 我们的模型学习将第一个编码器计算的命名实体的表示与第二个编码器计算的标签表示相匹配。
- 实验结果:标签语义信号被证明可以在多个少数镜头 NER 基准测试中支持改进的最先进的结果,并在标准基准测试中提供同等性能。我们的模型在资源匮乏的环境中特别有效。
-
【关于 命名实体识别 之 W2NER 】 那些你不知道的事
- 论文:Unified Named Entity Recognition as Word-Word Relation Classification
- 会议:AAAI 2022
- 论文地址:https://arxiv.org/pdf/2112.10070.pdf
- 代码:https://github.com/ljynlp/w2ner
- 动机:
- 如何 构建解决非嵌套,嵌套,不连续实体的统一框架?
- span-based 只关注边界识别
- Seq2Seq 可能会受到暴露偏差的影响
- 论文方法:
- 通过将统一的 NER 建模为 word-word relation classification(W2NER)
- 该架构通过使用 Next-Neighboring-Word (NNW) 和 Tail-Head-Word-* (THW-*) 关系有效地建模实体词之间的相邻关系,解决了统一 NER 的内核瓶颈。
- 基于 W2NER 方案,我们开发了一个神经框架,其中统一的 NER 被建模为单词对的 2D 网格。
- 然后,我们提出了多粒度 2D 卷积,以更好地细化网格表示。
- 最后,使用一个共同预测器来充分推理词-词关系。
- 实验:在 14 个广泛使用的基准数据集上进行了广泛的实验,用于非嵌套,嵌套,不连续实体的 NER(8 个英文和 6 个中文数据集),其中我们的模型击败了所有当前表现最好的基线,推动了最先进的性能- 统一NER的mances
- 如何 构建解决非嵌套,嵌套,不连续实体的统一框架?
-
【关于 Few-Shot Named Entity Recognition】 那些你不知道的事
- 论文名称:Few-Shot Named Entity Recognition: A Comprehensive Study
- 将 few shot learning 应用于 NER 领域中需要面临的三个核心问题
- How to adapt meta-learning such as prototype-based methods for few-shot NER? (如何将元学习方法作为 prototype-based 的方法应用到 few-shot NER 领域中?)
- How to leverage freely-available web data as noisy supervised pre-training data?(如何利用大量免费可用的网页数据构造出 noisy supervised 方法中的预训练数据?)
- How to leverage unlabeled in-domain sentences in a semi-supervised manner?(如何在半监督的范式中利用好 in-domain 的无标注数据?)
-
【关于 AutoNER】 那些你不知道的事
- 论文名称:Learning Named Entity Tagger using Domain-Specific Dictionary
- 会议: EMNLP2018
- 论文地址:https://arxiv.org/abs/1809.03599
- 项目地址:https://github.com/shangjingbo1226/AutoNER
- 论文动机:
- 基于机器学习的命名实体识别方法:需要 手工标注特征;
- 基于深度学习的命名实体识别方法:需要大量标准数据;
- 远程监督(结合外部词典)标注数据:生成的嘈杂标签对学习
- 论文方法:提出了两种神经模型,以适应字典中嘈杂的远程监督:
- 首先,在传统的序列标记框架下,我们提出了一个修改后的模糊 CRF 层来处理具有多个可能标签的标记。
- 在确定远程监督中嘈杂标签的性质后,我们超越了传统框架,提出了一种新颖、更有效的神经模型 AutoNER,该模型具有新的 Tie or Break 方案。
- 讨论了如何改进远程监督以获得更好的 NER 性能。
- 实验结果:在三个基准数据集上进行的大量实验表明,仅使用字典而不需要额外的人力时,AutoNER 实现了最佳性能,并通过最先进的监督基准提供了具有竞争力的结果。
-
[【关于 Continual Learning for NER】
- 会议:AAAI2021
- 论文:Continual Learning for Named Entity Recognition
- 论文下载地址:https://assets.amazon.science/65/61/ecffa8df45ad818c3f69fb1cf72b/continual-learning-for-named-entity-recognition.pdf
- 动机:业务扩展,需要新增 实体类型(eg:像 Sirior Alexa 这样的语音助手不断地为其功能引入新的意图,因此新的实体类型经常被添加到他们的插槽填充模型中)
- 方法:研究 将 知识蒸馏(KD) 应用于 NER 的 CL 问题,通过 将 “teacher”模型的预测合并到“student”模型的目标函数中,该模型正在接受训练以执行类似但略有修改的任务。 通过学习输出概率分布,而不仅仅是标签,使得学生表现得与教师相似。
- 论文贡献:
- (i) 我们展示了如何使 CL 技术适应 NLU 域,以逐步学习 NER 的新实体类型;
- (ii) 我们在两个 EnglishNER 数据集上的结果表明,我们的 CL 方法使模型能够不断学习新的实体类型,而不会失去识别先前获得的类型的能力;
- (iii) 我们表明我们的半监督策略实现了与全监督设置相当的结果。
-
[【关于 NER数据存在漏标问题】
-
一、摘要
-
二、为什么 数据会存在漏标?
-
三、什么是 带噪学习
-
四、NER 数据漏标问题所带来后果?
-
五、NER 性能下降 原因是什么?
-
六、论文所提出的方法是什么?
-
七、数据漏标,会导致NER指标下降有多严重?
-
八、对「未标注实体问题」的解决方案有哪些?
-
九、如何降噪:改变标注框架+负采样?
- 9.1 第一步:改变标注框架
- 9.2 第二步:负采样
-
十、负样本采样,效果如何?
- 摘要
- 一、数据处理模块
- 1.1 原始数据格式
- 1.2 数据预处理模块 data_pre()
- 1.2.1 数据预处理 主 函数
- 1.2.2 训练数据加载 load_data(file_path)
- 1.2.3 数据编码 encoder(sentence, argument)
- 1.3 数据转化为 MyDataset 对象
- 1.4 构建 数据 迭代器
- 1.5 最后数据构建格式
- 二、模型构建 模块
- 2.1 主题框架介绍
- 2.2 embedding layer
- 2.2 BiLSTM
- 2.3 FFNN
- 2.4 biaffine model
- 2.5 冲突解决
- 2.6 损失函数
- 三、学习率衰减 模块
- 四、loss 损失函数定义
- 4.1 span_loss 损失函数定义
- 4.2 focal_loss 损失函数定义
- 四、模型训练
-
【关于 命名实体识别 之 GlobalPointer 】 那些你不知道的事
- 博客:【GlobalPointer:用统一的方式处理嵌套和非嵌套NER】
- 代码:https://github.com/bojone/GlobalPointer
- 动机:
- 在做实体识别或者阅读理解时,一般是用两个模块分别识别实体的首和尾;存在问题:出现 训练和预测时的不一致问题
- 论文方法:
- GlobalPointer是基于内积的token-pair识别模块,它可以用于NER场景,因为对于NER来说我们只需要把每一类实体的“(首, 尾)”这样的token-pair识别出来就行了。
- 结论:
- 利用全局归一化的思路来进行命名实体识别(NER),可以无差别地识别嵌套实体和非嵌套实体,在非嵌套(Flat NER)的情形下它能取得媲美CRF的效果,而在嵌套(Nested NER)情形它也有不错的效果。还有,在理论上,GlobalPointer的设计思想就比CRF更合理;而在实践上,它训练的时候不需要像CRF那样递归计算分母,预测的时候也不需要动态规划,是完全并行的,理想情况下时间复杂度是 O(1)。
-
【关于 命名实体识别 之 Efficient GlobalPointer 】 那些你不知道的事
- 博客:【Efficient GlobalPointer:少点参数,多点效果】
- 代码:https://github.com/bojone/GlobalPointer
- 动机:原GlobalPointer参数利用率不高
- 解决方法:分解为“抽取”和“分类”两个步骤,“抽取”就是抽取出为实体的片段,“分类”则是确定每个实体的类型。
-
-
【关于 NER trick】 那些你不知道的事
-
【关于TENER】 那些你不知道的事
- 论文名称:TENER: Adapting Transformer Encoder for Name Entity Recognition
- 动机:
-
- Transformer 能够解决长距离依赖问题;
-
- Transformer 能够并行化;
-
- 然而,Transformer 在 NER 任务上面效果不好。
-
- 方法:
- 第一是经验发现。 引入:相对位置编码
- 第二是经验发现。 香草变压器的注意力分布是缩放且平滑的。 但是对于NER,因为并非所有单词都需要参加,所以很少注意是合适的。 给定一个当前单词,只需几个上下文单词就足以判断其标签。 平稳的注意力可能包括一些嘈杂的信息。 因此,我们放弃了点生产注意力的比例因子,而使用了无比例且敏锐的注意力。
-
【关于DynamicArchitecture】 那些你不知道的事
- 介绍:Dynamic Architecture范式通常需要设计相应结构以融入词汇信息。
- 论文:
- 【关于 LatticeLSTM 】那些你不知道的事
- 想法:在 char-based 的 LSTM 中引入词汇信息
- 做法:
- 根据大量语料生成词典;
- 若当前字符与前面的字符无法组成词典中词汇,则按 LSTM 的方法更新记忆状态;
- 若当前字符与前面的字符组成词典中词汇,从最新词汇中提取信息,联合更新记忆状态;
- 存在问题:
- 计算性能低下,导致其不能充分利用GPU进行并行化。究其原因主要是每个字符之间的增加word cell(看作节点)数目不一致;
- 信息损失:
- 1)每个字符只能获取以它为结尾的词汇信息,对于其之前的词汇信息也没有持续记忆。如对于「大」,并无法获得‘inside’的「长江大桥」信息。
- 2)由于RNN特性,采取BiLSTM时其前向和后向的词汇信息不能共享,导致 Lattice LSTM 无法有效处理词汇信息冲突问题
- 可迁移性差:只适配于LSTM,不具备向其他网络迁移的特性。
- 【关于 LR-CNN 】那些你不知道的事
- 动机
- 词信息引入问题;
- lattice LSTM 问题:
- 基于 RNN 结构方法不能充分利用 GPU 并行计算资源;
- 针对句子中字符计算;
- 针对匹配词典中潜在词
- 很难处理被合并到词典中的潜在单词之间的冲突:
- 一个字符可能对应词典中多个潜在词,误导模型
- 基于 RNN 结构方法不能充分利用 GPU 并行计算资源;
- 方法:
- Lexicon-Based CNNs:采取CNN对字符特征进行编码,感受野大小为2提取bi-gram特征,堆叠多层获得multi-gram信息;同时采取注意力机制融入词汇信息(word embed);
- Refining Networks with Lexicon Rethinking:由于上述提到的词汇信息冲突问题,LR-CNN采取rethinking机制增加feedback layer来调整词汇信息的权值:具体地,将高层特征作为输入通过注意力模块调节每一层词汇特征分布,利用这种方式来利用高级语义来完善嵌入单词的权重并解决潜在单词之间的冲突。
- 动机
- 【关于 CGN 】那些你不知道的事
- 动机
- 中文命名实体识别中,词边界 问题;
- 如何 引入 词边界信息:
- pipeline:CWS -> NER
- 问题:误差传递
- CWS 和 NER 联合学习
- 问题:标注 CWS 数据
- 利用 词典 自动构建
- 优点:比 CWS 标注数据 更容易获得
- 问题:
- 第一个挑战是整合自我匹配的词汇词;
- 举例:“北京机场” (Beijing Airport) and “机场” (Airport) are the self-matched words of the character “机” (airplane)
- 第二个挑战是直接整合最接近的上下文词汇词;
- 举例:by directly using the semantic knowledge of the nearest contextual words “离开” (leave), an “I-PER” tag can be predicted instead of an “I-ORG” tag, since “ 希尔顿” (Hilton Hotels) cannot be taken as the subject of the verb “离开”
- 第一个挑战是整合自我匹配的词汇词;
- pipeline:CWS -> NER
- 论文思路:
- character-based Collaborative Graph:
- encoding layer:
- 句子信息:
- s1:将 char 表示为 embedding;
- s2:利用 biLSTM 捕获 上下文信息
- lexical words 信息:
- s1:将 lexical word 表示为 embedding;
- 合并 contextual representation 和 word embeddings
- 句子信息:
- a graph layer:
- Containing graph (C-graph):
- 思路:字与字之间无连接,词与其inside的字之间有连接;
- 目的:帮助 字符 捕获 self-matched lexical words 的边界和语义信息
- Transition graph (T-graph):
- 思路:相邻字符相连接,词与其前后字符连接;
- 目的:帮助 字符 捕获 相邻 上下文 lexical 词 的 语义信息
- Lattice graph (L-graph):
- 思路:通相邻字符相连接,词与其开始结束字符相连;
- 目的:融合 lexical knowledge
- GAT:
- 操作:针对三种图,使用Graph Attention Network(GAN)来进行编码。最终每个图的输出
- 操作:针对三种图,使用Graph Attention Network(GAN)来进行编码。最终每个图的输出
- Containing graph (C-graph):
- encoding layer:
- character-based Collaborative Graph:
- 动机
- 【关于 LatticeLSTM 】那些你不知道的事