LoginSignup
3
0

More than 3 years have passed since last update.

AWS Lambdaで形態素解析・ネガポジ判定

Last updated at Posted at 2019-06-30

はじめに

概要

AWSLambdaを用いて、形態素解析・ネガポジ判定を行いました。
さらにそれを呼び出すChrome Extensionを作りました。

スクリーンショット 2019-07-25 17.55.55.png

動作

Extensionを実際に実行している動画です。
https://youtu.be/-WW9-FS14iU

リポジトリ

筆者について

AWSと機械学習は初心者です。この記事にも色々とツッコミどころはあると思いますが、もしあったらコメント欄で優しく教えてもらえれば幸いです。

環境

MacOS HighSierraです。

データを集める

スクレイピング

BeautifulSoupを使ってAmazonレビューのデータを集めました。注意点として、相手のサーバーに負荷を掛けないように時間を開けて実行してください。今回は3秒に1回にしました。

データ分析

参考にした記事
https://qiita.com/takumi_TKHS/items/d5131e08f0b4e36eed13
Fasttextを使って、5段階に文章をクラスタリングしました。(__label__1, ... , __label__5)

データをいじる(精度の改善)

レビューの分布を見てみると、星5のレビューが多く、星2のレビューが少なかったので、全体を星2のレビューの数に合わせました。

精度ログ

日付 データ名 二乗平均誤差 備考
20190520 train-1.lst 3.1810502601128867 データを均していない
20190520 train-5.lst 3.5173455561196736 全ての品詞
20190520 train-6.lst 2.7260113494692706 動詞のみ
20190520 train-7.lst 2.2812438853609276 形容詞のみ
20190520 train-8.lst 2.196664765267606 形容動詞のみ
20190520 train-9.lst 2.028354813214697 名詞のみ
20190520 train-10.lst 2.2340274200386463 副詞のみ
20190520 train-12.lst 2.175985237169445 連体詞のみ
20190520 train-13.lst 2.2264072902013634 感動詞のみ
20190520 train-14.lst 2.3114062619249776 助動詞のみ
20190520 train-15.lst 3.0844580552161402 助詞のみ

データを均し、取り出す品詞を変えながら実験しました。

AWS

制限対策

最初はPythonで書かれたバージョンのFasttextを使ってEC2上で動かしてみたのですが、メモリ制限に当たってしまい、上手くは行きませんでした。そこで、fasttext-serverlessというあらかじめ整備された物を使ってみました。
https://github.com/CareerVillage/fasttext-serverless

pipインストール

https://qiita.com/bukaz/items/c5d65109c20b32b7f5ca
dockerizepipを使いました。内部的にDocker(Lambci)を動かしています。pipを使うだけで十分であればこれで大丈夫です。

インストールしたライブラリ

  • janome : pipでインストールできる日本語の形態素解析では軽いです。

Docker上で学習させる

改行コードのなどの問題があったため、AWSの環境を再現したDockerの中で学習させて、モデル(.binファイル)を取り出しました。

詰まったこと

Dockerの中からファイルを取り出せなかったので、https://blog.amedama.jp/entry/2018/01/30/221546 を参考に学習済みモデルを取り出しました。

エクステンション制作

Messaging

Chromeでバックグランドで動いているjsとポップアップ上で動くjsの間で通信をする必要があり、
Github上でMessagingを使っているエクステンションを検索して、参考にしながらMessagingを実装しました。
https://github.com/rmango/msgPassingExample

CORS

ローカルのWebからアクセスするためにはCORSの問題を解決する必要があるので、バックエンド側でHeaderをつけてあげる必要があります。

文字コード

POSTを送るときに、日本語を送ると文字化けしてしまったので、一旦encodeURI()を使って文字コードにしてあげて送ると良いです。

おまけ

Native messagingについて

Chrome ExtensionにはNative Messagingという機能があり、ローカルに存在するファイルを実行する機能がありますが、権限を与えてもChrome側の仕様によって、subprocessが実行できないのでダメでした。確かにこれをアリにしてしまうとChromeからローカルの任意のコマンドを実行できるのでとても危険ですね。。。(これで1ヶ月溶かしました)

備考

後々記事はアップデートする予定です。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0