第11名代码与解决方案
第11名代码与解决方案
作者:sakusaku (Master) |
比赛:Foursquare - Location Matching |
排名:11th Place
首先,我要感谢团队成员、参赛者以及 Foursquare。
除了数据泄露问题外,问题的设计非常有趣,这是一场允许多种解决途径的精彩比赛。
我们的团队可能太“单纯”了,以至于没有怀疑数据泄露(因为主办方明确声明没有重叠数据)。
注意:这些笔记是在数据泄露被发现之前写的,现在看来有些观点可能显得很傻,但我们还是决定分享出来。
链接
摘要
- 度量学习多输入(拼接文本 -> BERT + 经纬度)神经网络模型。
- 通过 NN 模型嵌入和空间最近邻生成候选集。
- 针对每个候选排名创建第二阶段的二分类 XGB 模型。
验证策略
- 起初,我们将训练数据分为 4 折,并训练 BERT(训练:验证 = 3:1)。然后我们取出一折(验证集),并将其进一步分为 4 折用于第二阶段 XGB 模型的训练。
- 过了一段时间,我们发现如果使用所有数据训练 BERT,效果会好得多。在这种情况下,我们用包含泄露的数据训练 XGB,这可能导致在测试数据上表现不佳。也许嵌入的质量比训练一个无泄露的 XGB 模型更重要。
预处理
- 对于 BERT 模型,使用经纬度最近的 5 个点填充
NaN 文本。
第一阶段:创建候选集
- BERT 嵌入候选
- 架构 (BERT + lat/lon)
- 将 BERT 模型输出与归一化的经纬度值拼接,并连接到全连接 (FC) 层 (320)。
- FC 层 (320) 的嵌入用于计算相似度。
- 损失函数:ArcMarginProduct
- 训练
- 训练过程中逐渐增加 Margin(从 0.2 到 0.8)。
- 训练 40 个 epoch(耗时 24-48 小时)。
- 集成
- 拼接多个 BERT 模型的嵌入:
xlm-roBERTa-large, sentence-transformers/LaBSE, sentence-transformers/paraphrase-multilingual-mpnet-base-v2, remBERT
- DBA/QE
- 创建候选
- 对于每个 ID,使用余弦相似度 创建 50 个候选。
- 空间候选
- 使用 sklearn.neighbors.BallTree 根据经纬度添加候选。
- 希望能补充被 BERT 嵌入遗漏的候选。
第二阶段:针对每个候选排名的 GBDT 模型
- 许多公共内核在通过 Bert 嵌入从每个点取 N(例如 20)个邻居后训练 GDBT