Google QUEST Q&A Labeling
Improving automated understanding of complex question answer content
https://www.kaggle.com/c/google-quest-challenge
本日、2月28日(金)に弊社 Wantedly にて、Kaggle Google Quest Q&A Labeling 反省会を開催したので、その様子をお伝えいたします。
世界最大のデータ分析プラットフォームである Kaggle 上で 2019/11/22 ~ 2020/2/10 の約3ヶ月間、開催された自然言語処理に関するデータ分析コンペです。
英文による質問と回答のペアが与えられており、そのペアに対する30項目における評価値を予測するコンペでした。
弊社では 3 名 (懸さん, 合田さん, 私 )がこのコンペに参加しまして、反省会を開こうと話していました。合田さんが Twitter にて社外の方へも呼びかけてくださり、社外の方々も参加していただける形で反省会を開くことができました!
connpassにて参加者・登壇者を正式に募集し、想定より多くの方々に応募していただけました。
会場の関係で参加人数に限界があり、せっかく応募いただいたのに抽選で不参加となってしまった方々には本当に申し訳なく思います。また機会がありましたら、よろしくお願いいたします。
タイムテーブルを見ると、錚々たるメンバーにご登壇いただけたことが分かるかと思います。
3 位入賞のsakamiさんと、4 位入賞のDracondaさんが!
その他の方々も素晴らしい解法・知見を共有いただけました!
詳細は資料リンク先に記載されておりますので、本記事では口頭でありました印象的な部分をピックアップして、紹介したいと思います。
(資料はまだすべて掲載できておりませんが、公開され次第、更新していきます。)
弊社のhakubishinさん (合田さん) が発表しました。弊社の@agatanさん(懸さん) とのチーム戦での参加でした。学習と推論を Kaggle Notebook 上で行うという縛り解法で 23th なのはすごいですね!(本来、推論だけでOK...)
学習もNotebook上で行っていたので、ソースコードをすべてKaggle Notebook上で公開してくれています!
解法で印象的だったのは、Questionだけで予測するモデルとQuestionとAnswer両方で予測するモデルを使い、後処理でLightGBM (depthのかなり浅いもの) を使っていた点でした。また、難しいタスクはweightを大きくするようなナイーブなLabel weightもよく効いたそうです。
LightGBMでビンニングした理由としては、ビンサイズとweightを両方最適化したかったからだったそうです。
https://www.kaggle.com/shuheigoda/23th-place-solusion/notebook
ソロ参加で 47th の kenmatsuさんに発表いただきました。
ポイントとしては不均衡データと、ターゲットデータの離散値に対する対処で、資料に記載されているよう、4つのBERTモデルの平均を利用されたそうです。
また、テキストが長すぎるものは最初の部分と最後の部分を利用したり(1:1)、MultilabelStratifiedKFold (10-fold) でデータ分割する工夫をされたそうです。
後処理としては、予測値の分布を学習データの分布に近似させたそうです。
1週間 Errorしか出ないような辛い時期や、チームマージのお誘いもあったそうですが、ソロゴールド狙いだったため、強い心で最後までソロ参加を貫いたそうです!
https://www.kaggle.com/c/google-quest-challenge/discussion/129885
サブタイトルが「某GMの絶対に負けられない戦いに巻き込まれて」となっております、16th の Fujitaさんからの発表がありました。有名なGMが 2名もいる、すごいチームです!
チームメンバがそれぞれモデルを作成し、それをブレンドしたようです。
話の中で面白かったのは、yuvalさんのモデルRoBERTaのconfigと学習スケジュールは、コードから解読が困難なほどにテクニカルなカスタマイズがされていたという話でした。
工夫したこととしては、ターゲットをランクに変換して[0, 1]に正規化して学習させたことと、後処理として、0過剰と1過剰のカラムはtrain dataの比率でクリップしたことだそうです。
Privateでランキングがダウンした原因としては、CVを信頼できなかったこと、また実行時間の制限で良いモデルを選択できなかったことだそうです。
会場のみで公開された「とあるGMの絶対に負けられない戦い」という茶番スライドが、とてもおもしろかったです!!
https://www.kaggle.com/c/google-quest-challenge/discussion/130112
3th 入賞のsakamiさんからの発表でした。
ポイントとしては、アンサンブルでの力技の部分と、弱いPost-Processに抑える部分だそうです。
12種類のモデルのアンサンブル、4種類の文章の切り取りという、ソリューションを見た時、なぜそんなに多くのこと1人でできるのですか?!と、びっくりしました。ソロで金をとるというのはこのくらいのことをしないと不可能なのだな、とあらためてソロ金の凄さを思い知りました。
また、gelu_new activationを使うと全体的に良かったそうです。BERT、LSTM、XLNetが個人的に良かったモデルで、GPT2はアンサンブルのweightが大きいイメージだったけど、今回はそうならなかったそうです。
https://www.kaggle.com/c/google-quest-challenge/discussion/129927
4th入賞のDracondaさんからの発表でした。
コンペでは、Public金圏外からPrivateで 4th 入賞へランクアップしたのが印象的でした!
資料3枚目に記載されているよう、3つのTransformerを合わせてアーキテクトで、Transformer部分をBERTとXLNetにしたもを採用されたそうでうす。英語を他の言語に変えてからまた戻すAugumentationをおこない、特にフランス語・スペイン語がうまくいったようです。
また、External Dataset(stack overflow)でPreTraining(MLMだけ)をしてスコアが上がるかと思いきや、逆にスコアが下がったそうです。
https://www.kaggle.com/c/google-quest-challenge/discussion/129896
https://www.kaggle.com/c/google-quest-challenge/discussion/130009
Kaggle Master の upura さんから、NLPコンペを実務で活かすための発表がありました。
コンペを実務に活かすためには以下のような課題があり、それに対して使いやすい自作ライブラリAyniyを作っているそうです。
様々な手法での精度比較を容易にできるような設計にされているそうで、実際に実務で使われているそうです。実例紹介は会場のみでの共有となり、とても貴重なお話でした。
また、コンペで使う指標と実務で使う指標の使い分けの難しさも話してくださり、とてもおもしろかったです。
発表後に1時間ほど、懇親会を行いました。
同じコンペに参加した者同士、和気あいあいとコンペの話や最近の仕事の話などが出来てとても楽しかったです!
また、このようなイベントを弊社で企画できたらと思いました。
本イベントに参加していただいた guchio さんが昨日公開されました、Google QUEST Q&A Labeling コンペに関するブログが、とても丁寧に背景から公開されているソリューションを網羅して記載されていて、必見です!!
現在、Wantedlyでは毎週木曜日18:30から、機械学習の勉強会を開催しています。外部の方も参加可能ですので、ぜひ遊びに来てください!
また、一緒にWantedlyで機械学習エンジニアとして活躍してくれるメンバーも募集中です。話だけでも聞きたいなど、カジュアル面談も受け付けてますので、気軽に話を聞きに来ていただけたら嬉しいです!
本イベントではコロナウイルス対策として、参加者に以下のとおりお願い・ご協力いただき、少人数イベントであることからオンサイトで開催いたしました。ご協力いただきました皆様、本当にありがとうございました。