2017の1日目の記事です。サービスに関連する言及のみを観測したいこんにちは。id:syou6162です。サービスを運営していると、サービスに関するtweetをslackに流して定期的に観測しているといった方は多いと思います。観測するモチベーションは様々ですがサービスの不具合に一早く気が付けるもちろんテストや動作確認はやっているのが前提だと思いますが、それでも気づけないものも出てきます新しい機能を出した際にユーザーの反応が直に見れるため、開発者としてはモチベーションが上がる問い合わせまではないが、どういう機能要望などがあるか知ることができるなどが挙げられると思います。問題点Mackerelチームでもサービスに関するtweetを定期的に観測しています。余談ですが、Mackerelはサーバー(鯖)の監視/管理のサービスで、鯖の英語からMackerelというサービス名になっています。この名前ゆえに「サービスに関連するtweetのみ」を観測するというのが難しくなっています。mackerelなど少し脱線しますが、このエントリの内容を社内の技術勉強会で紹介したところ、イカリングにもいくつかの曖昧性があることを教えてもらいました。いった曖昧性はサービスに特有の問題ですが、それ以外にも以下のような問題があります。こちらは他のサービス運営者で困っている方も多いのではないでしょうか。ユーザー名にサービス名が入っている方のtweetが混じるreply先に入っている場合もあるしかし、公式アカウントへのreplyは拾いたいmeetupなどのイベントが盛り上がりトレンドに入ると、公式のハッシュタグに関係ない内容を混ぜてくるspammerに遭遇する場合がある以上のようなサービスに関連しないtweetを除外するために、これまではfluentdのfilterに正規表現を頑張って書いていました。ルールの整備は大変で段々と古びていきます。fluentdの障害とサービスの障害の時間が被ると、障害時のユーザーの反応が分からないといった問題点もあります。Lambda)で機械学習を使ってMackerelのサービスに関連するtweetのみをSlackに定期的に流すコードを書きました。sabaとついていますが、検索クエリと教師データ(自分の場合は秋の夜長に600件ほどアノテーションしました)を変えてあげれば他のものでも動くと思います。Lambda上で動作するため、サーバーを用意する必要なく簡単に始められますし、fluentdが万が一障害の場合も問題なく動きます。工夫点tweetのjsonから特徴量を作り、平均化パーセプトロンで分類しているだけなので、機械学習的な面白みはほとんどありません。Lambdaで動作させるための工夫が多少あるので、紹介します。軽量な形態素解析器を使う自然言語処理といえば最近ではPython一色になりつつあります。はてなでも機械学習関連のプロジェクトではPythonを使うことが増えてきています。日本語を扱う自然言語処理ではMeCabを扱うことが多いですが、Lambda上でMeCabを動かすのは一手間必要なようです。サイドプロジェクトでやろうと思ったため、もっと手間をかけずお手軽にやろうということもあり、PythonではなくGo言語を使うことにしました。Lambdaまで送り込めるので便利です。Lambdaにはアップロードできるパッケージのサイズ制限(50Mb)があり、kagomeを含めてビルドしたバイナリは56Mbで少し足が出てしましました。Lambdaでの実績解除:tada:)。Lambdaへのデプロイも問題なくできました。高精度に動くリッチなモデルに注意が行きがちですが、高速に動く/消費リソースが少ないモデルも実世界では重要ですね。軽量かつシンプルな分類器を使うはてな社内でも深層学習の手法であるCNNやLSTMをベースにした分類手法の実験を行なっています。今回の用途の場合、深層学習を用いると学習後のモデルサイズが大きくなりがちという問題点があります(もちろん、パラメータをスパースにしてモデルをコンパクトにするという研究も多数行なわれています)。今回は古典的な教師あり学習の方法の一つである平均化パーセプトロンを用いました。自前でtweetを600件ほどアノテーションを行ない交差検定で実験した結果、十分な精度が出ていると判断したためこれ以上複雑な方法を取るのはやめました(関連エントリ)。学習した重みベクトルはgo-bindataを使ってGoのコードに変換します。Goのコードに変換できればシングルバイナリにしやすいので、deployが簡単です。deployで簡単にdeployできます。Lambda上での動作の監視を行なうMackerelチームに所属しているので完全に宣伝ですが、MackerelではAWSインテグレーションによりLambdaのメトリックを取得したり、それを元に監視/アラートの通知といったことが簡単にできます。使ってみてください!おわりにSNS上での自社サービスの言及を必要なものだけにフィルタリングして継続的に観察する仕組みについて簡単に紹介しました。細かいところではありますが、ユーザーの声を取り込みつつサービスをよりいいものにしていきたいですね。Batchをよく使っています。機械学習っぽいエントリばっかり書いているけど、普段はWebアプ...2017-11-222017年の振り返り技術編ふと思いたったので書く。(1)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。