はじめに、発明者による検討内容を説明する。ソーシャルメディアサービスを通じた情報の投稿に発信位置に関する情報が付されていると、ユーザの位置情報と投稿された内容とを組み合わせることによって、価値の高いサービスを提供できる。
例えば、投稿された情報に、洪水やゲリラ豪雨といった気象に関する内容や、花粉や風邪といった健康に関する内容や、個人の嗜好等に関する内容が含まれていた場合、これらの事象がどの地域で特有に起きているのかが分かれば、地理的な可視化や分析を行なうことで、ここから有用な情報をリアルタイムに把握することが可能となる。
そして、ソーシャルメディアサービスを通じた情報の投稿を、地理的な可視化や分析に利用することは、ユーザによる情報の発信を一種のセンサー情報として扱っているともいえる。例えば、花粉の飛散状況を把握するために、花粉の量を測定する装置を設置しなくても、ユーザの投稿をセンサー情報として扱うことで、花粉の飛散状況を間接的に知ることができる。
また、花粉であれば、花粉の量を測定する装置を設置することで、飛散状況を測定できるともいえるが、これに対して、風邪といった健康に関する情報や、個人の嗜好に関する情報を直接測定する装置はない。
例えば、病気になって病院にかかったのであれば、当該病気に関してどの地域での発症が多いかどうかを調べることができるが、病気になったとして必ずしも病院に行くとは限らない。病院に行くほどでもないと判断して治してしまうこともある。このような場合であっても、病気の症状等に関する投稿をセンサー情報として利用すれば、ある地域での健康に関する傾向を間接的に得ることができ、各地域での健康管理や保険等の分析のために利用できる。
また、個人の嗜好に関する投稿をセンサー情報として利用すれば、ある地域での嗜好等に関する傾向が間接的に得ることができ、この傾向を各地域のマーケティングに利用することが期待される。
図1に、実施例のコンテンツテーブルの例が示される。図1に示されるコンテンツテーブル100は、ユーザによって投稿された情報を管理するために、図3に示されるメモリ330又は記憶装置380に格納される情報である。
図1には、例えば、ユーザIDが“user001”のユーザが、タイムスタンプ“20120702:01時”で表わされる2012年7月2日の01時に、“雨が降ってきた。”という内容の情報を投稿したことが管理されている。そして、情報が投稿された位置を区別するために、メッシュに区切られた地域毎を識別するための位置情報“loc052”が関連付けられており、この位置情報“loc052”によって、user001が情報を投稿した位置が示されている。この位置情報“loc052”は、例えば、user001が情報を発信する際に、GPS機能等によって特定された位置情報を付した情報を投稿したことにより、関連付けがされている。
ところで、user008には、情報が投稿された位置が関連付けられていない。これは、user008が情報を発信する際に、GPS機能等を有効にしておらず、位置を特定する情報を付さなかったことによる。実際、位置情報を付して情報を投稿するユーザは、ソーシャルメディアサービスを利用するユーザの1%にも満たない。そのため、ソーシャルメディアサービスの利用者や情報の投稿の全体数は多いものの、位置を特定できる情報が極めて少なく、その中において特定のキーワードを含む情報を絞り込むと、地理的な可視化や分析において、偶然起きた事象ではないと判定できるほどの情報量を集めることが難しい。このように、ソーシャルメディアサービス等を利用して発信された情報に、嗜好等に関する内容が含まれていたとしても、発信位置が特定されている情報の数が十分でないため、どの地域で特徴的に発生している嗜好なのか、どの程度の範囲で発生している傾向なのか、等を判断できておらず、マーケティング等に十分に利用できていなかった。
また、userYYYによって投稿された情報のように、情報に地名が含まれている場合、その地名から、位置を特定するための情報として、例えば、“loc204”が付されていてもよい。ただし、投稿される情報に位置を特定するためのキーワードが必ずしも含まれているとは限らず、位置情報が特定された情報の数を確保するには十分とはいえない。
また、ソーシャルメディアサービスに登録する際には、任意ではあるが、ユーザ情報として、居住地を公開している場合がある。しかし、多くのサービスでは、この居住地に任意の文字列を入力できるため、「神奈川県」と「新宿区」といったように粒度が揃っていなかったり、実在しない地名が登録されていたり、虚偽の地名が登録されている場合があり、このユーザ情報に従って情報の発信位置を推定したとしても、確度が高いとはいいきれない。
ところで、図1に示されるコンテンツテーブルは、ソーシャルメディアサービスを運営していなくても、ソーシャルメディアサービスを運営する運営会社から取得できる情報である。そのため、ユーザが情報を発信する際にアクセスした基地局の位置や、無線LANのアクセスポイントの位置などに従い、情報の発信位置を特定できたとしても、基地局を管理するキャリアはその位置情報を入手できるが、コンテンツテーブルがソーシャルメディアサービスを運営する運営会社から提供された時点では、ユーザが情報を発信した際にすでに付与されている位置情報以外が失われていることがあるため、ユーザが発信した情報をセンサー情報として分析する際には、基地局等による位置情報を利用できない。
以上に述べたように、ソーシャルメディアサービスが盛んに利用されているものの、位置を特定できる情報は極めて少なく、投稿された情報から地理的な傾向が、偶然起きたものではないと判定できるほどの情報量を集めることが難しい。
そこで、実施例によれば、発信位置が未知の第1情報であっても、発信位置が既知の第2情報に含まれていたキーワードを含み、第2情報と同じ時間帯に発信されていれば、該既知の発信位置から発信されたと推定して、発信位置を付与する。これによって、発信位置を特定するための位置情報が付されていない情報の発信位置を推定して、例えば、地理的な傾向を分析する際の情報量を増やすことができる。
また、第1情報を発信したユーザの発信位置を推定することを、複数の時間帯で行い、これらの結果をまとめることで、情報に当該キーワードが含まれていなくても、このユーザが情報を発信する可能性の高い発信位置や発信範囲を推定することができる。
さらに例示すると、雨や雷、花火等、局所的に発生し得るイベントに関する情報の投稿を手掛かりにして、位置情報が付されている少数のユーザの位置に従い、位置を特定できないユーザの位置を推定する。これは、ソーシャルメディアサービスのユーザの多くが、上記のようなイベントを観測したときに、そのイベントに関した投稿を行なっており、局所的な地域で観測されるイベントに対する内容が、複数のユーザによって同じ時刻帯に投稿された場合には、それらの情報を投稿したユーザどうしが近くにいる可能性が高いからである。
そこで、実施例によれば、ソーシャルメディアサービス等を利用して発信された情報のうち、発信位置が特定されている情報の数が少なくても、位置が特定されている情報と、されていない情報との相関性が高い場合には、特定されている位置から情報が発信されたとして取り扱う。これによって、位置が特定された需要のサンプルを多く抽出することができるようになり、マーケティング等に利用することができるようになる。
なお、実施例では、局所的なキーワード又はそれに類似したキーワ―ドを含む情報の発信を、同じ時間帯又は同じ時間帯の事象について投稿していると予測されることを、「イベント発言同期」と呼ぶことがある。
もちろん、異なる地域で同じイベント(例えば、降雨)が発生している可能性がある。そのため、実施例では、必ずしも一度のイベント発言同期だけで発信位置を判定するのではなく、複数回のイベント発言同期から得られる発信位置の候補を総合的に考慮して、位置情報を付さないユーザであっても、情報を発信する際の位置や範囲を推定する。なお、発信位置の候補を総合的に考慮すると、ユーザの生活圏外に比べ、生活圏内の位置が推定される確率が高いことが見込まれ、推定される位置や範囲が生活圏内に集まることが期待できる。そのため、健康に関する情報や、嗜好等に関する情報の投稿があった場合に、これらをセンサー情報として利用し、地域的な傾向の分析に利用することが可能となる。
図2に、実施例よって推定された位置の例が示される。図2には、実施例の説明のために、“雨”に関して投稿された情報に基づいて、位置が特定されていないユーザの位置を推定する例が示される。なお、図2(A)〜(D)において、点線によりメッシュに区切られた領域によって、情報が発信された地域が定義されている。また、図2(A)〜(C)において、一点鎖線で囲まれ、ドットで塗りつぶされた領域200、210、及び220が、雨が実際に降っていたイベント発生領域である。また、図2(B)が、図2(A)に対して、同じ領域の1か月後の天候を表し、図2(C)が、図2(A)に対して、同じ領域の2か月後の天候を表している。つまり、図2(A)〜(C)は異なる時間帯の天候の様子を表している。なお、実施例は、“雨”というキーワードに限定されず、異なる時間帯が1か月毎の差であることにも限定されない。地理的な分析対象に併せて適宜選べばよい。
図2(A)に示される×印は、位置が特定されていないユーザとイベント発言同期した、位置が特定されているユーザの情報の発信位置を示している。この×印の位置は、雨が降っているイベント発生領域200内はもとより、イベント発生領域200以外の地域でも“雨”に関する情報が発信されている場合があるため、イベント発生領域200以外にも存在し得る。
なお、図2(A)には、当然ではあるが、位置が特定されていないユーザの発信位置を含めることはできない。実施例では、イベント発言同期が起きたことを手掛かりとして、×印を、このユーザが情報を発信した際の位置の候補としている。ただし、位置が特定されていないユーザの実際の発信位置が、×印に一致するとは限らない。あくまでも、局所的な地域で観測されるイベントに関する情報が同じ時刻帯に投稿された場合に、それらの投稿をしたユーザどうしが近くにいる可能性が高いということを利用して、×印の位置を発信位置の候補としている。
図2(B)には、上述したように、図2(A)に対して、同じ領域の1か月後の天候が表されており、図2(B)に示される○印は、この1カ月後の時点で、位置が特定されていないユーザとイベント発言同期した、位置が特定されているユーザの情報の発信位置を示している。すなわち、○印は、この1カ月後の時点における、ユーザが情報を発信した際の位置の候補である。
図2(C)には、上述したように、図2(A)に対して、同じ領域の2か月後の天候が表されており、図2(C)に示される△印は、この2カ月後の時点で、位置が特定されていないユーザとイベント発言同期した、位置が特定されているユーザの情報の発信位置を示している。すなわち、△印は、この2カ月後の時点における、ユーザが情報を発信した際の位置の候補である。
図2(D)には、図2(A)〜(C)に示された×印、○印、及び△印が示されている。つまり、異なる時間帯全てにおける、位置が特定されていないユーザの発信位置の候補が示されている。そして、図2(D)に示されるように、推定領域230で示される範囲内に発信位置の候補が集中している。これは、特定の時間帯のイベント発言同期では、発信位置の候補となる位置が複数存在するが故に、どの位置を発信位置とするか決定するのが難しい場合があるが、異なる時間帯に跨って位置の候補を取得することにより、あるユーザとイベント発言同期する位置の傾向が重畳され、位置が特定されていないユーザが情報を発信する可能性の高い発信位置や発信範囲を推定することができる。
このように、イベント発言同期が発生する事象を異なる時間に跨って観測し、これらを重畳することで、単独の時間帯で偶然発生したイベント発言同期の影響が抑えられ、より確度の高い発信位置を推定できることとなる。なお、発信位置の候補が集中する領域が複数ある場合には、それらの領域を含む範囲を発信範囲としてもよい。
図3に、実施例の位置推定装置のハードウェア構成の例が示される。実施例の相関抽出装置の一例であるサーバ300は、CPU310、メモリコントローラ320、メモリ330、メモリバス340、IOバスコントローラ350、NIC360、及びIOバス370を含み、IOバス370には記憶装置380が接続される。
メモリバス340に接続されたメモリ330には、サーバ300の各種処理を実行するためのプログラムが格納されている。CPU310は、メモリコントローラ320を介して、メモリ330からプログラムを読み出し、各種処理を実行する。CPU310によって実行される各種処理の実行に伴い、メモリ330に対するデータの書き込み及び読み出しがメモリコントローラ320を介して実行される。
CPU310は、IOバスコントローラ350を介して、IOバス370に接続されたNIC360にデータを転送し、また、NIC360からデータやパケットを受け取る。CPU310は、IOバスコントローラ350を介して、IOバス370に接続された記憶装置380からデータを読み出し、また記憶装置380にデータを書き込む。
CPU310は、各種処理を実行するための1以上のCPUコアを含んでいてもよい。また、各CPUコアは1以上のプロセッサを含んでいてもよい。なお、CPU310が複数のCPUコアを含む場合には、当該各種処理を、複数のCPUコアに協業させて実行させてもよく、又はそのうちの1つのCPUコアに実行させてもよい。また、各CPUコアが複数のプロセッサを含む場合には、当該各種処理を、複数のプロセッサに協業させて実行させてもよく、又はそのうちの1つのプロセッサに実行させてもよい。
メモリ330は、例えばDRAM(Dynamic Random Access Memory)などのRAMである。記憶装置380は、例えば、ROM(Read Only Memory)やフラッシュメモリなどの不揮発性メモリ、又はHDD(Hard Disk Drive)等の磁気ディスク装置である。
なお、CPU310、メモリコントローラ320、メモリ330、NIC360、及び、記憶装置380が同じバスに接続された構成をサーバ300に適用してもよい。図3に示されるハードウェア構成によって、図4に示される機能ブロックが実現され、図5、7、11、12及び14に示される処理が実行される。
図4に、実施例の位置推定装置の機能ブロックの例が示される。図3に示された、位置推定装置の一例であるサーバ300は、ワーキングメモリとして使用されるメモリ330にロードされたプログラムが、CPU310によって実行されることにより、設定部400、取得部410、分割部420、選択部430、判定部440、登録部450、集計部460、及び、算出部470として機能する。なお、図4に示される各機能ブロックにより実行される位置情報推定方法における処理が、図5、7、11、12及び14に示される処理と対応させて後述される。
図5に、実施例のイベントテーブルを作成するための処理の例が示される。図5に示される処理は、図6に示されるイベントテーブル600を作成するために、図3に示されるメモリ330にロードされたプログラムをCPU310が実行することによって実行される。図5に示される処理によって、イベント発言同期が起きやすいイベントを表すキーワードが抽出され、このキーワードがイベントテーブル600に登録されることとなる。
なお、図5に示される処理が実行される理由は、図2に沿って説明したイベント発言同期が起きたかどうかを判定する際のキーワードとして、どのキーワード(単語)が効果的であるかを決める必要があるからである。図5に示される処理によって、既に位置が特定されているユーザによって発信された情報に含まれるキーワード(単語)が、局所的に使用されたキーワード(単語)であるかどうかを判定して、イベント発言同期を判定する際に効果的なキーワード(単語)が抽出されることとなる。
図5に示される処理が処理500により開始されると、タイムスタンプを時刻の最小値で初期化する処理501が、設定部400によって実行される。処理501では、コンテンツテーブル100を読み出し、タイムスタンプの時刻の最小値を基準にして、各コンテンツのタイムスタンプを規格化することで、各コンテンツのタイムスタンプの時刻を初期化する。そして、処理501では、初期化されたタイムスタンプを、タイムスタンプt550として、メモリ330又は記憶装置380に格納する。
タイムスタンプが[t、t+r)の範囲のコンテンツを取得する処理502が、取得部410によって実行される。処理502では、処理501により初期化されたタイムスタンプに従い、コンテンツテーブル100で管理されているコンテンツのうち、[t、t+r)の時間範囲に含まれるコンテンツを取得する。すなわち、処理502によって、時刻tから単位時間rの期間に含まれるコンテンツが取得される。そして、処理502では、時刻tから単位時間rの期間に含まれるコンテンツを、コンテンツテーブル100の部分データ(時刻t)560として、メモリ330又は記憶装置380に格納する。
コンテンツテーブルの部分データ(時刻t)560に含まれる、全てのコンテンツをキーワード(単語)に分割する処理503が、分割部420によって実行される。処理503では、例えば、時刻tから単位時間rの期間に含まれていたコンテンツが“雨降り”であれば、このコンテンツを、“雨”及び“降り”の2つのキーワード(単語)に分割する。そして、処理503では、分割されたキーワード(単語)を、キーワード(単語)(時刻t)570として、メモリ330又は記憶装置380に格納する。
地域毎にキーワード(単語)を選択する処理504が、選択部430によって実行される。処理504では、位置を識別する座標に従って分割された地域毎に、キーワード(単語)(時刻t)570を選択する。そして、処理504では、地域毎に選択されたキーワード(単語)を、選択されたキーワード(単語)(時刻:t、地域:a)580として、その地域と時刻が識別可能なように、メモリ330又は記憶装置380に格納する。なお、処理504における地域の分割単位の大きさは、推定したいユーザ位置の粗密に合わせて、適宜設定すればよい。
全ての地域のスコアを計算したかどうかを判定する処理505が、判定部440によって実行される。全ての地域のスコアを計算したと判定された場合に処理512に移り、全ての地域のスコアを計算していないと判定された場合に処理506に移る。
未選択の地域を選択する処理506が、選択部430によって実行される。処理506では、処理504によってまだ選択されていない地域について、キーワード(単語)毎のスコアを計算するために、未選択の地域を選択する。
キーワード(単語)を1つ選択する処理507が、選択部430によって実行される。処理507では、処理506により選択された地域について、キーワード(単語)毎のスコアを計算するために、そのうちの1つのキーワード(単語)を選択する。
全てのキーワード(単語)のスコアを計算したかどうかを判定する処理508が、判定部440によって実行される。処理508では、処理506により選択された地域について、全てのキーワード(単語)のスコアが計算されているかを判定するために実行される処理である。全てのキーワード(単語)のスコアを計算したと判定された場合には、他の地域についてのスコアを計算するために処理505に移る。全てのキーワード(単語)のスコアを計算していないと判定された場合には、処理509に移る。
スコアS(a、t、r、w)を計算する処理509が、算出部470によって実行される。処理509では、処理506により選択された地域をaとし、処理502により取得された時刻[t、t+r)の範囲を処理の対象としていることをt及びrで表わし、処理507により選択されたキーワード(単語)をwとした場合の、スコアS(a、t、r、w)を計算する。
このスコアS(a、t、r、w)は、S(a、t、r、w)=R(a、t、r、w)/R(!a、t、r、w)により定義される。ここで、R(a、t、r、w)=F(a、t、r、w)/N(a、t、r)であり、R(!a、t、r、w)=F(!a、t、r、w)/N(!a、t、r)である。
次に、各関数の定義を説明する。F(a、t、r、w)は、地域aにおいて時刻tから時刻t+rの間にキーワード(単語)wを含む情報が発信された数である。F(!a、t、r、w)は、地域a以外の地域において時刻tから時刻t+rの間にキーワード(単語)wを含む情報が発信された数である。N(a、t、r)は、地域aにおいて時刻tから時刻t+rの間に情報が発信された数である。N(!a、t、r)は、地域a以外の地域において時刻tから時刻t+rの間に情報が発信された数である。なお、rはコンテンツを選択する際の時間を区切る単位時間であり、推定したいユーザ位置の特性を考慮して、適宜設定すればよい。
言い換えると、スコアS(a、t、r、w)は、地域aにおいて時刻tから時刻t+rの間にキーワード(単語)wを含む情報が発信された確率R(a、t、r、w)と、地域a以外の地域において時刻tから時刻t+rの間にキーワード(単語)wを含む情報が発信された確率R(!a、t、r、w)との比であるといえる。
なお、実施例では、スコアS(a、t、r、w)=F(a、t、r、w)/F(!a、t、r、w)として、局所的に使用されうるキーワード(単語)であるかどうかを判定してもよい。ただし、情報が発信される地域毎に情報の発信数自体に差があり、この情報の発信数の母数が違うにも拘らず、キーワード(単語)wを含む情報の数どうしを単純に比較すると、地域に特有なキーワード(単語)が母数の差によって埋もれてしまう可能性がある。
そのため、実施例の説明では、S(a、t、r、w)=R(a、t、r、w)/R(!a、t、r、w)のように、まず、ある地域で発信された情報にキーワード(単語)が含まれる確率を算出したうえで、その地域とそれ以外の地域との確率の比をとり、イベント発言同期の起こりやすいイベントに含まれるキーワード(単語)が、地域毎の情報の発信数の差に埋もれないようにする例を説明した。
スコアS(a、t、r、w)が閾値よりも大きいかどうかを判定する処理510が、判定部440によって実行される。処理510では、処理509により算出されたスコアS(a、t、r、w)が、推定したいユーザ位置の特性を考慮して適宜設定された閾値Tよりも大きいかどうかを判定する。算出されたスコアS(a、t、r、w)が閾値Tよりも大きいと判定された場合には処理511に移り、算出されたスコアS(a、t、r、w)が閾値Tよりも大きくないと判定された場合には、スコアS(a、t、r、w)がまだ算出されていない単語を選択するために、処理507に移る。
キーワード(単語)を登録する処理511が、登録部450によって実行される。処理511では、処理510によって閾値TよりもスコアS(a、t、r、w)が大きいと判定されたキーワード(単語)を、イベントテーブル600に登録する。処理511を終えると、スコアS(a、t、r、w)がまだ算出されていない単語を選択するために、処理507に移る。
単位時間rだけ進める処理512が、設定部400によって実行される。処理512では、処理502により取得された時間範囲に対して、単位時間rだけ進んだ時間範囲に含まれるコンテンツが取得されるように、時間範囲の基準を単位時間rだけ進める。処理512によって、キーワード(単語)のスコアS(a、t、r、w)を算出する際の対象となるコンテンツの時間範囲が、単位時間rだけ進められることとなる。
コンテンツ内の時刻の最大値を超えたかどうかを判定する処理513が、判定部440によって実行される。処理513では、処理512により単位時間rだけ時間が進められた結果、スコアS(a、t、r、w)が算出されていない時間範囲があるかどうかを判定している。そして、コンテンツ内の時刻の最大値を超えていないと判定された場合には処理501に移り、他の時間範囲に含まれるコンテンツに関してスコアS(a、t、r、w)を計算することとなる。他方で、コンテンツ内の時刻の最大値を超えたと判定された場合には処理514に移り、図5に示された処理を終える。
図6に、実施例のイベントテーブルの例が示される。図6に示されるイベントテーブル600は、図5に示される処理において作成される情報であって、イベント発言同期が起きやすいイベントを表すキーワード(単語)を管理するために、図3に示されるメモリ330又は記憶装置380に格納される情報である。
例えば、図6に例示されるように、“雨”や“花火”等が、局所的に使用されうるキーワード(単語)であって、イベント発言同期が起きやすいイベントを表すキーワード(単語)であるとして、イベントテーブル600で管理されている。
なお、イベント発言同期が起きやすいイベントを表すキーワード(単語)として、そのキーワード(単語)と相関の高いキーワード(単語)を、イベントテーブル600で管理してもよい。例えば、“雨”に対して“豪雨”という単語は、同じ事象を表している可能性が高く、それらの単語の相関が高いといえる。このような関係にある単語については、厳密に単語が一致しなくてもイベント発言同期が起きたと判定してもよく、そのために、互いに関連付けられて、イベントテーブル600で管理される。
図7に、実施例のイベント発言テーブル、既知ユーザ位置テーブル、及び、ユーザ位置候補テーブルを作成するための処理の例が示される。図7に示される処理は、図8に示されるイベント発言テーブル800、図9に示される既知ユーザ位置テーブル900、及び、図10に示されるユーザ位置候補テーブル1000を作成するために、図3に示されるメモリ330にロードされたプログラムをCPU310が実行することによって実行される。
図7に示される処理が処理700により開始されると、イベントテーブルからキーワード(単語)を選択する処理701が、選択部430によって実行される。処理701では、図5に示される処理により作成されたイベントテーブル600に登録されているキーワード(単語)を選択する。そして、処理701では、選択されたキーワードを、選択されたキーワード(単語w)750として、メモリ330又は記憶装置380に格納する。
キーワード(単語w)を含むコンテンツを選択する処理702が、選択部430によって実行される。処理702では、コンテンツテーブル100から、処理701により選択されたキーワード(単語w)750を含むコンテンツを選択する。そして、処理701では、選択されたコンテンツを、選択されたコンテンツ760として、メモリ330又は記憶装置380に格納する。
キーワード(単語w)を含む全てのコンテンツを選択したかどうかを判定する処理703が、判定部440によって実行される。処理703において、キーワード(単語w)750を含む全てのコンテンツを選択していないと判定された場合には、処理704に移る。キーワード(単語w)750を含む全てのコンテンツを選択したと判定された場合には処理708に移り、図7に示される処理を終える。
コンテンツをイベント発言テーブルに登録する処理704が、登録部450によって実行される。処理704では、処理701により選択されたキーワード(単語w)750を含むコンテンツがあれば、そのコンテンツのタイムスタンプに基づき、その時間帯に、そのコンテンツをユーザが発信したことを示すために、図8にも示されるように、イベント発言テーブル800において“1”のフラグを記録する。
例えば、処理701において、イベントテーブル600から選択されたキーワード(単語w)750が“雨”であったとする。この場合、図1に示されるコンテンツテーブル100では、user001が、“20120702:01時”に“雨が降ってきた。”という情報を発信しているため、処理704では、イベント発言テーブル800において、user001の“20120702:01時”の時間範囲に“1”のフラグを記録することとなる。
コンテンツに位置情報が関連付けられているかどうかを判定する処理705が、判定部440によって実行される。処理705では、図1に示されるコンテンツテーブル100を読み出し、処理702により選択されたコンテンツ760に位置情報が関連付けられているかどうかを判定する。関連付けられていると判定された場合には処理706に移り、関連付けられていないと判定された場合には処理707に移る。
位置情報とユーザIDを既知ユーザ位置テーブルに登録する処理706が、登録部450によって実行される。処理706では、図1に示されるコンテンツテーブル100に従い、処理702により選択されたコンテンツ760のユーザID及び位置を、図9に示されるように、既知ユーザ位置テーブル900に登録する。例えば、処理702により選択されたコンテンツ760が、図1に示される“雨が降ってきた。”である場合には、このコンテンツに位置情報“loc052”が関連付けられているため、処理706により、user001及び位置情報“loc052”が、既知ユーザ位置テーブル900に登録される。なお、処理706を終えると、処理701により選択されたキーワード(単語)を含む、他のコンテンツを選択するために、処理702に移る。
ユーザIDをユーザ位置候補テーブルに登録して、位置情報を初期化する処理707が、設定部400によって実行される。処理707は、選択されたコンテンツ760に位置情報が関連付けられていない場合に実行される処理である。つまり、選択されたコンテンツ760が発信された位置が特定できないということである。そのため、このコンテンツは、図11及び12に示される、発信位置の候補を推定するための処理の対象となり、処理707により、ユーザ位置候補テーブル1000に登録される。そして、後述される図11及び12に示される処理のために、候補となる発信位置の度合いを示す値を初期化しておく。処理707を終えると、処理701により選択されたキーワード(単語)を含む、他のコンテンツを選択するために、処理702に移る。
図8に、実施例のイベント発言テーブルの例が示される。図8に示されるイベント発言テーブル800は、図7に示される処理において作成される情報であって、イベント発言同期が起きやすいイベントを表すキーワード(単語)を含むコンテンツを発信したかどうかを時間帯毎に管理するために、図3に示されるメモリ330又は記憶装置380に格納される情報である。
処理701により選択されたキーワード(単語)は、イベントテーブル600に登録された、イベント発言同期が起きやすいイベントを表すキーワード(単語)であり、このキーワード(単語)を含むコンテンツを発信したユーザが、処理704によって、時間帯毎に、イベント発言テーブル800に登録されている。
なお、例えば、図8に示されるタイムスタンプ“20120401:00時”は、西暦2012年4月1日の0時00分から西暦2012年4月1日1時00分になるまでの期間を表しており、このタイムスタンプ“20120401:00時”においては、イベント発言同期が起きやすいイベントを表すキーワード(単語)を含むコンテンツを、user001、user014が発信していたことが、フラグ“1”により管理されている。
ところで、図8に示されるイベント発言テーブル800では、ある時間帯に、イベント発言同期が起きやすいイベントを表すキーワード(単語)を含むコンテンツをユーザが発信したかどうかを管理するために、フラグ“0”及び“1”により管理しており、その時間帯にあるユーザによって複数回の発信があったかどうかまでは管理していない。これは、後述するが、既知ユーザ位置テーブル900において、ユーザの発言時刻毎にコンテンツの発信位置を管理しているからであり、この発信時刻毎の発信位置を使用すれば、ユーザ位置の候補を統計的に集計できるからである。ただし、実施例はこれに限定されず、イベント発言テーブル800において、コンテンツの発信の有無だけでなく、発信の回数を管理してもよい。
図9に、実施例の既知ユーザ位置テーブルの例が示される。図9に示される既知ユーザ位置テーブル900は、図7に示される処理において作成される情報であって、コンテンツの発信位置を特定されているユーザを管理するために、図3に示されるメモリ330又は記憶装置380に格納される情報である。
図9に示されるように、例えば、user001が、タイムスタンプ“20120502:09時”の期間内に、位置“loc052”からコンテンツを発信したことが、コンテンツテーブル100に管理されている情報を使用した処理706により登録されて、既知ユーザ位置テーブル900に管理されている。
さらに、例示すると、既知ユーザ位置テーブル900では、user014がタイムスタンプ“20120603:23時”の期間内に位置“loc118”からコンテンツを発信したこと、及び、user014がタイムスタンプ“20120401:01時”の期間内に位置“loc118”からコンテンツを発信したこと、が別々に管理されている。つまり、同じ発信位置だとしても、コンテンツが発信された時間帯が異なれば、それらが独立して管理されている。
さらに、例示すると、既知ユーザ位置テーブル900では、user014がタイムスタンプ“20120401:01時”の期間内に位置“loc118”からコンテンツを発信したこと、及び、user014がタイムスタンプ“20120401:01時”の期間内に位置“loc119”からコンテンツを発信したこと、別々に管理されている。つまり、同じ時間帯でも、異なる位置からコンテンツが発信されている場合には、それらが独立して管理されている。
図10に、実施例のユーザ位置候補テーブルの例が示される。図10に示されるユーザ位置候補テーブル1000は、図7に示される処理において作成される情報であって、コンテンツの発信位置が特定されていないユーザの発信位置の候補を管理するために、図3に示されるメモリ330又は記憶装置380に格納される情報である。
ユーザ位置候補テーブル1000では、処理705によって、コンテンツに位置情報が関連付けられていないと判定されたユーザを管理している。例えば、図1のコンテンツテーブルに示されるように、user002は、コンテンツの発信位置が登録されていない。処理707では、user002が、イベント発言同期が起きやすいイベントを表すキーワード(単語)を含むコンテンツを発信していたとしても、その発信位置が関連付けられていない場合に、コンテンツの発信位置を特定できないユーザとして、ユーザ位置候補テーブル1000に登録して管理する。
なお、ユーザ位置候補テーブル1000は、図10に示されるように、登録されたユーザ毎に、発信位置の候補となる各位置が対応付けられており、処理707を終えた時点では、候補となる発信位置の度合いを示す値が、全ての位置について初期化されている。例えば、ユーザ位置候補テーブル1000に、user002が登録された時点では、各位置についての値が“0”で初期化されている。
そして、後述される図11及び12の処理によって、user002がコンテンツを発信する際の候補となる位置が推定されると、その推定された位置について、値がインクリメントされていく。その結果、図10に示されるように、候補となる発信位置の度合いを示す値が、位置“loc001”が“0”、位置“loc002”が“0”、・・・、位置“loc118”が“10”、位置“loc119”が“1”、・・・、位置“loc204”が“1”、・・・のように更新されて管理されることとなる。なお、これらの値を使用して、発信位置が特定されていないユーザの発信位置又は発信範囲を特定する処理が、図14に示される。
図11に、実施例のユーザ位置候補テーブルを更新するための処理の例が示される。図11に示される処理は、図10に示されるユーザ位置候補テーブル1000を更新するために、図3に示されるメモリ330にロードされたプログラムをCPU310が実行することによって実行される。
図11に示される処理が処理1100により開始されると、タイムスタンプを時刻の最小値で初期化する処理1101が、設定部400によって実行される。処理1101では、イベント発言テーブル800を読み出し、タイムスタンプの時刻の最小値を基準にしてタイムスタンプを規格化することで、タイムスタンプの時刻を初期化する。そして、処理1101では、初期化されたタイムスタンプを、タイムスタンプt1150として、メモリ330又は記憶装置380に格納する。
タイムスタンプが[t、t+r)の範囲のデータを取得する処理1102が、取得部410によって実行される。処理1102では、処理1101により初期化されたタイムスタンプに従い、イベント発言テーブル800で管理されているデータのうち、[t、t+r)の時間範囲に含まれるデータを取得する。すなわち、処理1102によって、時刻tから単位時間rの期間に含まれるデータが取得される。例えば、単位時間rが1時間と設定されている場合には、処理1102により取得されるデータの範囲は、図8に示されるイベント発言テーブル800の行毎となる。そして、処理1102では、時刻tから単位時間rの期間に含まれるデータを、イベント発言テーブル800の部分データ(時刻t)1160として、メモリ330又は記憶装置380に格納する。
処理1102に次いで、位置候補を登録する処理1103が実行されるが、処理1103の詳細については、図12に沿って後述する。
単位時間rだけ進める処理1104が、設定部400によって実行される。処理1104では、処理1102により取得された時間範囲に対して、単位時間rだけ進んだ時間範囲に含まれるデータが取得されるように、時間範囲の基準を単位時間rだけ進める。処理1104によって、位置候補を登録する際の対象となるデータの時間範囲が、単位時間rだけ進められることとなる。
データ内の時刻の最大値を超えたかどうかを判定する処理1105が、判定部440によって実行される。処理1105では、処理1104により単位時間rだけ時間が進められた結果、位置候補が登録されていない時間範囲があるかどうかを判定している。そして、データ内の時刻の最大値を超えていないと判定された場合には処理1101に移り、他の時間範囲に含まれるデータに関して位置候補を登録することとなる。他方で、コンテンツ内の時刻の最大値を超えたと判定された場合には処理1106に移り、図11に示された処理を終える。
図12に、実施例のユーザ位置候補テーブルを更新するための処理における処理の詳細例が示される。図12に示される処理は、図11に示される処理1103の詳細例であって、図3に示されるメモリ330にロードされたプログラムをCPU310が実行することによって実行される。
図11に示される処理1102に次いで、時刻[t、t+r)において、コンテンツを発信したユーザを選択する処理1200が、選択部430によって実行される。処理1200では、処理1102により取得されたイベント発言テーブルの部分データ(時刻t)1160に基づき、時刻[t、t+r)において、“1”のフラグが登録されているユーザを選択する。
全てのユーザを選択したかどうかを判定する処理1201が、判定部440によって実行される。全てのユーザを選択したと判定された場合には処理1206に移り、全てのユーザを選択していないと判定された場合には処理1203に移る。
選択されたユーザの位置情報が既知かどうかを判定する処理1203が、判定部440によって実行される。処理1203では、コンテンツテーブル100を参照し、処理1200により選択されたユーザの位置が登録されているかどうかを判定する。選択されたユーザの位置情報が既知である場合には処理1204に移り、選択されたユーザの位置情報が既知でない場合には処理1205に移る。
ユーザ情報を登録する処理1204が、登録部450によって実行される。処理1204は、選択されたユーザの位置情報が既知であると判定された場合に実行される処理であって、処理1200により選択されたユーザのうち、位置が特定されているユーザを、位置情報既知ユーザテーブル1300に登録する。処理1204を終えると、未選択のユーザを選択するために処理1200に移る。
ユーザ情報を登録する処理1205が、登録部450によって実行される。処理1205は、選択されたユーザの位置情報が既知でないと判定された場合に実行される処理であって、処理1200により選択されたユーザのうち、位置が特定されていないユーザを、位置情報未知ユーザテーブル1310に登録する。処理1205を終えると、未選択のユーザを選択するために処理1200に移る。
位置情報が既知のユーザに基づき、位置情報が未知のユーザの位置の候補を更新する処理1206が、設定部400によって実行される。処理1206では、位置情報既知ユーザテーブル1300に登録されているユーザの各々について、処理1102において設定されている[t、t+r)の時間範囲における位置を抽出する。この位置の抽出は、図9に示される既知ユーザ位置テーブル900において、タイムスタンプが[t、t+r)の時間範囲に含まれ位置を各々集計すればよい。そして、処理1206では、位置情報未知ユーザテーブル1310に登録されているユーザの各々について、ユーザ位置候補テーブル1000において、位置毎に、集計された数をインクリメントして更新する。このように、ある時間帯でイベント発言同期が起きたことを利用して、コンテンツの発信位置を特定できていないユーザの発信位置の候補を、発信位置が既知の位置から発信されたと推定し、推定された位置毎に、発信位置の候補を、既知の発信数の集計値を用いて評価する。処理1206を終えると、図11に示される処理1104に移る。
なお、発信位置の候補を評価する場合に、コンテンツに含まれている情報に従い、どの時間帯の既知の発信位置に従って、ユーザ位置候補テーブル1000の値をインクリメントするかを考慮してもよい。例えば、同じ時間帯に起きたイベント発言同期に従って、同じ時間帯の既知の発信位置を候補位置としてもよい。また、例えば、コンテンツが“1時間前の雨の時に外にいた。”であった場合に、発信位置の候補としては、当該コンテンツが発信された時間帯ではなく、1時間前の時間帯のコンテンツとのイベント発言同期を考慮することが好ましい。この場合、1時間前のタイムスタンプが付されている既知の位置に基づき、ユーザ位置候補テーブル1000の値をインクリメントすることとなる。
このように、コンテンツに過去や未来を示唆するキーワードが含まれている場合には、必ずしも同時間帯でイベント発言同期を評価するのではなく、キーワードに応じた適切な時間帯どうしでイベント発言同期を評価し、異なる時間帯での既知の位置を利用して、発信位置の候補を評価することが好ましい。
図13に、実施例の位置情報既知ユーザ及び位置情報未知ユーザの例が示される。図13(A)に示される位置情報既知ユーザテーブル1300及び図13(B)に示される位置情報未知ユーザテーブル1310は、図12に示される処理によって作成される情報であって、情報の発信位置が特定されているユーザと情報の発信位置が特定されていないユーザとを管理するために、図3に示されるメモリ330又は記憶装置380に格納される情報である。
図13(A)に示される位置情報既知ユーザテーブル1300には、処理1204により、処理1200により選択されたユーザのうち、位置が特定されているユーザが登録されている。例えば、user014の位置は特定されているとして、位置情報既知ユーザテーブル1300に登録されている。
図13(B)に示される位置情報未知ユーザテーブル1310には、処理1205により、処理1200により選択されたユーザのうち、位置が特定されていないユーザが登録されている。例えば、user002の位置は特定されていないとして、位置情報未知ユーザテーブル1310に登録されている。
図14に、実施例のユーザ推定位置テーブルを登録するための処理の例が示される。図14に示される処理は、図16に示されるユーザ推定位置テーブル1600を作成するために、図3に示されるメモリ330にロードされたプログラムをCPU310が実行することによって実行される。
図14に示される処理が処理1400により開始されると、全ての位置情報におけるイベント発言を集計する処理1401が、集計部460によって実行される。処理1401では、既知ユーザ位置テーブル900を読み出し、位置毎のイベント発言を集計する。集計された結果、例えば、図15の位置毎のイベント発言の集計テーブル1500に示されるように、位置毎に、イベント発言同期が起きやすいイベントを表すキーワード(単語)を含むコンテンツが発信された数の合計が集計される。
さらに、処理1401では、例えば、この集計数の逆数を、位置毎のコンテンツの発信数の差を考慮する際の重み係数とする。位置毎のイベント発言の位置毎の重み係数1450として、メモリ330又は記憶装置380に格納する。例えば、人口が密度等の違いによって、位置毎にイベント発言の行われやすさがある。後述するが、この差を吸収するために、重み係数1450を計算し、イベント発言数の標準化に使用する。これにより、イベント発言の多い地域の発言数は抑えられ、イベント発言の少ない地域と同等に評価することができる。
一人のユーザの位置候補リストを取得する処理1402が、取得部410によって実行される。処理1402では、処理1206により値がインクリメントされたユーザ位置候補テーブル1000において、一人のユーザを選択し、このユーザに関する位置毎の値を含むリストを、ユーザの位置候補リスト1460として取得する。そして、処理1402では、ユーザの位置候補リスト1460を、メモリ330又は記憶装置380に格納する。
全てのユーザを選択したかどうかを判定する処理1403が、判定部440によって実行される。処理1403は、ユーザ位置候補テーブルに登録されたユーザについて、図14に示される発信位置の推定を行うために実行される処理である。全てのユーザを選択したと判定された場合には処理1409に移り、図14に示される処理を終える。全てのユーザを選択していないと判定された場合には、処理1404に移る。
重み係数及びガウシアンフィルタを適用する処理1404が、算出部470によって実行される。処理1404では、処理1401により算出された位置毎の重み係数1450と、処理1402により取得された位置候補リスト1460に含まれる位置毎の値との積を計算する。そして、処理1404では、この積の値にガウシアンフィルタを適用して、隣接する地域間での集計数の影響を考慮する。そして、処理1404では、重み係数及びガウシアンフィルタが適用されたユーザの位置候補リストを、フィルタ適用後の位置候補リスト1470として、メモリ330又は記憶装置380に格納する。
フィルタ適用後の位置候補リストの平均値を算出する処理1405が、算出部470によって実行される。処理1405ではフィルタ適用後の位置候補リスト1470に含まれる、位置毎の値の平均値を算出し、算出された平均値1480をメモリ330又は記憶装置380に格納する。
各位置においてポアソン累積分布の値を求め、その値が閾値Pより大きい場合に登録する処理1406が、算出部470によって実行される。処理1406では位置候補リスト1470において、位置毎の値が平均値1480からどの程度ずれているかを考慮するために、ポアソン累積分布の値を求める。そして、その求めた値が閾値Pよりも大きい場合に、位置とその値とを対応付けを、各位置候補におけるポアソン累積分布リスト1490として、メモリ330又は記憶装置380に格納する。
ポアソン累積分布リストに値があるかどうかを判定する処理1407が、判定部440によって実行される。処理1407では、各位置候補におけるポアソン累積分布リスト1490において、閾値Pを超える値があるかどうかを判定している。仮に閾値Pを超える値がない場合には、集計したイベント発言が統計的に偶然起きたものであると判定されたということである。つまり、ポアソン累積分布リストに値がないと判定された場合には、このユーザの推定位置を決められないとして、他のユーザについての評価をするために、処理1402に移る。ポアソン累積分布リストに値があると判定された場合には、処理1408に移る。
最大値に対応する候補位置を推定位置として登録する処理1408が、登録部450によって実行される。処理1408では、各位置候補におけるポアソン累積分布リスト1490に含まれる、閾値Pを超えた値のうち、最大値と対応する候補位置を、ユーザがコンテンツを配信する場合の推定位置として、ユーザ推定位置テーブル1600に登録する。なお、処理1408では、最大値に対応する候補位置だけでなく、閾値Pを超えた値に対応する候補位置全て、又は、それらのうちさらに別の閾値を超えた複数の地域など、複数の地域を、当該ユーザがコンテンツを発信する際の推定範囲として、ユーザ推定位置テーブル1600に登録してもよい。
図15に、実施例のイベント発言の集計数の例が示される。図15に示される、位置毎のイベント発言の集計テーブル1500は、図14に示される処理によって作成される情報であって、地域毎のイベント発言の集計数を管理するために、図3に示されるメモリ330又は記憶装置380に格納される情報である。
処理1401により集計されたイベント発言の集計数の例が、図15の位置毎のイベント発言の集計テーブル1500に示されている。例えば、位置“loc052”では、“1023”回のイベント発言があったことが例示されている。
図16に、実施例のユーザ推定位置テーブルの例が示される。図16に示されるユーザ推定位置テーブル1600は、図14に示される処理によって作成される情報であって、情報の発信位置が特定されていないユーザによる情報の発信位置として推定された発信位置や発信範囲を管理するために、図3に示されるメモリ330又は記憶装置380に格納される情報である。
処理1408により登録された、ユーザ毎の推定位置が、図16のユーザ推定位置テーブル1600に示されている。例えば、user002については、推定位置が“loc118”であると関連付けられている。これは、user002が発信したコンテンツは、その発信位置が特定できない場合であっても、位置“loc118”から発信されるとみなすことを表している。さらに例示すれば、user008については、推定位置が“loc010”及び“loc011”であると関連付けられている。これは、user008が発信したコンテンツは、その発信位置が特定できない場合であっても、位置“loc010”及び“loc011”を含む範囲から発信されるとみなすことを表している。
上述の実施例によれば、発信位置が未知の第1情報であっても、発信位置が既知の第2情報に含まれていたキーワードを含み、第2情報と同じ時間帯に発信されていれば、該既知の発信位置から発信されたと推定して、発信位置を付与する。これによって、発信位置を特定するための位置情報が付されていない情報の発信位置を推定して、例えば、地理的な傾向を分析する際の情報量を増やすことができる。
また、第1情報を発信したユーザの発信位置を推定することを、複数の時間帯で行い、これらの結果をまとめることで、情報に当該キーワードが含まれていなくても、このユーザが情報発信する可能性の高い発信位置や発信範囲を推定することができる。