每日学习记录20230406_bert_and_torch
Posted Molesular Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日学习记录20230406_bert_and_torch相关的知识,希望对你有一定的参考价值。
20230407:tensorflow transformer
-
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中圈出来.
-
Transformers的来源(转载地址)
- Huggingface
Huggingface(抱抱脸)总部位于纽约,是一家专注于自然语言处理、人工智能和分布式系统的创业公司。他们所提供的聊天机器人技术一直颇受欢迎,但更出名的是他们在NLP开源社区上的贡献。Huggingface一直致力于自然语言处理NLP技术的平民化(democratize),希望每个人都能用上最先进(SOTA, state-of-the-art)的NLP技术,而非困窘于训练资源的匮乏。
除了官网,他们在http://medium.com上也时常有高质量的分享,这里是他们的medium主页。https://medium.com/huggingface/aboutmedium.com/huggingface/about
- 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的各种模型虽然师出同源,但在模型细节和调用接口上还是有不少变种,用起来容易踩坑
- 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的从业者,真的很难抵制住去一探究竟的诱惑。
- 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框架相兼容。
- 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.
-
对于BERT来说,如果单从网络结构上来说的话,个人感觉并没有太大的创新,这也正如作者所说”BERT整体上就是由多层的Transformer Encoder堆叠所形成“,并且所谓的”Bidirectional“其实指的也就是Transformer中的self-attention机制。真正让BERT表现出色的应该是基于MLM和NSP这两种任务的预训练过程,使得训练得到的模型具有强大的表征能力。在下一篇文章中,掌柜将会详细介绍如何动手来实现BERT模型,以及如何载入现有的模型参数并运用在下游任务中。
2018-11-23-每日总结.md
只有每天过的有价值,人的生命才能精彩。从今天开始,每天都会有一个记录,记录自己一天的学习以及感想。
今日记录
今天过得平平谈谈,由于没有目标,基本上都是胡乱一看,一写。希望明天改进。
1. github上的优秀python项目搜索
2. Python学习(编程)
3. 英语学习
词汇的学习
Wildest Dream
4. 专业方向
- 《损伤力学》第一章
- 《细观力学》资料整理
- 指导师弟的开题报告
5. 生活方面
- 整理了自己的笔记
- 给妈妈打了一个电话
- 给外甥女教英语
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脚注的使用
- 文中的标记
[^名字]
- 文章末尾标记
[^名字]:XXXXXXXXXXXXXXXXX
注意:末尾标记每一项空一行。
** 链接分离**
文章中[连接文本][num]
任意处[num]: http://XXXXXXXXXXXXXXXX
以上是关于每日学习记录20230406_bert_and_torch的主要内容,如果未能解决你的问题,请参考以下文章