Kaggle・Google QUEST Q&A Labelingコンペでメダルを逃す方法を共有!

  • 2020年2月16日
  • 2020年2月19日
  • Kaggle
  • 26view

■この記事を読むとわかること

 

・Google QUEST Q&A Labelingコンペの内容がわかる

・kaggle初心者のあるあるがわかる

・メダルのゲットを失敗する思考が分かる

 

序章・コンペの振り返り

Kaggleの Google QUEST Q&A Labelingコンペが終了しました。

今回もメダルを逃してしまいました。

このブログでは、コンペの振り返りの意味を込めて、なぜメダルに到達しなかったのか考察したので共有したいと思います。

 

 

メイド達の会話「問題の意図は理解していますか?」

kaggleの初心者がやりそうな失敗を、メイド達による初心者とメダル保持者との会話を例にして述べます。

まずは、メイド達の会話をご覧ください。

 

 

初心者

kaggleを初めてから2回目のコンペに挑戦しました。
しかし、またメダルを取り逃してしまったよ~

 

メダル保持者

お疲れ様~
なぜ、メダルを取り逃したのかわかっている?

 

わかりません・・・
他人のコードを参考にして思いついた事を色々やってみたけど、スコアが上がらず嫌になってしまったよ。コンペのためにBertやLSTMなどの自然言語系のモデルの勉強したのに・・・。

コンペ締め切り前なんて、パラメータを当てずっぽうで変更して、スコアが上がるかどうかの作業しかしていないですね。

 

なるほど・・・。
今回のコンペ(Google QUEST Q&A Labeling)は、どんなコンペなの?
説明してもらえるかな?

 

うーーんとね・・・・
GoogleがQAサイトを作りたいらしい。質問と回答の質(質問に対して詳しく返答しているかなど)についてラベルをつけるものだね。
うまく説明できないわ。

 

そうなんだ・・・。
なんでラベル付しているんだろう?
コンペには、ビジネス的な目的があるはずなんだけど、教えてもらえる?

 

うーーん、よくわからないですね・・・。
(ちーん)

 

わかったわ。
それが問題だね。
このコンペで主催者が何をしてほしいのか目的が理解できていないんだよ。
目的が分かっていないから、いざ開始してみると、何をやっていいかわからないんだよ。

 

なるほど。
問題文はあるけど、英語が理解できなかったんだ。
理解している時間も無かったから、だれかのkernelを使ってさっそく、問題を解き始めたんだ。
そういえば、「ここ怪しいな、もっと調べてみよう」という考えすらなかったよ。

 

初心者あるあるだね。
時間かかってもいいから、問題文はしっかり理解しようね。
kaggleは、プログラミングスキルよりも分析力、問題解決力の方がより問われるよ。
Bertのアルゴリズムを一生懸命勉強しても、肝心の問題がわかっていないと進む方向を間違えるからね

 

 

kaggleは、分析力、問題解決力の方がより問われる

私も、プログラミングスキルがあればkaggleの問題が解けると思っていました。

しかし、実際は、問題文から出題者の意図を理解すること、問題解決力の方が重要であることをkaggleのメダル保持者に教えられました。

 

問題がわかれば、データをみたときに「ここが怪しい」と当たりをつけられるようになり、仮説、検証にはいることができます。

 

まずは、問題をしっかり理解しましょう。

 

どんなコンペだったの?

お題(問題)は?

Googleは、人間に近いQ&Aシステムの構築を目指している。

 

システム構築に先立ち、Google ResearchのCrowdSource teamの評価者が、70のQAサイトの質問と回答についてガイドに従って、評価(ラベル付け、点数化している)しています。評価項目は、30項目(kaggleの目的変数)もあり、大変苦労しているようです。

 

評価者にとって、複雑で不透明な評価ガイドラインへの依存を軽減することにより、このデータセット(トレーニングデータ)の再利用価値を高めたい。

 

そのような目的からカグラーに、評価を自動化するためのモデルを作成したほしいということです。

 

良いモデルをつくると、評価者のラベル付の負担が軽減し、人間に近いQ&Aシステムの構築がより近づくようです。

 

 

人間に近いQ&Aシステムとは

kaggleの問題文の要約をします。

 

人間が質問に回答するときは、興味、経験などの主観的な側面で回答し多次元で理解します。

一方でコンピュータは、パターン化された単一な回答をするのが得意です。

 

主観的なラベルが確実に予測できると、この「人間に近いQ&Aシステム」に新しい光を当てることができます。

 

このコンペの結果は、将来のインテリジェントQ&Aシステムの構築方法を示し、より人間らしくなることに貢献することを期待しています。

 

