« 一万円にどうして価値があるか分からない?ははは、バカだなあ。一万円くれたら教えてやるよ | main | 2005年3月のピックアップ »

2005年05月29日

ソーシャルブックマーク考3 タグの構造について(続編)

ソーシャルブックマーク考2 タグの構造についての続き。

一本で書く予定だったんだけど、へんてこ上下関係判別ロジックの説明で冗長になりすぎました。一日休憩を挟んだだけで、書こうとしてたことが、はてなブックマークや、トラックバックで指摘されまくりで、書くことがなくなってきました(笑)。

また、前回のコメント欄でyuichiro氏から、「はてなダイアリーキーワードが以前ツリー構造だった」というご指摘をうけました。これ僕知りませんでした。これについてはもうちょっと調べてみます。

で、本題。とりあえず前回の話をまとめると。

・タグが独立してるのはつまらんし、不便なのでなんとかしろ。
・提案の1つとしては、上下階層構造があるよ。
・上下階層構造も「階層のぶれ」対策が必要だよ、「両者参照」や「並列な関連語句」もムズイよ。

ということだった。

では、他にどんなやり方があるかというと、幾人かの方が指摘されてるが、まっとうなやり方としては「タグへのタグ付け」や「タグのネットワーク化」が考えられる。

まず、「タグへのタグ付け」というのは文字のとうりだ。「犬」というタグそのものに対して、「四本足」とか「哺乳類」とか、関係がありそうなタグを貼り付けていく方法だ。定義文から自動抽出という形だけど、ちょうど現在の「はてなのキーワード」の形がそれに近い。

これはこれで有効だと思うけど、ここまでやるならもう一歩進めたくなる。いっそのこと「タグのネットワーク化」だ。というかタグをタグで定義する時点で十分ネットワーク化だが・・ 
だから正式には「重み付きの有向グラフ化」となる。

グラフというのは、要素(タグ)と要素がお互いに連結されたデータのことだ。

000201_1.jpg

タグの例ではないのだが、イメージ的にはMOVIE DBや、Valence(デモ)なんかを見ると実感しやすいと思う。

「重み付き」というのは、タグとタグの間にどれくらい「関連性があるか?」のパラメータを設けるという考え方だ。例えば、全てのタグは相互に結合度0(無関係)~1(同義語)といった値を持つことになる。

駅スパートの乗り継ぎとか、シミュレーションゲームの移動範囲の計算はこんな感じの構造になっている。で、この結合度も本文の文章を解析したり、各ブクマにどんなタグがつけられてるかを調べれば計算できる。

また上の図には乗っていないけど「有向」というのは、A→Bの関連性(結合度)は0.8なのに、B→Aの結合度は0.5とか、向きによって関連性がことなる場合に用いられる。これがあると「船の上流~下流の移動時間」や「片思い」といった平等でない関係を示すことができる。

タグで言うならば、「ロボット」を検索するときに「ガンダム」もヒットして欲しいけど、「ガンダム」検索するときに「ロボット」は引っかからなくいい、とかだ。

前述の「タグによるタグ付け」というのも、結合度0か結合度1かのデジタルな有向グラフと言ってもいい。では、なぜわざわざ重みをつけるのだろうか。

この「結合度」を持つ最大のメリットは、単なる類似検索だけでなくて「結合度50」で検索といった、ファジーな検索ができることだ。例えば「動物」と「犬」の間の結合度が0.5、「犬」と「チワワ」の結合度が「0.7」だった場合。「動物」と「チワワ」の関係性は

0.5*0.7=0.3

という風に求められる。結合度の高いものに絞り込んで検索すれば、動物一般の話題のみが、検索をゆるくするとチワワだとかヨークシャテリアといった、よりニッチな話題もヒットするようになる。こうすれば検索での絞り具合で、表記の揺れや類義語だけを吸収して結果をだしたり、その下位概念を全て含む検索をしたり・・・といったフレキシブルなデータ検索ができる。

順当に考えれば、ゆっくりとタグはこの方向に進んでいくのだと思う。検索や分類という面では、タギングにグラフを導入することで、大きな問題の大部分は解決できる。

しかし別の側面として、タグにグラフを導入する場合、関係性の可視化が問題となる。というのも複雑に相互関係を持つタグを可視化しようとすると、2次元空間、特に左上から右下に流れるHTMLのテキストで表現するのは難しいからだ。またこれは同時に数の問題でもある。100個のタグの関係性を示そうとした場合、100*99で最大9900の関係性が生まれるからだ。ここまでくるとHTMLだけで一瞥できる表現するのは不可能に近い。Flashを使うにしても40個程度であきらかに処理の限界である。

