返回列表

15th place solution

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

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

第15名方案

作者:Shun_PI (Grandmaster) | 比赛排名:第15名

虽然这次没能拿到金牌,但我还是想分享我的解决方案。因为我使用了自动翻译,如果英语有不通顺的地方请见谅。我的解决方案由阻塞、匹配和后处理三部分组成。

  • 阻塞

    • 对结合了以下三部分的矩阵进行L2范数的KNN(使用了三种权重执行,经纬度 : 名称 : 类别 = 3 : 10 : 1, 100 : 10 : 1, 3000 : 10 : 1)
      • 纬度和经度
      • 名称 (TFIDF)
        • 通过unidecode进行预处理后,使用以下方式向量化:
          • TfidfVectorizer(analyzer='char_wb', ngram_range=(3, 4), sublinear_tf=True)
        • 'char_wb' 比 'word' 效果更好,因为它对拼写错误有更高的容忍度。
      • 类别 (MDS)
        • 使用训练数据中类别之间的匹配率作为距离,我使用多维缩放 (MDS)创建了4维嵌入。
    • 属性的精确匹配(名称、地址、邮编、电话(后4位)、网址(域名))
    • 合并上述内容,将 id/near_id 对单向对齐并去除重复项。
    • 每个 id 有12个候选(测试数据上约有700万个候选),未经后处理的最大 IOU 约为 0.983。
    • 我也尝试了基于深度学习的嵌入,但效果不好且推理时间太长,所以放弃了。
  • 匹配

    • 在基于 Ditto 的输入中添加了距离和国家标记,并使用微调训练了 mdeberta-v3-base。示例输入如下。
      • ' [D36] [RU] [COL] name [VAL] Аптека [COL] categories [VAL] Pharmacies [SEP] [COL] name [VAL] Аптека [COL] categories [VAL] Pharmacies [COL] address [VAL] Ул Лесная д 8А',
        ' [D29] [HU] [COL] name [VAL] Kazánház [COL] categories [VAL] Bars [SEP] [COL] name [VAL] Cézár Ház B Épület [COL] categories [VAL] Residential Buildings (Apartments / Condos) [COL] city [VAL] Budapest [COL] zip [VAL] 1132',
        ' [D16] [JP] [COL] name [VAL] スシロー [COL] categories [VAL] Sushi Restaurants [COL] address [VAL] 寺崎北1 7 4 [COL] city [VAL] 佐倉市 [COL] state [VAL] 千葉県 [COL] phone [VAL] 5830 [COL] zip [VAL] 285-0819 [COL] url [VAL] akindo-sushiro [SEP] [COL] name [VAL] 幕張イオン',
    • 距离标记表示为 [D0]-[D49]。[Di] 表示哈弗辛距离位于整个训练数据第 2i 到 2(i+1) 百分位数之间。
    • 国家标记就是国家的字符串。
    • 微调进行了4个 epoch,使用了所有正样本对,负样本对分为4部分,每部分分配给每个 epoch。
    • 使用全部训练数据进行训练,无验证集。单模型,单折。
    • 使用 Google Colab (V100, 高内存),每个 epoch 40小时(总共160小时)。
    • 学习率为 2e-5。批次大小为 36。
    • 最大标记长度为 128,覆盖了超过 99% 的训练输入序列。
    • 使用了对抗训练 (FGM) (eps = 0.1)。
  • 后处理

    • 我基于组平均法构建了自己的算法。
      • 由于 O(N^2) 的计算复杂度(其中 N 是测试数据的长度),通常的组平均法太耗时了。但该算法的复杂度为 O(NKC^2),其中 K 是每个 id 的候选数,C 是平均簇大小。
    • 算法的大致描述如下。
      • 使用优先队列按预测值最高的边顺序处理簇。如果簇之间所有可能边的预测值已知,并且从优先队列中取出的值与所有边预测的平均值匹配,则使用并查集合并簇。
同比赛其他方案