機械学習での最大の課題は、何だと思いますか?
機械学習のアルゴリズムですか?
プログラミング(Python)ですか?
私は、データだと思います。
大量で良質なデータを集めることが、最も難しいことです。
特に、教師あり学習を行う場合には答えが必要となります。
答えとなる教師が前提ですからね。
そりゃ、お金と時間をかければ、データを用意することはできるでしょう。
ただ、個人ではなかなか難しいことです。
そんな中、この困難な課題を解決する方法を見つけました。
もしかしたら、機械学習の界隈では有名なメソッドかもしれません。
しかし、少なくとも私は知りませんでした。
こんな身近に解決方法があったことを・・・
本記事の内容
- 機械学習APIでデータを作成する( ⇒ モデルを作成する)
- データ作成(モデル作成)に使える機械学習API
- 【実例】Amazonレビューのコメントを感情分析する
それでは、上記に沿って解説を行っていきます。
機械学習APIでデータを作成する( ⇒ モデルを作成する)
大量の良質なデータを作成する方法は、機械学習APIを利用することです。
考えて見れば、簡単なことだったのですよね。
でも、全く気が付きませんでした。
昨日、Amazonレビューをもとに感情分析を行いました。
詳細は「【実例】Amazonレビューのコメントを感情分析する」のところで。
Amazonレビューのデータは、スクレイピングで収集できました。
このようにデータを集めること自体は、特に難しいことではありません。
しかし、このデータを良質なモノにするのが大変なのです。
感情分析の場合で言うと、各レビュー毎に感情分析の結果があるということです。
つまり、レビュー毎にネガポジ分析の結果(答え)があることが理想です。
その答えがあれば、教師あり学習を行うことが可能になります。
でも、実際のレビューにはそんな答えはありません。
だから、1個づつレビューをネガティブかポジティブか評価付け(ラベル付け)する必要があるのです。
お金に余裕があれば、クラウドソーシングを利用するのも手でしょう。
でも、個人ではそんなことは気軽にできません。
そこで、機械学習APIの登場です。
Googleの「Cloud Natural Language API」で感情分析を行うことができます。
https://cloud.google.com/natural-language/docs/analyzing-sentiment?hl=ja
このAPIを利用して、レビュー毎の答えを得るのです。
「わかるけど、それもお金がかかるでしょ!!」
もちろん、そのような意見があるでしょう。
ここからが、この記事で最も重要なことになります。
機械学習APIを利用して大量で良質なデータを作成します。
その大量で良質なデータをもとにモデルを作成するのです。
良いモデルが作成できれば、それ以降は機械学習APIは使いません。
正確に言うなら、良いモデルを作成するために機械学習APIを利用するのです。
データ作成(モデル作成)に使える機械学習API
目的は、教師あり学習のモデルの作成です。
そうじゃないと、永遠とAPIを使い続けるハメになりますからね。
基本的には、評価付け(ラベル付け)の結果を返答してくれるAPIが付けるモノになります。
- Google Cloud Vision API
- Google Cloud Natural Language API
- Watson Natural Language Classifier
- Watson Tone Analyzer
たくさんありますね。
上記では4つしが挙げていませんが、まだまだあります。
正直、多すぎて書くのをやめました・・・
これほど機械学習APIが、存在しているなんて思ってもいませんでした。
探すときは、評価付け(ラベル付け)の結果を重視してください。
その結果をもとに、機械学習モデルを強化できるかどうか?
この視点で機械学習APIを探してみてください。
【実例】Amazonレビューのコメントを感情分析する
昨日、私はAmazonレビューの感情分析を行いました。
詳細は次の記事をご覧ください。
分析自体は、成功とも失敗とも言えるような内容です。
本当に微妙な内容と言えます。
それもこれも、データが不足しているのが原因です。
大量で良質なデータがあれば、もう少し善戦できたはず。
ということで、Google Cloud Natural Language APIを利用して良いデータを作りましょう。
対象とするのは、以下のレビューです。
Amazonでの評価5
単語感情極性対応表(ネガポジ辞書)を利用した感情分析の結果
-1に近いほどネガティブの評価となります。
評価者自身は高評価5を下したにも関わらず、ネガティブという分析を下してしまいました。
それに対して、機械学習APIを利用した感情分析の結果(モデルはまだ)
{'documentSentiment': {'magnitude': 1.4, 'score': 0.4}, 'language': 'ja', 'sentences': [{'text': {'content': 'M557からM325への買い替え。', 'beginOffset': 0}, 'sentiment': {'magnitude': 0, 'score': 0}}, {'text': {'content': 'この2つのマウス、サイズはほぼ同じですがM325の方は高さがあるので握りやすいです。', 'beginOffset': 35}, 'sentiment': {'magnitude': 0.8, 'score': 0.8}}, {'text': {'content': '左右クリックボタン、左右チルトボタンは重くもなく軽くもなくちょうどいい感じ、M557は左クリックが軽すぎて持ち替えた時などに指が当たってしまい誤操作することがありましたがこのマウスではないです。', 'beginOffset': 151}, 'sentiment': {'magnitude': 0.5, 'score': 0.5}}]}
レビュー自体の評価は、0.4です。
これも同じく-1~から1の値で評価されます。
もちろん、1に近いほどポジティブとなります。
そして、Google Cloud Natural Language APIの結果では、ポジティブです。
レビュー自体は、かなり誤解を受けやすいモノです。
だからこそ、単語感情極性対応表(ネガポジ辞書)はネガティブと分析しました。
しかし、機械学習APIはさすがに優秀ですね。
この機械学習APIが返す結果を保存しておきます。
別の言い方だと、教師あり学習で使う答えを蓄積していくということです。
ある程度データが揃ったところで、機械学習モデルを作成します。
そうすれば、Google Cloud Natural Language APIによって強化されたモデルが作られるはずです。
それ以降は、強化したモデルを用いて、感情分析していきます。
そうすれば、お金もかかりませんよね。
そうなってくると、機械学習APIへの費用は投資と言えます。
質の良いモデルを作成するための投資です。
なお、Google Cloud Natural Language APIは、約30,000円分は無料で使えます。
その無料枠分でなんとか感情分析のモデルを作りこみたいですね。
追記 2020年11月05日
無料枠分を使って25万件のデータを分析しました。