每日学习记录20230406_bert_and_torch

Posted Molesular Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日学习记录20230406_bert_and_torch相关的知识,希望对你有一定的参考价值。

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\') #二者相加(操作
    

    在上图可以看到,有固定的话会在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模型,以及如何载入现有的模型参数并运用在下游任务中。

2018-11-23-每日总结.md

只有每天过的有价值,人的生命才能精彩。从今天开始,每天都会有一个记录,记录自己一天的学习以及感想。

今日记录

今天过得平平谈谈,由于没有目标,基本上都是胡乱一看,一写。希望明天改进。

1. github上的优秀python项目搜索

知乎
Python之美

2. Python学习(编程)

Python函数

3. 英语学习

词汇的学习
Wildest Dream

4. 专业方向

  1. 《损伤力学》第一章
  2. 《细观力学》资料整理
  3. 指导师弟的开题报告

5. 生活方面

  1. 整理了自己的笔记
  2. 给妈妈打了一个电话
  3. 给外甥女教英语

6. 杂事儿

6.1 博客页首删掉二维码

#my_dialog1{opacity:0.5;} 
<div id="my_dialog1">
<img src="https://www.cnblogs.com/images/cnblogs_com/brightyuxl/1340331/o_weChat.jpg" width="120" height="120"/>
</div>

6.2 javascript 杂记

本文是一个本人的总结记录文,并不是一个js教程,请不要抱着《从入门到精通》的思路来看本文。如果你有一定的编程基础,或者正在学习js,这个笔记可能对你有点用。(以下笔记是廖雪峰javascript教程,还有freecodecamp教程笔记)
参考

6.3 Cmd Markdown编辑阅读器网页版

网页版Mardown
好用的Markdown编辑器一览-月光博客

6.4 看电影时如何遮挡汉语字母

画图软件
观看电影时,可以根据字体的实际大小对画图软件进行缩小放大

6.5 学习与记忆方法

如何找到最小可行体系
学习这个知识体系的目标是什么?
最短时间内到达目标需要那些知识点?
排好优先级
专注,一次只学一个知识点

6.6 写代码的乐趣

写代码是个很有趣的过程。如果一上来就想着找现成的代码,或者直接问大神怎么写,可能就要花好几天了。除非你有相关领域的大神朋友,否则还是像Stay这样好好分析需求,解决问题吧。

写代码只是需求实现的最后一环,考虑清楚了再写要比上来就胡乱写代码要高效得多。

常思考,常实践,别局限于某种语言,而是从生活化的需求着手分解,列出一个个小的task。按部就班的去实现它,不会的现查。久而久之,就成了全干工程师

6.7 Markdown脚注的使用

  1. 文中的标记[^名字]
  2. 文章末尾标记[^名字]:XXXXXXXXXXXXXXXXX

注意:末尾标记每一项空一行。

** 链接分离**
文章中[连接文本][num]
任意处[num]: http://XXXXXXXXXXXXXXXX

以上是关于每日学习记录20230406_bert_and_torch的主要内容,如果未能解决你的问题,请参考以下文章

每日学习记录20230410_Bert

每日学习记录20230323_Bert视频学习

每日学习记录20230308_继续PNAS代码解析

每日学习记录20230228_mzR

每日学习记录20230306_培养基

每日学习记录20230321_Bert