BERT详细解析!!草履虫也能看懂!!!求点赞!!!!

浅看了一下BERT的代码,相当于没看。

BERT

论文地址:https://arxiv.org/pdf/1810.04805

BERT只使用到了encoder架构(同时查看句子中的所有单词),base_bert使用了12个encoder堆叠。创新在输入和loss阶段。

整体而言BERT使用了两种训练策略

  1. 掩码预测模型MLM)
  2. 预测下一句NSP)

input = token emb + segment emb +position emb

对于这个token emb使用的是WordPiece分词方法

对于这个segment emb主要是为了区分两个句子句子A向量值标为0句子B向量值标为1.

对于这个position embTransformer不同这是一个学习训练参数最大长度固定之后不能外推只能处理那么长句子比如最大长度定为了512编码维度768那么初始化一个512*768向量最多处理长度512句子如果还更长就只能超出向量随机初始化进行微调

MLM

主要可以理解句子上下文

这部分主要是预训练过程中每一个输入序列一部分单词mask一下,然后训练模型根据周围单词提供上下文推测这个mask是什么

这就导致BERT用于下游位置微调时候是没有[mask]标志预训练微调之间不匹配所以训练的时候80%*15%进行替换为[mask],10%*15%的概率替换为其他单词,剩下10%的句子不做任何调整。但也只能缓解这个问题,而且只有15%被预测导致模型收敛速度很慢

NSP

主要可以理解句子之间联系关系

预测第二句是否第一句相连训练的数据50%顺序相连样本50%数据随机选择句子

传入两个句子如上图。如上图,[cls]是每一个输入的标志,[sep]是两个句子之间的分隔。

分词

(因为BERT使用了WordPiece所以补充一章分词的内容。)

分词主要是为了输入文本拆分成一个词元方便输入学习任务分词主要基于三种维度进行词粒度(之前的第一版transformer,将词按照空格来区分,中文的话使用jieba分词工具来区分)字符粒度(英文按照26个字母,中文按照5000多个常用字,另外再补充一些常用的字符)子词粒度(subword介于上述两者之间)

subward

BPE

BPE主要是基于26字母和其他符号进行合并到达设定的合并次数

首先句子每一个字母字母出现的频率出来

然后基于拆出来字母-次数进行合并两个一起出现最多合并为一个

其中对于每一个都会结束的地方增加</w>主要为了区分哪些后缀

缺点

  1. 分词结果有很多可能会导致有歧义
  2. 很依赖训练语料
  3. 无法得到不同形态单词之间关联性

BBPE

BPE合并逻辑一样的,但是BBPE不是两个字母合并而是合并两个字节这样的可以更好的扩展多语言、动态处理未登录词,迁移能力更强。而且词表大为减少。

WordPiece

相较于BPEwordpiece根据互信息合并的选择互信息最大两个子词合并

缺点计算复杂而且语料库影响

ULM

首先初始化一个大的词表(使用BPE或者别的什么)然后通过删除损失影响小的subword缩小词表总体而言是希望找到整个句子概率最大子词序列不同于BPE或WordPiece的确定性分词,ULM会保留多个可能的分词结果,并为每种分词方式计算概率,最终输出概率最高的候选分词

相较于之前方法这种方法语料库要求降低但是计算量上升

基于维特比算法计算ULM代码总体而言就是每一个进行分词计算每一种存在分词形式的损失找到最优解使用的时候控制字符子词频率防止过拟合。(大模型使用的一般30000-50000.

使用动态规划算法一步步调整end_idx最优解(减少暴力搜索中的重复计算,将时间复杂度降低)总之ULM算法的优点就是考虑了不同分词可能

今天最大收获知道原来调试控制台不需要自己print...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值