単語クラスタリング
単語のクラスタリングをしています。
文書のクラスタリングが単語の出現(tf*idfとか)を素性にして行われているので、それを転置すりゃ単語のクラスタリングもできんじゃね、と思ってやってみましつた。で、結果がまあ出てはきたんですけど、ふと疑問に思いました。これ、まずいんじゃなかろうか。
転置行列1
単語 | D1 | D2 | D3 | D4 | … |
---|---|---|---|---|---|
W1 | 1.5 | 0.7 | 0.1 | 0.2 | … |
W2 | 1.1 | 0 | 0 | 0.5 | … |
W3 | 2.4 | 0.3 | 0.1 | 0 | … |
W4 | 0 | 0 | 0 | 8.2 | … |
Wnはn番目の単語、Dmはm番目の文書、中のカラムは「文書Dmに出現した単語Wnのtf*idf値」。ベタな文書クラスタリングを転置するとこんな感じになって、これをもとにbayonとかでクラスタリングしました。
このクラスタリングは、言葉で説明すれば「出現する文書が同傾向にある単語同士は似ている」という仮定の下に行われています。重みにtf*idfを使っているので一概にこうは言えませんが、大体これであってるはずです。
さて、では以下のような例が出てきた場合はどうでしょう。
特殊列
単語 | D1 | D2 | D3 | D4 | … |
---|---|---|---|---|---|
W1 | 0 | 15 | 0 | 0 | … |
W2 | 0 | 13 | 0 | 0 | … |
W3 | 0 | 11 | 0 | 0 | … |
W4 | 0 | 12 | 0 | 0 | … |
あるドキュメントにのみ出現する単語ばかりが並んだ場合、これをクラスタリングすると、「似た単語」ではなく「同じ文書に出現してる単語」を取り出す操作にしかならないことが分かります。「同じ文書に出現する単語は似てる」っていう仮定は、さすがに乱暴な気がしますよね。まあ、同じ文書に出てくる単語なので、関連はあるんでしょうけど……
これは極端な例ですが、最初の表にも同じ文書に出現している単語同士の影響は必ずあって、これがノイズになるのか、ノイズになっても無視できるレベルなのか、そもそもノイズにならないのか、判断が付きません。
文書クラスタリングだと、こういう問題は起きないんですけどね。はー、どうしようかな。