CQDA中针对bert的数据读取与处理

  • 其实本质上是对squad数据针对bert的变形处理,本文不深究细节,过于琐碎,相信会调用bert的人也不会被一个数据读入难住,这里是想形象的展示记录一下cqda里面数据处理的流程。

小知识

  • skearn 自定义转换器 [TransformerMixin, BaseEstimator, fit_transform, fit, transform]

  • 如果使用TransformerMixin作为基类,则自动实现fit_transform()函数,fit_transform() <==> fit().transform()

概念图

  • 先放流程图
    CQDA中针对bert的数据读取与处理_第1张图片

碎语

  1. 预处理代码没有细看,大致串了一遍
  2. bert预处理时,恶心的地方在于其token分词时,会有针对子词的分词(subword),这样就打乱了原有的单词顺序,所以会有一个映射表去记录,转换过去再转换回来,比较繁琐。
  3. 官方给的例子针对句子过长超过最大长度的情况,设计了滑动窗口,自己看完感觉就是截断了(真…截断,因为当初看的时候,感觉就是长句子截断然后生成features,唯一的一点是加上了对应的滑窗号,之后再没有交集…),自己说截断可能说的不够严谨,放一个更加细节的形容把:
  4. 对于question+evidence的长度大于BERT 规定的最大序列长度的情况,将evidence以一定的步长分割为若干段分别于question连接。为了保证分割后的evidence尽可能不削减完整evidence的语义。evidence与evidence之间有一定长度的重叠部分,该部分的长度为超参数可供用户调节。(参考:https://cloud.tencent.com/developer/article/1465005)
  5. 但是看CDQA源码时没看到有这个操作。
  6. 源码predict的预处理代码比直接train时从squad的json文件中,多一了一个专门读取的函数,上图。

你可能感兴趣的:(理论笔记,NLP,tensorflow)