Fax画像でスパム分類したかった話

この記事は「スパム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)
400.6925830.6808440.531250.68751177.35
410.68960.6804380.56250.68751209.1
420.698370.6771630.4791670.68751236.9
430.694710.6779130.5104170.68751264.55
440.6939340.681890.5208330.68751292.16
450.6919860.6827260.5535710.68751324.18
460.6931150.6821710.5104170.68751351.88
470.696230.6850770.4895830.68751379.62
480.6928720.6836660.5416670.68751406.76
490.6913350.6811440.5535710.68751438.79
500.6953870.6784980.50.68751466.18

lossは損失で、accuracyは精度を表しています。lossが低くて、accuracyが高いモデルほど良いモデルとなっています。 100個のデータを50エポック回すので約30分になります。 2値分類に対して約70%の精度はすごく良いとは言えません、またエポック数を増やしても、その分時間がかかってしまうためコストがかかってしまいます。

画像まとめ

やっぱり今回の件では、CNNの必須条件とも言えるデータ数が足りない問題が発生してします。 汎化性能を高めるためには、どうしてもたくさんの種類のデータが必要になってしまいます。基本的に1万は必要と言われてます。(貯まるの待つと10年くらいかな、、)

またCNNなどのディープラーニングによる分類などをする際には、GPUなど大きな計算リソースを必要とします(今回はCPUで無理やりやった)。AWSのec2にGPUの乗ったインスタンスがあるものの、金額が結構高い、、 一回の計算にかかる時間も長く、金額もかなりかかってしまうため、今回はCNNを用いた画像分類はなしという形になりました。 今後なんかタスクがあって、データも揃ってたらやってみたいなあ

言語解析の分野へ

視覚的情報が大きな特徴と言いましたが、Faxに一番多いのはやっぱり文字です。何かしら(4回で詳細説明)で画像からの文字起こし がしっかり出来て入れば言語処理のタスクにすることも可能です。特定の単語があればノンスパム、 逆にこの単語があればスパムなどの設定もできるため、確実性のあるものを作成できます。

おわりに

それでは次回は【第4回】機械学習前にデータ成形をしてみたをしていきたいと思います。

▼Faxのスパム分類シリーズ記事(全6回)