词向量到Bert代码——部分习题

习题

  1. from gensim.models import word2vec
    sentences = ...
    model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)
    上述代码中size代表什么?A. 目标词的最远距离 B. 词向量的长度 C. 训练时的线程数 D. 参与训练词的最小出现频率 
  2. 查看相应文档可知
    def attention(a,b,c, mask=None, dropout=None):
     d_k = c.size(-1)
     scores = torch.matmul(c, a.transpose(-2, -1)) / math.sqrt(d_k)
     if mask is not None:
     scores = scores.masked_fill(mask == 0, -1e9)
     p_attn = F.softmax(scores, dim = -1)
     if dropout is not None:
     p_attn = dropout(p_attn)
     return torch.matmul(p_attn, b), p_attn

    上述关于self-attention的代码中 a和c分别指代什么?
    A.key, query B.key, value C.query, value 
  3. class Layer(nn.Module):
     def __init__(self, features, eps=1e-6):
     super(Layer, self).__init__()
     self.a_2 = nn.Parameter(torch.ones(features))
     self.b_2 = nn.Parameter(torch.zeros(features))
     self.eps = eps
     
    def forward(self, x):
     mean = x.mean(-1, keepdim=True)
     std = x.std(-1, keepdim=True)
     return self.a_2 * (x - mean) / (std + self.eps) + self.b_2

    上面代码实现了什么功能?A. Batch Norm B. Layer Norm C.self-attention D.positional embedding
  4. class BertConfig(object):
     """BERT模型的配置类."""
     def __init__(self,
     vocab_size,
     hidden_size=768,
     num_hidden_layers=12,
      num_attention_heads=12,
     intermediate_size=3072,
     hidden_act="gelu",
     hidden_dropout_prob=0.1,
     attention_probs_dropout_prob=0.1,
     max_position_embeddings=512,
     type_vocab_size=16,
     initializer_range=0.02):

     self.vocab_size = vocab_size
     self.hidden_size = hidden_size
     self.num_hidden_layers = num_hidden_layers
     self.num_attention_heads = num_attention_heads
     self.hidden_act = hidden_act
     self.intermediate_size = intermediate_size
     self.hidden_dropout_prob = hidden_dropout_prob
     self.attention_probs_dropout_prob = attention_probs_dropout_prob
     self.max_position_embeddings = max_position_embeddings
     self.type_vocab_size = type_vocab_size
     self.initializer_range = initializer_range

    在上述Bert的配置文件中,intermediate_size指代什么?
    A.feed-forward输入的大小 B.Bert最终输出的大小 C. Self-attention隐藏层的神经元数 D.feed-forward中间层的大小
  5. 为什么BERT在第一句前会加一个[CLS]标志?[CLS]可以加到其他位置么?

答案与解析

  1. 答案:B 该问题就是api参数,大家可直接查看官方文档。解析:https://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec
  2. 答案:A 对比理论和代码,观察score那一行,对比q*k.T所以a是key,b是value
  3. 答案:B forward函数里很显然在减均值除以标准差,是一个norm操作,又因为transformer里使用的是LayerNorm不是batchNorm,所以这里选 B
  4. 答案:D 这个大家可以根据理论猜测,然后查看源码验证,这里的源码片段是 huggingface的 transformers 框架里的,在类BertIntermediate里。源码虽然很庞大,很多时候并不需要读懂所有的部分,只需要着眼于跟问题有关的部分,并延伸即可。https://huggingface.co/transformers/
  5. 答案:解析:[CLS]用来表征整个输入,可以将其输入到全连接层做分类任务,[CLS]放到末尾应该也可以,但是放在中间可能不太好,会打断文本的连续性影响特征学习。

本部分习题都是参考开课吧NLP训练营的,欢迎大家讨论哟

你可能感兴趣的:(NLP,自然语言处理,神经网络,深度学习,pytorch)