bert 原理及源码分析(一)

全称:Bidirectional Encoder Representations from Transformers,即双向 transformer的encoder 表示。

bert 的结构图

中间的神经网络为 transformer。

Embedding

embedding 由 3 种 embedding 求和而成:
在这里插入图片描述
Token Embeddings:词向量
Segment Embeddings:句向量
Position Embeddings:位置向量

Pre-training

Pre-training Task 1:Masked LM
俗称完形填空任务。利用上下文信息预测出缺失的单词,是不是和 word2vec 中的 CBOW 很像?在训练过程中速记 mask 15 % 的 token,最终的损失函数只计算被 mask 掉的那个 token。
随机 mask 的时候 10% 的单词会被替代成其他单词,10% 的打车你不提换,80%的单词1被替换成 [MASK]。

  • 该任务的目的是什么?
    充分利用上下文信息。因为单项预测不能理解整个句子的语义。捕捉词语级别的表示
  • 为什么会有10%,10%,80% 的替代情况而不是全部用 mask 替代?
    全部用 mask替代的话,模型会将 mask 当作一个固定的词,这不是我们想要的。

Pre-traing Task 2:Next Sentence Prediction
训练的输入是 句子 A 和 B,B 有一半的几率是 A 的下一句,模型预测 B 是不是 A 的下一句。

  • 该任务的目的是什么?
    捕捉句子级别的表示。可以应用在问答或阅读理解上,效果奇佳。
    两个 loss 都是 cross entropy loss

Fine-tuning

在 pre-training 的基础上
分类:直接取第一个 token(即 CLS) 的 hidden-state C,对其进行一个线性变换,再经过 softmax 转换得到 label probability。
文本匹配:输出为 label: [0,1] (是否匹配),输入为 待匹配的两个文本 text_a 和 text_b。
还可以用于标注、问答等任务上。

源码分析

相关代码如下:

create_pretraining_data.py
extract_features.py
modeling.py
modeling_test.py
optimization.py
optimization_test.py
run_classifier.py
run_classifier_with_tfhub.py
run_pretraining.py
run_squad.py
tokenization.py
tokenization_test.py

tokenization.py

功能:对原始文本进行预处理,分词。
主要分为 BasicTokenizer.py 和 WordpieceTokenizer 两类,以及对包含它们

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Bert 压缩模型的代码可以在以下地址获取: - Bert 原始模型的代码:https://github.com/google-research/bert 如果你想要使用压缩版的 Bert 模型,你可以参考以下项目: - DistilBert:https://github.com/huggingface/transformers/tree/main/src/transformers/modeling_distilbert - TinyBert:https://github.com/huggingface/transformers/tree/main/src/transformers/modeling_tinybert - MobileBert:https://github.com/huggingface/transformers/tree/main/src/transformers/modeling_mobilebert 这些压缩版的 Bert 模型都是在原始的 Bert 模型的基础上进行了改进和优化,使得它们的模型大小更小,推理速度更快,同时保留了较高的准确率。 ### 回答2: bert压缩模型的码地址可以在GitHub上找到。在GitHub上有许多开项目,其中有一些是专门为BERT模型压缩而设计的。这些项目通常会提供详细的代码和使用指南。 一种常见的BERT模型压缩方法是通过稀疏化来减少模型的参数数量。稀疏化可以通过引入稀疏矩阵或掩码的方式来实现。这些方法的目标是识别和删除不重要的参数,从而减少模型的大小。在GitHub上可以找到一些使用这种方法的开项目,它们提供了压缩BERT模型的代码。 另一种常见的压缩方法是权重剪枝。这种方法通过将参数的数值范围变得更小来减少模型的体积。通过剪枝掉参数的小值,可以减少模型的参数数量。GitHub上也有一些开项目提供了使用权重剪枝来压缩BERT模型的代码。 总之,如果您想要获取BERT模型压缩的代码地址,建议在GitHub上搜索相关的开项目,其中会有一些专门为此目的而创建的项目,提供了详细的代码和使用指南。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值