361. TensorFlow 2.0 Question Answering | tensorflow2-question-answering
首先,我要感谢 Kaggle 团队和 TensorFlow 举办了这场精彩的比赛,感谢 TFRC 项目提供的 TPU 额度,感谢 Google Cloud 提供的 300 美元额度,以及 @prokaj 分享他的解决方案。
能够处理大型真实世界的高质量数据集,第一次使用 TensorFlow 2.0 和 TPU,在几秒钟内运行推理,使用 batch_size=128 进行训练,并最终赢得金牌,这是一次非常棒的经历。
我的方案是在 TPU 上用 TF 2.1 训练的单模型。它是经过一些调整和后处理的 Bert Joint 模型。以下是主要区别:
我进行了数据分析(EDA),发现如果 2 个长答案候选包含短答案,其中一个是 top_level,另一个不是 top_level,并且它以 "Li" HTML 标记开头 => 大约有 70% 的概率正确的候选是非 top_level 的那个。所以我将这个想法作为后处理步骤实现了。
对 9 个 logits 进行线性回归。这 9 个 logits 包括 5 个答案类型 logits,cls_start_logit,cls_end_logit,start_span_logit,end_span_logit。
附言:
在我的本地指标中,我设置了 long_non_null_threshold = 1,short_non_null_threshold = 1,但由于某种原因,这对排行榜分数没有太大影响(与 long_non_null_threshold = 2,short_non_null_threshold = 2 相比)。