F@N Ad-Tech Blog

株式会社ファンコミュニケーションズ nend・nex8のエンジニア・技術ブログ

サイトの分類を機械学習で予測する(MeCab + TF-IDF + Word2Vec)

こんにちは!5日間インターンに参加させて頂いた中島です。
昨年の夏に続き2回目の参加となりました。
前回はCTR予測を行いましたが、今回は自然言語処理をテーマにサイトの分類を行いました。
tech-blog.fancs.com

なぜサイトの分類を行うのか

ユーザーに合わせた広告を配信することは、収益をあげる上で重要です。
サイトを訪れるユーザーに合わせた広告を配信するためには、サイトの傾向を掴み分類する必要があります。
人間が目視で確認すればタグ付けできますが、何億件もあるサイトに適切なタグを1つ1つ付けるのには限界があります。
そこで機械学習でよしなにやってしまおうという訳です。

今回の目標

与えられたサイトのurlデータからそのサイトが広告に適したサイトかどうか(違法サイトかどうか)を2値分類する。

手法

サイトには様々な情報があります。

  • 画像
  • 動画
  • テキスト
  • リンク

今回は与えられたurlからサイトをスクレイピングし、得られたテキストデータを特徴量として分類モデルを作成しました。

データ概要および取得方法

データは以下の通りです。

  • urlからスクレイピングし得られた約1000件のテキストと広告に適したサイトかどうかのタグ。
  • タグは人力で違法サイトかどうか判断してつけられたもの。
  • 1000件のうち、違法データは約20件。

スクレイピングにはRequestsBeautiful SoupというPythonライブラリを使用しました。

特徴量の作成と実験

得られたテキストに対して形態素解析およびTF-IDFをして特徴ベクトルに加工し、大きく3段階に分けて実験を行いました。

  • 1. テキストに対して形態素解析、TF-IDFする
  • 2. テキストに対して形態素解析、TF-IDFし、オーバー及びアンダーサンプリング
  • 3. 2に加えてWord2Vecにより作成した特徴量を追加

尚すべてロジスティック回帰を用いて分類し、結果は混同行列で確認、評価にはF値を使用しました。

1. テキストに対して形態素解析、TF-IDFする

まずは、最も基本的な手法を試しました。以下2つはこちらの記事で詳しく触れられています。

形態素解析とは
日本語の文書から形態素(意味をもつ表現要素の最小単位)に分割する分析手法。
今回はMeCabを用いて、辞書にはネット用語に対応したmecab-ipadic-NEologdを使用。

TF-IDFとは
ある文章において、ある名詞がどれだけ重要かを特徴ベクトルとして数値化すること。
ある文書でよく出てくるが、他の文書であまり出てこなければ、その単語は重要という感じ。
これによって作られた特徴ベクトルを分類器に投げます。

32件のテストデータに対し,分類器の予測結果は以下の通り
f:id:fan_k_nakashima:20190329161743p:plain

混同行列は次のように読みます。

モデルの予測結果
違法である 違法でない
実際のタグ 違法である 0 6
違法でない 0 26

結果から、すべて違法でないと判定するモデルになっていることが分かります。
これは違法サイトのサンプル数が極端に少ないためです。
天気予報でいえば、「今日雷が落ちるかどうか」を当てろと言われた時に「落ちない」と答え続けば高確率で当たりますよね。

多少間違えたとしても、違法サイトを検出したいため、特徴量作成の工夫を考えます。

そこで、訓練データの違法サイトの数と違法でないサイトの数を調整します。

2. テキストに対して形態素解析、TF-IDFし、オーバー及びアンダーサンプリング

オーバーサンプリングとは
少数派のデータをもとに不足分のデータを補完する方法。
SMOTE(synthetic minority over-sampling)というライブラリでかさ増ししました。

アンダーサンプリングとは
少数派のデータ件数に合うように多数派データからランダムに抽出する方法。
違法でないデータを10分の1に削減しました。

また、TF-IDFにおいて単語の出現頻度を設定しました。
これによりほとんど出現しない単語の特徴ベクトルを作成しないようにし、より重要な特徴量に注目します。

分類器の予測結果は以下の通り
f:id:fan_k_nakashima:20190329164134p:plain

少しだけ当てられるようになったことがわかります。
まだ外しているサイトがあるため、どんなサイトの分類に失敗しているのか確認しました。
主観ですが、違法サイトは大きく2つに分類できます。

  • アダルトサイト
  • 漫画、動画などの違法ダウンロードのサイト

どうやら違法ダウンロードのサイトの分類に失敗しているようでした。
それは訓練データのTF-IDFの重要度にも表れていました。

順位 名詞
1 考察
2 ワンピース
3
4
5
6 ちゃんねる
7
8 ネタバレ

?はすべてアダルトワードのため自主規制

上の表は違法サイトだと分類するのに重要だとされている単語を上位から並べたものです。
アダルトワードは正しく検出されましたが、マンガタイトルなども上位にきてしまっています。

実際に違法漫画サイトと合法な漫画サイトを見比べてみましたが、使われている単語の大きな差はあまり無かったです。
そこで単語の出現頻度だけではなく、単語同士の類似度にも注目してみることにしました。

3. 2に加えてWord2Vecにより作成した特徴量を追加

Word2Vecとは
Word2Vecとは文章中の単語を任意の次元のベクトルに変換します。
類似語のベクトルをベクトル空間にグループ化することで単語同士の演算や単語の類似度の導出を可能にします。

TF-IDFでの特徴量に加えてWord2Vecで作成した特徴量も加えます。

分類器の予測結果は以下の通り
f:id:fan_k_nakashima:20190329175938p:plain

まだ少し外していますが、違法ダウンロードサイトも一部分類できるようになりました。
精度向上の理由の考察は深められていませんが、TF-IDFでは拾いきれなかった特徴量が拾えているようです。

まとめと感想

3つの手法のうち,1,2日目で1を,3日目で2を,4日目で3をし,5日目は考察とまとめを行いました。

  • MeCab + TF-IDF + Word2Vec でそれなりの特徴量が作成可能
  • 不均衡データにはサンプリングが大事

今回はテキストデータだけに注目しました。加えて画像データやリンクの数などにも注目すると、より精度が向上すると期待できます。
機会があれば画像処理なども取り入れていきたいと思います。

最後になりますが、メンターのkawasakiさんをはじめ、社員の方々にはお世話になりました!
聞きたいことを聞きつつ自分のペースで伸び伸びやらせて頂きました。
5日間ありがとうございました!