クラウドマップで”イノベーション”を目指す

クラウドマップ開発ブログ

カテゴリー‘アルゴリズム’

Google App Engine で地理データ処理

2008 年 8 月 18 日 月曜日

今日は、Google App Engine(GAE)の地理データ処理について書きます。GAEによるクラウドマップのAPI化を試みているのですが、その中で多少特殊なテクニックが必要とされる部分がこれでした。

まず目的は、x,y,z (latitude,longitude,elevation)で表される点の集合を地理的な範囲で絞り込むことです。具体的には、xmin<x<xmax, ymin<y<ymax,zmin<zの範囲の中にある点集合を取り出すことです。

普通のデータベースなら何の問題もないのですが、GAEの場合、範囲指定が一つの変数にしか使えないという制約があるので、この絞込みを素直に実行できません。つまり、xmin<x<xmaxのみならいいが、それに加えて, ymin<y<ymaxやzmin<zなど行うことはできないということです。

結論から言うと、xmin<x<xmax, ymin<y<ymaxの絞込みはgeohashと呼ばれるもので、zmin<zの絞込みはListPropertyで行うのがベターだと思います。

■ GAEでgeohashがいいというのはこちらを参考にしました(googleも採用しているそうです→ソース)。geohashは、ある領域を011011111111000001000001などのビット列で表し(それをBase32等でエンコードし)たものです。奇数番目のビット列(0111110000000)がx座標を表し、偶数番目のビット列(101111001001)がy座標を表します。それぞれのビット列の、左端のビットから、全体領域を2分割していったときに左(上)にあるか右(下)にあるかを示し、徐々に細かい粒度の領域を指し示すようになります。図で表すと次のようなものです:

最初の2×2分割を表すのに00,01,10,11というビット列が使われ、次の4×4分割を表すのに、後ろ2ビットが新たに追加されます。

この表現方法でうれしいのは、例えば、011011111111000001000001としたときに最初の01という大まかな領域にあることが分かることです。そして、01の領域の内部を表すには、01≦pt<10とすればいいことです。これにより、x座標の絞込みとy座標の絞込みが同時に行え、GAEの制約を回避することができます。制約がなくても、速度の面から見てこのような方式は有用だろうと思います。

■ さて、geohashでめでたくx,y座標の絞込みはできたのですが、クラウドマップではまだz座標の絞込みをする必要があります。ある高さ以上の点を表示したいというものです。このような絞込みはgeohashのような分割木的な絞込みとは様相が異なります。ここではListPropertyによってその制約を切り抜けました(調査不足で他にこの手の問題を扱っているものが見当たらなかったので確立された方法かどうか分かりません)。

ListPropertyはGAE特有のデータ型で、リストを格納できます。さらに特殊なのは、where句で例えば、list_data = 2とすると[0,1,2]とか[1,2,3,4]など、リストの中にどれか一つ”2″があれば選択されるようになることです。つまり、”In”クエリ的な働きをします。z座標の絞込みはこの特性を利用します。

方法はまず、z座標をn分割します。そして、第1の層にある点をlayer=[0,1,..,n-1]、第2の層にある点をlayer=[1,2,...,n-1]、第3の層にある点をlayer=[2,3,...,n-1]、として格納します。そうすれば、layer=1と指定して第1、第2の層の点を、layer=2と指定して第1、第2、第3の層の点を取り出すことができます。この絞込みは範囲指定でなくイコールなので、geohashの範囲指定と同時に使うことができます。連続的なz座標の絞込みは、この離散的な絞込みの後、GAE本体以外で実行させても問題ないでしょう。

はてな関連エントリーが気になる

2008 年 7 月 16 日 水曜日

クラウドマップを開発していると否が応でもはてなブックマーク(はてブ)の動向に詳しくなる今日この頃です…

最近、気になるニュースといえばはてブに関連エントリーがついたことでしょうか。クラウドマップ等のサイトのはてブをチェックしているとなにやらリンクが増えていて、「結構引用されてきたのかな」と思ったら、そうではなく、関連エントリーが表示されていました。よく見るとenhanced by Preferred Infrastructureの文字が。Preferred Infrastructure (PFI)とは東大系のベンチャーで、スーパープログラマーの精鋭が集う会社であると認識しています。これは面白そうな事業提携です。いちユーザーとして、非常に期待します。

関連エントリーの精度はなかなかだと思います。

