Foursquare - Location Matching冠军方案
简 介
Foursquare - Location Matching是一个POI匹配大赛,平时当我们寻找附近的餐馆或计划在未知地区出差时,我们期望得到相关的、准确的信息。在全球范围内维护高质量的数据是一项挑战,其影响超越了导航。企业决定在新网站上进行市场扩张,分析竞争格局,并根据位置数据显示相关广告等等。
本次比赛中,选手需要使用一个包含150多万个地点的数据集,条目经过大量修改,包括噪音、重复、无关或不正确的信息,我们需要生成一个算法,预测哪些地点条目代表相同的兴趣点。每个地点条目包括名称、街道地址和坐标等属性,最后将以最大的准确性确定匹配项。
更详细的比赛内容介绍大家可以参考比赛官网。
https://www.kaggle.com/competitions/foursquare-location-matching/overview/description
此处,我们按照第一名的方案分享,进行学习,整体的流程很传统,
从候选集的构建(最大化recall)到中间提升精度(最大化precision),通过模型的融合以及后处理进行进一步的效果提升,已经最终通过leak再进一步大幅提升效果。
第一名的分享中除了流程的学习以及中间模型特征的细节,关于赛事Leak的发现也非常值得学习。
目前代码已经开源,有兴趣的朋友可以通过下面的链接进行完整的学习:https://www.kaggle.com/code/takoihiraokazu/sub-ex73-74-75-ex104-115-90-101-merge-train3
第一名方案介绍
方案的框架如下。
整个方案的流程可以大致分成4部分。
- 构建候选集;
- 降低候选集的数目;
- 提升模型京都;
- 后处理;
- Leak信息处理;
候选集构建
通过经纬度的信息以及描述信息分别筛选出100个候选集合。
对于每个id,我们为以下两种方法中的每种方法选择了100个候选项
-
经纬度欧几里得距离
-
名称Embedding的Cos相似性
-
模型:基于bert的多语言未分类
-
knn:cuml
-
为候选对象生成特征。此处,为了节省内存,只生成了几个特征,例如名称的jaro距离和类别的jaro距离。
使用LightGBM,对上述两种模式中的每一种进行了预测,两种情况分别剩下前20个候选,总共约40个候选。为了减少推理时间,此处使用了Forestinference。
- 最大IOU:0.979
精化候选数
构建大约120+特征,主要基于开源的Notebook,https://www.kaggle.com/code/ryotayoshinobu/foursquare-lightgbm-baseline,包括:
- 特征相似性特征,如Levenshtein距离和Jaro-winkler距离;
- 使用id作为键的字符相似性统计(最大、最小、平均);
- 这些统计数据的比例;
- 使用经纬度的欧几里得距离
- 基于奇异值分解的名称embedding降维
- 模型:基于bert的多语言未分类
LightGBM(推理:Forestinference)
- CV:0.875
- 阈值:0.01
候选数减少到10%左右。
提升精度
xlm-roberta-large and mdeberta-v3-base and Catboost
我们怀疑训练和测试之间存在重叠,但没有直接证据,因此我们创建了训练过度拟合模型以增加LB,同时创建了增加CV的模型。在找到训练集和测试集重叠的证据后,我们只需要专注于提高仅存在于测试中的数据的准确性,因此我们最终使用了CV最高且不过度拟合训练数据的模型(例如,不要增加epoches,使用FGM等)
-
catboost
- 使用了与第二个步一样的特征
- CV:0.878
-
xlm-roberta-large
-
文本:name + categories + address + city + state
-
结合2nd的一些功能(约70)
-
3个epoch
-
-
mdeberta-v3-base
- manhattan distance, harversinie distance, etc
- 文本:name + categories + address + city + state
- 结合第二步的特征和一些新的特征(约90)
-
使用FGM和EMA训练
-
4个epoch
-
CV:0.907
-
集成:2nd lgb * 0.01 + 3rd catboost * 0.32 + 3rd xlm-roberta-large * 0.29 + 3rd medebeta-v3-base * 0.38
- CV : 0.911
-
阈值:0.5
后处理
- 比较两个id的匹配,如果公共id从任意一侧超过50%,则合并两个id的匹配。
- 使用xlm-roberta-large对上述新创建的配对进行预测。
- 阈值:0.02
- CV:0.9166
Leak&效果
-
和train合并,通过name,lat,lon将训练集和测试集合并;
-
增加TP(true positive),
- 创建以POI为key的所有真正pairs(1);
-
降低FP(false positive)
- 移除和训练数据id绑定的ID(2);
- 移除和训练数据id绑定的ID以及和训练数据不绑定的数据(3);
-
通过使用LB的信息,验证增加train-train TP,移除train-train FP,移除train-test FP的结论;
不和训练集进行merge : 0.900
- (1) : 0.943
- (1) + (2) : 0.957
- (1) + (2) + (3) : 0.971
由于我们不确定(3)是否适用于Private数据,我们选择(1)+(2)和(1)+(2)+(3)作为最终提交。
关于Leak的发现
出于以下多种原因怀疑Leak:
- CV和LB之间有一个很大的差距。最大IOU已经很高,因此这种幅度的差距是不正常的;
- 过度拟合等模型LB分数更高。例如,没有dropout或多个epoch的培训。多epoch训练会导致CV分数下降。
- 随着CV的增加,CV/LB相关性消失。通过使用FGM训练NNs,我们的CV有了很大的改善,但LB更差。
- 主办方说:“我们包含了从测试集中选择的几个示例实例。”五个样本记录中的两个存在于训练数据中。
参考文献
- 1st place solution
- https://www.kaggle.com/code/takoihiraokazu/sub-ex73-74-75-ex104-115-90-101-merge-train3