chinese_bert_similarity源代码研读

chinese_bert_similarity
传给bert模型的参数有四个:bert_config(模型参数配置),input_ids(tokens的索引),input_mask([1] * len(input_ids),实句的长度),input_type_ids(句子编码 第一句为0 第二句为1)
处理过程:模型中input_ids,input_mask,token_type_ids对应bert_sim的input_ids,input_mask,segment_ids

  1. 设置模型各种参数
    配置文件解读
    {
    “attention_probs_dropout_prob”: 0.1, #乘法attention时,softmax后dropout概率
    “hidden_act”: “gelu”, #激活函数
    “hidden_dropout_prob”: 0.1, #隐藏层dropout概率
    “hidden_size”: 768, #隐藏单元数
    “initializer_range”: 0.02, #初始化范围
    “intermediate_size”: 3072, #升维维度
    “max_position_embeddings”: 512,#一个大于seq_length的参数,用于生成position_embedding “num_attention_heads”: 12, #每个隐藏层中的attention head数
    “num_hidden_layers”: 12, #隐藏层数
    “type_vocab_size”: 2, #segment_ids类别 [0,1]
    “vocab_size”: 30522 #词典中词数
    }
  2. 对输入的input_ids和token_type_ids进行embedding操作。再embedding_postprocessor操作,主要是加入位置和token_type信息到词向量里面(将三个输入向量相加)
  3. 转换attention_mask(输入句子长度不一样,Bert作了填充处理,将填充的部分标记为0,其余标记为1)后,通过调用transformer_model进行encoder操作
    encoder详情:首先对embedding进行multi-head attention,对输入进行残差和layer_norm。后传入feed forward,再进行残差和layer_norm
  4. 获取最后一层的输出sequence_output和pooled_output,pooled_output是取sequence_output的第一个切片然后线性投影获得(可以用于分类问题)

完整的代码解读:https://blog.csdn.net/qqywm/article/details/85454531

你可能感兴趣的:(学python)