第13名解决方案 (GNN)
第13名解决方案 (GNN)
作者: 213tubo | 排名: 第13名 | 投票数: 102
首先,如果没有泄露问题,这次比赛本可以更好。
非常遗憾的是,由于数据泄露,我们无法再区分一个好的解决方案和一个过拟合的解决方案。
摘要

我的解决方案由四个阶段组成:
- 候选生成
- 第1阶段:创建候选集
- 第2阶段:通过 LightGBM 进行筛选
- 匹配
- 第3阶段:使用 xlm-roberta-base 和 mdeberta-base-v3 进行匹配预测
- 后处理
交叉验证策略
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。
- 为每个 id_1 创建一个 2 跳子图 (max iou: 0.993)
示例,假设给定下表,我们要预测与 A 匹配的 ID。