2012年6月6日水曜日

ICWSM12・初日メモ


アイルランドで6月5~7日の日程で行われているICWSM12に参加しているので,
聴講メモを貼り付けておきます.

6/5発表分

Distributional Footprints of Deceptive Product Reviews
Customer's review 
5と評価する人もいれば,1を評価する人もいる
1-5の評価分布から,ステマを探す

National vs Distorted(自然?ゆがんでる?)
Find from distribution

SingleReviewかMultiReviewかで行動が違う
Singleだと1か5が多い
Multiは4-5が多い
S-Shape vs J-Shape(Single)

Characterization of rating distribution
D sorted by #
4,2が高いものと4,5が高いものが多い
MultiTimeとSingleTimeで形が全然違う
51・・と15・・が多い

Detection strategies to identify deceptive business entities
SingleReviewer vs MultiReviewer
positive/negative
Temporal boost in ratingの発見

Novel evaluation methodologies
Pseudo-Gold Standard Data

72~75%の判別率
Baselineが40%程度

Privacy in Interaction: Exploring Disclosure and Social Capital in Facebook
Presentation of Self in Everyday Life.
いろいろなクラスタが本人を中心にネットワークを形成しているはず
Social Capital

Access to emotional and substantive support often from strong ties.
Face book user variables
Signals of Relational Investment

Responding to friends' question because,
-Create an expectation about reciprocal behavior
-Perform a social grooming function
-Potentially train the news feed
-Comments on friends update and wall post are seen by the friends' network

Friendの割合が高くなるほど,FriendsOnlyが増えてくる
Bonding SC:Benefits of focused inclusive interaction
Bridging SC:Costs of highly targetting disclosing

Don’t Disturb My Circles! Boundary Preservation Is at the Center of Location-Sharing Concerns
What is the motivation of Boundary regulation

Online Boundary Regulation
preserve offline relation ship

Friendに対してはPrivacyを考える
Familyは考えない
Strangerに対しても考えない(日本とは違うなあ)

Boundary preservation concern = BPC

Facebook and Privacy: The Balancing Act of Personality, Gender, and Relationship Currency

sentiment的に友人と自分には相関がある
disclose & conceal what is considered private and public in Facebook
Count number of disclosed & concealed from facebook properties

Item Response Theory(IRT)

P_IJ= 1/(1+exp(-a_i(t_j-B_i)))

1. Smart Privacy Mob
About privacy, Westine has divided people in
 1.privacy fundamentalists
 2.pragmatic majority
 3.marginally concerned

2. Who are they?
Those who share more sensitive info are
-open to new experience ------important
-self monitoring
-male --------------------------important
-more active 
-younger

3. What's sensitive
position, employer
residence, hometown not sensitive in circle.

The Livehoods Project: Utilizing Social Media to Understand the Dynamics of a City
neighborhoods

Two perspectives
Politically constructed 政治的に作られた構造か
Socially constructed 社会的に作られた構造か
Collective Cognitive Map

どこでTweetしたかでユーザをグループ分け
そこから,土地のグループ分け.
Tweetにも応用可能か.

場所の類似性(Jaccard係数)

How to evaluate
実際にピッツバーグの人に聞いてみた

Who Does What on the Web: A Large-Scale Study of Browsing Behavior

Nielsen MegaPanel
265000 individuals in US
user data, log of anonymized complete browsing activity from 2009/6-2010/5

Younger and more educated => more use web, more active
色々調べているけど・・・

education が大きな効果を持つ

Evolution of Experts in Question Answering Communities

Expert Influence best answer selection
Ordinary users get intimated by expert
Experts avoid other experts
Experts evolve with differente patterns
These experes can be found with satisfactory performance within 20 weeks

Temporal Motifs Reveal the Dynamics of Editor Interactions in Wikipedia
Motifを使ってWikipediaの編集を分析
編集合戦中とかMotifから判別可能

Modeling Spread of Disease from Social Interactions Best Paper Candidate!

SVMでインフルエンザであるTweetかどうかを判断

Modeling Destructive Group Dynamics in On-line Gaming Communities

WoWを対象にグループの生成と解散を分析
ギルドの歴史から分析可能
Charactor&Guildの二部ネットワーク

