返回列表

13th place solution (GNN)

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

开始: 2022-04-14 结束: 2022-07-07 商品理解 数据算法赛
第13名解决方案 (GNN)

第13名解决方案 (GNN)

作者: 213tubo | 排名: 第13名 | 投票数: 102

首先,如果没有泄露问题,这次比赛本可以更好。
非常遗憾的是,由于数据泄露,我们无法再区分一个好的解决方案和一个过拟合的解决方案。

摘要

解决方案概览

我的解决方案由四个阶段组成:

  • 候选生成
    • 第1阶段:创建候选集
    • 第2阶段:通过 LightGBM 进行筛选
  • 匹配
    • 第3阶段:使用 xlm-roberta-base 和 mdeberta-base-v3 进行匹配预测
  • 后处理
    • 第4阶段:通过 GNN 进行节点分类

交叉验证策略

GroupKFold(n_splits=2, group='point_of_interest')
我的解决方案的 CV 分数为 0.920

第1阶段

  • 为每个 ID 生成 60 个候选

    • 使用 Tfidf 文本嵌入的余弦相似度为每个 ID 生成 30 个邻近候选
      • 文本:将 name, categories, address, city, state 合并为一个句子
    • 通过哈弗辛距离为每个 ID 生成 30 个邻近候选

第2阶段

  • 使用 LightGBM 筛选出具有高匹配概率的 370 万对
  • 特征
    • 是否缺失值
    • jaro(name, categories, address, city, state, zip, url, phone)
    • leven(name, categories, address, city, state, zip, url, phone)
    • haversine(哈弗辛距离)
    • cos sim(tfidf embedding)(TFIDF嵌入余弦相似度)
    • mean top_k haversine, tfidf (k=5, 10, 15)
  • 使用 ForestInference
  • Max IoU: 0.971

第3阶段

  • 使用像 DITTO 这样的语言模型预测匹配
  • 模型:xlm-roberta-base 和 mdeberta-base-v3
  • 输入
    • 文本:name_1 + [SEP] + name_2 + [COL] + categories_1 + [SEP] + categories_2 + [COL] + address_1 + [SEP] + address_2 + [COL] + city_1 + [SEP] + city_2 + [COL] + state_1 + [SEP] + state_2 + [COL] + zip_1 + [SEP] + zip_2
    • 数值特征
      • haversine
      • mean top_k haversine(k=5, 10, 15)
  • 训练方法
    • 多任务学习:匹配任务和国家分类任务 (+0.003)
    • 数据增强
import nlpaug as naw
aug_list = [
  naw.RandomWordAug(action='swap', aug_p=0.1), 
  naw.RandomWordAug(action='delete', aug_p=0.1), 
  naw.SplitAug(aug_p=0.1)
]
  • 翻转 id_1, id_2
  • TTA(测试时增强):翻转 id_1, id_2

第4阶段

这一阶段是我解决方案中最重要的一部分。
通过使用 GNN,CV 和 LB 都提高了约 0.02x。

使用 GNN 预测 id_1 的匹配 ID。

  1. 为每个 id_1 创建一个 2 跳子图 (max iou: 0.993)
    示例,假设给定下表,我们要预测与 A 匹配的 ID。
    id_1 id_2
    AB
    B