习题
- from gensim.models import word2vec
sentences = ...
model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)
上述代码中size代表什么?A. 目标词的最远距离 B. 词向量的长度 C. 训练时的线程数 D. 参与训练词的最小出现频率 - 查看相应文档可知
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 - 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 - 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中间层的大小 - 为什么BERT在第一句前会加一个[CLS]标志?[CLS]可以加到其他位置么?
答案与解析
- 答案:B 该问题就是api参数,大家可直接查看官方文档。解析:https://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec
- 答案:A 对比理论和代码,观察score那一行,对比q*k.T所以a是key,b是value
- 答案:B forward函数里很显然在减均值除以标准差,是一个norm操作,又因为transformer里使用的是LayerNorm不是batchNorm,所以这里选 B
- 答案:D 这个大家可以根据理论猜测,然后查看源码验证,这里的源码片段是 huggingface的 transformers 框架里的,在类BertIntermediate里。源码虽然很庞大,很多时候并不需要读懂所有的部分,只需要着眼于跟问题有关的部分,并延伸即可。https://huggingface.co/transformers/
- 答案:解析:[CLS]用来表征整个输入,可以将其输入到全连接层做分类任务,[CLS]放到末尾应该也可以,但是放在中间可能不太好,会打断文本的连续性影响特征学习。
本部分习题都是参考开课吧NLP训练营的,欢迎大家讨论哟