返回列表

2nd place solution

361. TensorFlow 2.0 Question Answering | tensorflow2-question-answering

开始: 2019-10-28 结束: 2020-01-22 自然语言处理 数据算法赛
第二名解决方案

第二名解决方案

作者: See-- | 排名: 第2名 | 发布时间: 2020-01-23

大家晚上好,

首先,我要感谢 Kaggle 和主办方提供了这个精彩的挑战!使用 TF2.0 和 TPU 真的很有趣。在我本地的 2 x 1080 TI 机器上需要几天时间的任务,在这里只需要几个小时。例如,我最终模型的实际训练时间(不包括标记化和后处理)仅略多于 2 小时。

其次,恭喜所有的获奖者。我在一周前锁定了我的提交,当时公榜分数领先 +0.04,但每个人都在不断进步。也许我也应该继续在这个挑战上努力。

我的解决方案只是一个单一的 TF2.0 模型。它使用自定义头部和 BERT transformers 主干(large 版本)。对于建模和训练,我使用了很棒的 transformers 库。我认为以下代码片段有助于理解建模过程:

class TFBertForNaturalQuestionAnswering(TFBertPreTrainedModel):
    def __init__(self, config, *inputs, **kwargs):
        super().__init__(config, *inputs, **kwargs)
        self.num_labels = config.num_labels

        self.bert = TFBertMainLayer(config, name='bert')
        self.initializer = get_initializer(config.initializer_range)
        self.qa_outputs = L.Dense(config.num_labels,
            kernel_initializer=self.initializer, name='qa_outputs')
        self.long_outputs = L.Dense(1, kernel_initializer=self.initializer,
            name='long_outputs')

    def call(self, inputs, **kwargs):
        outputs = self.bert(inputs, **kwargs)
        sequence_output = outputs[0]
        logits = self.qa_outputs(sequence_output)
        start_logits, end_logits = tf.split(logits, 2, axis=-1)
        start_logits = tf.squeeze(start_logits, -1)
        end_logits = tf.squeeze(end_logits, -1)
        long_logits = tf.squeeze(self.long_outputs(sequence_output), -1)
        return start_logits, end_logits, long_logits

如你所见,自然问答任务可以像 SQUAD-2.0 一样处理,只需增加一个用于长答案的头部。请注意,我们只需要一个输出:HTML 边界框的起始标签。我想大多数竞争对手都使用了类似的建模方式,所以我认为与其他解决方案的不同之处在于采样。

我调整了空答案的比例,使其与完整数据集相似。即空答案的数量与带有长答案的答案数量大致相同。我最初使用了从 bert-joint 论文 中获得的非常低的空答案比例,但我无法获得好的分数。我调整了一些超参数,但总体而言,我在很宽的参数范围内都获得了不错的结果。将 HTML 标签添加为自定义标记有一点帮助。我还尝试了不同的起始权重,发现:

bert-large-uncased (~0.70 LB) < bert-large-uncased-whole-word-masking (~0.72 LB) < bert-large-uncased-whole-word-masking-finetuned-squad (~0.73 LB)。

大概就是这些。感谢 @boliu0@christofhenkel@kentaronakanishi 修复并提供了评估指标!

同比赛其他方案