{
  "id": 370356,
  "title": "1,782nd place - Multitasking solution",
  "content": "<p>💡 Leaderboard: Top&nbsp;68%&nbsp;(1,782 out of 2,654)</p>\n<h1>Task</h1>\n<p>The task was to score an essay in&nbsp;<strong>6 targets</strong>: cohesion, syntax, vocabulary, phraseology, grammar, and conventions. No other labels are provided. But we can use data from past Feedback competitions. That includes argument segmentation (FB 1.0) and classification (FB 2.0).</p>\n<h1>Final Solution</h1>\n<p>I trained a multitasking model using RoBERTa to do three tasks from all FB competitions. That includes:</p>\n<ul>\n<li><a href=\"https://www.kaggle.com/competitions/feedback-prize-2021/data\" target=\"_blank\">FB1.0</a>: Detecting discourse boundary. This is like a NER task. The labels are lead, position, evidence, claim, concluding statement, counterclaim, and rebuttal.</li>\n<li><a href=\"https://www.kaggle.com/competitions/feedback-prize-effectiveness/data\" target=\"_blank\">FB2.0</a>: Classifying each discourse as being effective, ineffective, and adequate.</li>\n<li><a href=\"https://www.kaggle.com/competitions/feedback-prize-english-language-learning/overview\" target=\"_blank\">FB3.0</a>: Overall essay scoring.</li>\n</ul>\n<p>Here is the link to the&nbsp;<a href=\"https://www.kaggle.com/code/vitouphy/fb3-multi-task-prediction\" target=\"_blank\">notebook</a>, and here is its performance:</p>\n<ul>\n<li>Public: 0.457696</li>\n<li>Private: 0.458945</li>\n</ul>\n<h1>What I learned</h1>\n<p>All the scores reported below are private scores. I also run some other experiments before this multitasking model. So I’ll document the overall concepts I learned below.</p>\n<p><strong>RoBERTa followed by Conv helps a bit</strong></p>\n<p>The Conv layer on top of RoBERTa helps boost the performance by&nbsp;<strong>(0.9% better)</strong>.</p>\n<ul>\n<li>RoBERTa: 0.465965</li>\n<li>RoBERTa-Conv: 0.461717</li>\n</ul>\n<p><strong>DistillRoBERTa is not too bad</strong></p>\n<p>Fine-tuning DistillRoBERTa can achieve a similar performance to RoBERTa for significantly fewer parameters and inference latency&nbsp;<strong>(0.1% worse)</strong>.</p>\n<ul>\n<li>RoBERTa-Conv: 0.461717</li>\n<li>DistillRoBERTaConv: 0.462217</li>\n</ul>\n<p><strong>Word-Level embedding is essential</strong></p>\n<p>We try using SentenceTransformer or fixed RoBERTa to get embedding for the whole essay without being able to update the encoder’s weight. The performance jumps to more than 0.5.</p>\n<ul>\n<li>RoBERTa: 0.465965</li>\n<li>SentenceTransformer: 0.52097</li>\n<li>Fixed pretrained-NER-RoBERTa: 0.515841</li>\n</ul>\n<p><strong>Fine-tuning on previous tasks helps</strong></p>\n<p>I try to fine-tune RoBERTa on FB1.0 which is to detect the boundary of arguments in the essay. It improves by&nbsp;<strong>0.5%</strong>.</p>\n<ul>\n<li>(Pretrained NER)-RoBERTa-Conv: 0.459103</li>\n<li>RoBERTa-Conv: 0.461717</li>\n</ul>\n<p>I didn’t get to fine-tune on the FB2.0 though.</p>\n<p><strong>Use HyperParameter</strong></p>\n<p>I started using hyperparameter tuning instead of sitting and tweaking each parameter. It saves a lot of time as it would just run automatically and return the result at the end. Here are some of the experiment results:</p>\n<ul>\n<li>RoBERTa-Conv:<ul>\n<li>Plain: 0.472317</li>\n<li>HParams: 0.461717&nbsp;<strong>(+2.2%)</strong></li></ul></li>\n<li>RoBERTa:<ul>\n<li>Plain: 0.487746</li>\n<li>HParams: 0.465965&nbsp;<strong>(+4.4%)</strong></li></ul></li>\n</ul>\n<p>However, I was not able to do this hyperparameter search all the way. For some experiments, I end up doing them manually. For example, I was testing by using the top 4 layers of Transformers or using 4 layers but evenly selected from different layers. I did hyper-parameter tuning for each one, but not all together. I should have just thrown it in hyperparameter and just look at the result all in one go.</p>\n<p><strong>Multitasking is about balancing</strong></p>\n<p>Conceptually, multitasking makes the encoder more aware of all the tasks and hopefully it trains to use all those knowledge and improve the score altogether. As it turns out, setting the right trade-off parameter can be tricky. Often, it tips off toward one loss function and that just worsens the others. I’m still searching for the right way to balance these objectives. The current result favors the main scoring task and it makes discourse detection way worse. But yes, for this task, the multitasking model was able to achieve higher performance than the RoBERTa one.</p>\n<ul>\n<li>MultiTask (3 tasks): 0.458945</li>\n<li>RoBERTa-Conv: 0.461717&nbsp;<strong>(+0.6%)</strong></li>\n<li>RoBERTa: 0.465965&nbsp;<strong>(+1.5%)</strong></li>\n</ul>",
  "comments": [],
  "comment_count": 0,
  "messages": [
    {
      "id": 2054371,
      "postDate": "2022-12-04T04:48:15.297Z",
      "content": "<p>💡 Leaderboard: Top&nbsp;68%&nbsp;(1,782 out of 2,654)</p>\n<h1>Task</h1>\n<p>The task was to score an essay in&nbsp;<strong>6 targets</strong>: cohesion, syntax, vocabulary, phraseology, grammar, and conventions. No other labels are provided. But we can use data from past Feedback competitions. That includes argument segmentation (FB 1.0) and classification (FB 2.0).</p>\n<h1>Final Solution</h1>\n<p>I trained a multitasking model using RoBERTa to do three tasks from all FB competitions. That includes:</p>\n<ul>\n<li><a href=\"https://www.kaggle.com/competitions/feedback-prize-2021/data\" target=\"_blank\">FB1.0</a>: Detecting discourse boundary. This is like a NER task. The labels are lead, position, evidence, claim, concluding statement, counterclaim, and rebuttal.</li>\n<li><a href=\"https://www.kaggle.com/competitions/feedback-prize-effectiveness/data\" target=\"_blank\">FB2.0</a>: Classifying each discourse as being effective, ineffective, and adequate.</li>\n<li><a href=\"https://www.kaggle.com/competitions/feedback-prize-english-language-learning/overview\" target=\"_blank\">FB3.0</a>: Overall essay scoring.</li>\n</ul>\n<p>Here is the link to the&nbsp;<a href=\"https://www.kaggle.com/code/vitouphy/fb3-multi-task-prediction\" target=\"_blank\">notebook</a>, and here is its performance:</p>\n<ul>\n<li>Public: 0.457696</li>\n<li>Private: 0.458945</li>\n</ul>\n<h1>What I learned</h1>\n<p>All the scores reported below are private scores. I also run some other experiments before this multitasking model. So I’ll document the overall concepts I learned below.</p>\n<p><strong>RoBERTa followed by Conv helps a bit</strong></p>\n<p>The Conv layer on top of RoBERTa helps boost the performance by&nbsp;<strong>(0.9% better)</strong>.</p>\n<ul>\n<li>RoBERTa: 0.465965</li>\n<li>RoBERTa-Conv: 0.461717</li>\n</ul>\n<p><strong>DistillRoBERTa is not too bad</strong></p>\n<p>Fine-tuning DistillRoBERTa can achieve a similar performance to RoBERTa for significantly fewer parameters and inference latency&nbsp;<strong>(0.1% worse)</strong>.</p>\n<ul>\n<li>RoBERTa-Conv: 0.461717</li>\n<li>DistillRoBERTaConv: 0.462217</li>\n</ul>\n<p><strong>Word-Level embedding is essential</strong></p>\n<p>We try using SentenceTransformer or fixed RoBERTa to get embedding for the whole essay without being able to update the encoder’s weight. The performance jumps to more than 0.5.</p>\n<ul>\n<li>RoBERTa: 0.465965</li>\n<li>SentenceTransformer: 0.52097</li>\n<li>Fixed pretrained-NER-RoBERTa: 0.515841</li>\n</ul>\n<p><strong>Fine-tuning on previous tasks helps</strong></p>\n<p>I try to fine-tune RoBERTa on FB1.0 which is to detect the boundary of arguments in the essay. It improves by&nbsp;<strong>0.5%</strong>.</p>\n<ul>\n<li>(Pretrained NER)-RoBERTa-Conv: 0.459103</li>\n<li>RoBERTa-Conv: 0.461717</li>\n</ul>\n<p>I didn’t get to fine-tune on the FB2.0 though.</p>\n<p><strong>Use HyperParameter</strong></p>\n<p>I started using hyperparameter tuning instead of sitting and tweaking each parameter. It saves a lot of time as it would just run automatically and return the result at the end. Here are some of the experiment results:</p>\n<ul>\n<li>RoBERTa-Conv:<ul>\n<li>Plain: 0.472317</li>\n<li>HParams: 0.461717&nbsp;<strong>(+2.2%)</strong></li></ul></li>\n<li>RoBERTa:<ul>\n<li>Plain: 0.487746</li>\n<li>HParams: 0.465965&nbsp;<strong>(+4.4%)</strong></li></ul></li>\n</ul>\n<p>However, I was not able to do this hyperparameter search all the way. For some experiments, I end up doing them manually. For example, I was testing by using the top 4 layers of Transformers or using 4 layers but evenly selected from different layers. I did hyper-parameter tuning for each one, but not all together. I should have just thrown it in hyperparameter and just look at the result all in one go.</p>\n<p><strong>Multitasking is about balancing</strong></p>\n<p>Conceptually, multitasking makes the encoder more aware of all the tasks and hopefully it trains to use all those knowledge and improve the score altogether. As it turns out, setting the right trade-off parameter can be tricky. Often, it tips off toward one loss function and that just worsens the others. I’m still searching for the right way to balance these objectives. The current result favors the main scoring task and it makes discourse detection way worse. But yes, for this task, the multitasking model was able to achieve higher performance than the RoBERTa one.</p>\n<ul>\n<li>MultiTask (3 tasks): 0.458945</li>\n<li>RoBERTa-Conv: 0.461717&nbsp;<strong>(+0.6%)</strong></li>\n<li>RoBERTa: 0.465965&nbsp;<strong>(+1.5%)</strong></li>\n</ul>",
      "rawMarkdown": "💡 Leaderboard: Top 68% (1,782 out of 2,654)\n\n\n# Task\n\nThe task was to score an essay in **6 targets**: cohesion, syntax, vocabulary, phraseology, grammar, and conventions. No other labels are provided. But we can use data from past Feedback competitions. That includes argument segmentation (FB 1.0) and classification (FB 2.0).\n\n\n# Final Solution\n\nI trained a multitasking model using RoBERTa to do three tasks from all FB competitions. That includes:\n\n- [FB1.0](https://www.kaggle.com/competitions/feedback-prize-2021/data): Detecting discourse boundary. This is like a NER task. The labels are lead, position, evidence, claim, concluding statement, counterclaim, and rebuttal.\n- [FB2.0](https://www.kaggle.com/competitions/feedback-prize-effectiveness/data): Classifying each discourse as being effective, ineffective, and adequate.\n- [FB3.0](https://www.kaggle.com/competitions/feedback-prize-english-language-learning/overview): Overall essay scoring.\n\nHere is the link to the [notebook](https://www.kaggle.com/code/vitouphy/fb3-multi-task-prediction), and here is its performance:\n\n- Public: 0.457696\n- Private: 0.458945\n\n# What I learned\n\nAll the scores reported below are private scores. I also run some other experiments before this multitasking model. So I’ll document the overall concepts I learned below.\n\n**RoBERTa followed by Conv helps a bit**\n\nThe Conv layer on top of RoBERTa helps boost the performance by **(0.9% better)**.\n\n- RoBERTa: 0.465965\n- RoBERTa-Conv: 0.461717\n\n**DistillRoBERTa is not too bad**\n\nFine-tuning DistillRoBERTa can achieve a similar performance to RoBERTa for significantly fewer parameters and inference latency **(0.1% worse)**.\n\n- RoBERTa-Conv: 0.461717\n- DistillRoBERTaConv: 0.462217\n\n**Word-Level embedding is essential**\n\nWe try using SentenceTransformer or fixed RoBERTa to get embedding for the whole essay without being able to update the encoder’s weight. The performance jumps to more than 0.5.\n\n- RoBERTa: 0.465965\n- SentenceTransformer: 0.52097\n- Fixed pretrained-NER-RoBERTa: 0.515841\n\n**Fine-tuning on previous tasks helps**\n\nI try to fine-tune RoBERTa on FB1.0 which is to detect the boundary of arguments in the essay. It improves by **0.5%**.\n\n- (Pretrained NER)-RoBERTa-Conv: 0.459103\n- RoBERTa-Conv: 0.461717\n\nI didn’t get to fine-tune on the FB2.0 though.\n\n**Use HyperParameter**\n\nI started using hyperparameter tuning instead of sitting and tweaking each parameter. It saves a lot of time as it would just run automatically and return the result at the end. Here are some of the experiment results:\n\n- RoBERTa-Conv:\n    - Plain: 0.472317\n    - HParams: 0.461717 **(+2.2%)**\n- RoBERTa:\n    - Plain: 0.487746\n    - HParams: 0.465965 **(+4.4%)**\n\nHowever, I was not able to do this hyperparameter search all the way. For some experiments, I end up doing them manually. For example, I was testing by using the top 4 layers of Transformers or using 4 layers but evenly selected from different layers. I did hyper-parameter tuning for each one, but not all together. I should have just thrown it in hyperparameter and just look at the result all in one go.\n\n**Multitasking is about balancing**\n\nConceptually, multitasking makes the encoder more aware of all the tasks and hopefully it trains to use all those knowledge and improve the score altogether. As it turns out, setting the right trade-off parameter can be tricky. Often, it tips off toward one loss function and that just worsens the others. I’m still searching for the right way to balance these objectives. The current result favors the main scoring task and it makes discourse detection way worse. But yes, for this task, the multitasking model was able to achieve higher performance than the RoBERTa one.\n\n- MultiTask (3 tasks): 0.458945\n- RoBERTa-Conv: 0.461717 **(+0.6%)**\n- RoBERTa: 0.465965 **(+1.5%)**",
      "votes": 5
    }
  ],
  "complete": true,
  "source": "live",
  "fetched_at": "2026-10-19T20:05:19Z",
  "competition_id": 38321,
  "competition_slug": "feedback-prize-english-language-learning",
  "team_id": 9387824,
  "solution_url": "/competitions/feedback-prize-english-language-learning/writeups/vitou-phy-1-782nd-place-multitasking-solution"
}