まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:insight

ちょっとした目的で実験的に調査&開発していたウェブアプリの話がポシャりそうなので、アプリだけ公開することにしました。

やりたかったのはウェブアプリで
 1 日本語音声を認識して日本語テキスト化して、
 2 そのテキストを形態素解析して単語分解した上で、
 3 単語の出現頻度をタグクラウドで視覚化し、
 4 (ある程度以上の語彙が集まったら)テキスト内容から感情分析を行ってグラフ化する
 5 1~4をリアルタイムに行う(音声認識が途切れるタイミングで全情報を更新する)
というものでした。

技術的には色々な実現手段があるのですが、今回は実験的に作っていた経緯もあるので、
 1 Web Speech API
 2 TinySegmenter
 3 jQCloud
 4 色々使って独自実装
で作っています。

本当は4で IBM Personality Insight API とか使えると簡単でよかったのですが、今回は使っていないことを白状しておきます。また1の実装の都合上、PC 版 FireFox では動きません。後述のサンプルを利用する際には PC の Chrome か  Edge で試していただきたいです(互換性という意味では Android 版 Chrome でも動くことになっていますが、自分のテストでは認識精度がかなり悪かったので PC での利用をお勧めします)。また4の実装の中で利用回数に制約のある無料 API を使っているため、使いすぎて(使われすぎて)限度回数を超えてしまうとその月の間は動かなくなる、という点をご了承ください。

で、作って公開してみたのがこちらです。繰り返しますが PC 版 Chrome でアクセスしてください:
https://dotnsf.github.io/webspeechpi/


アクセスするとこのような画面が表示されます。右上の青いマイクボタンをクリックすると音声認識モードに切り替わります(初回のみマイクアクセスの許可を求められるので「許可」してください):
2022052901


音声認識モードに切り替わると青だったボタンは赤く変わります。またウェブページのタブに音声収集中であることを示す赤いマークが表示されます(ちなみにもう一度赤マイクボタンをクリックすると青マイクボタンに戻り、音声認識モードからも抜けます):
2022052902


この音声認識モードの状態でマイクに日本語で話しかけると、その文章が認識されて表示されます。ある程度の長さの無音状態が続くまでは1つの文章とみなして、たまに内容を変更・調整しながら認識を続けます:
2022052903


ある程度の長さの無音状態を認識すると、それまでに認識した文章を形態素解析し、名詞や動詞、形容詞といった、文章内容の肝となりうる単語がタグクラウドで表示されます:
2022052904


この認識文章の量が少ないとタグクラウドだけが表示されますが、ある程度以上の文章が認識されるとタグクラウドに加えて、そのテキスト内容から話している人の感情を5つの要素で分析して、その結果がレーダーチャートで表示されます。このタグクラウドとレーダーチャートは文章が入力されるごとに更新されます:
2022052905


と、まあこんな感じのものです。もともとはある業務目的のために作っていたものですが、不要になりそうだったので、せっかくなのでアプリ部分だけ公開することにしました。感情分析の精度は恥ずかしくなるようなものなので、ネタ程度に使ってみてください(笑)。本当は形態素解析ももう少し高度にできるのですが、無料公開できるものを作ろうとするとこんな感じになりました。

ウェブアプリそのものの(フロントエンド部分の)ソースコードはこちらで公開しています:
https://github.com/dotnsf/webspeechpi


感情分析 API はフロントエンドには含まれていません(公開していない理由はあまりに雑な実装で恥ずかしいため)。こちらの実装の中身に興味ある方がいたら教えてください。




IBM Bluemix から提供されている各種 API の中に Insights for Twitter サービスがあります:
2015102901


Twitter のつぶやきデータに、IBM が付与した感情やユーザーの推定属性をデータベース化して、検索 API として提供しているものです。(Twitter 社が提供している)標準 API ではできないような検索絞り込みが出来たり、標準 API では制限されているような、時間あたり API 利用回数制約もなく使える、という特徴があります。

この Insights for Twitter API には2つの価格プランがあります:
2015102902


1つは Free プランで、もう1つは Entry プランです。上の図を見ると、Free プランは無料で月に500万件までのツイートを取得可能、Entry プランは月額21万円で月に100万件のツイートを取得可能、と書かれているように見えます。。

「え? 逆じゃないの??」

と思うかもしれませんが、実は正しいのです。この価格について、もう少しきちんと説明します。

実はこの2つのプランは取得できるデータに違いがあります。Free プランで取得できるデータ源は decahose と呼ばれているもので、ツイートデータ全体の約10分の1が母集団になっています(つまり、検索データベースの中に含まれていないツイートも多い)。標準の Twitter API を一般の開発者が使う場合もこの decahose を対象にツイートデータを取得できる、というものです。一方 Entry プランで取得できるデータ源は firehose と呼ばれる全ツイートデータです。標準 Twitter API を使う一般の開発者がアクセスできるものではなく、限られた環境下でのみ提供されているものです。Bluemix の Insights for Twitter API の Entry プランを申し込んでいただいた場合は、そこにアクセスできるようになる、ということになります:

Free プラン比較Entry プラン
無料料金月額21万円
500万1ヶ月間に取得できるレコード量100万
decahose
全ツイートの10分の1
データ源firehose
全ツイート


