496. U.S. Patent Phrase to Phrase Matching | us-patent-phrase-to-phrase-matching
首先,我要感谢 Kaggle 和工作人员举办了如此有趣的比赛。
同时,我非常感谢我的队友 @harshit92、@ynishizono、@muhammad4hmed,祝贺你们成为 Competition Master,以及 @trushk,祝贺获得第二枚金牌!
我们的“魔法”是将目标词按“anchor + context”进行分组,并将它们附加到每个句子的末尾。也许看代码更容易理解,所以我将分享它。
train['group'] = train['context'] + " " + train['anchor']
allres = {}
for text in tqdm(train["group"].unique()):
tmpdf = train[train["group"]==text].reset_index(drop=True)
texts = ",".join(tmpdf["target"])
allres[text] = texts
train["target_gp"] = train["group"].map(allres)
train["input"] = train.anchor + " " + tokenizer.sep_token + " " + train.target + " " + tokenizer.sep_token + " " + train.title + " " + tokenizer.sep_token + " " + train.target_gp
例如,我们会得到这样的句子作为输入并进行训练。
abatement [SEP] abatement of pollution [SEP] HUMAN NECESSITIES. FURNITURE; DOMESTIC ARTICLES OR APPLIANCES; COFFEE MILLS; SPICE MILLS; SUCTION CLEANERS IN GENERAL [SEP] abatement of pollution,act of abating,active catalyst,eliminating process,forest region,greenhouse gases,increased rate,measurement level,minimising sounds,mixing core materials,multi pollution abatement device,noise reduction,pollution abatement,pollution abatement incinerator,pollution certificate,rent abatement,sorbent material,source items pollution abatement technology,stone abutments,tax abatement,water bodies
通过这样做,我们认为不仅可以训练单个句子,还可以通过注意力机制考虑每个“anchor + context”的目标词之间的相关性进行训练。此外,为了避免泄漏,采用了“anchor + context”的 groupkfold。结果,这个魔法在比赛结束前两天提升了我们的模型(最好的情况下,公开LB从 0.8418 提升到 0.8562)。
这个想法对于进入金牌区至关重要。(仅凭这个单模型我们就能获得金牌)
------------------详情如下---------------------------------------
预处理和交叉验证由 @harshit92 提出。基本上,我们使用了小写,不使用 [SEP] 而是使用 [sep],并像这样删除 ";" , "," 和 "."。
train['input'] = train['anchor'] + ' [SEP] ' + train['target'] + ' [SEP] ' + train['context_text']
train['input'] = train['input'].apply(lambda x: x.lower())
train['input'] = train['input'].apply(lambda x: x.replace(';','').replace(',','').replace('.',''))
他发现像 NBME 第一名方案那样将 5kfold 改为 10kfold 可以带来提升(公开LB:5kfold 0.8395 → 10kfold 0.8435)。这些对我们来说是非常有效的工具。
我们不仅仅是解决 1 个目标预测,为了使其更加多样化,我们按如下方式解决了问题。
分数值替换如下。在每个预测中计算 sigmoid 并取平均值。
0:[0,0,0,0], 0.25:[1,0,0,0], 0.5:[1,1,0,0], 0.75:[1,1,1,0],1:[1,1,1,1]
output = sigmoid in each prediction and averaged
例如,prediction = [0.1, 0.3, 0.2, 0.4], output = (0.1 + 0.3 + 0.2 + 0.4) /4
分数替换如下。在每个预测中计算 softmax 并进行卷积操作。
0:[0, 0, 0, 0, 0], 0.25:[0,1,0,0,0], 0.5:[0,0,1,0,0], 0.75