input_ids:[batch_size,seq_length]
input_mask:[batch_size,seq_length]
token_type_ids(segment_ids):[batch_size,seq_length]
input_ids -> embedding_output:[batch_size,seq_length,embedding_size]
加入token_type_ids信息(主要存储tokens的类型数据,在分类过程中用啦区分text_a和text_b,text_a的token_id为0,toxt_b的id都为1)
token_type_id -> token_type_embeddings[batch_size,seq_length,embedding_size]
例如一个句子有seq_length长度,位置信息可以用[0,1,2,3…seq_length-1]表示,然后将位置信息也经过一个嵌入式的向量表示,利用tf.get_variable表示。生成:
positon_ids=[batch_size,seq_length] -> position_embeddings
=[batch_size,seq_length,embedding_size]
if(use_type_embeddings==TRUE and use_position==TRUE):
embedding_output=embedding_output+token_type_embeddings+position_embeddings
->[batch_size,seq_length,embedding_size]
input_mask -> attention_mask[batch_size,seq_length,seq_length](这里相当于将多个input_mask拼接成一个。)
经过全连接层。(这里可能有部分维度表示形式不准确,但是其真实就是这样形状。)
其中Q和(K,V)的第二个维度理论上可以不一样,但是在bert中一样,但是在代码注释和其表示上不一样,东西都是由embedding_output经过全连接成过来的。 | |
---|---|
代码中进到Attentio这里计算多个,但是我们这里为了简便没有写出来那个维度,可以理解成多个Attention拼接的过程并行处理,但是我们这里还表示还是串行 |
Q(embedding_output经过全连接层):[batch_size,seq_length,size_per_head]
K(embedding_output经过全连接层):[batch_size,seq_length,size_per_head]
V(embedding_output经过全连接层):[batch_size,seq_length,size_per_head]
Q*(K的转置):-> attention_scores:[batch_size,seq_length,seq_length]
adder = (1.0 - tf.cast(attention_mask, tf.float32)) * -10000.0
attention_scores += adder :->[batch_size,seq_length,seq_length]
attention_scores=softmax(attention_scores ) 这里很巧妙的将上面计算过的负值转换成0
attention_output=attention_scores *V :[batch_size,seq_length,size_per_head]
接下里就是拼接后正常的经过一个全连接成,经过一个激活函数(gelu)以后然后经过正则化之类得到一个输出,因为是多层,再把这个输出输入编码层(Encoder)中。其中将数据输入到到正则化层中的时候是将当前的输入和attention_output相加,可以找到论文“Attention is all you need”中的那个转移箭头。
这里比较有意思的就是他这里的mask在attention的时候起作用。通过input_mask将Q和K乘过的权值在mask的位置变为-10000,这样通过softmax函数去将这部分的Value在进行向量相乘的时候相对位置不会影响最后的结果。
还比较有意思的的就是在attention之前有多个attention进行拼接,代码中将部分直接过了一个比较比较大全连接层,相当于一次运行多个全连接成,不过需要之后清醒的变化形状。
写完最后突然发现bert的模型好像就是就是Transformer的multi-heads的那个模型,好像只是网络什么和宽度有调深,不知道自己理解的对不对,至少从代码来看和“Attention is all you need中的模型描述基本一致。”