第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)
- 属性的精确匹配(名称、地址、邮编、电话(后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 是平均簇大小。
- 算法的大致描述如下。
- 使用优先队列按预测值最高的边顺序处理簇。如果簇之间所有可能边的预测值已知,并且从优先队列中取出的值与所有边预测的平均值匹配,则使用并查集合并簇。