Bert用于命名实体识别任务(NER)
前记:BERT(Bidirectional Encoder Representation from Transformers)是2018年10月Google AI研究院提出的一种预训练-微调大模型,和GPT属于是同一时期的产物。BERT在多项自然语言处理任务上都实现了SOTA,抛弃了传统模型,在一种任务上需要修改模型架构的方式,而是同一个模型架构在不需要修改的情况下,应用于多个任务上。因此,一经问世就引起了学术界极大地关注,甚至超过了GPT。 BERT的网络架构使用的是基于Transformer中的Encoder部分,由于其使用Attention的关系,从而避免了传统网络结构,诸如RNN,LSTM,GRU等的遗忘问题,可以捕获一个长序列不同token的相关性问题。 Bert架构图如下: 网络结构介绍:这里重点介绍一下Bert的嵌入编码部分,后面部分就是Encoder模块的堆叠了,并没有什么新奇的。Bert的嵌入编码有三部分,分别是token Embedding,position Embedding, segment Embedding,之所以这里需要segment Embeddi...
大模型中的三角位置编码实现
三角位置编码公式: Transformer中嵌入表示 + 位置编码的实现12345678910111213141516171819202122232425262728293031323334353637import torchimport mathfrom torch import nn# 词嵌入位置编码实现class EmbeddingWithPosition(nn.Module): """ vocab_size:词表大小 emb_size: 词向量维度 seq_max_len: 句子最大长度 (人为设定,例如GPT2的最大长度是1024) """ def __init__(self, vocab_size, emb_size, dropout=0.1, seq_max_len=5000): self.seq_emb = nn.Embedding(vocab_size, emb_size) # 序列中每个token的embedding向量表示 # 位置...
大模型中的KVCache技术
Transformer中的KVCache优化原理前记:现在KVCache已经属于是必备的技术了,但是博主发现自己只是听过这个名词,但是并不了解该技术的原理和实现,遂学习记录了本博客 1.首先KVCache技术有什么用?答:KVCache技术主要帮助模型在推理过程,避免重复的计算,从而减少计算量,加快模型推理速度,同时也会带来成本的降低,设想如果是用户使用一款由该模型作为基座的大模型产品,那么更快的推理速度在用户层面会带来更好的用户体验,同时对于产品运营成本也有所降低。 2.KVCache技术是如何避免掉重复计算的?由下图可知,token在输入模型计算的过程中,存在重复计算的部分,可以发现通过前n个token计算结果获得第n+1个token预测,然后通过这n+1个token再输入到网络中来计算第n+2个token,细细一想,聪明的你是不是发现了后面n+1个token计算的时候,前n个token是不是重复计算了,也就是说 n+1个token输入到模型中,实际上前面n个token的计算,和之前只有n个token输入到网络中的计算结果是一样的,这样就带来了重复计算问题,那我们如何避免掉重...
Attention is all you need.
德语->英语项目: https://github.com/TCcjx/pytorch_transformer-remake 项目目录结构(文件说明): .data(文件夹):数据集Multi30K checkpoints(文件夹):训练权重文件保存处 config.py:全局配置文件,DEVICE以及输入token的最大长度 dataset.py:数据预处理文件,构建德语和英语词表,实现德语和英语的词元token和IDX的一一隐射,以及德语和英语句子预处理函数(输入德语和英语句子,返回分词后的词元列表信息,以及词元ID列表) multihead_attn.py: 构建多头注意力机制模块,这里的实现同时也考虑了解码器中第二个多头注意力机制模块的代码复用,在编码器和解码器的多头注意力机制模块中都可以复用这个多头注意力机制的模块 encoder_block.py:编码器模块的构建 encoder.py:编码器的实现,同时自动处理PAD掩码矩阵,再传入encoder_block中,实现多个encoder_block的堆叠使用 decoder_block.py:解码器模块的构建 de...