クラウドマップでは、5個の推薦の以下の3つが特に地図検索という意味で関連が深かったです。
地図上を歩くようにウェブを探検できる『Walk 2 Web』
Goo Labのキーワード地図:BLOGRANGER TG
タグマップがあるquintura

(残り2つはリンク切れと、GooLabの5W1H検索でした。また、ブックマークがあまりついてないエントリーだとまだ精度は低いようですが、これはしょうがない気がします。)

開発者ブログ()によると、「結局ページとタグの関係を用いるのが一番精度が良いというのに行きつきました。」とあるように、エントリー文章内のキーワードを基にするのでもなく、通常のユーザーベースの連想検索(連想検索はおそらく協調フィルタリングやベイジアンセットのようなものでしょうか…)でもなく、タグベースの連想検索を用いているようです。この点はクラウドマップと同じで、入力データとしてはページ×タグの疎行列データになっている気がします…。やはり「タグ」というのはかなり特殊(かつ有用)なデータ構造を有していると感じます。

レコメンドエンジンは日本では、NTT野村総研ALBERTチームラボなども開発しており今後の展開が気になるところです。

SBM研究会に参加 したかった…

2008 年 7 月 14 日 月曜日

ソーシャルブックマーク(SBM)の研究や動向に関するセミナー「SBM研究会」が東工大にて先日行われたようです。存在を知ったときは、すでに定員が埋まってしまっていたので参加できませんでした。ただ研究会の資料が公開されており、また、様々なブログで当日の様子が書かれていたので、大体の内容は把握することができました。これは、主催者が「SBM研究会の感想をBlogで書いて頂き、[SBM研究会]というタグでSBMでブックマークする」ことを促されたおかげでもあります。

ちなみに、クラウドマップでも[SBM研究会]というタグが現れています。

[sbm]や[ソーシャルブックマーク]というったタグと近いのが分かります。(なぜかwindowsタグも近くにありますが…これは周りのタグとのバランスでたまたまそうなってしまったと考えられます)。この領域が全体のマップのどの部分にあるかを示したのが次の図です。

大きくは、[web]や[はてな]といったタグの近くに、[SBM研究会]や[SBM]タグがあります。最近発売されたiphoneは右上のほうにあってそれなりの領域を占めています。

研究の話では、東工大の方々のプレゼン資料がよくまとまっていて興味深かったです。面白そうな論文が多数紹介されています。もともと私は違う分野(脳関係)出身なので、この分野のいいレビューになりました。関係ないですが、SBMに脳研究を絡めると面白そうな気がします。ちなみに、プレゼンの中で、タグの多義性(Polysemy)と同義性(Synonymy)という問題が取り上げられていますが、クラウドマップでは、タグをマップ上の複数の点で表すことによって多義性を考慮し、似たタグが近くに来ることによって同義性を考慮しています。アルゴリズムとしては因子分析を発展させた感じです。

まだまだ奥が深いSBM。今後も動向に目が離せません。

競合?

2008 年 6 月 10 日 火曜日

今日、はてなを見ていたら気になる面白いサービスがありました。

Hatenar Map

http://hatenarmaps.com/

はてなダイアリーのユーザーを地図的に表現しているとのことです。俯瞰的に見れるところや、ズームして拡大するところなど、クラウドマップと共通するところがあります。ネタとして作ったということですが、かなり完成度が高いです。

どのような技術が使われているかも開発者のブログで述べられています。

http://d.hatena.ne.jp/kaiseh/20080609/1212980260

非階層クラスタ(k-means)→階層クラスタ→ボロノイ図作成という手順となっているようです。個人的に、ボロノイ図作成に関しては疎いのですが、k-meansや階層クラスタは昔いろいろ格闘した覚えがあります。基本的に、これらのクラスタ手法は入力ベクトル同士の「全体的な類似度」(例えばユークリッド距離など)を基に似たもの同士をまとめるものです。ちなみに、クラウドマップは「全体的な類似度」ではなく「部品要素毎の類似度」でまとめています。一つの入力ベクトルは部品的に分解されて、マップ上の複数の点として表現されます。本屋さんで例えると、一つの本が複数の書棚にあるようなものです。この特性によって、より多様なデータ構造がマップ上に表現されます。

このサービスに対する反響にあるように(例えば:http://d.hatena.ne.jp/qaze00/20080609/1213024037)、WEBを全貌できるサービスは望まれている思います。クラウドマップでそのような理想が実現できればと思っています。