2011年12月9日金曜日

集合知プログラミングの勉強会に参加してきた

「集合知プログラミング」の勉強会に参加してきた。
人生初の勉強会、しかも初参加なのに最終回というw
内容は全体のおさらいということで、
いろいろなアルゴリズムをざっくり見て特徴を知ることができた。
ただ、きちんと自分のものにするには、しっかり本を熟読する必要を改めて実感。

でも、その前にPythonを勉強したいと思った。
「集合知プログラミング」はPythonでコードが書かれていて、
今のところ雰囲気で読んでるけど、アルゴリズムを相手にしている以上
きちんと理解して読まないと、穴や抜けが出てしまう。
善は急げでAmazonでPythonの入門書と「入門 ソーシャルデータ」を購入。
……また”積ん読”が増えてしまったような気がするw

次回以降は「入門 ソーシャルデータ」の方を扱っていくようで、
そちらにもなるべく参加したいと思っている。
集合知しかり、DHWしかりで「データを有効活用する」って
考え方は昔からあるし、その恩恵を日々受けているわけだけど、
そこから情報として価値を引き出すのは、なかなか難しい。
でも、情報処理の醍醐味って結局はそこだから、
ソーシャルとかビッグデータといったはやりに囚われず、
しっかりとみにつけていきたいところ。

2011年12月7日水曜日

Google App Engine で動く全文検索ライブラリを作成

Google App Engine上で全文検索はいろんな人が試しているようだが、
汎用的なライブラリとかを作っているひとがいないので、
自分でライブラリを実装してみた。
目指したのは、シンプルなインターフェース、メンテナンスフリー、そして高速性。

主な特徴は以下のとおり。
  • 全コードフルスクラッチで作成(だいたい2週間くらい)
  • Luceneライクなクラス・インターフェース
    ※あくまでライクなだけ、クラス名とか概要を参考にしただけなので、実際別物
  • 基本機能部分は抽象化されているので、継承させることで簡単にカスタマイズ可能
  • 内部でSlim3を使用している。(使わなくても実装できたと思う)
  • 形態素解析器にGomokuを使用。
    N-Gramはアナライザ作ってないけど、作ればN-Gramでもインデックス作成が可能
  • コンポジットインデックスを使わない。(インデックス爆発しない)
    エンティティグループとシングルプロパティインデックスだけ使用
  • インデックスの作成・削除は任意のタイミングででき、最適化とかは不要
  • 動作は結構早いっぽい。まだ10KB程度しか試してないけど。大体20ミリ秒くらい。
  • GAEのキーを内部に持つので、インデックス自体が大きめ
  • インデックス作成時にDatastoreに書き込みまくりでコスト高め
  • 読み込みは然程でもない。(エンティティグループが効いてる?)
  • 検索には AND OR NOT と ( ) が使用可能。
    ぐちゃぐちゃな条件でもそれなりに解釈する
もうちょっとコードがまとまったらサンプルサイトをアップする予定。
…Luceneライクといってるけど、実はLucene使ったことがない……w