bert框架的介绍
BERT是一个基于Transformer的双向编码器表示模型,它通过预训练学习到了丰富的语言表示,并可以用于各种自然语言处理任务。
模型结构:
BERT基于Transformer的编码器部分,采用了多层自注意力机制和前馈神经网络。这种结构使得BERT能够同时考虑文本中的上下文信息,从而捕捉到更加丰富的语义特征。
预训练任务:
BERT通过两个无监督的预测任务进行预训练,即遮蔽语言模型(Masked Language Model, MLM)和下一句预测(Next Sentence Prediction, NSP)。在MLM任务中,模型需要预测被遮蔽的词;在NSP任务中,模型需要判断两个句子是否是连续的。这两个任务使得BERT能够学习到语言的深层结构和语义信息。
双向性:
与之前的语言模型(如GPT)主要依赖之前或之后的上下文不同,BERT是双向的。这意味着它在预测一个词时会同时考虑该词前后的上下文,从而更准确地捕捉语义信息。
微调:
在完成预训练后,BERT可以通过微调来适应各种下游任务。微调是指在特定任务的数据集上对预训练模型进行进一步的训练,以使其更好地适应该任务。BERT的灵活性使得它可以应用于多种自然语言处理任务,如文本分类、命名实体识别、问答等。
表现与影响:
BERT在各种自然语言处理任务中都取得了显著的成绩,刷新了多项基准测试的记录。它的成功推动了预训练语言模型的发展,为后续更多先进模型(如RoBERTa、ALBERT等)的出现奠定了基础。
bert框架->Transformer->结构
传统RNN网络计算时存在的问题?
1、串联,导致数据必须从h1-h2-…hm。数据训练时间变长,因为需要要等h1的结果出来才能计算h2。
2、并行计算效果不好,也就是不能多台服务器同时训练一个网络。
传统word2vec存在的问题?
1、词向量一旦训练好了,就不会改变
2、不同语境中的词含义不同,例如 【a、台湾人说机车。 b、机车】 因此根据上下文不同的语境,应该有多个不同的词向量。
结构
Encoder-Decoder
Encoder-Decoder:
也就是编码-解码框架,目前大部分attention模型都是依附于Encoder-Decoder框架进行实现。 在NLP中Encoder-Decoder框架主要被用来处理序列-序列问题。也就是输入一个序列,生成一个序列的问题。这两个序列可以分别是任意长度。
比如:
文本摘要:输入一篇文章(序列数据),生成文章的摘要(序列数据)
文本翻译:输入一句或一篇英文(序列数据),生成翻译后的中文(序列数据)
问答系统:输入一个question(序列数据),生成一个answer(序列数据)
Encoder:
编码器,对于输入的序列<x1,x2,x3…xn>进行编码,使其转化为一个语义编码C,这个C中就储存了序列<x1,x2,x3…xn>的信息。 编码方法:主要RNN/LSTM/GRU/BiRNN/BiLSTM/BiGRU,
Decoder:
解码器,根据输入的语义编码C,然后将其解码成序列数据,解码方式也可以采用RNN/LSTM/GRU/BiRNN/BiLSTM/BiGRU。 Decoder和Encoder的编码解码方式可以任意组合
attention
自注意力机制是Transformer架构的核心。它允许模型在序列中的每个位置都计算与其他位置的依赖关系,无论这些位置之间的距离有多远。这种机制使得模型能够捕捉到长距离依赖关系,并且由于其并行化的特性,可以非常高效地处理数据。
一句话中,哪些是重点?如何让计算机关注到话语中的重点?
如何实现slef attention呢?
1、首先输入经过编码后得到的词向量
2、构建三个矩阵,相当于cnn的卷积核, 分别为wQ、wK、wv矩阵。
3、将每一个词向量与矩阵相乘。得到QKV矩阵。 其中Q:为需要查询的 K:为等着被查的 V:实际的特征信息
slef attention如何计算
1、计算一段话中每个词之间的匹配程度。
2、通过匹配程度得到每个词的特征重要性。
每个词的Q会跟整个序列中的每一个K计算得分,然后基于得分再分配特征。
因此当和不同的词组合成序列,就会得到不同的特征值。因为不同的组合序列语句,注意力不同。