この記事は「スパムFAXを画像解析+機械学習でブロックしてみた」の全6回のシリーズ記事の第3回です。
はじめに
前回の記事では【第2回】LambdaでEC2インスタンス内のプログラムを実行してみたを紹介しました。 今回の話は本編とは少し話がそれます。必要のない方は「【第4回】機械学習前にデータ成形をしてみた」に飛んでください。
今回はFaxのスパム分類をする際、画像分類をしようとしたらつまづいた話です。
画像といったらあれ
やっぱり画像の分類といったらCNN(Convolutional Neural Network)ですよね!!!!!!!!
CNNとは
CNNとは最近はやりの深層学習の手法の一つで、画像の特徴をうまく見ることができるモデルです。 最近では、画像以外に自然言語処理の分野でも成果を上げてます。
Faxのスパム、ノンスパムの分類は結構目視でわかるものが多いです。例えば、スパムにはお偉い人の顔写真がのっていたり、PCの広告とかだと明らかにPCの写真が載ってたりします。 またノンスパムでは請求書や明細など絵や写真は含まず、文字だけの傾向があります。このようにFaxのスパム分類において視覚的情報は大きな特徴となっています。
ということでやってみました。
使ったモデル
今回はCNNの簡単なモデルのAlexNetを使用しました。FAXの画像は長方形ですが、正方形にしても少し歪むだけなので、入力サイズは正方形にしました。 また、訓練データが100、テストデータ20と、データ数が少ないため、時間はかからないだろうと考え、CPUで50エポック(回す数)まわしました。
エポック数 | 訓練データのloss | テストデータのloss | 訓練データのaccuracy | テストデータのaccuracy | 経過時間(s) |
---|---|---|---|---|---|
40 | 0.692583 | 0.680844 | 0.53125 | 0.6875 | 1177.35 |
41 | 0.6896 | 0.680438 | 0.5625 | 0.6875 | 1209.1 |
42 | 0.69837 | 0.677163 | 0.479167 | 0.6875 | 1236.9 |
43 | 0.69471 | 0.677913 | 0.510417 | 0.6875 | 1264.55 |
44 | 0.693934 | 0.68189 | 0.520833 | 0.6875 | 1292.16 |
45 | 0.691986 | 0.682726 | 0.553571 | 0.6875 | 1324.18 |
46 | 0.693115 | 0.682171 | 0.510417 | 0.6875 | 1351.88 |
47 | 0.69623 | 0.685077 | 0.489583 | 0.6875 | 1379.62 |
48 | 0.692872 | 0.683666 | 0.541667 | 0.6875 | 1406.76 |
49 | 0.691335 | 0.681144 | 0.553571 | 0.6875 | 1438.79 |
50 | 0.695387 | 0.678498 | 0.5 | 0.6875 | 1466.18 |
lossは損失で、accuracyは精度を表しています。lossが低くて、accuracyが高いモデルほど良いモデルとなっています。 100個のデータを50エポック回すので約30分になります。 2値分類に対して約70%の精度はすごく良いとは言えません、またエポック数を増やしても、その分時間がかかってしまうためコストがかかってしまいます。
画像まとめ
やっぱり今回の件では、CNNの必須条件とも言えるデータ数が足りない問題が発生してします。 汎化性能を高めるためには、どうしてもたくさんの種類のデータが必要になってしまいます。基本的に1万は必要と言われてます。(貯まるの待つと10年くらいかな、、)
またCNNなどのディープラーニングによる分類などをする際には、GPUなど大きな計算リソースを必要とします(今回はCPUで無理やりやった)。AWSのec2にGPUの乗ったインスタンスがあるものの、金額が結構高い、、 一回の計算にかかる時間も長く、金額もかなりかかってしまうため、今回はCNNを用いた画像分類はなしという形になりました。 今後なんかタスクがあって、データも揃ってたらやってみたいなあ
言語解析の分野へ
視覚的情報が大きな特徴と言いましたが、Faxに一番多いのはやっぱり文字です。何かしら(4回で詳細説明)で画像からの文字起こし がしっかり出来て入れば言語処理のタスクにすることも可能です。特定の単語があればノンスパム、 逆にこの単語があればスパムなどの設定もできるため、確実性のあるものを作成できます。
おわりに
それでは次回は【第4回】機械学習前にデータ成形をしてみたをしていきたいと思います。