nissy.dev

Kaggle Google QUEST Q&A Labeling 反省

15 min read
  • #blog
  • #kaggle
目次

初めて真面目に Kaggle に参加した (2 週間前チャレンジ...) ので、その備忘録です。

コンペ振り返り

やったこと

基本的に以下でやったことはほとんど全てうまくいかなかった。。。
Bert なにもわからない。。。

やらなかったこと

反省

NLP の基本

文章の前処理 (英語、分割前)

以下のカーネルがかなり参考になる
https://www.kaggle.com/theoviel/improve-your-score-with-some-text-preprocessing
https://www.kaggle.com/sudalairajkumar/getting-started-with-text-preprocessing

  1. HTML の除去
  2. URL の除去
  3. 数字の除去 (基本的に数字は役に立たないことが多いので省く)
  4. 大文字を小文字へ (Embedding 側も同じ変換をしてあげる)
  5. 短縮系への変換
  6. 特殊文字を消す (もしくは変換する)
  7. スペルミスの変換

以下はタスクによって考える
特に、文章の分散表現を得る場合はやらないことが多かった (文が不自然になるから...?)

  1. stopwords の除去
  2. Lemmatization, Stemming (活用形を統一する, running, run, ran などを統一)
  3. 絵文字の変換
  4. 頻出単語やレアな単語の削除 (7 である程度行なっている & タスクによっては除かない方がいいケースも)

日本語はかなりブログが出てくるので割愛

文章と単語のベクトル化

参考資料:https://www.ogis-ri.co.jp/otc/hiroba/technical/similar-document-search/part1.html

文章のベクトル化 (古典的な手法)

基礎は単語の出現回数によってベクトル化する手法。表現力にはかなり限界がある。
またかなり次元が大きくなるので、Kaggle などでは SVD などで次元圧縮する人が多い

単語のベクトル化

数え上げだけではなく、ここからは単語の持つ意味的な情報を用いる手法が出てくる。
単語の分散表現の取得。基本的には、fasttext で良い気がする。

文章のベクトル化

基本的には以下の 4 つが順当な予感。SWEM が一番楽だし、ベースラインとして利用できそう。

検証している人:
https://qiita.com/nekoumei/items/1f5ec09e422a4be99810
文書分散表現 SCDV と他の分散表現を比較してみた

Bert

Bert 入門記事
https://qiita.com/Kosuke-Szk/items/4b74b5cce84f423b7125
https://www.slideshare.net/matsukenbook/bert-217710964
https://www.ogis-ri.co.jp/otc/hiroba/technical/similar-document-search/part3.html

論文
https://arxiv.org/pdf/1810.04805