当前位置:   article > 正文

NLP 学习记录_nlp cls

nlp cls


前言

最近在做一些NLP可解释性的研究,也算是正经的NLP入门项目了,有很多新的知识点在本文中记录一下。


weight_decay

损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大

对于bias或者LayerNorm.weight一般不需要使用weight decay,可以使用如下代码进行调整:

optimizer_grouped_parameters = [
        {
            "params": [p for n, p in model.named_parameters() if not any(nd in n for nd in no_decay)],
            "weight_decay": 0.0,
        },
        {"params": [p for n, p in model.named_parameters() if any(nd in n for nd in no_decay)], "weight_decay": 0.2},
    ]
    optimizer = AdamW(optimizer_grouped_parameters, lr=lr, eps=1e-8)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

warm up

使用Warmup预热学习率的方式,即先用最初的小学习率训练,然后每个step增大一点点,直到达到最初设置的比较大的学习率时,可以解决因为随机初始化导致模型在初期训练不稳定的问题。

pretrained model usage

  1. 训练模型的使用范式长期是pretrain->finetune的范式,即先在大量无标注语料上预训练一个模型,然后将模型(可选地,增加一定模块后)放到特定下游任务上的标注数据finetune
    论文
  2. 后来实验还表明在下游任务的数据上继续预训练,可以进一步压榨PTM的性能,所以有pretrain-> further pretrain -> finetune的范式
    论文

Gumbel-Softmax

题外话:Soft-max相对于argmax是可导的,所以是软的
Gumbel-Softmax 用于实现对分布进行可导采样,因为 g i g_{i} gi 是变化的
在这里插入图片描述

BERT的[CLS]有什么用

thank!
[CLS]就是classification的意思,可以理解为用于下游的分类任务。

主要用于以下两种任务:

· 单文本分类任务: 对于文本分类任务,BERT模型在文本前插入一个[CLS]符号,并将该符号对应的输出向量作为整篇文本的语义表示,用于文本分类,如下图所示。可以理解为:与文本中已有的其它字/词相比,这个无明显语义信息的符号会更“公平”地融合文本中各个字/词的语义信息。

在这里插入图片描述
· 语句对分类任务: 该任务的实际应用场景包括:问答(判断一个问题与一个答案是否匹配)、语句匹配(两句话是否表达同一个意思)等。对于该任务,BERT模型除了添加[CLS]符号并将对应的输出作为文本的语义表示,还对输入的两句话用一个[SEP]符号作分割,并分别对两句话附加两个不同的文本向量以作区分,如下图所示。
在这里插入图片描述

CRF学习

发现一篇博客通俗的介绍了CRF
thank!
CRF的功能大体就是在模型输出种类的基础上,找到一条满足最大概率的路径。

pytorch apply

对模型自身的每个元素进行操作

            >>> def init_weights(m):
            >>>     print(m)
            >>>     if type(m) == nn.Linear:
            >>>         m.weight.fill_(1.0)
            >>>         print(m.weight)
            >>> net = nn.Sequential(nn.Linear(2, 2), nn.Linear(2, 2))
            >>> net.apply(init_weights)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

预训练模型 tokenizer同时处理batch数据

普通方式直接放进去一个batch数据会报错的,调用batch_encode_plus就可以解决,并且注意需要将padding=True

input_ids = tokenizer.batch_encode_plus(lines, add_special_tokens=True, max_length=None, return_tensors='pt',padding=True)["input_ids"]
  • 1

Understanding Masked Language Models (MLM) and Causal Language Models (CLM) in NLP

最近用各种预训练模型,总体上分为MLM(Bert)与CLM(GPT)两类,这篇文章很好的介绍了一下这两类模型的区别,这里mark一下
MLM+CLM

JL引理(降维)

除了PCA降维方法外,还有JL引理,从 N(0,1/n) 中采样出一个(n,m)的矩阵A 使用u × \times × A即可得将n维向量降到m维

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/526416
推荐阅读
相关标签
  

闽ICP备14008679号