首页 > 其他分享 >每日学习记录20230406_bert_and_torch

每日学习记录20230406_bert_and_torch

时间:2023-04-11 09:02:16浏览次数:45  
标签:bert Transformer Transformers name BERT 20230406 模型 torch tf

20230407:tensorflow transformer

  1. tf.name_scope:
    这个函数会规定对象和操作属于那个范围,但是不会对“对象”的“作用域”产生任何影响,也就是不是全局变和局部变量的概念.
    这个东西有很多种用法:

    with tf.name_scope("loss"): #这个名字是随意指定,看你想干什么
        xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y,logits= logits)
        
    with tf.name_scope()"cgx_name_scope"):
        a = tf.constant(1,name='my_a') #定义常量
        b = tf.Variable(2,name='my_b') #定义变量
        c = tf.add(a,b,name='my_add') #二者相加(操作
    
    image-20230411084702125

    在上图可以看到,有固定的话会在tensorboard中圈出来.

  2. Transformers的来源(转载地址)

    1. Huggingface

    Huggingface(抱抱脸)总部位于纽约,是一家专注于自然语言处理、人工智能和分布式系统的创业公司。他们所提供的聊天机器人技术一直颇受欢迎,但更出名的是他们在NLP开源社区上的贡献。Huggingface一直致力于自然语言处理NLP技术的平民化(democratize),希望每个人都能用上最先进(SOTA, state-of-the-art)的NLP技术,而非困窘于训练资源的匮乏。

    除了官网,他们在http://medium.com上也时常有高质量的分享,这里是他们的medium主页。https://medium.com/huggingface/aboutmedium.com/huggingface/about

    1. Transformer结构和BERTology家族

    2020年,NLP最前沿的研究领域基本上已经被大型语言模型+迁移学习这一范式所垄断了。

    2017年6月,研究人员提出了Transformer编码解码结构, 这一结构也成为了后续一系列工作的基石。2018年10月,基于Transformer,Google的研究人员发布了“全面超越人类”的BERT,一种融合了双向上下文信息预训练语言模型,该模型当时一举打破了11项纪录。从此之后,BERT的继任者们百花齐放,不断刷新各leaderboard最高成绩。现在,这些研究被称为BERTology,不完全的名单包括:Transformer-XL, XLNet, Albert, RoBERTa, DistilBERT, CTRL, ...

    BERTs模型虽然很香,但是用起来还是有一些障碍,比如:

    • 预训练需要大量的资源,一般研究者无法承担。以RoBERTa为例,它在160GB文本上利用1024块32GB显存的V100卡训练得到,如果换算成AWS上的云计算资源的话,但这一模型就需要10万美元的开销。
    • 很多大机构的预训练模型被分享出来,但没有得到很好的组织和管理。
    • BERTology的各种模型虽然师出同源,但在模型细节和调用接口上还是有不少变种,用起来容易踩坑
    1. Transformers名字的历史沿革

    为了让这些预训练语言模型使用起来更加方便,Huggingface在github上开源了Transformers。这个项目开源之后备受推崇,截止2020年5月,已经累积了26k的star和超过6.4k的fork。

    Transformers最早的名字叫做pytorch-pretrained-bert,推出于google BERT之后。顾名思义,它是基于pytorch对BERT的一种实现。pytorch框架上手简单,BERT模型性能卓越,集合了两者优点的pytorch-pretrained-bert自然吸引了大批的追随者和贡献者。

    其后,在社区的努力下,GPT、GPT-2、Transformer-XL、XLNET、XLM等一批模型也被相继引入,整个家族愈发壮大,这个库适时地更名为pytorch-transformers。

    深度学习框架上一直存在着pytorch和tensorflow两大阵营,为了充分利用两个框架的优点,研究人员不得不经常在两者之间切换。Transformers的开发者们也敏锐地抓住了这一个痛点,加入了pytorch和TF2.0+的互操作性,模型之间可以方便地互相转换,算法的实现也是各自最native的味道。此举显然笼络了更多的自然语言研究人员和从业者投入麾下。而项目的名字,也顺理成章地改成了现在的Transformers。时至今日,Transformers已经在100+种人类语言上提供了32+种预训练语言模型。作为NLP的从业者,真的很难抵制住去一探究竟的诱惑。

    1. Transformers的设计理念

    了解一下Transformers库的设计理念有助于更好地使用它。

    • 分享及关爱。我们把各种模型和代码汇集到一处,从而使得更多人可以共享昂贵的训练资源。我们提供了简单一致的API,遵循经典的NLP Pipeline设计。

    • 性能优异且易于访问。一方面我们会尽可能让模型复现论文中的最优结果,一方面我们也尽力降低使用的门槛。我们的三大组件configuration, tokenizer和model都可以通过一致的from_pertrained()方法来实例化。

    • 注重可解释性和多样性。我们让使用者能够轻松访问到hidden states, attention weights和head importance这样的内部状态,从而更好地理解不同的模型是如何运作的。我们提供了类似GLUE, SuperGLuE, SQuAD这样的基准测试集的接入,方便对不同模型效果进行比较。

    • 推进传播最佳实践。在贴近原模型作者意图的基础上,我们的代码实现会尽可能地规范化,遵循业界的最佳实践,比如对于PyTorch和TensorFlow 2.0的完全兼容。

    • 从学界到业界。在工业级支持上,Transformers的模型支持TorchScript,一种PyTorch中创建可序列化可优化模型的方式,也能够和Tensorflow Extended框架相兼容。

    1. Transformers的组件和模型架构

    Transformers提供了三个主要的组件。

    • Configuration配置类。存储模型和分词器的参数,诸如词表大小,隐层维数,dropout rate等。配置类对深度学习框架是透明的。
    • Tokenizer分词器类。每个模型都有对应的分词器,存储token到index的映射,负责每个模型特定的序列编码解码流程,比如BPE(Byte Pair Encoding),SentencePiece等等。也可以方便地添加特殊token或者调整词表大小,如CLS、SEP等等。
    • Model模型类。提供一个基类,实现模型的计算图和编码过程,实现前向传播过程,通过一系列self-attention层直到最后一个隐藏状态层。在最后一层基础上,根据不同的应用会再做些封装,比如XXXForSequenceClassification,XXXForMaskedLM这些派生类。

    Transformers的作者们还为以上组件提供了一系列Auto Classes,能够从一个短的别名(如bert-base-cased)里自动推测出来应该实例化哪种配置类、分词器类和模型类。

    Transformers提供两大类的模型架构,一类用于语言生成NLG任务,比如GPT、GPT-2、Transformer-XL、XLNet和XLM,另一类主要用于语言理解任务,如Bert、DistilBert、RoBERTa、XLM.

  3. 对于BERT来说,如果单从网络结构上来说的话,个人感觉并没有太大的创新,这也正如作者所说”BERT整体上就是由多层的Transformer Encoder堆叠所形成“,并且所谓的”Bidirectional“其实指的也就是Transformer中的self-attention机制。真正让BERT表现出色的应该是基于MLM和NSP这两种任务的预训练过程,使得训练得到的模型具有强大的表征能力。在下一篇文章中,掌柜将会详细介绍如何动手来实现BERT模型,以及如何载入现有的模型参数并运用在下游任务中。

