返回列表

12th place solution

592. Linking Writing Processes to Writing Quality | linking-writing-processes-to-writing-quality

开始: 2023-10-02 结束: 2024-01-09 智能评测 数据算法赛
第12名解决方案

第12名解决方案

作者: Falcon
发布时间: 2024年1月12日
最后更新: 2024年1月24日

致谢

我谨向Kaggle和比赛主办方致以诚挚的感谢,感谢他们提供了充满学习和启发机会的平台。我也向所有为比赛贡献了见解和想法的参与者表示深深的敬意。谢谢。

概述

我使用两组不同的特征训练了lightgbm、xgboost、catboost和denselight(来自lightautoml),并以不同的权重对它们的预测结果进行了加权平均。权重比例在观察本地CV分数和Public LB的同时进行了调整。

特征集1
1504个特征,包括各种公共笔记簿中介绍的特征以及一些额外特征。我添加了PCA、TF-IDF、CountVectorizer,以及额外的up_time_lagged特征。

参考公共笔记簿:
enter-ing-the-timeseries-space-sec-3-new-aggs
silver-bullet-single-model-165-features

特征集1 Lightgbm结果:
CV(10折&5个种子平均值): 0.596, Public LB:0.579, Private LB:0.571

特征集2
来自公共笔记簿(silver-bullet-single-model-165-features)和distilroberta预测的特征。

特征集2 Lightgbm结果:
CV(10折&5个种子平均值): 0.589, Public LB:0.580, Private LB:0.570

权重比例
0.4 * (lightgbm(特征集1) + 0.5 * xgboost(特征集1) + 0.5 * catboost(特征集1) + denselight(特征集1)) / 3 + 0.6 * (lightgbm(特征集2) + denselight(特征集2)) / 2

加权平均结果:
CV(10折&5个种子平均值): 0.5870 ,Public LB: 0.576, Private LB: 0.563

训练策略

对于两个特征集,我使用10折交叉验证在5个不同的种子上训练了所有模型,并取平均值。我使用optuna对lightgbm和xgboost进行了参数调优,而对于catboost,我没有调整参数,只将深度设置为6。对于denselight,我直接使用了这个笔记簿中的参数。lightautoml-nn-test

特征集2的distilroberta

我使用了基于此笔记簿重建的文章。essay-contructor

我执行了如下预处理:
"qqq qq q'qq, qqq qqq" → "3 2 1'2, 3 3"
转换为连续'q'的数量。

由于分词器中包含的词汇,它只能编码一个或两个字符的连续序列,如'q'或'qq'。因此,直接将其输入分词器会导致令牌数量极大。下图说明了预处理前后令牌数量分布的变化。

最初,我尝试使用deberta-v3-large进行训练,但无法取得令人满意的结果。当我切换到更轻量的distilroberta时,获得了更好的结果。数据有限且相同的标记重复出现,这可能是更轻量模型表现更好的原因。

deberta-v3-large CV(10折&5个种子平均值): 0.620
distilroberta CV(10折&5个种子平均值): 0.605

然而,很可能使用deberta-v3-base、small或xsmall可以获得更好的准确性,就像许多其他顶级解决方案一样(deberta-v3-small比distilroberta更小)。由于我在比赛接近尾声时才测试更轻量的模型,没有时间考虑广泛的模型,也无法深入研究。我正在对deberta-v3-base、small和xsmall进行后续测试,以了解能获得什么结果。一旦结果出来,我想以附加说明的形式在此分享。

为了增加模型的多样性,我只在特征集2中使用了roberta特征,因为特征集1已经包含了许多从重建文章中提取的特征,如TF-IDF。

特征集2预测的改进如下:

模型 CV(无roberta) CV(有roberta) Public LB(无roberta) Public LB(有roberta) Private LB(无roberta) Private LB(有roberta)
lightgbm 0.602 0.589 0.582 0.580 0.574 0.570
xgboost 0.607 0.579 0.581 0.579 0.578 0.572
catboost 0.606 0.583 0.586 0.583 0.575 0.568
denselight 0.602 0.585 0.590 0.585 0.568 0.565

未奏效的方法

降维(umap, tsne)
tsfresh
聚类
分类
其他损失函数(huber, poisson ...)
wavenet
Inception time
降噪自编码器
Tabnet
MLP
autoint
ffttransformer

延迟提交结果(2024.01.24更新)

deberta-xsmall模型产生了最佳结果。
1280的令牌数比512产生了更好的结果,deberta被认为更优秀,因为它能显著增加最大令牌数。
预处理的存在带来了更好的结果。但需要注意的是,随着deberta的令牌数增加,差异变得不那么显著。

各种模型结果

模型 CV Public LB Private LB
deberta v3 xsmall max_token = 512 0.6088 0.6201 0.5999
deberta v3 xsmall max_token = 1280 0.5965 0.5879 0.6020
deberta v3 small max_token = 512 0.6046 0.6152 0.5989
deberta v3 xsmall max_token = 1280 0.5946 0.5994 0.5874
deberta v3 base max_token = 512 0.6041 0.6135 0.5983
deberta v3 base max_token = 1280 0.5955 0.5959 0.5906
distil-roberta max_token = 512 0.605 0.6134 0.5900
distil-roberta max_token = 512 无预处理 0.7638 0.7548 0.7820
deberta v3 base max_token = 512 无预处理 0.7764 0.7991 0.7758
deberta v3 base max_token = 1280 无预处理 0.6404 0.6392 0.6167

注:我使用了huggingface trainer。我修改了commonlit公共笔记簿。参数与参考笔记簿的参数相同。参考

堆叠结果

模型 CV Public LB Private LB
deberta v3 xsmall max_token = 512 0.5878 0.5815 0.5717
deberta v3 xsmall max_token = 1280 0.5881 0.5789 0.5669
deberta v3 small max_token = 512 0.5866 0.5820 0.5723
deberta v3 xsmall max_token = 1280 0.5873 0.5820 0.5691
deberta v3 base max_token = 512 0.5882 0.5800 0.5711
deberta v3 base max_token = 1280 0.5862 0.5783 0.5703
distil-roberta max_token = 512 0.5889 0.5804 0.5700
distil-roberta max_token = 512 无预处理 0.5946 0.5850 0.5691
deberta v3 base max_token = 512 无预处理 0.5965 0.5832 0.5730
deberta v3 base max_token = 1280 无预处理 0.5972 0.5834 0.5729
无bert预测 0.602 0.582 0.574

注:silver-bullet特征 + bert预测,lightgbm和optuna,10折和5个种子

同比赛其他方案