機械学習でデータ量を9倍にして分析し直した結果・・・【感情分析】

機械学習でデータ量を9倍にして分析し直した結果・・・【感情分析】 データ分析

いや~、参りました。
データ量を9倍にしても、これぐらいの改善しかないのですね。。。

苦労してデータを集めたのに、悲し過ぎます。
機械学習をやろうとする方に、是非ともこの記事を読んで欲しいです。

「データ量が増えれば、分析結果もよくなる」
この記事を読めば、上記を過度に期待してはいけない現実を知ることができます。

本記事の内容

  • 実施した機械学習の概要【感情分析】
  • データを9倍にした方法
  • 作成したモデルで検証したらスゴイことを学べた!!

それでは、上記に沿って解説していきます。

実施した機械学習の概要【感情分析】

タイトルにも含めているように、感情分析を行いました。
分析の詳細は、次の記事で説明しています。

上記記事内で行った分析を「前回」と呼びます。
そして、データを9倍(正確には9.4倍)にして行った分析を「今回」と呼ぶことにします。

分析データ件数結果(正解率)
前回23,260件0.87964
今回218,494件0.88994

結果は、上記の通りです。
データ量は、9倍に増えています。

それなのに、結果は0.01(1%)のみの改善です。
苦労に見合わない・・・

私は、機械学習のプロではありません。
だから、この結果の本当のところはわかりません。

もしかしたら、プロから見たら「1%の改善はスゲー!!」なのかもしれません。
いや、多分ないでしょうけど。

ただ、たった1%程度の誤差なら全然許容できます。
感情分析という、そもそもが曖昧なモノに判断を下す分析です。
その分析であれば、1%の誤差なんて全く気にしません。

でも、ここで愚痴を言っても何も始まりません。
みなさんに役立つ情報を提供するのが、本ブログの役目です。

以下では、どうやってデータを9倍にしたのかを説明していきましょう。
つまり、1%のために苦労したことの説明でもあります。

データを9倍にした方法

まずは、Amazonのレビューデータを350万件集めました。
もちろん、スクレイピングです。
Amazonのスクレイピングに関しては、次の記事をご覧ください。

次に、そこからデータを選別しました。
嘘のレビューを除外したと言うことです。

「星5」のレビューは、サクラが多いです。
そのため、「星5」のレビューには、怪しい日本語や大袈裟な内容が多いです。

サクラかどうかを選別するのは、システム的にはかなり困難です。
できていたら、Amazonがすでに除外しているでしょう。
よって、今回は「星5」をまとめて対象から除外しました。

合計3,500,704件
星52,663,203件
それ以外837,501件

ここで、837,501件のデータをクレンジングしました。
データを綺麗に整理したということですね。
その詳細は、次の記事で解説しています。

その結果、830,126件のレビューとなりました。
そして、このレビューのうち25万件(ランダムに選択)を感情分析しました。

どういうことかと言うと、Googleの機械学習用のAPIを利用しました。
GoogleのAPIを利用して、ラベリングされたテキスト(レビューを文章毎に分解)を得ました。
このあたりについては、次の記事で詳細を解説しています。

GoogleのAPIを利用した結果、25万件のレビューから、438,882件のテキストと感情分析結果のセットを得ることができました。
以下のような行が、438,882件あるということです。

なお、25万件にしたのは、APIには利用料金がかかるからです。
無料枠で3万円ちょっと利用できるサービスがありました。
その無料枠内で収まるようにしたということです。

438,882件の内訳は以下。

scoreデータ件数
score > 0(ポジティブ)109,247件
score = 042,420件
score < 0(ネガティブ)287,215件

特に意味のないデータは0として判断されているようです。
絵文字なども「score」が0とされていました。

0は除いて、ポジティブとネガティブが同数になるようにします。
その結果、109,247+109,247=218,494件となります。

この218,494件が、前回の9倍のデータ量ということです。
お金に余裕さえあれば、さらにデータ量を増やすことは可能。
まあ、あまり意味はないでしょうけどね。

作成したモデルで検証したらスゴイことを学べた!!

作成したモデルを検証しておきましょう。
モデルは、scoreのように数値を出すものではありません。

つまり、回帰ではなく分類ということです。
正直、感情というモノは大雑把でいいと思います。
だからこそ、1%の誤差なら許容範囲だと考えています。

ただ、分類と言えどもその確率を表示することは可能です。
ネガティブ(NG)よりなのか、ポジティブ(PO)よりなのかは数値で判定可能です。

それでは、結果の確認をしていきます。
10個ピックアップしました。

Noテキストscore結果ネガティブポジティブ
1この期間中にステータスを3回要求しましたが、まったく応答がありません。-0.9NG0.996536  0.00346427
2誠意がありません。-0.9NG0.8443530.155646
3このショップをブラックリストに登録してください。-0.1NG0.8983690.101631
4商品受け取り、確認しましたが商品に間違いは無いです。0.4PO0.03269490.967305
5儲けにならない品物を売りたくなかったら、最初から出品しなければ良い。-0.6NG0.9739390.0260612
6在庫有りなんて書くな0.2NG0.8996170.100383
7特に問題はありません。0.5PO0.0157650.984235
8説明通り、互換性があり、すぐに使えました。0.9PO0.002262820.997737
9メガネが曇らないのもグッドでした。-0.3PO0.0475390.952461
10さすがに1/4の価格なので期待しませんでしたが、問題ありませんでした。0.3PO0.01263790.987362

scoreはGoogleのAPIが下した判定です。
結果、ネガティブ、ポジティブは新たに作成したモデルによる判定結果となります。

おおむね、GoogleのAPIと同じ結果です。
ラベルは、GoogleのAPIの結果を利用しているから、当然と言えば当然ですね。

しかし、No.6とNo.9は興味深い結果となっています。

No.6は、私の主観ではネガティブなコメントだと思います。
No.9は、私の主観ではポジティブなコメントだと思います。
みなさんは、どう思いますか?

なんと、私の主観とモデルの結果が一致しています。
何が言いたいのかというと、GoogleのAPIより優れた判定を下していると言いたいのです。

今回作成したモデルは、Amazonレビューに特化した感情分析をするようになっています。
そのため、Amazonレビューの感情分析においては、汎用的な分析を行うGoogleのAPIに作成したモデルが勝ったのではないでしょうか?

これは、なるほどです。
優れた汎用的な分析用APIを利用して、専門的な分析モデルを作成できるということです。
頭ではわかっていましたが、実際にできることが確認できました。

それであれば、GoogleのAPIにお金を払うことは何も惜しくはありませんね。
コストではなく、投資になるということですから。

タイトルとURLをコピーしました