スパム内容の判定、準備
スパムとはメール、SNSなどで受信者・運営社の意図とは反する迷惑なメッセージや書き込みを指す。アダルトサイトの勧誘や、カジノ、ダイエット、架空請求やクリック詐欺などがその内容である。
そんな不快なメッセージを自動的に判定するために、電子メールであれば、メールの配信元や送信回数などを頼りにして判定したり、SNSや掲示板も同様で、同じ内容のメッセージが大量に書き込まれていればスパムと判定できる。そして、メッセージに含まれる特有の単語を文章から認識してスパムと判定できる。
テキストデータの用意
スパムテキストの用意(現在ではほとんどのツールでスパムメールをブロックできる機能があるのでそこから用意するといいかも)、非スパムデータ(自分が書いたメールや著作権フリーのテキストデータを利用する)
それぞれディレクトリを用意しその中にテキストデータを大体同じ数格納する。データ量に差があると正しい結果を得られにくいので数は同じくらいが良い。
テキストデータの学習方法について
テキストデータを機械学習にかけるには、テキストデータを数値に変換する必要がある。さらに、機械学習で使用する固定長(同じ長さ)の配列データに変換しなければならない。テキストデータはどれもバラバラなので、これを固定長の数値データにするためには様々な方法があるが、その一つとして「BoW(Bag-of-Words)」という手法があり、単語の並び順を無視して、単語の出現頻度だけを利用し、文章中にどんな単語があるのか数値で表現するものがある。
BoWの手法の流れとしては
・テキストを形態素解析して単語に分ける。
・ストップワードの除去。
・単語辞書を作り、単語にIDを振る。
・ファイルごとの単語の出現頻度を調べる。
・単語の出現頻度データを元に、ok(0)(非スパムデータ)、spam(1)(スパムデータ)に分けて学習する。
例文 ネコを可愛いと言う男性はネコ以外の動物に対しても優しい
1 形態素解析
ネコ|を|可愛い|と|言う|男性|は|ネコ|以外|の|動物|に|対して|も|優しい|
2 ストップワードの除去
ネコ|可愛い|言う|男性|ネコ|以外|動物|対して|優しい|
3 単語辞書を作りIDを振る
単語 ID
ネコ 0
可愛い 1
言う 2
男性 3
以外 4
動物 5
対して 6
優しい 7
辞書に基づいてIDに変換すると
ネコ|可愛い|言う|男性|ネコ|以外|動物|対して|優しい|
=> 0,1,2,3,0,4,5,6,7となる
4 出現頻度を求める
単語辞書に登録されている語句ごとに、出現頻度を調べていく。
単語辞書に8個の単語が登録されているのでその語句ごとに出現回数を調べ、トータルで単語数で割れば出現頻度が求められる。
上記を元に単語出現頻度のデータベースを作ると
[0.22, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11]このようになる。
このようにテキストデータを数値化してプログラムで利用していく。
このデータを用いて機械学習を行っていく。