BERT
文章平均质量分 81
BERT
_illusion_
知乎主页:https://www.zhihu.com/people/illusions-29/posts
展开
-
对各大预训练语言模型的简单总结和评述(BERT/RoBERTa/ALBERT/ELECTRA/ERNIE/structBERT/SpanBERT...)
前言本文系对BERT及其各种优化的简单总结。如RoBERTa、ALBERT、ERNIE、SBERT、MacBERT等。随积累,即时更新。总结BERT初始预训练任务简介:MLM,即完形填空。我们对一个sequence/句子中15%的token进行随机地mask,然后对这些被mask的token进行预测;NSP。判断两句话是否有上下文的关系。两句话可能来自不同的文章。在组成预训练数据时,有10%的可能随机将最大长度512的样本限制为小于512长度(BERT是128),一方面降低预训练时长,另一原创 2021-02-19 22:06:08 · 3355 阅读 · 0 评论 -
pytorch冻结模型中某几层的参数
本文系转载,写得很详细,故记录于此,方便查阅(实际上只看方法1就够了)链接:https://www.zhihu.com/question/311095447/answer/589307812先列出4种可行参考方法,最后列出一种方法的代码实现。首先假设如下的模型:class Char3SeqModel(nn.Module): def __init__(self, char_sz, n_fac, n_h): super().__init__() .转载 2020-12-16 17:28:16 · 9410 阅读 · 0 评论 -
对抗训练的理解,以及FGM、PGD和FreeLB的详细介绍
对抗训练基本思想——Min-Max公式如图所示。中括号里的含义为,我们要找到一组在样本空间内、使Loss最大的的对抗样本(该对抗样本由原样本x和经过某种手段得到的扰动项r_adv共同组合得到)。这样一组样本组成的对抗样本集,它们所体现出的数据分布,就是该中括号中所体现的。外层min()函数指的则是,我们面对这种数据分布的样本集,要通过对模型参数的更新,使模型在该对抗样本集上的期望loss最小我们知道如何在已有数据上进行模型更新,但如何找到最佳扰动r_adv呢?很简单——梯度上升。所以说,对抗原创 2020-12-08 18:07:13 · 20722 阅读 · 11 评论 -
pytorch中state_dict()和named_parameters()的差别,以及model.buffer/model.parameter
在使用pytorch过程中,我发现了torch中存在3个功能极其类似的方法,它们分别是model.parameters()、model.named_parameters()和model.state_dict(),下面就具体来说说这三个函数的差异首先,说说比较接近的model.parameters()和model.named_parameters()。这两者唯一的差别在于,named_parameters()返回的list中,每个元祖打包了2个内容,分别是layer-name和layer-param,而pa原创 2020-11-27 12:42:02 · 5568 阅读 · 10 评论 -
GLUE任务内容及数据集简介
通常来说,NLP可以分为自然语言理解(NLU)和自然语言生成(NLG)。在NLU方面,我们拿时下最流行的GLUE(General Language Understanding Evaluation)排行榜举例,其上集合了九项NLU的任务,分别是CoLA(The Corpus of Linguistic Acceptability):纽约大学发布的有关语法的数据集,该任务主要是对一个给定句子,判定其是否语法正确,因此CoLA属于单个句子的文本二分类任务; SST(The Stanford Sentime转载 2020-07-13 11:19:06 · 5493 阅读 · 0 评论 -
RMSProp/Momentum/Adam/AdamW,多种优化器详解及伪代码实现
多种梯度更新方法——都是对Gradient Descent的优化传统GDx = x - lr * grad_xAdaGrad——不同方向的梯度应该是可以不一样的为了解决不同方向上梯度涨落速度不一致的情况,所以相当于给每个方向不同的learning_rate。具体每个方向的lr大小要怎么拟定?——之前该方向上grad大的,就给小lr——即梯度变化幅度缓慢,那么就拉开步子大胆走。如上图的公式,历史grad总量和lr大小成反比,即该方向的总grad越小,则lr就越大。但该方法解决不了,在该方向上原创 2020-07-09 16:12:12 · 5041 阅读 · 0 评论 -
BERT中是怎么做到只计算[MASK]token的CrossEntropyLoss的?及torch.nn.CrossEntropyLoss()参数
nn.CrossEntropyLoss()的参数torch.nn.CrossEntropyLoss(weight=None, size_average=None,ignore_index=-100, reduce=None, reduction=‘mean’)weight:不必多说,这就是各class的权重。所以它的值必须满足两点:type = torch.Tensorweight.shape = tensor(1, class_num)size_average 、 reduce :原创 2020-07-02 16:55:13 · 4183 阅读 · 0 评论 -
BERT为何被称为“自编码模型”?为何将BERT的训练过程称为“降噪”?
最近,阅读并调试了albert的预训练代码,对于BERT为何被称为“自编码”模型有了更深的理解,在这里稍作介绍:**注:我文中所提到的albert/BERT为预训练而准备的对数据做[MASK]的code在这里:prepare_lm_data_ngram.py正文开始…该函数涉及了多种噪声引入方式,非常形象地阐释了为什么BERT被称为"自编码"模型,以及为什么把BERT对预训练输入的处理称为"加噪声",以及为何会将"自编码"过程(即预训练的训练过程)称为"降噪"。“噪声"是BERT故意在[MASK]阶段原创 2020-06-30 10:10:26 · 1301 阅读 · 0 评论 -
浅谈sigmoid函数和softmax函数
问题提出最近在找文本分类问题的trick,偶尔看到夕小瑶大佬的一个回答:在文本分类任务中,有哪些论文中很少提及却对性能有重要影响的tricks? - 夕小瑶的回答 - 知乎https://www.zhihu.com/question/265357659/answer/578944550里面有句话引起了我的注意:关于二分类二分类问题一定要用sigmoid作为输出层的激活函数?当然不是,尝试一下包含俩类别的softmax吧。可能多一条分支就多一点信息叭,虽然后者在数学形式上更丑一点,但是实践中原创 2020-06-02 17:53:42 · 5176 阅读 · 1 评论 -
Sentence-BERT 论文阅读
BERT、RoBERTa已经在文本语义相似度任务(semantic textual similarity ,STS)上达到了sota。然而,BERT要求句子对拼接到一起再传入模型中,这会导致巨大的计算开销——例如,在10000条句子中寻找最相似的两条,则需要约5*10^7次计算,如果使用BERT,则需要约65小时,这导致许多涉及篇章向量的任务,如相似度计算、聚类等无从开展。基于此,我们提出了sentence-BERT(SBERT),它使用基于预训练过的BERT的孪生网络,获得在语义上有足够意义的篇章向.原创 2020-05-25 16:02:21 · 8851 阅读 · 1 评论 -
BERT、ALBERT模型加载——From pytorch_model.bin
模型文件加载的文件跳转路径:/run_classifier.py(387) AlbertForSequenceClassification.from_pretrained()->/model/modeling_utils.py(191) from_pretrained() ->/model/modeling_utils.py(363) load() ->/model/mo...原创 2020-04-27 17:00:03 · 6587 阅读 · 0 评论