Guild抜けは感染する
Quitting Eventを予測可能か?
Quitting Eventが起きないことは90%近い予測
Quitting Eventが起きる可能性は30%程度

ソーシャルネットワークとして調べると面白い
GroupDynamicsが直接見えるデータというのは貴重だ.

2012年4月27日金曜日

東日本大震災時Twitterデータを使った研究

以前,東日本大震災時Twitterデータを使った共同研究を募集しましたが, 多くの方にご参加いただき,多くの研究成果を出すことができました. 皆様にお礼を申し上げるとともに,2011年度の研究成果をこちらに示しておきます. なお,データの提供先についてはまだ募集中ですので,ご興味がある方はご連絡ください.
論文・学会予稿集
  • Takeru Inoue,Fujio Toriumi,Yasuyuki Shirai,Shin-ichi Minato Great East Japan Earthquake Viewed from a URL shortener ACM CoNEXT 2011 Special Workshop on the Internet and Disasters(12/2011)
  • Takeshi Sakaki,Fujio Toriumi,Yutaka Matsuo Tweet Trend Analysis in an Emergency Situation ACM CoNEXT 2011 Special Workshop on the Internet and Disasters(12/2011)
  • 芝田雄吾、木村 浩、鳥海不二夫、榊 剛史、風間一洋、福田健介 ソーシャルメディアにおける福島第一原子力発電所に関連する情報の伝播分析 Workshop of Social System and Information Technology (03/2012)
  • 白井嵩士,榊剛史,鳥海不二夫,篠田孝祐,風間一洋,野田五十樹,沼尾正行,栗原聡 Twitterネットワークにおけるデマ拡散とデマ拡散防止モデルの推定 人工知能学会 データ指向構成マイニングとシミュレーション研究会 SIG-DOCMAS-B102 (03/2012)
  • 松本徳義,武藤正義,鳥海不二夫:東日本大震災における「原発」に関する Twitter ユーザーの動向分析 第 53 回数理社会学会大会(03/2012)
  • 小出明弘,斉藤和巳,大久保誠也,鳥海不二夫,風間一洋 Twitterの@-messageで構成される成長ネットワークの分析 第74回情報処理学会全国大会(IPSJ2012)(03/2012)
  • 小出明弘,斉藤和巳,鳥海不二夫,風間一洋 フォロー類似度によるTwitter高次数ユーザの関係分析 第3回 集合知シンポジウム(02/2012)
  • 風間一洋, 鳥海不二夫, 篠田孝祐,榊剛史, 栗原 聡, 野田五十樹 名詞出現頻度の時間的変化に着目した東日本大震災時のTwitterのトピックの分析 WebDB Forum 2011(11/2011)
  • 芝田雄吾, 木村浩, 榊剛史,鳥海不二夫,風間一洋 福島第一原発事故におけるプレスリリースとTwitter発言の関連性に関する分析 日本原子力学会「2011年秋の大会」L29(09/2011)
  • 鳥海不二夫,篠田孝祐,栗原聡,榊剛史,風間一洋,野田五十樹 震災がもたらしたソーシャルメディアの変化 ネットワークが創発する知能研究会(JWEIN'11) & 数理社会学会第52回大会(JAMS52)合同ワークショップ(09/2011)
招待講演
  • 鳥海不二夫,ソーシャルネットワークの構造とダイナミクス~ヒトの社会活動の理解予測に向けて 東日本大震災時のTwitterにおける情報共有(02/2012)
  • 鳥海不二夫,情報通信技術研究交流会(AC・Net)192回例会 震災がもたらしたソーシャルメディアの変化(12/2011)
  • 鳥海不二夫,はこだて未来大学講演 震災がもたらしたソーシャルメディアの変化(08/2011)
2012年度での発表も予定されていますので,機会があればまた紹介したいと思います.
データ概要
東日本大震災時のTweetデータ
データ範囲2011-03-05 00:00:00~2011-03-24 22:23:58
総Tweet数
407562159
言語
主に日本語

含まれるデータ
  • TweetID
  • ScreenName
  • Tweet本文
  • 投稿アプリ名
  • Tweet時刻
  • Retweet先のTweetID
  • Retweet先のScreenName
主な付加データ
  • 名詞抽出
  • 動詞抽出
  • 形容詞抽出
  • 地名抽出
  • Hashtag抽出
  • Mention関係
  • Retweet先のScreenName
  • ユーザ抽出

2011年10月5日水曜日

仕様変更に伴うTwitterStreamingReaderの変更

どうやら,Twitterで仕様変更があったらしく,
StreamingAPIを使ったデータの読み込みを変更しなければいけなくなりました.

具体的には,TwitterのDeveloper用ブログにあるとおり,
All our Streaming API products are now supporting SSL and we've just updated the Streaming API Methods, User Streams and Site Streams documentation pages accordingly. As we're planning to sunset HTTP support in about a month, we strongly encourage you to switch to SSL (HTTPS) as soon as possible, especially if you're still authenticating your Streaming API requests with Basic Auth.
ということで,SSLを使ってね,ということらしいです.

そんなわけで,以前作成したTwitterStreamReaderではなく,新しいバージョンを使ってください.

変更点は,SSLに対応させただけだけど.
得られるTweetデータはJSON形式なので,jsonicなどを使ってJSONの処理をちゃんとしないと日本語が文字化けするようです.
また,日本語のTweetだけ取り出したい人は,文字列に日本語が含まれるかどうかの判定をご参照ください.

package twitter;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.PasswordAuthentication;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * StreamAPIから送られてくるStreamデータをひたすら取得し続けるクラス
 * @author tori
 *
 */
public class TwitterStreamReader {


 /**
  * 使い方の例
  * @param args
  * @throws UnsupportedEncodingException 
  */
 public static void main(String[] args) throws UnsupportedEncodingException {
  
  TwitterStreamReader tsr = new TwitterStreamReader("Twitter-UserName", "Password");
  tsr.start();
  
  while(true){
   List<String> tweetList = tsr.readStoredList();
   List<String> errList = tsr.readErrLogList();
   
   for(String text:tweetList){
    System.out.println(text);
   }
   
   for(String err:errList){
    System.err.println(err);
   }
  }
 }
 
 /**
  * sampleのタイムライン取得のためのURL
  */
 private static final String DEFAULT_API_URL = "https://stream.twitter.com/1/statuses/sample.json";

 String userName;
 String password;

 /**
  * 強制終了させられたかどうか
  */
 boolean isForceStop;

 /**
  * 取得しているかどうか
  */
 boolean isRunning;
 
 /**
  * Synchlonizedされたリスト
  */
 List<String> dataList;

 /**
  * Synchlonizedされたリスト
  */
 List<String> errLogList;

 /**
  * apiのURL
  */
 String apiUrl = DEFAULT_API_URL;

 /**
  * ストリームを読み続けるためのスレッド
  */
 private Thread streamReadThread;
 
 public TwitterStreamReader(String userName, String password) {
  super();
  this.userName = userName;
  this.password = password;

  dataList = Collections.synchronizedList(new ArrayList<String>());
  errLogList = Collections.synchronizedList(new ArrayList<String>());
  
 }

 /**
  * 読み込みを開始する
  */
 public void start(){
  StreamReader streamReader = new StreamReader();
  
  streamReadThread = new Thread(streamReader);
  streamReadThread.start();
 }

 /**
  * 取得を停止する
*/
 public void stop() {
  this.isForceStop = true;
 }
 
 /**
  * データ取得中かどうかを返す
  * @return
  */
 public boolean isRunning(){
  return streamReadThread.isAlive();
 }
 
 /**
  * 取得済みのTweetデータのリストを取得する
* これまでに読み込んだデータは削除される
  * @return 是までに読み込んだデータ
  */
 public List<String> readStoredList(){
  List<String> storedList;
  synchronized (dataList) {
   storedList = new ArrayList<String>(dataList);
   dataList.clear();
  }

  return storedList;
 }
 
 /**
  * エラーログのリストを取得する
* これまでに読み込んだデータは削除される
  * @return 是までに読み込んだデータ
  */
 public List<String> readErrLogList(){
  List<String> storedList;
  synchronized (errLogList) {
   storedList = new ArrayList<String>(errLogList);
   errLogList.clear();
  }
  return storedList;
 }

 /**
  * 強制停止信号を送ったかどうか
  * @return the isForceStop
  */
 public boolean isForceStop() {
  return isForceStop;
 }
 
 /**
  * データ読み込み用クラス
  * @author tori
  *
  */
 class StreamReader implements Runnable{
  @Override
  public void run() {
   isForceStop = false;
   while(!isForceStop){
    InputStreamReader isr = null;
    BufferedReader br = null;
    try{
     URL connectUrl = new URL(apiUrl);
     HttpURLConnection con = (HttpURLConnection)connectUrl.openConnection();
     
     con.setRequestMethod("GET");
     con.setDoOutput(true);
     con.setInstanceFollowRedirects(true); 

     Authenticator auth = new Authenticator(){
      public PasswordAuthentication getPasswordAuthentication(){
       return new PasswordAuthentication(userName, password.toCharArray());
      }
     };
     Authenticator.setDefault(auth);
     

     isr = new InputStreamReader(con.getInputStream(), "UTF8");
     br = new BufferedReader(isr);
     while(!isForceStop){
      String tweet = br.readLine();
      synchronized (dataList) {
       dataList.add(tweet);
      }
     }
    }catch(Exception e){
     StringBuffer buf = new StringBuffer();
     buf.append(e.getClass().getName()+"\n");
     for(StackTraceElement ste:e.getStackTrace()){
      buf.append(String.format("\tat %s.%s(%s:%d)\n", ste.getClassName(), ste.getMethodName(), ste.getFileName(), ste.getLineNumber()));
     }
     synchronized (errLogList) {
      errLogList.add(buf.toString());
     }
    }finally{
     try{
      br.close();
     }catch(Exception e){
     }
     try{
      isr.close();
     }catch(Exception e){
     }
    }
   }
  }
 }
}

2011年7月30日土曜日

じゃんけん大会の必勝法

世の中こんなブログであふれている.
たった5万円から億万長者になった、成功の9ステップ

非常に学びが多く、ここに書かれたことを実践することで、自分なりの成功に近づけると思った。

とか書いてあるけれど,
成功例だけ見てその結果を模倣しても,
それは単にじゃんけん大会で勝った人の話を聞いているだけじゃないかと思う.
何万人でじゃんけん大会をしても,必ず一人は優勝者が出る.
ただ,その優勝者は偶然優勝しただけであって,必勝法など無い.
にもかかわらず,その人がどう優勝したかを聞いて,それを実践してじゃんけん大会で優勝しようとしているようなもの.

ある行動が成功に結びつくかどうかを知りたいのならば,
その行動を行った人を一定量サンプリングして,その中の成功例と失敗例を調べるべき.
成功した人のほんとどがやっていた行動をすれば成功する信じるのならば,みんな毎日息をしていればいいと思う.
成功者はみんな息をしているんだから.

というわけで,そんな簡単な統計学も分からないようではやっぱり成功しないんじゃないだろうか.

2011年7月13日水曜日

作業用にSugerSync

出張が多い身としては,職場のPCとノートPCとでデータを共有したいんだけど,
いちいち動かすのが面倒くさい.
そんなときは,ファイル共有アプリである,DropBoxがスタンダードでしょう.
DropBoxフォルダに入っているデータを自動的に全PCで共有してくれるので,面倒なことを考えなくてもフォルダにファイルをぶちこんでおけば入れ忘れに悩む必要は無い.
とはいえ,特定のフォルダ以下にデータを入れておかないと共有されないのがちょっと不便.
ドキュメントならそれでもいいけど,Eclipseを使ってプログラミングしているものを共有しようとすると,最初からDropbox内にプロジェクトを作らなければいけないし,共有をやめようと思ったら一々フォルダの場所を動かして設定も変更しないといけないのが欠点.

んで,色々探したらSugarSyncというのがあるらしい.
こっちはDropBoxと違って任意のフォルダを共有可能.
共有したいフォルダは一個一個選ばなければいけないけど,一度指定すればその下に作ったフォルダは全部教諭されるので,作業中のフォルダだけ共有するのも楽勝.
フォルダ内の共有したくないデータは除外出来るので,プログラムプロジェクトのなかで,ログフォルダだけ除外とかも余裕.
容量は5~5.5G.これは,Dropboxと同じ.
ただ,作業の必要なくなったら共有をやめればいいだけなので,Dropboxより使い勝手が良いかも.
お金さえ払えば250Gまでいけるらしいけど,そこまでは必要ない気がする.
iPodとかiPadとかアンドロイド携帯でも使えるらしいけど,そっちは試したことが無いのでよく分からない.誰か試したら教えて.
Dropboxを併用できるのもポイント高い.
両方使えば最初から11G使えるようにもなるので,半永久共有したいファイルはDropBoxに,一時的なファイルはSugerSyncに入れると容量を節約しつつ使えてよい.
というわけで,外用のノートPCと職場のPCを併用している人にはお勧め.
家と職場でも使えるけど.

SugarSyncを容量5.5Gで開始
SugarSyncを容量5Gで開始

Dropboxを容量5.5Gで開始
Dropboxを容量5Gで開始

2011年6月11日土曜日

震災時のTweetデータの分析

先日共同研究者を募集したTweetデータについて,簡単な分析を行ってみました.

まず,総Tweet数ですが,3月5日から3月24日までで3億3235万8199Tweetでした.
日ごとのTweet数の内訳は,図1の通りです.
図1 Tweet数の変位
ただし,震災直後(3月12~15日)あたりは計画停電などの影響で十分にデータが取れていない可能性もあります.後々再収集を試みましたが,すべて収集出来ているとは限りません.

まあ,とはいえ3月11日にTweet数が一気に増加したのは間違いなさそうです.

次に,震災時にどの県が注目されていたかを分析しました.
各県名がTweetされた回数について,日常の1時間あたりの平均を県名Tweet数を1としたときに,震災時に何倍Tweetされたかを日本地図上に色分けして乗せました.
色が濃いほど日常よりも多くつぶやかれていることを示します.
autoボタンを押せば,時系列で見ることが出来ます.
画面がチラ付くのはご愛敬.

やはり,地震直後は「宮城」「福島」などがTweetされていますが,
時間とともに「宮城」などは減少し,「福島」が目立つことが分かります.
二日目付近からは,原発に注目が行っていたのでしょう.
また,長野や静岡でも地震が発生すると,大きく注目されていることが分かります.

ここから分かることはまだまだ少ないですが,今後さらに多くの情報をデータから抽出して,
震災時に何が起きたのかを明らかにしていきたいと思います.

2011年6月8日水曜日

ポモドーロテクニック

研究生活を続けていると,集中して論文を書いたりする作業が必要になったりします.
でも,つい他のことが気になって論文書きながら別の事をやってしまったりとかありますよね.
そんなときに集中力を維持するのに有効なテクニックとして,ポモドーロテクニックがあります.

これは,25分間は集中して一つの作業をして,その後5分間休憩し,
また25分作業する,というのを続けるテクニックです.
作業中の25間はメールが来てもFacebookに書き込みがあっても,全部無視して作業に集中します.
Twitterへの書き込みだって控えます.
電話は出ないとダメかもしれないけど.
雑用は5分ですませて,ついでに少し休みます.
それを4~5回繰り返すと作業効率がぐっとアップするというわけです.

本当かよ~とか思いつつタイマーを用意してやってみたのですが,
これが意外といい.
確かに,集中出来るので思ったより作業が進む.
特に,レポートの採点とか論文の査読とかあんまり楽しくない作業にはぴったり.

というわけで,単にタイマーを使うのではなく,
ちゃんと25分を計ってくれるアプリがいいなあと思って作成しました.
ポモドーロタイマー.
作業回数と内容を入力してスタートするだけで25分間+5分の休憩を淡々と記録していってくれます.

しかも,Twitterと連携して作業開始時にTwitter上に宣言をしてくれます.
今作業中だよ,と.
つまり,作業をサボってTwitterで遊んでいると他の人にばれてしまうわけですね.

というわけで,集中力のないそこのあなた.
是非使ってみてください.

外部関連記事:
ポモドーロテクニックについて