Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Quoraコンペ参加記録

5,040 views

Published on

社内勉強会で発表したKaggleコンペのQuora Question Pairsの参加記録

Published in: Technology
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Nice !! Download 100 % Free Ebooks, PPts, Study Notes, Novels, etc @ https://www.ThesisScientist.com
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Download this 3-step guide to generating insane amounts of media coverage for your from LinkedIn: http://bit.ly/linkedin3stepguide
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Quoraコンペ参加記録

  1. 1. Quoraコンペ参加記録 Takami  Sato 2017年  6月  13日  Quoraコンペ参加記録 1
  2. 2. アジェンダ •  Quoraコンペとは? •  参加記録 –  ステージ0:  doc2vecの時代  (LB:0.5) –  ステージ1:  anokasさんカーネルの時代(LB:0.35) –  ステージ2:  word一致系の時代(LB:0.30) –  ステージ3:  Word  Embeddingの時代(LB:0.25) –  ステージ4:  NLP特徴の時代(LB:0.2) –  ステージ5:  グラフの幕開け(LB:  0.13) –  ステージ6:  倦怠期(LB:  0.13) –  ステージ7:  スタッキングの時代(LB:  0.122) •  上位の手法を見てみた •  有効だったテクニック •  分析官がKaggleをやる意味 2017年  6月  13日  Quoraコンペ参加記録 2
  3. 3. Quoraコンペとは 2017年  6月  13日  Quoraコンペ参加記録 3 正式名称:Quora  Question  Pairs 2つの質問が与えられてそれが同じかどうか判定する2値分類の精度度を競うコンペ h"ps://www.kaggle.com/c/quora-­‐ques5on-­‐pairs/  
  4. 4. Quoraコンペとは 2017年  6月  13日  Quoraコンペ参加記録 4 正式名称:Quora  Question  Pairs 2つの質問が与えられてそれが同じかどうか判定する2値分類の精度度を競うコンペ question1 question2 is_duplicate What is the step by step guide to invest in share market in india? What is the step by step guide to invest in share market? 0 What is a good book about design? What are the best books about designing for emotion? 0 Is "A Head Full of Dreams" going to be Coldplay's last album? What is the song "A head full of dreams" by Coldplay about? 0 How do you get rid of 'super lice'? How can girls get rid of lice and nits? 1 評価指標はlogloss
  5. 5. 日本上陸も近い? 大型資金調達もして、他言語も続々対応中 2017年  6月  16日  Quoraコンペ参加記録 5 h"p://economic5mes.india5mes.com/small-­‐biz/money/quora-­‐raises-­‐85-­‐million-­‐the-­‐qa-­‐pla@orm-­‐ is-­‐now-­‐a-­‐unicorn/ar5cleshow/58313275.cms    
  6. 6. 最終順位 2017年  6月  15日  Quoraコンペ参加記録 6 •  あと1歩でソロゴールドだったのに。。。 •  最終的には、Kaggle上位陣が軒並み揃うヤバイコンペでした •  こんなに調子の良いコンペは初めてだったので、Kaggleはやり続けるの大事
  7. 7. とりあえず言いたいこと ☓ NLPコンペ ◎ NLP  +  Graphコンペ LSTMも試したけど、決定的ではない 2017年  6月  13日  Quoraコンペ参加記録 7
  8. 8. 個人的にはグラフ特徴は自然 A=BでB=CならA=Cなので、グラフ特徴で”補正”するのは自然 2017年  6月  13日  Quoraコンペ参加記録 8 質問B 質問A 質問C
  9. 9. でもグラフ構造にリークがあった臭い 任意の枝について、人が見ればラベルはわかるので、 本来どこの枝がTrainやTestになっているかは意味が無いはず 2017年  6月  13日  Quoraコンペ参加記録 9 h"ps://www.kaggle.com/tkm2261/my-­‐magic-­‐feature   大きいクリークに属する枝は大体正例という。。。 ただ、大半のクリークはサイズ2なのでNLP特徴も重要
  10. 10. Publicスコア推移 2017年  6月  13日  Quoraコンペ参加記録 10 0   0.1   0.2   0.3   0.4   0.5   0.6   2017/3/19   2017/3/21   2017/3/23   2017/3/25   2017/3/27   2017/3/29   2017/3/31   2017/4/2   2017/4/4   2017/4/6   2017/4/8   2017/4/10   2017/4/12   2017/4/14   2017/4/16   2017/4/18   2017/4/20   2017/4/22   2017/4/24   2017/4/26   2017/4/28   2017/4/30   2017/5/2   2017/5/4   2017/5/6   2017/5/8   2017/5/10   2017/5/12   2017/5/14   2017/5/16   2017/5/18   2017/5/20   2017/5/22   2017/5/24   2017/5/26   2017/5/28   2017/5/30   2017/6/1   2017/6/3   2017/6/5   各ステージで何があったのかを共有します
  11. 11. ステージ0:doc2vecの時代  (LB:0.5) •  『テキストの類似度ならdoc2vecやろ!』として試す •  Gensimを使用(https://radimrehurek.com/gensim/models/doc2vec.html) •  手元スコアは0.36ぐらい出てたが、submitすると0.5ぐらい •  バグかも 2017年  6月  13日  Quoraコンペ参加記録 11 0   0.1   0.2   0.3   0.4   0.5   0.6   2017/3/19   2017/3/21   2017/3/23   2017/3/25   2017/3/27   2017/3/29   2017/3/31   2017/4/2   2017/4/4   2017/4/6   2017/4/8   2017/4/10   2017/4/12   2017/4/14   2017/4/16   2017/4/18   2017/4/20   2017/4/22   2017/4/24   2017/4/26   2017/4/28   2017/4/30   2017/5/2   2017/5/4   2017/5/6   2017/5/8   2017/5/10   2017/5/12   2017/5/14   2017/5/16   2017/5/18   2017/5/20   2017/5/22   2017/5/24   2017/5/26   2017/5/28   2017/5/30   2017/6/1   2017/6/3   2017/6/5  
  12. 12. ステージ1:anokasさんカーネルの時代(LB:0.35) 有名な15歳データサイエンティストanokasさんカーネルを参考に 2017年  6月  13日  Quoraコンペ参加記録 12 •  word一致数や、一致したwordのTFIDF値の和など超シンプル •  IDF値がlogを取ってないのが不思議 •  log取ったやつも入れたが、両方あったほうがスコアが良かった •  コンペ最初は自分で初submitした後はカーネルを手元再現して、 それを超えたら次submitするのがオススメ h"ps://www.kaggle.com/anokas/data-­‐analysis-­‐xgboost-­‐starter-­‐0-­‐35460-­‐lb    
  13. 13. ステージ2:word一致系の時代(LB:0.30) 2017年  6月  13日  Quoraコンペ参加記録 13 0   0.1   0.2   0.3   0.4   0.5   0.6   2017/3/19   2017/3/21   2017/3/23   2017/3/25   2017/3/27   2017/3/29   2017/3/31   2017/4/2   2017/4/4   2017/4/6   2017/4/8   2017/4/10   2017/4/12   2017/4/14   2017/4/16   2017/4/18   2017/4/20   2017/4/22   2017/4/24   2017/4/26   2017/4/28   2017/4/30   2017/5/2   2017/5/4   2017/5/6   2017/5/8   2017/5/10   2017/5/12   2017/5/14   2017/5/16   2017/5/18   2017/5/20   2017/5/22   2017/5/24   2017/5/26   2017/5/28   2017/5/30   2017/6/1   2017/6/3   2017/6/5   •  一致したwordのTFIDF値や一致数の最大・最小・平均等 word一致系で思いつくものは全て実装 •  BoWやTFIDF行列をscipy.sparseで作って、 Hadamard積(M.multiply())で実装
  14. 14. ステージ2:word一致系の時代(LB:0.30) 2017年  6月  13日  Quoraコンペ参加記録 14 •  コレだけでTop10(開始3日目) •  ランキング上位はモチベーションかなり上げてくれるので、 初心者は最初から参加したほうが良いかも
  15. 15. ステージ3:  Word  Embeddingの時代(LB:0.25) 2017年  6月  13日  Quoraコンペ参加記録 15 •  Word  Embeddingを片っ端からTry LDA,  LSI,  word2vec,  fasttext,  glove,  lexvec,  sense2vec •  ネットのpretrainedベクトルよりも、自前学習の方がスコア良かった 次元はなんだかんだ100次元に落ち着いた 0   0.1   0.2   0.3   0.4   0.5   0.6   2017/3/19   2017/3/21   2017/3/23   2017/3/25   2017/3/27   2017/3/29   2017/3/31   2017/4/2   2017/4/4   2017/4/6   2017/4/8   2017/4/10   2017/4/12   2017/4/14   2017/4/16   2017/4/18   2017/4/20   2017/4/22   2017/4/24   2017/4/26   2017/4/28   2017/4/30   2017/5/2   2017/5/4   2017/5/6   2017/5/8   2017/5/10   2017/5/12   2017/5/14   2017/5/16   2017/5/18   2017/5/20   2017/5/22   2017/5/24   2017/5/26   2017/5/28   2017/5/30   2017/6/1   2017/6/3   2017/6/5  
  16. 16. ステージ3:  Word  Embeddingの時代(LB:0.25) 2017年  6月  13日  Quoraコンペ参加記録 16 •  wordベクトルの平均も効いたが、 各ベクトル要素の絶対値最大値の要素を取ったベクトルがさらに効いた •  前の方の単語を重視といった傾斜も試したが上手く行かず •  ベクトル間類似度はcosineやEuclidなどscipy.distにあるもの大体試した 0   0.1   0.2   0.3   0.4   0.5   0.6   2017/3/19   2017/3/21   2017/3/23   2017/3/25   2017/3/27   2017/3/29   2017/3/31   2017/4/2   2017/4/4   2017/4/6   2017/4/8   2017/4/10   2017/4/12   2017/4/14   2017/4/16   2017/4/18   2017/4/20   2017/4/22   2017/4/24   2017/4/26   2017/4/28   2017/4/30   2017/5/2   2017/5/4   2017/5/6   2017/5/8   2017/5/10   2017/5/12   2017/5/14   2017/5/16   2017/5/18   2017/5/20   2017/5/22   2017/5/24   2017/5/26   2017/5/28   2017/5/30   2017/6/1   2017/6/3   2017/6/5  
  17. 17. ステージ4:  NLP特徴の時代(LB:0.2) 2017年  6月  13日  Quoraコンペ参加記録 17 0   0.1   0.2   0.3   0.4   0.5   0.6   2017/3/19   2017/3/21   2017/3/23   2017/3/25   2017/3/27   2017/3/29   2017/3/31   2017/4/2   2017/4/4   2017/4/6   2017/4/8   2017/4/10   2017/4/12   2017/4/14   2017/4/16   2017/4/18   2017/4/20   2017/4/22   2017/4/24   2017/4/26   2017/4/28   2017/4/30   2017/5/2   2017/5/4   2017/5/6   2017/5/8   2017/5/10   2017/5/12   2017/5/14   2017/5/16   2017/5/18   2017/5/20   2017/5/22   2017/5/24   2017/5/26   2017/5/28   2017/5/30   2017/6/1   2017/6/3   2017/6/5   •  実装はNLTKとSpaCyを使用。SpaCy最高 •  Entityや品詞やWordnet情報を使用 •  このカーネルを参考に、表記揺れを補正 https://www.kaggle.com/currie32/the-importance-of-cleaning-text •  0.19〜0.2ぐらいがNLP特徴のみの限界点と思ってる 思いつくNLP特徴を片っ端から突っ込んだ時代、 やればやるほどスコアが上がってKaggleやってて一番楽しかった
  18. 18. ステージ4:  NLP特徴の時代(LB:0.2) 2017年  6月  13日  Quoraコンペ参加記録 18 特徴概要 Anokasさん特徴 表記揺れ補正後のAnokasさん特徴 ステージ1特徴 表記漏れを補正後のステージ2特徴 名詞だけのステージ2特徴 nsubjとpobj品詞だけのステージ2特徴 Wordnet上位後でのステージ2特徴 AspellでTypo補正後のステージ2特徴 3gram一致数 動詞と目的語一致数 主語と動詞と目的語一致数 品詞の一致数 ※ステージ2特徴はワード一致とかTFIDF一致とかその辺りの特徴 特徴概要 word2vec特徴 LSI特徴 fas"ext特徴 sense2vec特徴 使ったNLP特徴達、最後までこれで戦った
  19. 19. ステージ5:  グラフの幕開け(LB:  0.13) 2017年  6月  15日  Quoraコンペ参加記録 19 0   0.1   0.2   0.3   0.4   0.5   0.6   2017/3/19   2017/3/21   2017/3/23   2017/3/25   2017/3/27   2017/3/29   2017/3/31   2017/4/2   2017/4/4   2017/4/6   2017/4/8   2017/4/10   2017/4/12   2017/4/14   2017/4/16   2017/4/18   2017/4/20   2017/4/22   2017/4/24   2017/4/26   2017/4/28   2017/4/30   2017/5/2   2017/5/4   2017/5/6   2017/5/8   2017/5/10   2017/5/12   2017/5/14   2017/5/16   2017/5/18   2017/5/20   2017/5/22   2017/5/24   2017/5/26   2017/5/28   2017/5/30   2017/6/1   2017/6/3   2017/6/5   ここで神が舞い降りた •  A=B,  B=CならA=Cだとはずっと考えていて、クリーク構造に気付く •  クリークサイズや、クリーク内のスコアの平均・最大・最小等を試した •  基本閉路や連結成分でのスコアの平均・最大・最小等も試したが微増 •  2点の枝を取り除いたグラフの最短経路やPageRankとかも試したが微増ぐらい
  20. 20. 人生の夢のひとつが叶った! 2017年  6月  13日  Quoraコンペ参加記録 20 •  暫定でも1位!
  21. 21. そして調子に乗った 2017年  6月  13日  Quoraコンペ参加記録 21 •  グラフ特徴の暗喩でもあった
  22. 22. ステージ6:  倦怠期(LB:  0.13) 2017年  6月  13日  Quoraコンペ参加記録 22 0   0.1   0.2   0.3   0.4   0.5   0.6   2017/3/19   2017/3/21   2017/3/23   2017/3/25   2017/3/27   2017/3/29   2017/3/31   2017/4/2   2017/4/4   2017/4/6   2017/4/8   2017/4/10   2017/4/12   2017/4/14   2017/4/16   2017/4/18   2017/4/20   2017/4/22   2017/4/24   2017/4/26   2017/4/28   2017/4/30   2017/5/2   2017/5/4   2017/5/6   2017/5/8   2017/5/10   2017/5/12   2017/5/14   2017/5/16   2017/5/18   2017/5/20   2017/5/22   2017/5/24   2017/5/26   2017/5/28   2017/5/30   2017/6/1   2017/6/3   2017/6/5   •  アイデアが枯渇して、パラメタチューン等していた •  質問を前後逆にしたり、データ増やしたりも駄目だった •  LSTMも試したがスコア上がらず –  LSTM実装したい人は、このカーネルがオススメ –  https://www.kaggle.com/lystdo/lstm-with-word2vec-embeddings
  23. 23. ステージ7:  スタッキングの時代(LB:  0.122) 2017年  6月  13日  Quoraコンペ参加記録 23 0   0.1   0.2   0.3   0.4   0.5   0.6   2017/3/19   2017/3/21   2017/3/23   2017/3/25   2017/3/27   2017/3/29   2017/3/31   2017/4/2   2017/4/4   2017/4/6   2017/4/8   2017/4/10   2017/4/12   2017/4/14   2017/4/16   2017/4/18   2017/4/20   2017/4/22   2017/4/24   2017/4/26   2017/4/28   2017/4/30   2017/5/2   2017/5/4   2017/5/6   2017/5/8   2017/5/10   2017/5/12   2017/5/14   2017/5/16   2017/5/18   2017/5/20   2017/5/22   2017/5/24   2017/5/26   2017/5/28   2017/5/30   2017/6/1   2017/6/3   2017/6/5   •  スタッキングを整備したら、精度が上がった –  1段目:NLP特徴のみ –  2段目:NLP特徴+1段目予測値 –  3段目:グラフ特徴+2段目の予測値 •  グラフ系特徴を思いつく限り入れたが、ほぼスコアは増えず •  あとは、アンサンブルしまくってコンペ終了
  24. 24. 最終順位 2017年  6月  13日  Quoraコンペ参加記録 24 •  あと1歩でソロゴールドだったのに。。。 •  最終的には、Kaggle上位陣が軒並み揃うヤバイコンペでした •  最後スコアが離された理由が知りたい
  25. 25. 上位の手法を見てみた 2017年  6月  13日  Quoraコンペ参加記録 25 h"ps://www.kaggle.com/c/quora-­‐ques5on-­‐pairs/discussion/34355   •  作った特徴的には負けてない。。。と思う •  NN系モデルをスタッキングにかなり使っている •  500モデルアンサンブルってマジかよ。チーム大事 •  大きく差がついたから特徴を疑ってたけど、モデルで負けた臭い •  確かに、アンサンブルでスコアが上がりやすいのは感じていた
  26. 26. 上位の手法を見てみた 2017年  6月  15日  Quoraコンペ参加記録 26 h"ps://www.kaggle.com/c/quora-­‐ques5on-­‐pairs/discussion/34310   •  シングルモデルでLB:  0.116-0.117 •  テキストの前処理を頑張ったと書いてあるので、そこで差がついたのかも
  27. 27. 上位の手法を見てみた 2017年  6月  15日  Quoraコンペ参加記録 27 •  シングルモデルでLB:  0.122-0.124と私のスコアと同じ •  モデルのせいにするのは格好悪いけど、アンサンブル大事だな。。。 h"ps://www.kaggle.com/c/quora-­‐ques5on-­‐pairs/discussion/34349  
  28. 28. 上位の手法を見てみた 2017年  6月  15日  Quoraコンペ参加記録 28 •  NLP特徴は大体DNNだけでやったとのこと、Feature  Engineering嫌いらしい •  それ以外の特徴は以下 –  WordNet  similarity  (based  on  a  script  i  found  on  github)  ← 試した –  Word  mover  distances,  using  glove840B  word  embeddings  ← 試してない –  NER-based  features.  I  got  the  tags  with  Stanford  CoreNLP  ← 知らなかった。。。 –  POS-based  features.  Same  thing   ← 試した h"ps://www.kaggle.com/c/quora-­‐ques5on-­‐pairs/discussion/34697  
  29. 29. 有効だったテクニック •  ログをしっかり吐いた –  コンペ最初からpythonのloggingをしっかり書いた –  submitコメントにログをコピペ –  CVスコアやパラメタを後で簡単に見直せた 2017年  6月  13日  Quoraコンペ参加記録 29
  30. 30. 有効だったテクニック 2017年  6月  13日  Quoraコンペ参加記録 30 •  Gitは必ず使おう –  私はbitbucketを使用 –  コンペ中には意外と最良submitコードを見失う –  submit毎にcommitが理想、誰も見ないから適当コミットで良い •  パラメタチューンを寝てる間に限定 –  GBDTはSVMと違って、パラメタで精度は大きく変わらない –  特徴量作成に時間を費やすべき –  昼間は特徴作って、夜にグリッドサーチを回してから寝る •  LightGBM –  今回はxgboostを一切使っていない –  LightGBMは速いのと、max_bin等でスピードの調整がしやすい –  scikit-learn準拠がしっかりしている –  GPU版は試してないけど調査中
  31. 31. 有効だったテクニック 2017年  6月  13日  Quoraコンペ参加記録 31 •  特徴量は列で切って保存 –  行で切ってしまうと特徴の出し入れが難しい •  テストデータが大きいときは、dask.arrayにして逐次結合 –  predictでメモリが足りなくなるのは馬鹿らしい –  さらにメモリが厳しい場合はhdf5 •  スタッキングまでは、CVを全て解かなくて良い –  コンペ終盤までは特徴量作成が最も大事 –  モデルを高度にしすぎないのも大事
  32. 32. 分析官がKaggleをやる意味 •  業務の分析にKaggleが活きるか? –  Kaggleだけで食って行くのは相当難しいと思う。。。 •  分析官は、コンサル90%分析10%だと思ってる –  10%のパフォーマンス上げてもねぇ。。。 –  SQLとExcelだけで価値のある分析をする人は結構いる •  でも技術的に負けていない事は、多大な自信を与えてくれる! –  不確実な事が多い分析業界で自信になる –  社外評価を上げておくのマジ大事 –  海外でも通用する 2017年  6月  15日  Quoraコンペ参加記録 32
  33. 33. 分析官がKaggleをやる意味 •  ワンショット筋トレ法 –  コンペのデータを見て、とりあえずアプローチを考える –  第一感のアプローチを全力で実装する –  submitしてレベル感を確かめる –  仕事が来た時の実装スピード向上と、第一感の精度を挙げられる –  仕事の為の筋トレと割り切る •  全力ディープダイブ法 –  実は全力で特定データを長期間分析する事って少ない –  Boschコンペでチーム組んだメンバのデータを見る深さに圧倒された –  分析官の懐の深さは、こういう所に宿ると思う –  モデルチューンは勝てそうなら頑張ればいいとおもう 2017年  6月  15日  Quoraコンペ参加記録 33 オススメのKaggle活用法

×