http://zh-v2.d2l.ai/chapter_natural-language-processing-pretraining/bert.html
I agree with you, np.repeat( [0,1], 3 ) = [0,0,0,1,1,1]
在下一句预测里面为什么要先flatten encoded_X
啊? 根据后面, 不应该只输入<cls>
对应的特征吗?
encoded_X = torch.flatten(encoded_X, start_dim=1) #这里为什么不是 encoded_X[:,0,:] ?
# NSP的输入形状:(batchsize,num_hiddens)
nsp = NextSentencePred(encoded_X.shape[-1])
nsp_Y_hat = nsp(encoded_X)
nsp_Y_hat.shape
我觉得应该是:
nsp_input = encoded_X[:, 0, :]
print("nsp_input", nsp_input.shape)
# NSP的输入形状:(batchsize,num_hiddens) 只需要输入<cls>的特征
nsp = NextSentencePred(nsp_input.shape[-1])
nsp_Y_hat = nsp(nsp_input)
nsp_Y_hat.shape
1 Like
- 为什么BERT成功了?
因为BERT整合了词的表示依赖于它们的上下文;对上下文进行双向编码,并且架构是任务无关的,从左到右编码上下文。
- 对于上下文敏感的词表示,如ELMo和GPT,词的表示依赖于它们的上下文。
- ELMo对上下文进行双向编码,但使用特定于任务的架构(然而,为每个自然语言处理任务设计一个特定的体系架构实际上并不容易);而GPT是任务无关的,但是从左到右编码上下文。
我也有这个疑问…
而且他说用单隐藏层的感知机, 可是代码中根本没有隐藏层.
我认为,单隐藏层就是nn.Linear。
使用torch.flatten是因为,在这个例子中,X.shape=(2,8,768),也就是有2个句子,每个句子有8个单词,目的是分类这两个句子。但是没有<cls>
,所以它认为每个句子的嵌入([1,8*768])就是<cls>
。