📕

kaggle Feedback Prize 2022 上位解法まとめ

2022/08/27に公開

はじめに

学生の書いたエッセイの評価予測を行うFeedback Prize 2022というkaggleコンペが2022/8/24まで開催されていました。
コンペ終了後に公開された上位チームの解法からたくさん学びがあったので、備忘録も兼ねてまとめていきたいと思います。

コンペ概要

  • 米国の小学6年生〜高校3年生の学生が書いたessay(小論文)が"Effective(効果的)"、"Adequate(適切)"、"Ineffective(効果的ではない)"のどの評価であるかを予測するモデルの精度を競うコンペでした。
  • ただし、このコンペではessayごとではなく、essayを構成するdiscourse(談話)ごとの評価を予測します。
    • discourseにはそれぞれLead(導入)、Position(立場)などのdiscourse_typeが1つ与えられており、予測時にはこの情報を使用することができます。
  • ちなみに数ヶ月前にFeedback Prize 2021という同じ主催者によるコンペが開催されており、そのコンペのデータを使用することも認められていました。
    • ただし、2021のデータには評価ラベルがついていないため、ラベルなしデータとして扱う必要があります。

上位チーム解法まとめ

1. Pretrain

MLM

  • 過去コンペのデータを使ってMLMを行い事前学習をしていました。(引用:2nd solution12th solution、etc...)

  • SpanMLMという3つの工夫を加えたMLMを実施しているチームもあり、通常のMLMよりも効果的だったと言及されています。(引用:3rd solution

    • マスキングの確率を40〜50%に変更
    • 通常のランダムマスキングの代わりに、長さ3〜15の連続したトークンをマスキング
    • エッセイの平均長に合わせるため、ファインチューニング段階でchuck size/max lengthを720に変更
  • 後述するdiscourseの境界を示すトークンを常にマスクする工夫をして学習させているチームもありました。(引用:7th solution

Pretrained Weights

  • 過去コンペで使用したモデルの重みをpretrain weightとして使用しているチームもいました。(引用:3rd solution
  • 今回のコンペのデータセットは過去コンペのデータセットのサブデータセットだったので、過去コンペのモデルは学習のスタートとしては優秀だったのかもしれません。

2. Model

backbone

  • バックボーンモデルはほぼ全てのチームがDeBERTa系統(特にDeBERTa-v3-large)を使用していました。
  • DeBERTaは入力長が無制限であること、相対的な位置埋込により離れたAttentionを使用するため有効だったのではと考察しているチームもいました。(引用:2nd solution
  • 多様性を出すためにlongformer、bigbirdを導入しているチームもありました。(引用:3rd solution12th solution
  • バックボーンはほぼDeBERTa系統一色だったのに対し、ヘッドはLSTMを重ねたり、Attention Headを適用したり各チーム様々だった印象です。
  • 4thチームなどは異なるヘッド部を持つモデルをアンサンブルしたりしていました。(引用:4th solution

3. Train

Cross Validation

  • 今回のコンペデータはラベルの偏りが強かったため、CVの切り方が重要でした。
  • essay_idをグループとしてdiscourse_effective(ラベル)で層化するStratifiedGroupKFoldで分割することでCV/LBの相関が非常に高くなったチームが多かったようです。(引用:1st solution2nd solution
  • また、ラベルとトピックを同時に層化することで相関をさらに向上させたチームもあったようです。(引用:7th solution
    • 明記はされていませんでしたが、BERTopicを使って各essayのトピックを推論するNotebookが公開されていたので、おそらくその情報も使ってCVを分けていたのではないかと思います。

InputData

  • 今回のコンペではモデルへの入力データの工夫が一つの大きなキーとなっていました。

  • 全チーム共通していたこととしては、essayを入力し複数のdiscourseをまとめて推論する方針を採用していました。

  • また多少の違いはありましたが、各discourseの先頭と末尾に特殊なトークンを挟んで連結する方法をとっていることも共通していました。

    • このようにすることでモデルが予測しなければならない箇所を判別しやすくなり精度が上がるとのことです。(引用:2nd solution
    • 分かりやすい具体例としては、例えば2ndチームは下記のような形で連結をしていました。
      (Lead start) Hi, I'm .... (Lead end) (Position start) On my perspective ... (Position end)... 
      
  • 連結するトークンはdiscourse_typeごとに開始トークン、終了トークンを用いているチームが多かったですが、それぞれオリジナルな工夫をしているチームもありました。

    • トークンに明示的にdiscourse_typeの情報は与えず、discourse_typeもマルチタスクとして予測させることでCVのスコア向上をさせる。(引用:1st solution
    • 先頭にトピックテキストを追加して、エッセイ全体を特殊トークンで挟む(引用:3rd solution
  • 予測のときは連結に使用したトークンのベクトルを使用する方法、discourseごとのベクトルを平均プーリングしたベクトルを使用する方法が主流でしたが、このあたりはチームによって様々でした。

    • 少し変わった推論方法として、各discourseの先頭に[Effective]、[Adequate]、[Ineffective]というトークンを追加し、それぞれのクラス確率を対応するトークンから計算する方法を採用しているチームもありました。(引用:11th solution

T5 Augmentation

  • 3rdチームが採用していた方法で、コンペデータを使ってT5-largeモデルを学習し生成した文章を学習に使用するAugmentationです。(引用:3rd solution
  • 生成したデータはファインチューニング時にオリジナルの学習データと混ぜて使用したとのことでした。
  • ちなみにT5モデルの性能は素晴らしく、どれがオリジナルでどれが生成されたものか判別できないほどのレベルだったようです。

Pseudo Labeling

  • 多くのチームが2021のデータをPseudo Labelingに使用していました。(引用:1st solution2nd solution、etc...)
  • ただし、今回のコンペはラベルの偏りが大きくハードラベルで使用するとAdequateの比重が大きくなりすぎてしまうため、ソフトラベルで使用することがキーポイントでした。
    • 最終的にはソフトラベルを使用していますが、分布が崩れすぎないようにデータをサンプリングすることでハードラベルでも一応精度向上をさせることは可能でした。(引用:12th solution
  • Pseudo Labelingを用いた学習方法は主に下記の2パターンのうちどちらか、もしくは両方を採用しているチームがほとんどでした。
    1. 今回のコンペデータセットを混ぜてモデルを学習
    2. 擬似ラベルで数エポック学習し、その後今回のコンペデータのみを用いて追加学習する

4. PostProcess / Ensemble

Stacking

  • 多くのチームが第一段階にTransformer、第二段階にTransformerの出力とメタデータを組み合わせたメタモデルを用いてスコアを上げていました。
  • 使用しているメタデータは各チーム様々でしたが、essayに含まれるdiscourse数や単語数、少し変わったところではIneffectiveのヒストグラム情報などを使用していました。
  • 使用モデルはLGBMが多かった印象ですが、NNやxgbを採用したり、組み合わせて使用しているチームもいました。
  • 多くのチームは複数のTransformerモデルの出力を用いてメタモデルを学習させていましたが、単独モデルの出力とメタデータを組み合わせてシングルモデルの性能を引き上げているチームもありました。(引用:5th solution

5. Other Tips

GPU Optimization

  • メモリサイズの小さいGPUで大きいモデルを学習させる様々なTipsをDiscussionに上げてくださった方がおり大変参考になりました。(参考リンク
  • Notebook付きで実装も公開してくれているため、今回のコンペに限らず様々なコンペで活用できる情報だと思います。

Efficiency Track

  • 今回のコンペでは、通常のLBの他にEfficiency Trackという処理速度も考慮したスコアで計算される別なランキングが設定されており、アンサンブルに頼らず精度を出すための方法がいくつか公開されていました。(参考:Efficiency 1st solutionEfficiency 2nd solution
  • 例えばEfficiency Track 1位のチーム(LBも1位)は、LBに使用したアンサンブルモデルで2021データおよび今回コンペデータに擬似ラベルを付け、それを用いてDeBERTa-v3-largeを学習させることでほぼ精度を落とさずに知識を抽出することができたとのことです。
  • 通常のコンペではアンサンブルが定石となっていますが、業務などではリソースや処理速度の制限が強い場面もあるので、このように単一のモデルでより良い精度を出すための方法はとても有用で面白い取り組みだったと思います。

まとめ

上位チームの解法を一通り見て、コンペ中には思いつかなかった方法はもちろん、同じことを思いついても使い方・実装方法が違うことでスコアに差が出てしまうため、よりタスクをちゃんと理解していくことが大事なんだなと改めて思いました。
またこのコンペはタスク自体は単純でとっつきやすくも様々な工夫を組み込む余地が多くあり、とても多くのことを学べた良いコンペだったと感じています。
学んだことをこれからのコンペや業務に活かしていきたいと思います。

Discussion