はじめに
Spring bootでウェブサービスを作っていると、Thread unsafetyな@Serviceに気づくことがあります。私の場合はdeeplearning4jで極性判定技術をWebAPIにして公開しているのですが、MultiLayerNetworkがThread unsafetyであったために極性判定結果が極端にNegativeに偏る現象が起きていました。今回、その対策をしたので共有します。
学習モデルを継続的に更新しているので、本記事で紹介する入力テキストの極性判定結果やスコアが変わります。最新情報は以下のリンクでご確認ください。
– 【アップデート情報】極性判定APIの精度改善
– 現行版の極性判定APIのパフォーマンスチェック
日本語極性判定APIを公開しました。こちらで公開しています。極性判定は、入力テキストについてPositiveかNegativeを判定する技術です。早速動作を見てみましょう。
Word2Vecの出力を機械学習の入力にすると精度が良くなると評判です。そこで今回は、以前作ったWord2Vecでツイートをベクトルデータにして、それをニューラルネットに突っ込んで極性判定してみました。
deeplearning4jのdoc2vec (正確にはparagraph2vec) で極性判定をしてみました。学習データは自作した目的語リスト(約2,300語)を含む極性ツイートです。TwitterのSearchAPIでTwitter社がつけた極性付きツイートをクロールしています。
極性判定APIを作ろうと思って、Twitterのクローラーを作りました。過去にDBやcrontabを駆使したとてもスマートなクローラーを作ったのですが、DBを使うために導入の敷居が少し高いです。今回はSpring-bootを使ってそこそこスマートかつJavaのみで実行できるクローラーを作りましたのでご紹介します。githubでも公開しています。
Googleが提供するPageSpeed InsightsでApitoreの速度を測った所、モバイルのスコアが50点台と悪かったので、キャッシング等々して高速化を図りました。結果、70点にはなったので、その情報をシェアします。