笔记——BERT模型

带有笔记的文章是最近正在研究的内容,质量有可能很差,只有自己看的懂,所以看的笔记的大致看看就可以,我也正在积累,等感觉没问题了就会重新整理再发一次

术语

掩码语言模型(MLM)任务
句子连贯性判定(NSP)任务
bert 解释
bert其实就是砍掉解码器的transformer
原理
BERT 模型使用两个新的无监督预测任务进行预训练,分别是 Masked LM(MLM)和 Next Sentence Prediction(NSP)。
为了训练深度双向 Transformer 表示,采用了一种简单的方法:随机掩盖部分输入词,然后对那些被掩盖的词进行预测,此方法被称为“Masked LM”(MLM)。该任务非常像我们在中学时期经常做的完形填空
随机选择句子中15%的单词进行 Mask,在选择为 Mask 的单词中,有80%真的使用[MASK]进行替换,10%使用一个随机单词替换,剩下10%保留原词不进行替换。
Next Sentence Prediction
Next Sentence Prediction(NSP)是一个二分类任务,其目标是判断句子 B 是否是句子 A 的下文,如果是的话输出标签为 ‘IsNext’,否则输出标签为 ‘NotNext’。

bert 类型
albert、Albert_tiny、Albert v2模型--------精简版的bert模型
引入了BERT模型中的双向上下文信息的广义自回归模型——XLNet模型
引入了BERT模型训练方式和目标的RoBERTa和SpanBERT模型;
结合了多任务及知识蒸馏(Knowledge Distillation)、强化BERT模型功能的MT-DNN模型。
GPT-3模型,可以写出不同风格的文章。它可以写出诗集、散文,甚至“金庸风格”的小说、新闻稿等
RoBERTa 是哈工大的 roberta-base-wwm-ext;
NEZHA 是最好的字级别中文预训练模型,来自华为诺亚方舟研究院;
AMBERT 是曾经多粒度中文预训练模型的 SOTA,是字节跳动李航组的工作;
BERT-word 是使用词作为输入的 BERT;
LBERT 是学到了字和词的信息的方法

huggingface
bert模型存放的地方
https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english/tree/main
huggingface模型下载地址: 1. 清华大学开源镜像 (https://mirror.tuna.tsinghua.edu.cn/hugging-face-models/)2. 官方地址

优点:
1.Transformer的设计使任意两个单词的距离为1,有效解决NLP中棘手的长期依赖问题;
2.引入Next Sentence Prediction来和Masked-LM一起做联合训练,从此进入挖掘更深层语义的范畴;
3.设计了更加通用的输入层和输出层,适配多种任务下的迁移学习;
4.整体架构的巧妙设计保证了可观的并行性,在当前硬件飞速发展的时代下如鱼得水;
缺点:
1.在第一个预训练阶段时的随机遮挡策略略粗;
2.每batch训练数据中只有15%的标记被预测,这也就意味着达到收敛阶段需要更长的时间;
3.众所周知,Bert对硬件资源的消耗巨大,对我等平民玩家并不大友好…

注意:
而且在官方代码中学习速率是5e-5。而且这里的训练方式建议使用官方提供的优化器,官方提供的优化器学习速率是动态调整的。
学习率:2e-5,才能使 BERT 克服灾难性遗忘问题。在 4e-4 的较大学习率下,训练集无法收敛。

参数理解

maxlen=8
encoded_pair = self.tokenizer(sent,
                               padding='max_length',  # 填充到最大值
                               truncation=True,  # 截断到最大值
                               max_length=maxlen,# 最大值
                               return_tensors='pt')  # 返回pytorch类型

 token_ids = encoded_pair['input_ids'].squeeze(0)  # tensor of token ids
 # input_ids为讲文本转化为数字,前后加一个特殊字符101(开始字符),102(结束字符),0(填充字符)
 attn_masks = encoded_pair['attention_mask'].squeeze(0)
 # attention_mask 当有填充字符0是,字符为0,其余为1
 token_type_ids = encoded_pair['token_type_ids'].squeeze(0)
 # token_type_ids 第一段是为0,第二段为1

你可能感兴趣的:(日常问题,bert,自然语言处理,深度学习)