本篇文章为比赛第一名方案解析,该比赛涉及到NLP-文本相似度-教育
介绍:在本次竞赛中,参赛者将在新颖的语义相似性数据集上训练模型,通过匹配专利文献中的关键短语来提取相关信息。
Top解决方案:www.kaggle.com/competition…
- CV 策略
按分组锚点进行分组,并按分数进行分层,同时也有一些词同时出现在锚点和目标中,确保将它们放在同一组中。 - 神经网络模型详情
a. 皮尔逊损失对我来说效果最好
b. 5 个训练周期,从第 2 个周期开始 AWP 训练。
AWP 最近在我的所有 NLP 比赛中帮了我很多忙。
c. 按照分组['anchor', 'context'] ['target'] -> targets,添加到输入(anchor[SEP]target[SEP]CPC_TEXT[SEP]targets),生成最佳模型
分组['anchor', 'context[0]']['target'] -> targets,添加到输入帮助集成很多,让我定义 context[0]为行业,它就像 F21 -> F
请记住从目标中排除当前目标。
d. 每个训练步骤中随机打乱目标。(测试不足,我记得在 LB 上改进了很多)
e. 冻结 BERT 嵌入层(可能没有太大区别,但我用它来构建最终模型)
冻结嵌入层不会伤及,意味着我们不需要像我们的目标那样进行过多的微调,因为我们的目标是简单的短词相似度。
f. 使用不同的学习率对 BERT(2e-5,3e-5)和其他部分(1e-3),特别是当添加需要大学习率的 LSTM 时特别有用。
g. 添加双向 LSTM 头部有很大帮助。
Deberta-v3-large CV 858-> 861 “提示就是一切”给我一个提示,我们不需要大量微调/更改 BERT 模型,所以我尝试在 BERT 之上添加 LSTM,并冻结 BERT 嵌入层。
h. 在 fc 之前使用线性注意力池化在 BI-LSTM 之上。
i. Lr 对最佳单模型 deberta-v3-large 非常重要,2e-5 比 3e-5 好得多
Deberta-v3-large CV 861 -> 8627
j. 将 RNN 输出维度从 2 倍(例如 BERT 输出维度 1024 到 2048)对一些弱模型如 bert-for-patents 和 simcse-bert-for-patent 有很大帮助。
因此,对于弱模型,我们可能需要模型更宽泛。
k. 一种可能的方法可能是使用标记分类来预测一个实例中的所有目标得分。
看起来实现起来有点复杂,我不知道它是否有助于提高分数,还没有尝试过。
| model | CV | 骨干学习率 | 基础学习率 | 调度器 | rnn dim * 2 | 重量 | 1 折 LB | 1 折 PB | 完整训练 LB | 完整训练 PB | 5 折 LB | 5 折 PB |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| microsoft/deberta-v3-large | 8627 | 2e-5 | 1e-3 | 线性 | 没有 | 1 | 8599 | 8710 | 8604 | 8745 | 8604(可能摇至 8615) | 8761 |
| anferico/bert-for-patents | 8451 | 3e-5 | 1e-3 | 余弦 | 是的 | 0.4 | ||||||
| 一个热辣的/电光/大型判别器/团队 2/512 | 8514 | 2e-5 | 1e-3 | 余弦 | 没有 | 0.3 | ||||||
| 雁豪/simcse-bert-for-patent | 8393 | 3e-5 | 1e-3 | 余弦 | 是的 | 0.2 | ||||||
| funnel-transformer/large | 848 | 3e-5 | 1e-3 | 余弦 | 没有 | 比赛结束后经验值 |
有趣地看到 deberta-v3-large 和 electra-large 工作得最好,它们都是使用 electra 风格的 RTD 而不是 MLM 进行预训练的。
但是,对于这个问题,bert-for-patents 集合与 deberta-v3-large 最匹配,因为具有更好的多样性。
-
集成
a. 使用 5 折+每个骨干网络 1 个完整训练,完整训练模型权重*2
权重 2 是通过 e.选择的,并在 LB 和 PB 上测试了优于 1:1。
b. 在添加到集成之前,对每个模型的输出进行最小-最大缩放。
c. 确保使用加权集成,因为简单的平均平均伤害 LB,可能是因为 deberta-v3-large 比其他模型要好得多。
d. 5 折自集合显著提升了 LB,这在局部交叉验证中有点难以衡量
e. 使用剩余 20%的数据,在 80%的数据上训练 10 折模型,只能找到弱模型较低的权重可以获得收益。但这很耗时,在最后几天,我只通过手动选择那些使我的本地一级交叉验证最佳的效果的模型权重。
集成 CV LB PB 4 * 6 模型 8651 8618 8745 添加 LSTM 头 8666 8625 8775 调整参数,如学习率(lr)和循环神经网络输出维度(rnn out dims) 8677 8629 8779 7 * 6 模型,添加 3 组合上下文,行业模型 8682 8633 8782
很高兴看到 CV 和 LB PB 匹配 :)
- 摘要
-- 将目标按锚点、上下文、关键字分组,添加到黄金中。
-- 添加 LSTM 帮助我获得足够好的单个模型,这是在 PB 上获胜的关键。(8745 -> 8779)
-- 添加目标分组锚点,按行业(context[0])引入多种模型(与更改损失函数、池化方法相比))(8779->8782)
github:github.com/321Leo123/U…