Bert预训练源码

主要代码

地址:https://github.com/google-research/bert

  1. create_pretraning_data.py:原始文件转换为训练数据格式
  2. tokenization.py:汉字,单词切分,复合词处理,create_pretraning_data中调用
  3. modeling.py: 模型结构
  4. run_pretraing.py: 运行预训练

tokenization.py

作用:句子切分,特殊符号处理。
主要类:BasicTokenizer, WordpieceTokenizer, FullTokenizer

  1. BasicTokenizer.tokenize: 文本转为unicode, 去除特殊符号,汉字前后加空格,按空格切分单词,去掉文本重音,按标点符号切割单词。最后生成一个list
  2. WordpieceTokenizer.tokenize: 长度过长的单词标记为UNK,复合词切分,找不到的词标记为UNK
  3. FullTokenizer:先后调用BasicTokenizer和WordpieceTokenizer

create_pretraning_data.py

输入:词典, 原始文本(空行分割不同文章,一行一句)
输出:训练数据
作用:生成训练数据,句子对组合,单词mask等
入口函数main

  1. 加载词典,加载原始文本
  2. create_training_instances
    读取原始文本文件,做unicode转换,中文,标点,特殊符号处理,空格切分,复合词切分。转换为[[[first doc first sentence],[first doc second sentence],[first doc third sentence]],[[second doc first sentence],[]],....] 这样的结构
    去除空文章,文章顺序打乱
    输入的原始文本会重复使用dupe_factor次
  3. 对每一篇文章生成训练数据create_instances_from_document
    训练语句长度限制max_seq_length,0.1的概率生成长度较小的训练语句,增加鲁棒性
    句子对(A,B)随机组合
    对于一篇文章,按顺序获取n行句子,其长度总和限制为target_seq_length,
    随机选取n行中的前m行作为A
    0.5的概率,B是n行中后面剩余的部分;其他情况,B是随机选取的其他文章内容,开始位置是随机的
    文章中没有使用的部分继续组合(A, B)
    添加CLS,SEP分隔符,生成句子向量
    对句子对中的单词做随机mask (create_masked_lm_predictions), 随机取num_to_predict个单词做mask,0.8的概率标记为MASK,0.1的概率标记为原始单词,0.1的概率标记为随机单词
    封装,句子对,句子id,是否为随机下一句,mask的下标位置,mask对应的原始单词

  4. 训练数据序列化,存入文件。单词转为id,句子长度不足的后面补0。

modeling.py

BertConfig: 配置
BertModel: 模型主体

建模主体过程:

  1. 获取词向量 [batch_size, seq_length, embedding_size]
  2. 添加句向量,添加位置向量,在最后一个维度上做归一化,整体做dropout
  3. transformer
    全连接映射 [B*F, embedding_size]->[B*F, N*H]
    \(dropout(softmax(QK^T))V\), 其中mask了原本没有数据的部分
    全连接,dropout,残差处理,归一化,全连接,dropout,残差处理,归一化
    上述循环多层
    取最终[CLS]对应的向量做句向量

run_pretraining.py

作用:生成目标函数,加载已有参数,迭代训练
主要函数:model_fn_builder

  1. 评估mask单词的预测准确性,整体loss为mask处预测对的分数的平均值
  2. 评估next_sentence预测准确性,loss为预测对的概率值
  3. 总损失为上面两个损失相加

【算法】Bert预训练源码阅读的更多相关文章

  1. 谷歌BERT预训练源码解析(一):训练数据生成

    目录预训练源码结构简介输入输出源码解析参数主函数创建训练实例下一句预测&实例生成随机遮蔽输出结果一览预训练源码结构简介关于BERT,简单来说,它是一个基于Transformer架构,结合遮蔽词 ...

  2. 谷歌BERT预训练源码解析(三):训练过程

    目录前言源码解析主函数自定义模型遮蔽词预测下一句预测规范化数据集前言本部分介绍BERT训练过程,BERT模型训练过程是在自己的TPU上进行的,这部分我没做过研究所以不做深入探讨.BERT针对两个任务同 ...

  3. 谷歌BERT预训练源码解析(二):模型构建

    目录前言源码解析模型配置参数BertModelword embeddingembedding_postprocessorTransformerself_attention模型应用前言BERT的模型主要 ...

  4. Bert源码阅读

    前言 对Google开源出来的bert代码,来阅读下.不纠结于代码组织形式,而只是梳理下其训练集的生成,训练的self-attention和multi-head的具体实现. 训练集的生成 主要实现在c ...

  5. caffe-windows中classification.cpp的源码阅读

    caffe-windows中classification.cpp的源码阅读 命令格式: usage: classification string(模型描述文件net.prototxt) string( ...

  6. 【原】SDWebImage源码阅读(四)

    [原]SDWebImage源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 SDWebImage中主要实现了NSURLConnectionDataDelega ...

  7. 如何阅读Java源码 阅读java的真实体会

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心.   说到技术基础,我打个比 ...

  8. 36 网络相关函数(四)——live555源码阅读(四)网络

    36 网络相关函数(四)——live555源码阅读(四)网络 36 网络相关函数(四)——live555源码阅读(四)网络 简介 7)createSocket创建socket方法 8)closeSoc ...

  9. 15 BasicHashTable基本哈希表类(二)——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...

随机推荐

  1. Capability配置简介

    什么是Capability desired capability的功能是配置Appium会话.他们告诉Appium服务器您想要自动化的平台和应用程序. Desired Capabilities是一组设 ...

  2. setData 和 直接赋值的区别

    wxml: <view> <block wx:for="{{dataArray}}" wx:key="id"> <v-book b ...

  3. LODOP打印用JS获取的当前日期

    该文详细一步步解释JS获取当前时间的方法,新手小白也看到懂,最后是实际的获取当前年月份的方法.JS中的Date()对象,包含很多当前系统时间的方法,首先建立一个Date()对象,这里取名为date,然 ...

  4. 获取SQL数据库中的数据库名、所有表名、所有字段名、列描述

    1.获取所有数据库名:    (1).Select Name FROM Master.dbo.SysDatabases orDER BY Name 2.获取所有表名:    (1).Select Na ...

  5. 归并排序-JAVA实现

    package com.iloveu.xxx; public class MergeSort { static final int SIZE = 15; static void mergeOne(in ...

  6. JetBrain系列IDE提示Filesystem Case-Sensitivity Mismatch的解决

    目录 解决方法 1. 用文本编辑器修改APP包文件中的属性文件(不推荐) 2. 复制或新建属性文件到APP的启动目录,添加对应的属性项(推荐) 解决方法1 1. 用文本编辑器修改APP包文件中的属性文 ...

  7. 题解:LOJ540游戏

    题目描述 小L计划进行n场游戏,每场游戏使用一张地图,小 L 会同时使用三辆车在该地图上完成游戏. 小 L 的赛车有三辆,分别用大写字母 A.B.C 表示.地图是一张无向简单图(没有重边或自环),每次 ...

  8. termux

    使用http服务,链接原服务器要挂vpn. apt edit-sources 如果提示 $ apt edit-sources e: Sub-process editor returned a n er ...

  9. sklearn_随机森林random forest原理_乳腺癌分类器建模(推荐AAA)

     sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  10. 01-oracle学习环境配置

    1.安装oracle与SQL Developer oracle10g安装教程 2.创建表空间以及用户 表空间是存储数据文件的容器,由数据文件组成,数据库的所有系统数据和用户数据都必须存储在数据文件中. ...