标签:bert,Transformer,Transformers,name,BERT,20230406,模型,torch,tf
From: https://www.cnblogs.com/modaidai/p/17305004.html

相关文章

  • WSL2安装CUDA & pytorch
     WSL2安装pytorchwsl-ubuntu安装1操作系统,win11开启CPU虚拟化   如果是关闭状态,需要进入到BOIS中打开设置。  开启虚拟机平台搜索栏中搜索功能,即可出现“启用或关闭Windows功能”      升级配置wslhttps://wslstorestorage.blob.core.win......
  • 深度学习之PyTorch实战(5)——对CrossEntropyLoss损失函数的理解与学习
     其实这个笔记起源于一个报错,报错内容也很简单,希望传入一个三维的tensor,但是得到了一个四维。RuntimeError:onlybatchesofspatialtargetssupported(3Dtensors)butgottargetsofdimension:4查看代码报错点,是出现在pytorch计算交叉熵损失的代码。其实在......
  • :)关于torch函数中dim的解释-读这篇就够了-|
    关于torch函数中dim的解释-读这篇就够了1dim的取值范围1)-1的作用0,1,2,-1. 其中-1最后一维即20,1,2,3,-1其中-1最后一维即32)维度0,1,2,3表示BCHW,常在CV任务中使用。0,1,2表示CHW,常在NLP任务中使用。3)用图来说明  2NLP代码中实战dimfromtorchimportnnf......
  • 【研究生学习】Pytorch基本知识——神经网络实战分类与回归任务
    本博客主要记录一下神经网络实战分类与回归任务如何用Pytorch完成气温数据集及任务介绍首先需要导入数据集:importpandasaspdfeatures=pd.read_csv('temps.csv')print(features.head())#取数据的前n行数据,默认是前5行可以看到运行结果,看一下数据的样子:数据中的......
  • 基于OCR进行Bert独立语义纠错实践
    摘要:本案例我们利用视频字幕识别中的文字检测与识别模型,增加预训练Bert进行纠错本文分享自华为云社区《Bert特调OCR》,作者:杜甫盖房子。做这个项目的初衷是发现图比较糊/检测框比较长的时候,OCR会有一些错误识别,所以想对识别结果进行纠错。一个很自然的想法是利用语义信息进行纠错,其......
  • 基于OCR进行Bert独立语义纠错实践
    摘要:本案例我们利用视频字幕识别中的文字检测与识别模型,增加预训练Bert进行纠错本文分享自华为云社区《Bert特调OCR》,作者:杜甫盖房子。做这个项目的初衷是发现图比较糊/检测框比较长的时候,OCR会有一些错误识别,所以想对识别结果进行纠错。一个很自然的想法是利用语义信息进行纠错......
  • 产品原型9-20230406
                ......
  • 20230406ARC专场训练1
    [ARC125D]UniqueSubsequence可以用一个树状数组来维护当前有多少个合法子序列以\(i\)结尾,记作\(f_i\)。那么每次有\(f_i=\sum_{j=las_{i}}^if_j\).\(las_i\)表示\(a_i\)上一次出现的位置.同时要把\(f_{las_i}\)设为\(0\).[ARC125E]Snack可以很简单的建......
  • 总结20230406
    今天周四,又是一周内最轻松的一天。今天羽毛球课主要是打比赛,目前比赛第一轮已结束,目前战绩是三胜三负,可惜说有两场输的确实不应该。再接再厉,迎接接下来的比赛。今天要复习蓝桥杯的,确实该复习了,还有一天。 ......
  • BERT-文本分类demo
    title:Bert文本分类一.模型准备首先在huggingface上下载对应的模型,也可以通过安装transformer,来将tensorflow版模型改为pytorch版。最后得到:config.json、pytorch_model.bin和vocab.txt。1.config.json:顾名思义,该文件就是BERT模型的配置文件,里面记录了所有用于训练的......