返回列表

23rd place solution (arcmargin)

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

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

第23名方案

作者:PLA
比赛排名:第23名

恭喜所有奖牌获得者,感谢 Kaggle 和 Foursquare 举办了如此有趣的比赛。

我的方案基于 ArcMargin 模型来提取候选对,并使用 LightGBM 进行匹配。

阻断

使用 ArcMargin 模型生成候选对。该模型使用 ArcMargin Loss 进行训练 (论文链接)。

特征:

  • 名称、地址、邮政编码的 TFIDF(字符级别 (1, 3) ngrams)。
  • 类别的 TFIDF(词级别)。
  • 城市、国家、州和 URL 域名的 Onehot 编码。
  • 二值特征:has_phone(有电话)、has_url(有链接)等。
  • 经纬度编码(使用下文解释的技巧)。

模型:

所有输入被拼接,随后经过两个 Dense-PReLU-BN-Dropout 块。最后一个块的输出作为 ArcMargin 层的输入。

  • 嵌入大小为 512。
  • 在 ArcMargin 层使用 L2 正则化非常重要(参数量很大,当训练样本超过 50 万个兴趣点时,参数超过 2 亿)。我使用 L2=1e-4。
  • Margin 从 0.2 预热到 0.8。我认为这不是很重要,但模型收敛得更快。

结果:

这些模型生成的候选对集合的最大 IOU > 0.98。

公共榜单分数:0.89。

匹配:LightGBM 模型

特征:

  • 嵌入之间的余弦距离。
  • 经纬度之间的欧氏距离、曼哈顿距离、Haversine 距离。
  • Levenhstein、Jaro-Winkler、LCS 距离/相似度 (库链接)。

结果:

公共榜单分数:0.908。

最终提交

  • 仅基于文本特征的 XLM-Roberta 新 ArcMargin 模型。公共榜单分数:0.917。
  • LightGBM 模型中的新特征:嵌入排名、到最近邻的余弦距离等。公共榜单分数:0.923。

经纬度编码技巧

由于经纬度特征的精度很高,必须以某种方式对其进行编码,才能使其对 ArcMargin 模型有用。我使用了一种类似于 Transformer 位置编码的技术,将这些高精度特征嵌入到向量中。使用的代码如下:

emb_size = 20 
precision = 1e6 
 
latlon = np.expand_dims(df[["latitude", "longitude"]].values, axis=-1) 
 
m = np.exp(np.log(precision) / emb_size) 
angle_freq = m ** np.arange(emb_size) 
angle_freq = angle_freq.reshape(1, 1, emb_size) 
 
latlon = latlon * angle_freq 
latlon[..., 0::2] = np.cos(latlon[..., 0::2]) 
latlon[..., 1::2] = np.sin(latlon[..., 1::2]) 
latlon = latlon.reshape(-1, 2 * emb_size)
同比赛其他方案