第19名解决方案
首先,我要感谢主办方组织这次比赛,并提供了富有启发性的讨论平台。特别祝贺所有顶尖参赛者的出色表现。就我个人而言,我距离以金牌成绩成为Grandmaster只差一步之遥,虽然有些遗憾,但大家的专业精神和深刻见解让这次比赛成为难忘的回忆。感谢所有人共同创造了如此宝贵的参赛体验。
同时也要感谢我的队友takai380的密切合作。
概述
- 采用两阶段结构:第一阶段使用Transformer模型,第二阶段使用GBDT(LightGBM)
- 对于第二阶段的LightGBM,为每个Transformer的out-of-fold(oof)单独训练模型,最后进行加权平均
- 最终加权平均中也包含了部分Transformer的原始预测值
- 根据summary_text和prompt_text的总token数量动态调整权重

最终模型
最终提交选择了三个不同特征和权重的模型:
- Sub1 (TrustLB) LB:0.422 / CV:0.463-0.465(使用不同的CV计算方法)
- Sub2 (TrustCV) LB:0.448 / CV:0.458
- Sub3 (Balance) LB:0.441 / CV:0.460
Transformer模型
- pao的模型:
- model-p1: deberta-v3-large(question + summary_text)
- model-p2: deberta-v2-xlarge(question + summary_text)
- takai的模型:
- model-t1: deberta-v3-large(question + summary_text)
- model-t2: deberta-v3-large(question + summary_text)
- model-t3: deberta-v3-large(summary_text + prompt_text)
- model-t4: deberta-v3-large(summary_text + question + prompt_text)
model-t3和t4的预测结果也被用于最终集成。包含prompt_text的模型效果显著,但推理时间较长,因此仅使用了2个此类模型。
- pao模型的训练细节:
- 冻结部分网络层
- 仅在model-p1中,将deberta-v3-large的嵌入向量在训练前拼接到最终层
- 使用CLS token进行预测
- 采用带warmup的线性学习率调度器,训练3个epoch
- takai模型的训练细节:
- 冻结部分网络层
- 使用concat pooling(拼接多个层的CLS token)
LightGBM模型
- 最终使用了约80个特征
- 每个Transformer模型对应10个随机种子×4折的LightGBM平均结果
- 通过50个种子平均分数的CV提升来筛选特征
特征工程
- 参考公开笔记(感谢@nogawanogawa):
- question/prompt_text与summary_text之间的Jaccard系数
- 按prompt计算summary_text的tfidf,并取每条记录的平均tfidf值
- 针对全部summary_text和仅prompt_text中未出现的词
- 计算所有列的平均值和非零元素的平均值
- 按prompt的summary_text平均tfidf/BoW的余弦相似度
- Sentence Transformer嵌入特征:
- prompt_text与summary_text的余弦相似度
- question与summary_text的余弦相似度
- 按prompt的summary_text平均嵌入的余弦相似度
- 将prompt_text和summary_text分句后,计算句向量间余弦相似度的标准差
- kNN特征:
- 按prompt对summary_text嵌入进行kNN计算
- 提取每条记录前5%最相似oof特征的平均值和余弦相似度
- 包含oof特征与prompt平均oof特征的差值
- 文本相似度指标:
- 为每个prompt训练Word2Vec模型,计算prompt_text与summary_text的向量余弦相似度
- 引入Feedback比赛第3名的模型预测值作为特征
- 使用pyreadability生成的特征
- 计算仅出现在summary_text中(不在prompt_text中)的词的平均词频
对于bert_score和嵌入特征,长prompt文本会提取开头、中间、结尾部分的文本进行平均嵌入计算。
集成策略
- 使用Nelder-Mead方法进行权重优化
- 根据summary_text + prompt_text的token数量动态调整集成权重
- 当token数量超过阈值时,线性降低Transformer原始预测的权重,同时增加LightGBM的权重
- 这是因为token数量大时,prompt_text无法完全输入Transformer,导致精度下降