赞
踩
此篇文章是对macbert4csc模型的一次尝试与思考,废话不多说,看内容。
这个模型分成两部分:
举例:
比如错句为我和你在一其
,正确的句子为我和你在一起
,错句输入MLM,得到的结果假设为我和你在一器
。然后输入linear判别器,判断和正确的句子做二分类。最后两个loss进行相加。
首先看看什么是macbert,全称是(MLM as corrector),它是哈工大和讯飞一起训练的模型。主要做的内容有两点:
第一条的做法好处是下游任务一般不会有[mask],那么就不会带来预训练模型和下游任务不匹配的问题。
第二条的做法好处是简单来讲就是更能理解句子的语义性(合理以及通顺)。
这个问题就是为什么选择macbert做微调,因为macbert对mlm中做mask替代的地方用了同义词替换。
这个问题是我自己强行加进来的,哈哈。。
先来看下electra的结构图。
electra模型分成两部分:
the
和painting
做[MASK]
,然后使用生成器进行训练获取结果, 其中the
对了,painting
对应了car
。painting
生成错了。其loss计算方式如下所示:
有木有发现,两者其实还蛮像的,哈哈。
下面是正经思考:
回答1:我觉得阔以,甚者我觉得结果要比macbert4csc更好,为什么?
回答2:我觉得阔以,因为对于多loss,一般没有好的解决方法,明明超参数,只能实验呗。作者在这里选择了50,因为他认为
二分类相比mlm的交叉熵更容易一些,所以给予了更大的权重。
但是我觉得还可以有另外一种思路来参考,即灾难性遗忘
,它是说下游任务对预训练模型进行fine-tune,会对预训练模型造成干扰,那么loss计算时可以分成两部分,pretrained loss和fine-tune loss,一般按经验fine-tune loss权重为0.5。
作者这里使用0.7/0.3的权重分配给MLM和sigmoid二分类,这里我对其做了如下调整:
ID | MLM weight | sigmoid二分类 weight | dev metric |
---|---|---|---|
1 | 1 | 0.5 | epoch26:0.9168 |
2 | 1 | 5 | epoch35:0.914 |
3 | 1 | 50 |
以macbert eval.py为准进行测试,记得把macbert_model_dir改成自己的。
以epoch 26的模型为准:
|
|
和”shibing624/macbert4csc-base-chinese”进行对比,发现recall要高了不少,结果效果更好了些~。
dev metric 在epoch 35的时候为0.914,相比ID(1)在epoch 26 0.9168的结果,发现收敛速度变的慢了。
故这个忽略。
dev metric 在epoch 35的时候为0.9112,虽说还有小量上涨可能,但是train metric已经过拟合了,这个结果让我觉得…,emmmm,这些超参没有达到想象中的区别哇。
作者在进行二分类的时候使用了最后一层的hidden_states,那么是否可以对所有的hiddeen_states分配不同的权重。为什么?前面的layer更偏向浅层语义信息,比如词法,句法等,越往后代表的含义可能更深层次,本来就是预测词对不对,搞那么深不一定适合。
回头尝试尝试。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。