574. CommonLit - Evaluate Student Summaries | commonlit-evaluate-student-summaries
祝贺所有获奖者和为本次比赛付出大量努力的人,也感谢 Kaggle 及主办方组织本次比赛。尽管我们团队在 Private Leaderboard 上出现了下滑,但我们并不认为这是真正的“下滑”。因为我们的 CV 分数与 Leaderboard(Public + Private)非常接近,而且我们已经选出了几乎最佳的提交结果。我们的最终方案完全基于最佳 CV 分数。
| 提交 | CV | Public LB | Private LB |
|---|---|---|---|
| ① 最佳 Public LB | 0.4596 | 0.420 | 0.463 |
| ② 最佳 CV | 0.4566 | 0.423 | 0.463 |
| ③ 其他 | 0.4579 | 0.422 | 0.464 |
| (最佳 Private LB) | 0.4601 | 0.420 | 0.462 |
CV 大致等于 LB:0.457 = 0.420×0.13(Public)+ 0.463×0.87(Private)
我们将“prompt_text”和“text”之间的公共单词、短语等内容添加到输入文本的末尾。(当加入 2-gram 和 3-gram 重叠时,第二阶段 LGB 模型不再有效,至少对 Jie 的模型而言如此。)

我们创建了多个自定义头部,将不同池化的输出进行拼接。
示例:GA 池化
gemtext_out = self.gempooler(lasthiddenstate, attention_mask)
attpool_out = self.attpooler(lasthiddenstate, attention_mask)
context_vector = torch.cat((gemtext_out, attpool_out), dim=-1)
数据增强与伪标签:将摘要文本翻译成中文,再翻译回英文,然后使用一个训练好的模型进行伪标签标注。
我们根据内容与措辞之间的 RMSE 比率,为措辞和内容创建了一个加权损失,具体如下:
class WeightedCRMSE(nn.Module):
def __init__(self):
super(WeightedCRMSE, self).__init__()
self.weights = torch.tensor([0.85, 1.15]).to(device)
def forward(self, y_pred, y_true):
squared_errors = torch.square(y_pred - y_true)
weighted_root_squared_errors = torch.mean(squared_errors, dim=0) ** 0.5 * self.weights
loss = torch.mean(weighted_root_squared_errors)
return loss
我们使用岭回归进行袋外(out-of-fold)训练,并取归一化系数的平均值作为集成权重。与线性回归或其他方法相比,使用较大 alpha 的岭回归在 CV 和 LB 分数上表现更好。

