返回列表

21st place - Pseudo Labels, Feature Engineering and stable validation scores

620. LMSYS - Chatbot Arena Human Preference Predictions | lmsys-chatbot-arena

开始: 2024-05-02 结束: 2024-08-12 自然语言处理 数据算法赛
第 21 名 - 伪标签、特征工程与稳定的验证分数

第 21 名 - 伪标签、特征工程与稳定的验证分数

作者: Valentin Werner
发布日期: 2024 年 8 月 13 日
比赛排名: 21
团队成员: Kishan Vavdara, Benedikt Droste, Raki, Valentin Werner, raconion

首先,感谢 LMSYS 以及每一位贡献者举办这次比赛。特别感谢这个了不起的团队 @kishanvavdara @benbla @raki21 @raconion。所有团队成员都参与了以下描述的方法,提出了这些惊人的想法或帮助执行了它们。

虽然比赛结束时起伏很大,但我认为最终结果对大多数人来说是满意的。我在前几周开始了比赛,这三个月对我来说非常有启发性,学到了很多关于 torch 和一些高级建模技术的知识。我们集成了 2x Gemma2-9b-it 模型以获得结果。一个模型在公共 LB 上达到了 .90292(在旧私有 LB 上为 .90803;完全拟合 without local validation),另一个模型在公共 LB 上达到了 .90100(在旧私有 LB 上为 .90749;在本地验证上为 .898)。我们尽可能根据验证性能选择用于推理的检查点。对于我们在比赛结束时在所有数据上拟合的模型,我们提交了多个检查点。

在 LLM 输入中使用指标特征

第二个模型使用了额外的特征,包括 length, long_sents, short_sents, avg_sent_len, sd_sent_len, num_paragraphs, mean_paragraph_length, sd_paragraph_length, avg_sent_per_paragraph, sd_sent_per_paragraph, repetition_density, punctuation_density。这些特征是根据模型可能从中学习到的额外信息量以及我在比赛早期进行的纯基于特征的 XGB 方法中的特征重要性选择的。特征简单地四舍五入并添加到输入字符串中(四舍五入很重要,因为对于 Gemma 来说,每个数字都是一个 token,这将使特征的输入长度增加 200+ 个 token)。

虽然使用这种方法性能提高到了 .901,但我们主要注意到它在 tie(平局)上表现更好,而在 winner(获胜者)预测上比之前的模型稍差。这给了我们集成的额外希望。

数据与伪标签

我们通过使用为此目的训练的模型重新标记我们训练的数据看到了最大的性能提升(例如,对于伪标签 fold1,我们在 fold 2-5 上训练模型,留出 fold 0(我们的验证 fold),然后在 fold 1 上预测)。我们使用了 0.5 * competition_label + 0.5 * soft_label,并注意到显著的性能提升和更好的校准模型。

我们使用了比赛数据、选定的 100k ultrafeedback 和 33k 去重数据集。.901 模型使用了所有数据集,.902 模型没有使用 33k 数据集。所有这些数据集也被伪标记并类似于原始比赛数据处理。我们注意到添加此数据后有一些性能提升,但主要是验证和 LB 之间的稳定性。

集成 - 在 2x Gemma2-9b-it 上推理,最大长度 4096

我们使用了动态 padding,正如 @emiz6413 这里 建议的那样,以及动态 batch sizing,根据当前最大长度选择 batch size。在使用动态 padding 后,使用动态 Batch Sizing 提供了大约 18% 的额外加速。这勉强足够推理速度以适应 2x4096 最大长度。

虽然我们在最后选择集成的模型是我们表现最好的模型,但我们选择它们主要是因为它们的差异:额外的特征、在 ties 与 winning labels 上的性能,以及模型训练的数据。

验证 - LB 相关性

现在能够看到所有过去模型的旧私有 LB 分数,我们看到基本上所有我们得分最高的模型都在 .005 差异之内(有趣的是,其中一个选定的模型差异较大)。其中许多实际上在 LB 分数之间差异在 .003 以内,本地验证和公共 LB 之间差异小于 .01。

我们的验证方法是在原始训练数据上进行六折分割,我们总是在 fold 0 上验证。后来在比赛期间创建伪标签时,我们发现这个 fold 实际上是最难验证的 fold。我相信这也对结果的稳定性产生了影响。

我们的性能守门员:下次我会做什么不同的事情

我们在最后一天将分数从 .897 提高到了 .891(公共 LB)。这主要是由于我们长期运行的训练终于完成了。下一个级别改进的主要守门员主要是迭代速度。这让我想起了在我第一次比赛(2 年前)中,有一个笔记本叫做 "Iterate like a grandmaster",它真的强调了这一事实。我们在所有数据的全量训练上测试了大多数策略。这意味着我们只有在大约 20+ 小时后才能看到它们是否有效。

显然,获胜笔记本的许多想法我们从未想到,但我认为更快的实验设置会有助于接近甚至进入金牌范围。

同比赛其他方案