NLP学习————实现一个BERT(简记)
NLP学习—实现一个BERT(简记)
本文主要内容是介绍了BERT的代码结构、具体实现与原理,对BERT的一些简记
内容包括以下几个部分:
- BERT Tokenization 分词模型(BertTokenizer)
- BERT Model 本体模型(BertModel)
- BertEmbeddings
- BertEncoder
- BertLayer
- BertAttention
- BertIntermediate
- BertOutput
- BertLayer
- BertPooler
本文内容的结构图如下:
具体的内容如下
1. BERT Tokenization 分词模型(BertTokenizer)
1)Tokenization分词-BertTokenizer:基于BasicTokenizer和WordPieceTokenizer的分词器
a)BasicTokenizer负责处理的第一步——按标点、空格等分割句子,并处理是否统一小写,以
及清理非法字符。
(1)对于中文字符,通过预处理(加空格)来按字分割;
(2)同时可以通过never_split指定对某些词不进行分割;
(3)这一步是可选的(默认执行)。
b)WordPieceTokenizer在词的基础上,进一步将词分解为子词(subword)。
(1)subword 介于 char 和 word 之间,既在一定程度保留了词的含义,又能够照顾到英
文中单复数、时态导致的词表爆炸和未登录词的 OOV(Out-Of-Vocabulary)问题,将词根
与时态词缀等分割出来,从而减小词表,也降低了训练难度;
(2)例如,tokenizer 这个词就可以拆解为“token”和“##izer”两部分,注意后面一个词的
“##”表示接在前一个词后面。
2. BERT Model 本体模型(BertModel)
组成:
1. embeddings,即BertEmbeddings类的实体,根据单词符号获取对应的向量表示;
2. encoder,即BertEncoder类的实体;
3. pooler,即BertPooler类的实体,这一部分是可选的。
补充: 剪枝是一个复杂的操作,需要将保留的注意力头部分的 Wq、Kq、Vq
和拼接后全连接部分的权重拷贝到一个新的较小的权重矩阵(注意先禁止 grad
再拷贝),并实时记录被剪掉的头以防下标出错。具体参考BertAttention部分
的prune_heads方法.**
2.1 BertEmbeddings
组成:包含三个部分求和得到:
1) word_embeddings,上文中 subword 对应的嵌入。
2) token_type_embeddings,用于表示当前词所在的句子,辅助区别句子与
padding、句子对间的差异。
3) position_embeddings,句子中每个词的位置嵌入,用于区别词的顺序。和
transformer 论文中的设计不同,这一块是训练出来的,而不是通过 Sinusoidal
函数计算得到的固定嵌入。一般认为这种实现不利于拓展性(难以直接迁移到更长
的句子中)。
->>> 三个 embedding 不带权重相加,并通过一层 LayerNorm+dropout 后输出,其大小
为(batch_size, sequence_length, hidden_size)。
2.2 BertEncoder
组成:包含多层 BertLayer,这一块本身没有特别需要说明的地方,不过有一个细节值
得参考:利用 gradient checkpointing 技术以降低训练时的显存占用。
- BertLayer
- BertAttention
- BertSelfAttention
- BertSelfOutput
- BertIntermediate
- BertOutput
2.3 BertPooler
这一层只是简单地取出了句子的第一个token,即[CLS]对应的向量,然后过一个全连接层
和一个激活函数后输出:(这一部分是可选的,因为pooling有很多不同的操作)
NLP学习————实现一个BERT(简记)相关推荐
- 『NLP学习笔记』BERT文本分类实战
BERT技术详细介绍! 文章目录 一. 数据集介绍 二. 数据读取 三. 训练集和验证集划分 四. 数据分词tokenizer 五. 定义数据读取(继承Dataset类) 六. 定义模型以及优化方法 ...
- Datawhale组队学习NLP之transformer Task03 BERT
Datawhale组队学习NLP之transformer Task03 BERT 前言 一.句子分类 二.模型架构 1.模型输入 2.模型输出 三.词嵌入(扩展) 1.词嵌入 2.语境问题 三.BER ...
- 保姆级NLP学习路线来啦!
这个保姆级不是形容这份指南有多详细,而是形容这个指南会伴随你们一起成长哟(其实就是太多了写不完).之后的更新都会定期发文并汇总在Github上,欢迎催更: https://github.com/lee ...
- 最新Transformer模型大盘点,NLP学习必备,Google AI研究员出品丨资源
萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 可高效处理长文本的模型Longformer.和堪称"升级版"Transformer的BigBird模型,到底有什么区别? ...
- ACL 2019 | 基于知识增强的语言表示模型,多项NLP任务表现超越BERT(附论文解读)...
来源:PaperWeekly 本文共2000字,建议阅读10分钟. 本文提出了一种新方法,将知识图谱的信息加入到模型的训练中. 论文动机 自从 BERT 被提出之后,整个自然语言处理领域进入了一个全新 ...
- 【NLP】 深入浅出解析BERT原理及其表征的内容
本篇介绍目前NLP领域里影响力最大的预训练模型BERT.首先,大致介绍了BERT里有什么:接着,介绍了BERT的结构和其预训练的方式:最后,再总结BERT的表征的内容和分布. 作者&编辑 | ...
- ACL 2019 | 基于知识增强的语言表示模型,多项NLP任务表现超越BERT
作者丨张琨 学校丨中国科学技术大学博士生 研究方向丨自然语言处理 论文动机 自从 BERT 被提出之后,整个自然语言处理领域进入了一个全新的阶段,大家纷纷使用 BERT 作为模型的初始化,或者说在 B ...
- [深度学习] 自然语言处理 --- Bert开发实战 (Transformers)
本文主要介绍如果使用huggingface的transformers 2.0 进行NLP的模型训练 除了transformers,其它兼容tf2.0的bert项目还有: 我的博客里有介绍使用方法 [ ...
- [深度学习] 自然语言处理 --- BERT模型原理
一 BERT简介 NLP:自然语言处理(NLP)是信息时代最重要的技术之一.理解复杂的语言也是人工智能的重要组成部分.Google AI 团队提出的预训练语言模型 BERT(Bidirectional ...
最新文章
- 数据结构和算法:(3)3.2.2单链表的整表删除
- JS重复引用也会导致错误
- 思科路由器Ez***解决地址重叠测试
- php5.1 0day,关于phpwind 5.01-5.3 0day的分析
- 机顶盒 img打包工具_网络机顶盒刷机、固件升级图文详解 宏旺半导体包教包会...
- 分区助手删除linux,分区助手彻底删除硬盘文件方法
- coverity java_coverityamp;fortify1--Poor Error Handling: Overly Broad Catch
- H3C IRF2的三种配置情况「转载」
- 书评精益创业-新创企业的成长思维 (上)
- 01Postgresql下载安装和配置
- 综合日语第一册第八课
- Mac新手必备小技巧:一起进阶MAC大神
- xdm,程序员外包能干吗?
- tplogin 服务器未响应,为什么tplogin.cn老是域名解析错误
- 服务器系统升级文件转移,多可系统迁移说明
- mac在终端打开mysql_如何在Mac上打开终端
- java 写一个HelloJavaWorld你好世界输出到操作系统文件Hello.txt文件中
- 那个业务大拿死在了这个地方
- 网页无法在微信内访问怎么办,微信跳转链接的实现方法
- zuk android os 流量,原生用户最爱 Cyanogen OS版ZUK Z1固件
热门文章
- 2022年山东省职业院校技能大赛高职组“信息安全管理与评估”赛项竞赛规程
- Mysql常用命令2
- 黑白照片上色软件哪个好用?建议收藏这些软件
- 设计模式之适配器模式 :外部系统接口的使用
- 读论文2:SELFEXPLAIN: A Self-Explaining Architecture for Neural Text Classifiers
- 「衣米魔兽世界怀旧服」大数据分析反外挂系统查封145个穿门账号
- 计算机视觉研究人员必备的Linux命令行技巧
- N-gram和NNLM语言模型
- 记录自己考研二战失败后找工作的经历
- 啦啦外卖短信验证修复 短信提示:Specified signature is not matched with our calculation……