Twitterと災害 後編
この記事は、IT DARTアドベントカレンダー 2015 の7日目です。
自然言語処理の研究者でもあるIT DARTの村上明子から、Twitterによる災害を2回にわたってお届けします。本日は後編です。
Twitter分析と災害
昨日はどのようにして 災害に関するTweetを集めるのか、そしてそれをどう利用するのかについて書きました。今日はさらにその利用を深めるべく、分析の話をしようと思います。本当はQittaっぽくAPIの使い方の解説でも書こうかと思ったのですが、それはテーマのあるアドベントカレンダーではなく一般のエントリーで書けば良いや、ということで思いっきり分析観点の方に振ってみます。
Twitter分析の要素
Twitterを分析して知りたい要素としては「何をつぶやいたのか」「誰がつぶやいたのか」「いつどこでつぶやいたのか」「どうやって広まったのか」という4つの要素があります。
まずは「何を」ですが、これは主に自然言語処理の技術を使います。単語を認識することも大事ですが、さらに「何がどうした」という意味がわかるとより深い解析ができるでしょう。単語を認識したり、何がどうしたという意味を認識したりするには形態素解析や構文解析・係り受け解析といった技術を用います。フリーで使えるこれらのものはフリーで使えるものが多く公開されていますので、どんどん使ってみてください。MeCab(形態素解析)や CaboCha(構文解析)がメジャーでオススメです。またこのあとの「誰が」「いつどこで」の分析の基本にもなります。
さて「何を」つぶやいているのかわかったら今度は「誰が」つぶやいているのか気になりますね。特に災害時は本当に被害地域の人がつぶやいているのかがわかれば、デマかどうかを理解することができそうです。このためにはこのつぶやいた人の人となりを知ることが重要になります。Twitter には「プロファイル」があります。これは地域を入れる部分とTweet と同じ長さの自由に記述できる部分があるので、Tweet と同様に自然言語処理で内容を見ることもできるでしょう。また、過去の発言を取ってくることで、「この人は東京の東側での行動が多いな」とか「この人は家族と住んでいて子供がいるな」ということも知ることができます。
いつどこで、ということは「時空間」情報と呼ばれて、 ソーシャルメディアに限らず災害の時にはとても重要になる情報です。Tweet にはそれぞれつぶやかれた時間が記録されていますから、時間に関しては全てのTweet に付与されていると思っていいでしょう。問題は場所です。Twitterのアプリケーションによってはジオタグと呼ばれる緯度経度情報が付与されていることもありますが数%から十数パーセントにしか付与されていません。また付与されているにしても、場所が広い地域で指定されていることもあります。災害では粒度の細かい場所を知りたいことも多くありますから、そういう時はTweet の中の地名や、ランドマークの名前などから場所を推定することもあります。また研究ではその時に起きたローカルなイベント(例えば地震の揺れ)などから場所を推定するなどということも試みられています。
最後に、どうやって広まったかということです。これはRetweetを調べれば良いのですが、RetweetからのRetweetでは、昨日説明したAPIで取得するデータには誰のRetweetをRetweetしたのかという情報は付与されていないのです(内部的には持っているはずなのですが・・・自分自身のところには出ますよね?)。これも研究で真の拡散経路を求める研究などがあります。
Twitter分析を利用した災害アプリケーション
ちょっと災害から離れてTwitterの分析要素の話をしましたが、上記のような技術を使って災害に関する分析アプリケーションを2つご紹介します。一つは国内の例でDISAANAというものです。これは災害関連情報を自動的に分析して災害に関連した質問(例:「宮城県で孤立しているのはどこ?」)に対する回答の候補を与えるシステムです。また、被災地で足りないものなどの情報を検索することもできます。さらに、足りないものなどを検索した際には、それに相対する情報(例:十分にあるもの)も一緒に掲示することができます。
2つ目の例は海外の例で、スペインの大学によるオープンソースのCRISIS TRACKERというものです。これは自然災害ではなく、テロなどの人災を扱っています。Twitter上にあるニュースの情報をクラスタリングし、危険と考えられるイベント(テロなど)を場所付きで推定し、地図上にプロットします。これによって、どのあたりで危険なのかを視覚的にリアルタイムで理解することができます。
アプリとして公開はされていませんが、災害に関するTwitterの分析は数多く報告されています。学会でもそうですし、震災に関するビッグデータワークショップでもTwitter データは分析対象としてとても注目されていました。
最後に蛇足
実はTwitter分析は本業で、アドベントカレンダーはもっと気軽に何か作ったよー的なものを書こうと思っていました。そのうちの一つがTwitterのbotで本来はPythonでこんな短いコードでbot かけるのよーっていうエントリーを書こうとしたら(意外と)みんな災害にちゃんと関連したのでこのようなエントリーになりました。悔しいので最後にbotの宣伝して終わります。
私の作ったbotはとあるお菓子をこよなく愛するbotです。フォローしてそのお菓子の名前をつぶやくと、絡んでくれます。さらに、研究者が愛するお菓子のbotっぽく研究関連の用語にも絡みます。またさらに、季節ごとのイベント(花見とか花火とか)にも連れていけとねだります。作者に似て、ちょっと嫉妬深いです。
・・・ try: api.SetCache(None) timeline = api.GetHomeTimeline(None,100); #タイムラインをゲット。フォローしてる人の発言にしか絡まない。 except: sys.stderr.write("TwitterApiErr\n") sys.exit() def post(text): api.PostUpdate((u'@' + s.user.screen_name + text).encode('utf_8'), s.id) #つぶやいた人への返答としてつぶやく for s in timeline: #今までに発言したかどうかのチェックを入れる if s.user.screen_name == USERNAME: break if s.retweeted: break if re.search(u'コーヒー', s.text): post(u' コーヒーのお供にルマンドはいかが?') elif re.search(u'ルマンド', s.text): if re.search(u'ウマウマ|うまー|うまい|美味しい', s.text): post(u' ルマンド美味しいですよね!!') else: ran = random.randint(0,4) post(list[ran]) ...
みたいな感じです。ね。簡単でしょう?いつかこの技術を使って災害対応のbot作りますー! Happy Hacking!