kookleの階層構造作成アルゴリズムをひらめいた

今まで、いかにも適当なヒューリスティクスに従ったアルゴリズムで階層構造を作っていたわけですが、もうちょっとまともな、数学とかのアイデアをベースにする方法をふとんの中で考えてて思いついた。


詳細は言えないけど、今までは、2つのタグのペアでの共起頻度しか見てなかった。つまりスカラ。


で、それだと

距離空間の条件


非負性(半正定値性): d(x, y) ≥ 0,
同一性(非退化性): d(x, y) = 0 ⇔ x = y,
対称性: d(x, y) = d(y, x),
三角不等式: d(x, y) + d(y, z) ≥ d(x, z)

距離空間の定義の4つ目の三角不等式が成り立たないので、ベクトル空間でのクラスタリングとかは多分うまくいかない

ex) d(犬,動物)+d(猫,動物) >= d(犬,猫) という関係は一般に成り立たない


そこで、全単語との共起頻度を基底としたベクトルで各タグの属性を表現すれば、上の条件を満たすんじゃないかと。
ex) 犬 = (d(タコ,犬),d(本,犬),d(猫,犬),・・・・・) = (20,5,70,・・・・)


で、これで
http://ocw.u-tokyo.ac.jp/course-list/engineering/applied-acoustics-2005/lecture-notes/D2-Clustering.pdf

階層的クラスタリング
とかをやれば、(゚д゚)ウマ-な階層構造が得られるんじゃまいか?
他の各種ベクトル空間ベースのいろんなアルゴリズムやら知見が使えるようになるし。主成分分析とか。


#確率とか統計ベース、オントロジやらセマンティック系、のアルゴリズムはよう分からん。情報探し方もよう分からん。


と。ガイシュツ?


あぁー、rubyじゃなくて、Javaで計算部分を書き直さないと計算が終わらなそうだなぁ。