498. Foursquare - Location Matching | foursquare-location-matching
首先感谢 Kaggle 和主办方举办这次比赛。我非常享受这次比赛,因为它需要大量的内存管理(OOM 真的很痛苦)、NLP 和 GBDT 相关的流程。
与 @locbaop 合作非常愉快,他为此付出了大量的辛勤工作。
我们的方案相当简单:
我们使用 Pykakashi 对日文文本进行预处理,对于其他国家的文本则使用 unidecode + lower(小写)处理。
起初我主要使用距离度量进行迭代,这使我们的 LB(Leaderboard)分数停留在 84-85 的范围内。然后我们尝试了 TFIDF - 3 ngrams + char_analyzer,分数立即得到了提升。
我们大部分的精力都花在预训练 SBERT 模型上,总共训练了 5 个 SBERT 模型,并在 KNN 中使用拼接后的嵌入进行阻塞。通过拼接 paraphrase-xlm-r-multilingual-v1 和 msmarco-bert-base-dot-v5 的嵌入,我们可以获得超过 99 的 MAX IOU。我们在完整数据上训练 SBERT 1 个 epoch。
总共我们为每个 ID 创建了 20 个邻居。
使用了带有重度正则化的 LightGBM 模型。
我们考虑了名称、地址、类别,以及另一个基于纬度/经度的向上取整和向下取整的特征,如下所示:
df['text'] = df['name'] + '[SEP]' + df['address'] + '[SEP]' + df['categories']+ '[SEP]'+ \
lat_int_floor + '[SEP]' +long_int_floor + '[SEP]'+ lat_int_ceil + '[SEP]' +long_int_ceil
☝️ 这也是用于训练 SBERT 的文本。
我们在训练中使用了所有 5 个 SBERT 模型的嵌入相似度。在 20% 的验证数据上,本地 CV 分数约为 94.3。
作为最后一次尝试,我还添加了计数特征,发现本地 logloss 立即下降,CV 提升到了 94.5。不幸的是,我没有足够的时间进行完整训练并提交。
与公开的 Notebook 相同。
我们使用 cuML 的推理森林进行推理,我认为由于精度降低(float64 转 float32)导致了一些精度损失,但我对 cuML 在 GPU 上的能力印象深刻。以后会更多地进行探索。
就是这样,不用说,我们也没能破解那个数据泄露!
谢谢。