592. Linking Writing Processes to Writing Quality | linking-writing-processes-to-writing-quality
我谨向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
我使用了基于此笔记簿重建的文章。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
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个种子