はじめに
運営の皆様、新しいコンペの開催ありがとうございます。自然言語処理に挑戦したことが無いのでコンペに参加しながら勉強したいと思います。
上述の通り自然言語処理は初めてですが、ネット上の情報を寄せ集めてひとまず自分の中でBaselintと呼べるものができたので、今朝までの私と同じような「自然言語処理って何からすれば良いの?」という方の参考になれば幸いです。
また、付け焼刃の知識ですので、間違った知識やよろしくない処理が含まれていると思います。不慣れな方は信じすぎず、詳しい方はコメントで教えて頂けると大変幸いです。
参考にしたサイト
データとライブラリのインポート
|
id |
contents |
y |
0 |
1 |
Subject: re : fw : willis phillips\r\ni just s... |
0 |
1 |
2 |
Subject: re : factor loadings for primary curv... |
0 |
2 |
3 |
Subject: re : meridian phone for kate symes\r\... |
0 |
3 |
4 |
Subject: re : october wellhead\r\nvance ,\r\nd... |
0 |
4 |
5 |
Subject: california 6 / 13\r\nexecutive summar... |
0 |
前処理
stopwordsの定義更新
stopwordsとは、日本語で言えば「は」、「です」など、英語で言えば「a」、「is」などの出現頻度が高いにも関わらず特別な意味を持たない単語のことで、こういった単語を削除することで認識精度を向上させます。
nltkライブラリに基本的なものは格納されていますが、こちらは要するに単なるlistなので、自分でstopwordsを追加することもできます。
以下では、string.punctuation
で取得できる記号と、rawデータを見て無駄そうだった"Subject"も加えています。
前処理の適用
stopwordsの削除の他、URLの削除などを行います。
EDA
targetの分布の確認
<matplotlib.axes._subplots.AxesSubplot at 0x24f2f8ba4c8>
spamと非spamに分けてWordCloudを確認
WordColudは「実装したことは無いけど見たことはある」人も多いのではないでしょうか。出現頻度が高い単語ほど大きく、そうでない単語ほど小さく表示し、直感的にどういった単語が多い文章か分かる様になってます。
<matplotlib.image.AxesImage at 0x24f2fd08508>