预训练BERT

some more questions:
q1: 为什么在前面章节中 BERTModel中单独留出一个‘hidden’ layer,而不是放入NSP中?这个layer起了什么作用
q2: 置于 15%, 80%几个数字有什么方面的考虑?10%占比的使用原tokens是否可以删除?

每一个词都可以表示全句
但如果使用正常token来表示全句,那么这个token既要表示其本身又要表示全句
所以使用无意义的标签更合适
至于为什么使用 <cls> 而不是最后的 <seq> (你无法很方便的确定中间的 <seq> 在哪里, 所以默认是在说 token_x[-1] ),我觉得主要是社区共识导致的

q1 其实合入NSP更合适,这点李沐老师在视频中也说到了

class NextSentencePred(nn.Module):
    """BERT的下一句预测任务"""

    def __init__(self, num_hiddens, num_inputs=768, **kwargs):
        super().__init__()
        self.mlp = nn.Sequential(nn.Linear(num_inputs, num_hiddens), nn.Tanh(), nn.Linear(num_hiddens, 2))

    def forward(self, X):
        return self.mlp(X)

q2我个人理解也是实践出的结果吧,说是10%也有一定的正则化效果