返回列表

3rd place solution

498. Foursquare - Location Matching | foursquare-location-matching

开始: 2022-04-14 结束: 2022-07-07 商品理解 数据算法赛
第3名方案

第3名方案

作者:Psi (Grandmaster)
比赛:Foursquare - Location Matching

恭喜所有的参赛者,虽然结局有些奇怪,但我相信这次比赛中的一些技术可以在未来被复用。

摘要

我的解决方案基于利用NLP深度学习模型的两阶段方法。第一阶段模型是一个度量学习模型,使用ArcFace损失函数在原始输入数据上进行训练,预测记录的兴趣点,从而将相似记录放入相似的嵌入空间。第二阶段基于第一阶段提出的候选对,额外训练了一个双编码器NLP模型。最终的提交是第一阶段和第二阶段模型的融合。

第一阶段:ArcFace

在第一阶段,我在大部分由SEP标记分隔的输入列上拟合ArcFace模型。我直接将经度和纬度输入到字符串中,但每隔3位数字拆分一次,以便分词器能更好地处理它。一个样本记录如下所示:

<s> Tesco HQ</s></s> Offices</s></s> 18 963 587</s></s> 47 450 562</s></s> 2040</s></s> Budaörs</s></s> Kinizsi út 1-3.</s>

如果某个字段是NAN,我只是填入一个空字符串,没有特殊标记或其他改动有帮助。

让ArcFace模型工作仍然很棘手,需要一些努力才能使训练稳定并收敛。我在这里只依赖xlm-roberta-large模型。起初我尝试了类似Triplet的模型,它们更容易上手,但在让这些模型工作后,ArcFace显然更胜一筹。

然后我计算所有配对的相似度,并在低于某个阈值时截断。所有高于阈值的配对进入第二阶段,我们也保留预测概率用于融合。

第二阶段:双编码器

对于训练,我使用第一阶段的结果作为候选对。我使用各种双编码器模型来训练配对的TP/FP(真阳性/假阳性)。一条记录如下所示:

<s> Tesco HQ</s></s> Novo Nordisk</s></s> 18 963 587</s></s> 12 449 657</s></s> 47 450 562</s></s> 55 751 928</s></s> Offices</s></s> Offices</s></s> HU</s></s> DK</s></s> Pest</s></s> Bagsværd</s></s> Budaörs</s></s> Bagsværd</s></s> 2040</s></s> 2880</s></s> Kinizsi út 1-3.</s></s> Novo Allé</s></s></s></s></s></s></s></s>

也就是将两条记录的每一列粘贴在一起,然后训练双编码器模型。我总是将所有TP添加到训练数据中,然后如果时间允许,逐渐添加更多的FP。

交叉验证

本次比赛的测试集约包含60万条记录,整个训练数据大约包含两倍的数据。检索/识别类型的问题总是严重依赖于可供选择的候选列表,因此自然地,拥有更多未知候选者的可能性会降低分数。

因此,最合理的CV设置是分出60万条具有唯一兴趣点的记录作为验证集,并在剩余数据上训练模型。这样做时,我看到CV和LB之间有很好的相关性,但是这种方法有一个大问题,即你错过了一半数据的模型训练。因此,我在比赛截止日期前大约六周决定只在公共LB上进行评估,在我看来,由于以下原因,这是评估我模型的最佳集合:

  • 我有足够的时间定期在LB上进行评估
  • 我之前看到CV和LB之间有很好的相关性
  • 它允许我直接在完整数据上训练所有模型
  • 它包括完整的测试数据作为候选者(100%)
  • 在CV上,分数在子集上是稳定的,所以任何随机的10万子集的得分几乎与完整的60万集合相同(当然保留所有60万候选者)。