辻井研での演習が終わったので、まとめ。
お題は「潜在的意味解析(LSA)を用いた柔軟な情報検索」。
統計的手法を用いることで、たくさんの文書から人間界にある本質的な「意味」を検出して、それを通じて検索したり、類似文書を探したり、単語を分類したり。
作業の多くは実は数値計算。行列をうにょうにょする作業が主だった。そして、分かち書きとか、大規模な文書をメモリを少ししか使わずに扱うとか、Sparse行列を上手に扱うとか、検索結果評価用ツールを使うとか・・・その辺=LSAと直接は関係ないところでだいぶ時間を使ってしまった。
まぁ、自然言語処理入門としては、あれやったりこれやったりで有用だったとも言えるのだが、その分応用っぽいものをやる時間がなくなってしまったと思うと残念。あ、時間がなかったのは、週何回も飲み会に行ったりしていたのが原因か?
LSAは、単語と単語の関係、文書と文書の関係については本質的に何かが向上する可能性を秘めていそう。それに対し、単語と文書の関係については、ノイズ除去程度の意味しかない。このことに、演習のかなり最後に近い段階で気づいた。これは、もっとLSAの意味をよく考えておけばよかった。実装に目が行きすぎていたかも。
単語と単語の関係といって思いつくのは単語分類だが、単語を上手に選んで数を減らして、それをかなり高次元のLSAで処理すればいい結果がでるのかもしれない。
あと、途中から単語の重み付けに力を注ぎすぎたかも。確かに単語の重み付けは重要だし、ある程度までこれをチューニングしないと検索結果がまともに評価できるものにはならない。でも、baselineとかSaliencyを使うやつは面白そうだったのでつい目が行ってしまったが、演習のあとでよかった気も。
blogの検索とかは面白そうだが、LSAがこれに役立つ気は正直しない。精度はよくなるかもしれないけど、計算が増えすぎる気がする。
となると・・・
Saliencyを使って単語の重み付けをして重要語だけを取り出して、LSAで単語のクラスタリングをすれば、心残りのものはすべて達成されるのか。 どこかでやれる時間あるかな?
日記書いてなかった。まずは理由を説明しよう。
日記をN日書かなかったとしよう。その次の日に日記を書くためには(N+1)日の中で一番の大事件が起こらなければ書いてはいけないような気がする。
こういう事が繰り返されると。日記の更新は停止する。Positive Feedbackなのだ。
GoogleMapsがニュースをにぎわせていた頃は、あまり気にしてなかった。一応使ってはみたが、「あー。滑らかだねぇ。でもうちの周りは載ってないからいいや」と思って閉じてしまった。
GoogleMapsで衛星写真も見られるというニュースを読んだときも、「あ。そう。」くらいにしか思っていなかった。
で・・・今回Ajaxについて調べる過程で、GoogleMapsで衛星写真を表示させてみた。操作性などを試すだけのつもりだったが、とても面白く、1時間くらい没頭してしまった。
まずは、サンフランシスコのゴールデンゲートブリッジを発見。次にHollywoodの看板を探したが、上からだと見にくいのか、見つからず。次にホワイトハウス発見。横にあるはずのペンタゴンが見つからず・・・と思ったらモザイクになっている部分発見。きっとこれだろう。・・・
Googleは実世界の地理をも取り込んで、そしてインデックス(=住所)で検索できるようにしてしまった・・・。どこまでいくんだろう?と考えると、結構恐い。
Webサービスへの興味再燃・・・というわけでStrutsについて調べてみた。
世の中にこんな便利なものがあるとは・・・。PerlでCGIを書くなんて前世紀の遺物だったと知りました。
まだ全体像を把握し切れていないが、HTMLを書く際にの部分を専用の構文で書いておき、その内部の処理はJavaで書く。で、その2つを設定ファイルでつなげば、あら不思議。Webアプリの出来上がりというわけです。
内部の処理が簡単で、表示部分が主ならPHPとかの方が簡単そうだけど、内部でもしっかり処理をするならやっぱりコンパイルする言語の方が安心。 Javaで書けるなら、Eclipseで書ける。JUnitでテストできる。そして・・・実行時にはJITによってPerlスクリプトとかとは比べ物にならないくらい高速に動作すると期待できる。すばらしい!
Unno氏作成の対戦サーバが
./configure
make
でコンパイルできてなんともかっこいいので、autoconf&automakeの使い方を調べてみた。
1.Makefile.amにファイルを書く
2.automake -a
3.autoscan
4.autoconf
という感じみたいですね。Makefileを書くのがめんどくさい派のぼくとしては、何とも便利そう。
個人的には、boostの有無を調べたい事が多そうなので、その辺のm4スクリプトとかを探してみよう。
サークルオリに昼過ぎから行ったが、あまり働かなかった。
昔は勧誘のコツとか、話の進め方とかいろいろあった気がするが、もう忘れてしまった;でも、今日はそれを修行しようと思うほどは・・・新入生がいなかった。残念。
夕方からお花見をしようと言うことになったが、さすがに身元確認をしないと入れないような他大(しかも女子大)の中で騒ぐのはどうか?ということで、大学の外で。
でも、風は吹くし、日は落ちるし、寒かった・・・
映画を見てきました。前回見に行ったのはCPU実験の前くらいかな?
微妙に精神病の実業家が、いろいろ技術的な夢を実現させていくお話。お話というか・・・実話。
でも、自分が「これがあったらいいなぁー」って思う物に、自分のもてるリソースをじゃんじゃんつぎ込んでしまうっていう姿勢は、なんか親近感が沸く。
精神病が困難一般を描写していると考えるのもありだが、それとは別に飛行機の失敗や政治問題などの困難もあるので、精神病を自分の内面的こんなんととらえるのが妥当だろうか。
個人的には、見ておいて損はないと思う。
バイト先でプログラムを書くも、遅くてたまらない。そもそもJavaでアニメーションしようというのがムリなんだ!!といいたい気もするが、だからあきらめるというわけにもいかない。
で・・・とりあえずプロファイルリングでもするかと思ってツールを探してみると・・・あるじゃないですか。Eclipse Profiler。
便利すぎです。これ、リンク先の図を見てもらえれば分かると思うが、非常に見やすい画面で、しかもEclipseに統合された形でお手軽に利用できる。気に入りました。そもそも速度を気にするようなソフトをJavaで書くというのは・・・(以下略 というのもあるけれど、便利は便利。
早速使ってみた結果・・・Graphics.drawOvalに実行時間の65%が取られているじゃないか。物理シミュレーションのソフトなのにCPUパワーのほとんどを描画に使っているとは・・・
どうしたものやら;