tensorflow|Bert瞎玩系列——bert的数据处理部分

  • Bert源码准备分两块看,数据部分和模型部分,这一篇就看看数据部分。
  • 其主要部分基于tfrecord这个api的操作,但这个是tensorflow的东西,不是bert的东西,这里就不详细讲。
SelfProcessor
  • 总的来说,你需要把你的数据转换成tfrecord格式,为什么,你可以看一下官网介绍的优点,你就理解为:它好,你好,大家好…tfrecord是官方强烈推荐的存储数据的格式,因为它方便和其他高级API对接,比方说你建立模型时要用的estimator API…等等优点。
  • 所以我们在最开始针对数据的思路是:读数据进内存->存数据为tfrecord文件。
  • get_train_examples…那三个函数就是读数据进内存。
file_based_convert_examples_to_features
  • 这个函数就是用来把读进来的数据转化成tfrecord文件格式的,具体怎么转换其实可以单独拿出来当作tensorflow的知识另外学,这里就只说关于bert的部分了。
convert_single_example
  • bert当然不是仅仅直接输入你的样本那么简单,它的输入需要做一些变换,所以这里把这个变换放到了存入tfrecord文件前面,先转换,再存入,一条一条样本这样进行。
  • 它做的变化就是:输入你读到内存里面的数据,输出下面那几个特征:
features["input_ids"] features["input_mask"] features["segment_ids"] features["label_ids"] features["is_real_example"]

  • 在了解上面转化之前,需要先进行一步分词操作。
分词
  • 详细的分析看这篇文章
  • 大致作用如下:
【tensorflow|Bert瞎玩系列——bert的数据处理部分】tensorflow|Bert瞎玩系列——bert的数据处理部分
文章图片

特征含义
  • 这是根据bert模型是相关的,这里简单说一下各个特征的含义即可:
features["input_ids"] :每个中文字对应的词库id features["input_mask"]: The mask has 1 for real tokens and 0 for padding tokens. Only real tokens are attended to. features["segment_ids"] : 句子标记的id(表明术语哪一个句子) features["label_ids"]: 这条样本对应标签的id features["is_real_example"] :bool类型,True

tensorflow|Bert瞎玩系列——bert的数据处理部分
文章图片

  • 有个细节:随机选取词进行遮蔽训练这是在pre-train的时候做的,现在我们是利用pre-train的模型,所以没有这些东西。
写入
  • 将数据转换成对应的feature后,按照标准的写入方法,写进tfrecord文件即可。
  • 对应于train,eval,predict都进行同样操作。

    推荐阅读