主観的なQAシステムのアルゴリズムは、データと予測モデルが欠落しており、実現が難しいのです。

 

コンペに取り組んだ感想

コンペに取り組んだ感想としては、

トレーニングデータのCSVファイルは13Mほどで、データの読み込み速度などで悩まされることはなかったです。

 

自然言語系の機械学習を学ぶのに適したコンペといえます。

 

自然言語系のコンペでは、殆どBertを使っているようで、このコンペも例外ではありません。

 

 

負けた理由を列挙

さて本題です。

なぜ、メダルをゲットできなかったのか列挙していきます。

 

このコンペで何を解決してほしいかを理解していない

前章の「メイド達の会話」に書いてあることそのままですが、

問題を理解せずにコードを書く方に進んだ。

 

すぐに積んでしまいました。

やっていたことは・・・

 

面倒くさがりや

とりあえず、このパラメータを変更しておけばいいんじゃね?

 

という進め方をしてました。

 

データの特性など考えていないので、点数が上がるわけがないですね。

 

 

評価指標のスピアマンの相関係数の意味を知らなかった

今回の評価指標のスピアマンの相関係数( Spearman’s correlation coefficient)の性質を理解せずにすすめていました。

モデルが出力した予測結果をそのまま提出すればいいみたいな感じでした。

もし、スピアマンの相関係数について少しでも気にとめていれば、メダルをゲットできたかもしれません(なぜそのように思うのか、次の項目で記載します)。

 

スピアマンの順位相関係数とは

2つのグループ(例えば、英語、数学のグループ)の順位において、どのくらい関係があるのかを数値で表す指標です。ポイントは、数学の得点などの数値そのものではなく、順位です。

同じグループで同じ順位(数値)だとエラーになります。

 

 

ディスカッションを全く見ない

私は、kaggleにディスカッションがあることしか認識していませんでした。

実は、そこに重要なヒントがあるのです。

 

評価指標について気にとめていて、ディスカッションをみていたら銅メダル圏内行けていたのです。

 

コンペ終了後、上位者の情報を元に「スピアマンの相関係数」について論議されているディスカッションを見つけました。ディスカッション内にある「post processing」の部分を調べて実装したら0.04上昇して、余裕で銅メダル圏内に入ることができていたのです(これについては、次回で詳しく書く予定)。

これってもったいないですね。

 

評価指標について調べていたら、メダル圏内に行けたと言うことです。

 

調べることは、2時間くらいでできていたので、時間の使い方も重要といえます。

 

 

spearmanr evaluation metric and observation

 

 

 

特徴量エンジニアリングまで手が回らなかった

問題の理解を無視していたので、特徴量エンジニアリングができるわけありません。

なぜなら、仮説を立てることができないからです。

 

kernelをコピーしてからパラメータ数カ所をイジってみただけ

なにから手をつけて良いかわからないから、パラメータを変更するだけ。

その繰り返し。ふり返ると、まったく分析していないことがわかりました。

1日1回必ずコミットすることを行動目標としていたが、目的も「1日1回のコミットする」に差し替わっていたようです。その結果、コミットだけすれば良いという思考になっていました。

 

過去のコンペの解法を使ってみる

データを水増しする

自然言語のコンペおなじみ(?)の手法である、

英語→多言語→英語

という手順で訓練データを増やす方法です。

しかし、今回は何故かスコアが増えなかった。

 

今思うと、正例が少ないところに対してデータの水増しをしたら、効果あったかもしれません。

 

 

データのクリーニング

データのクリーニングを実施してみました。

たとえば、 I don’t like bookを I do not like bookに正規化する。

正規化したものをBertに通したらなぜか、スコアが下がってしまいました。

なぜだ?

Bertの事前学習では、「do not」のところを「don’t」として学習しているのか?

 

まとめ

今回は、失敗する思考について記載しました。

コンペで最も重要なのは、問題を面倒くさがらずに理解することといえます。

それを怠ると、プログラムが書けても間違った方向に進んでしまいます。

 

Google QUEST Q&A Labelingコンペが終わった後、どうすれば銅メダル圏内に入れるのか、上位者のヒントを見ながら、試しました。

そしたら、1カ所だけ気付いていたら、銅メダルに余裕で入れることがわかりました

詳細は、次のブログで共有したいと思います!

 

 

 

最新情報をチェックしよう!
>プログラミングスクール検索・比較表サイト

プログラミングスクール検索・比較表サイト

ワンクリック、さらに詳細に条件を指定してプログラミングスクールの検索ができます。さらに比較表により特徴を細かく比較できる!

CTR IMG