自分の中でタグはインフラだと思っているので、できれば可視化でJavaやFlashに依存しなければならない、というのは避けたい。100歩ゆずってAjaxで実用レベルにインターフェースが作れなければならないと思う。まぁ可視化の部分なのでそこまで深刻な話題ではないけど。ただ、今回は「タグの構造について」であって、可視化を論じると文章が長くなりすぎるので、それはまたの機会に。


というわけで、孤立したタグ→階層構造→グラフと順当にタグの可能性を探ってきたわけだけど、「もっとエキセントリックなタグ構造作ろうぜ!!」とか煽っておきながら、結論がグラフでは定番すぎてあまりに申し訳ない。
ので、次に自分が考えてた、もうちょっと思いつきでエキセントリックなネタでもちょっと書いてみようかと。

続く・・・ というか、いくら書いても終わらないのですが・・・

投稿者 Taka : 2005年05月29日 19:06

book

dotfla.gif

bookmark

はてなブックマークに追加

del.icio.usに追加

trackbacks

this entry's trackback URL:
http://www.fladdict.net/cgi-bin/mt3/mt-tb.cgi/186

comment

ちょうど夏期プロジェクトの準備稿でタグの事を調べてたところでした。
「タグへのタグ付け」はmetonymyで「重み」はhyponymyかな?
meronymyというのもあるので、それをタグ要素に入れたら便利そうです。

by manami : 2005年05月31日 02:32

色んな人に突っ込まれると面倒なので今まで遠くから眺めてましたが、いくつか。

・誰が言語構造を定義するか。
 大変過ぎます。特にメッシュ型に言語構造を定義して、
 それに重みまでつけるなんて、洒落にならない作業です。
 かといって不特定多数のボランティアに任せると、
 個人の価値観の違いから、全く使い物にならないものになります。

・上位語下位語と関係語はそれぞれ別物で、
 どれかを実装するなら、いっそ全て実装してしまうべきです。
 少なくとも、上下関係と参照関係を一緒にしてしまうと、
 ただただノイズだけが増える無意味な仕様になります。

・誰が言語構造を定義するかとかぶりますが、
 専門分野が違うと、しばしば同じ言葉でも全く意味が変わります。
 重み付けをする場合、そういった語の定義の差はどこで吸収するのでしょう?

批判ばかりになってゴメンナサイ(つωτ)

言語の定義の例はこんなのがありますよ。
古いものですが、検索用に定義されたものなので、
非常に簡素かつ網羅的で、完成されています。
http://jois.jst.go.jp/JOIS/html/thesaurus_index.htm

by anitasun : 2005年06月01日 16:11

>ちょうど夏期プロジェクトの準備稿でタグの事を調べてたところでした。
「タグへのタグ付け」はmetonymyで「重み」はhyponymyかな?
meronymyというのもあるので、それをタグ要素に入れたら便利そうです。manamiさんもタグやってるんすねー。情報共有しましょう。最近manamiさんのブログが回転しはじめたので楽しみっす。

>anitaさん
>誰が言語構造を定義するか。
メッシュの人力定義はほぼ不可能です。僕もそう思います。やったら死にますよね。結論から言っちゃうと、階層構造から先の世界は自動化するしかないと思います。考2~3は「これがよい」というよりは、主な手法の特紹介と、長所短所の洗い出しとといった感じでしょうか。

上下構造もそうですが、そもそも集合知で厳密な定義を実装するのは「はなから無理な問題」だと思ってます。

むしろ手動にしろ自動にしろ、フォークソノミーは最終的に「実用に十分な構造」とか「厳密な定義より、広く認知されてる定義(なので上下が逆になったりすることもある)」といったユルい所に落ち着くと思います。僕は以前、ここを指して衆愚化とか言ったのですが、

http://www.fladdict.net/blog-jp/archives/2005/04/post_25.php

最近はゆるくても、間違った認識でも、しっかりと可視化されればそれで意味があるのかなぁ、と思うようになってきました。


>専門分野が違うと、しばしば同じ言葉でも全く意味が変わります。
ここは検索エンジン全般が持つ最大の課題ですよね。いかにして文脈を読み取るかという奴。これはある程度対応することは可能だと思うので、それは4話で。

という感じです。コメントありがとうございます。

by Taka : 2005年06月01日 20:54

コメントしてください




保存しますか?