1.史上最细节的源码自然语言处理NLP/Transformer/BERT/Attention面试问题与答案
2.教你用PyTorch玩转Transformer英译中翻译模型!
3.PyTorch中torch.nn.Transformer的源码源码解读(自顶向下视角)
4.GPT2 下载使用(PyTorch+Transformer)
史上最细节的自然语言处理NLP/Transformer/BERT/Attention面试问题与答案
经过精心整理,以下内容包含了史上最详尽的源码NLP面试问题,关注Transformer、源码BERT以及Self Attention,源码还包括Norm相关问题,源码unity loom源码旨在深入理解这些技术的源码细节。 问题精选自论文与实践,源码如Transformer的源码“Attention Is All You Need”和BERT的“Pre-training of Deep Bidirectional Transformers for Language Understanding”。深入学习,源码需要对这些基础模型有基本认知,源码包括Transformer的源码Pytorch源码、BERT的源码实现以及HuggingFace Transformers库。为何BERT首句加[CLS]标记?
BERT的源码Embedding相加对语义的影响如何?
BERT词掩码策略分别针对哪些情况?
为何选择%词进行mask,可否调整比例?
如何针对不同任务调整BERT的源码Fine-tuning方法?
限制BERT输入长度的原因是什么?
BERT中的非线性来源,multi-head attention是否线性?
BERT如何处理一词多义问题?
BERT输入细节,position id、type_id和attention_mask的长沙社交app源码作用是什么?
学习率warm-up策略的原理和目的?
BERT使用的Normalization结构及其区别?
ELMO与BERT的双向性差异何在?
BERT与Transformer Encoder的区别及其目的?
BERT的损失函数是什么?
Masked LM与Next Sentence Prediction任务的训练顺序?
Transformer的权重共享机制及其好处。
Transformer的点积模型缩放原因及multi-head attention的实现。
Transformer Encoder-Decoder交互及与seq2seq的区别。
multi-head attention降维的原因及好处。
XLNet如何利用上下文信息,双流注意力的作用和设计。
ALBERT的优化策略和与BERT的对比。
Attention与全连接层的区别,以及self-attention的细节。
Norm的基础操作及其在NLP中的应用。
面试中,面试官会关注你的实际应用和理解能力,因此理解Transformer/BERT在项目中的应用至关重要。本文旨在加深你对这些技术的理解,提升你的面试准备。 对于未解答的问题,鼓励思考和探索,我会在有空时补充答案。公众号ai源码如需NLP相关咨询,欢迎提问。 参考资源链接省略。教你用PyTorch玩转Transformer英译中翻译模型!
本文分享一个基于Harvard开源的 transformer-pytorch的机器翻译模型(英译中)。在编写项目的过程中,从数据处理、模型编写、BLEU值计算到解决GPU的显存分配问题,我们都踩了不少坑,因此将心得分享给大家~
数据集来自 WMT Chinese-English track (Only NEWS Area)。我们使用 sentencepiece 实现BPE分词,将原始的英文和中文句子对转化为分词后的文本格式。对于英文词表大小设定为,中文词表大小设定为,以覆盖数据集中词频为以上的BPE组合和词频为以上的BPE组合。我们基于torch.utils.data.Dataset进行数据的同声传译源码预处理,将其转换为transformer支持的输入格式。
Transformer模型基于Attention机制,无需顺序读取序列,可以实现高度的并行化。它在多个任务上超过了以往的SOTA模型,并且在分类、生成等任务上都表现出色。在模型结构上,它使用了一个编码器-解码器模型,通过Transformer的定义,我们构建了模型并使用了Harvard开源的transformer-pytorch代码。
我们采用了Warm Up策略,先使用较小的学习率进行训练,等到模型稳定后再使用预先设置的学习率进行训练。这样可以避免模型在初始阶段的学习不稳定。在模型训练中,我们加入了多GPU训练支持,魔法至尊公式源码使用损失函数的分布化计算,让梯度在各个GPU上单独计算,反向传播,避免了nn.DataParallel中存在的显存使用不平衡问题。
实验结果显示,NoamOpt对实验效果的提升较大,验证集上的最优Bleu分数提升了8.4%,测试集Bleu分数提升了7.9%。通过Beam Search,我们发现随着beam size的增加,BLEU值也明显增加,且显著优于greedy decode的BLEU分数,提升3.5%。
我们选取了三个代表性的例子,对比了greedy search和beam size为3的beam search的解码结果。从结果可以看出,地名、货币名这类专有名词的翻译基本正确,但对于一些较为抽象的词语,如“对于”,seq2seq的机器翻译由于没有语法知识作为支持,无法正确翻译出中国、美国和前苏联三者之间的关系。此外,我们发现无论Ground truth长短,模型输出的结果在不出现重复翻译的情况下基本比Ground truth要短,可能是因为模型输出的句子长度普遍偏短。
通过这次项目,我们熟悉了Transformer的细节,也遇到了许多问题。希望将我们的总结分享给大家,希望能对大家有所帮助。
PyTorch中torch.nn.Transformer的源码解读(自顶向下视角)
torch.nn.Transformer是PyTorch中实现Transformer模型的类,其设计基于论文"Attention is All You Need"。本文尝试从官方文档和代码示例入手,解析torch.nn.Transformer源码。
在官方文档中,对于torch.nn.Transformer的介绍相对简略,欲深入了解每个参数(特别是各种mask参数)的用法,建议参考基于torch.nn.Transformer实现的seq2seq任务的vanilla-transformer项目。
Transformer类实现了模型架构的核心部分,包括初始化和forward函数。初始化时,主要初始化encoder和decoder,其中encoder通过重复堆叠TransformerEncoderLayer实现,decoder初始化类似。forward函数依次调用encoder和decoder,encoder的输出作为decoder的输入。
TransformerEncoder初始化包括设置encoder_layer和num_layers,用于创建重复的encoder层。forward函数则调用这些层进行数据处理,输出编码后的结果。
TransformerEncoderLayer实现了论文中红框部分的结构,包含SelfAttention和FeedForward层。初始化时,主要设置层的参数,forward函数调用这些层进行数据处理。
在实现细节中,可以进一步探索MultiheadAttention的实现,包括初始化和forward函数。初始化涉及QKV的投影矩阵,forward函数调用F.multi_head_attention_forward进行数据处理。
F.multi_head_attention_forward分为三部分:in-projection、scaled_dot_product_attention和拼接变换。in-projection进行线性变换,scaled_dot_product_attention计算注意力权重,拼接变换则将处理后的结果整合。
TransformerDecoder和TransformerDecoderLayer的实现与TransformerEncoder相似,但多了一个mha_block,用于处理多头注意力。
总结,torch.nn.Transformer遵循论文设计,代码量适中,结构清晰,便于快速理解Transformer模型架构。通过自顶向下的解析,可以深入理解其内部实现。
GPT2 下载使用(PyTorch+Transformer)
首先,需要下载GP2。
生成文本:从前,世界是一个充满美丽和危险的地方。世界充满了危险,世界充满了危险。世界充满了危险,世界充满了危险。
从上面的结果可以看出,GPT2自动完成了故事的接龙,但效果似乎并不理想,因为故事结尾出现了断裂。
查看GPT2模型的细节:
输出结果如下:
模型的总参数为M,与一个普通大小的CNN相当,实际上并不算大。
应用2:对话
输出结果:
应用3:玩游戏
结果输出:
应用4:生成email模板
结果如下:
小结:这个水平确实不怎么样,难怪当年GPT2一直开源,直到GPT 3.5这样的好东西才闭源。