Free プランで取得できるデータは、オリジナルの Twitter API で取得できるデータと比べてデータ源は変わりません。ただ IBM のインサイト情報が付与されており、感情やユーザー属性を指定した便利な検索が可能になっています。
一方、Entry プランを使うと便利な検索機能に加え、一般の開発者権限ではアクセスすることのできない firehose にアクセスすることができる(より実態に近いデータを集めることができる)、という点が大きな違いと言えます。


・・・って、軽く書いちゃったけど、firehose にアクセスできる環境が入手できるって凄いことだよね。しかも体験期間中であれば無料ってこと? (O.O ;


日本時間の2月20日に、IBM Bluemix 内のサービスラインナップが更新され、いくつかの新しいサービスが追加されました。

追加されたサービスの1つに IBM Insights for Twitter があります。2014年10月末に Twitter 社と IBM との連携が発表されましたが、そのサービスの API が IBM Bluemix を通じて誰でも(現時点では無料で)利用できるようになりました:
ibm-twitter-form-data-partnership-140x105

具体的には "decahose" と呼ばれる、Twitter の公開ツイート全体の中のランダムな約 10% のデータが検索の対象として提供されます。 ただこの IBM Insights for Twitter では、単に IBM に提供された decahose を誰でも検索できる、というだけではなく、IBM InfoSphere BigInsights を使ったビッグデータのリアルタイム解析によって付与されたメタ情報と合わせて 100 万ツイートまで無料で検索することができるようになっています:
2015022307


このサービスに関してはデモサイトが用意されているので、まずは論より証拠で使ってみましょう:
IBM Insights for Twitter Demo App

上記サイトにアクセスすると、検索キーワードの入力ボックス1つとボタンが表示された、シンプルなページが表示されます:
2015022301


このキーワードボックスに適当な検索ワード(この例では "oscar")と入力して "Twitter Search" ボタンをクリックすると、検索ワードにかかったツイートが一覧で表示されます。ちょうどアカデミー賞授与式が行われている頃の検索だったこともあり、式をリアルタイムに見ている人のツイートが見て取れます:
2015022302


検索結果をよく見ると、"message" という大きなブロックの中に "body"(本文)や "location"(位置情報)といったブロックに分かれて各ツイートの情報が得られていることが分かります:
2015022303


シンプルな検索結果に見えますが、実は一般的な Twitter API を使ったことのある開発者からはこの時点でもいくつかの目新しい機能があることに気づきます。

例えば一般的な Twitter API を使うにはまず開発者登録とアプリケーション登録を行い、OAuth 認証のための ID を発行する必要があります。そしてその ID を使って OAuth 認証の仕組みを使ってアクセスした上で検索の API を実行する必要があります。 IBM Bluemix から提供されている IBM Insights for Twitter  の API ではこの部分が省略され、よりシンプルなしくみで検索を実行することができるようになっています。

また、検索結果の各ツイートの内容をよく見ると "message" ブロックの下に "cde" というブロックが付与されています:
2015022304


これは "Context Data Extractor" のデータという意味です。元々のツイートには含まれていない情報を、そのデータの内容から推測・計算して得られた附属情報です。例えば「このツイートを書いた人の性別」や「このツイートの内容がポジティブなものか、ネガティブなものか」といった情報になります。 これらの情報は Twitter から提供されているものではなく、IBM Insights サービスによって格納時にリアルタイムにストリーミング処理されて付与された情報です。

IBM Insights for Twitter では、この CDE 情報を検索条件に含めることも可能です。こちらも試してみましょう。 先ほどの画面の検索ボックスにおいて "oscar" というキーワードに加えて、"sentiment:positive" と加えて検索してみます:
2015022305


すると同じような検索結果が表示されますが、その結果の CDE 情報を見ると、すべて cde.content.sentiment.polarity の値が POSITIVE になっているものばかりになっているはずです。つまり「"oscar" というキーワードを含んで、かつポジティブな内容のもの」が検索されたことになります。ちなみに値を sentiment:negative にするとネガティブなものだけ、sentiment:neutral にすると中間的なものだけを抽出することも可能です:
2015022306


CDE の sentiment 検索については、現時点では英語のみに対応している模様で、残念ながら日本語テキストの判断はできないようです。ただ、この CDE の情報まで含めてほぼリアルタイムな Twitter 検索ができる、というこの環境が誰でも無料で使えるようになる、という IBM Insights for Twitter サービスはアプリケーション開発において、その可能性を感じずにいられません。


現在はまだバージョン1がベータリリースされたばかりで、検索パラメータに指定できることも限られてしまっていますが、開発者の皆様には是非使っていただいて、どのような機能要望があるのか、その声を聞かせていただきたいと思っています。そんな IBM Insights for Twitter サービスのチュートリアルや API リファレンスはこちら:
Getting started with IBM Insights for Twitter(BETA)

↑デモサイトの検索ボックスに、どのように入力すればどのような条件で検索できるか、といった情報が詳しく書かれています。


まだベータ版ということもあって、今後の仕様変更についての可能性もあると思いますが、開発する立場で見ても可能性も多い楽しみなサービスだと思っています。









 

このページのトップヘ