[掲示板へもどる]
一括表示

  [No.1341] 類似度(語、文脈ベクトル) 投稿者:油山  投稿日:2013/05/05(Sun) 09:46:27

樋口先生、

油山と申します。
掲示板で勉強させていただいております。

類似度(語、文脈ベクトル)について、教えていただきたいことがございます。

類似度の計算には、Jaccard係数だけでなく、相関係数、コサイン類似度、相互情報量など色々とあることがわかりました。
(連休は暇でしたので)計算方法を勉強して、手持ちのデータで、これらを計算して比較しました。

KHcoderでは、以下の方法が推奨されていると理解しました。
・語の類似度では、Jaccard係数を使う
・文脈ベクトルの類似度では、Jaccard係数ではなく、相関係数を使う

なぜ、このような使い分けがよいのでしょうか。
よろしくお願いいたします。


  [No.1342] Re: 類似度(語、文脈ベクトル) 投稿者:HIGUCHI Koichi  投稿日:2013/05/05(Sun) 13:50:16

こんにちは、樋口です。書き込みありがとうございます。

> KHcoderでは、以下の方法が推奨されていると理解しました。
> ・語の類似度では、Jaccard係数を使う
> ・文脈ベクトルの類似度では、Jaccard係数ではなく、相関係数を使う

どのあたりから、そのように読み取られたのでしょう?

間違っているというわけでもないのですが、明確にそのように書いたかなぁと
いう気もいたしまして...

> なぜ、このような使い分けがよいのでしょうか。

油山さんは、なぜだとお考えになりますか?


  [No.1343] Re: 類似度(語、文脈ベクトル) 投稿者:油山  投稿日:2013/05/05(Sun) 15:18:56

樋口先生、

お休みのところ、ご回答をありがとうございました。
以下、私の考えを述べさせていただきます。


1.類似度の使い分けの理解

> > KHcoderでは、以下の方法が推奨されていると理解しました。
> > ・語の類似度では、Jaccard係数を使う
> > ・文脈ベクトルの類似度では、Jaccard係数ではなく、相関係数を使う
>
> どのあたりから、そのように読み取られたのでしょう?
>
> 間違っているというわけでもないのですが、明確にそのように書いたかなぁと
> いう気もいたしまして...


以下のように、理解しました。

(1)語〜語の類似度

KHcoderではJaccard係数で提供されているからです。


(2)文脈ベクトル同士の類似度

掲示板には大量の情報があり、拾い読みをしている状況ですので、誤った理解をしている恐れがあります。

・[No.887] Re: 「抽出語」×「文脈ベクトル」表を使った共起ネットワ-ク
 (中略)
最後に、「# 類似度計算」の部分を次のように変更します。
Jaccard係数ではなく、相関係数を指定しています。



2.類似度の使い分けについて

> > なぜ、このような使い分けがよいのでしょうか。
>
> 油山さんは、なぜだとお考えになりますか?


(1)語〜語の類似度

Jaccard係数を採用する理由として、2つ考えられます。

1つは計算コストです。
他の方法と比較して単純な計算方法ですので、大規模データでも計算できるという利点があります。

もう1つは、ミスリードする恐れのある情報の排除だと思います。
出現の有無が全く逆(一方が1の場合、他方は0)をもつ任意の2つの語では、
Jaccard係数では0になりますが、
相関係数係数では-1にはなりませんし、コサイン類似度も0にはなりません。
相関係数係数やコサイン類似度では、グラフのエッジの重みの閾値を小さくした場合、エッジが生成される可能性があります。
このような場合を排除するために、Jaccard係数が採用されていると思います。


(2)文脈ベクトル同士の類似度

以下のスレッドで、以下のように記載されています。
・[No.1094] Re: 文脈ベクトルの数値の意味について
> 文脈ベクトル
 クラスタ-分析・MDS・共起ネットワ-ク・自己組織化マップなどに利用するためのものです。

これから理解したことは、
ベクトル全体としての類似度のためには、距離を用いる必要があると思います。
相関係数、コサイン類似度は、これに適している尺度だと思います。

このように理解しました。
よろしくお願いいたします。


  [No.1344] Re: 類似度(語、文脈ベクトル) 投稿者:HIGUCHI Koichi  投稿日:2013/05/05(Sun) 20:55:07

こんにちは、樋口です。

ご丁寧にありがとうございます。強いて訂正・補足すべき点もないくらい、ご
理解をいただいているのではないかと思います。

ただ、この掲示板は比較的初心者の方もご覧になっているかと思いますので、
一応、私なりの説明を以下に書かせていただきます。

■「語の類似度ではJaccard係数を使う」ことにつきまして

語Aと語Bのどちらも出現していない文書(0-0対)がたくさんある場合でも、J
accard係数はそうした文書を無視してくれます。こうした文書(0-0対)がた
くさんあったからといって、語Aと語Bが類似しているとは見なさないのが、Ja
ccard係数の良いところだと考えています。

漱石「こころ」の例ですと、「段落」単位で計算する場合、データは0-0対を
多く含むスパース(粗)なものになります。この場合には明らかにJaccard係
数が適しています。

一方で「章(H2)」単位で計算する場合、データはそれほどスパースではなく
なります。また、Jaccard係数は語が出現しているかどうか(0と1で)しか見
ませんが、章くらいの長い単位になると、語が1回出現していたのか、10回出
現していたのかを区別して計算できた方が良いでしょう。この場合にはJaccar
d係数よりもユークリッド距離やコサイン係数が適しているでしょう。

※共起ネットワークはJaccard係数のみ対応ですが、クラスター分析やMDSでは
ユークリッド距離・コサイン係数を選択できます。また自己組織化マップはユ
ークリッド距離のみ対応となっています。

ユークリッド距離とコサイン係数の選択は、増減傾向が似ているかどうかだけ
を見るか(コサイン係数)、サイズの差までも見るか(ユークリッド距離)と
いう方針次第です。テキスト分析の分野ではコサイン係数の方がポピュラーか
と思います。

以上のようにデータによる向き不向きがあります。ただ、テキストデータを扱
う場合には、データ行列がスパースになることが多く、この場合にはJaccard
係数が適していると考えます。

■「文脈ベクトルの類似度では相関係数を使う」ことにつきまして

せっかく時間をかけて文脈ベクトルを計算したなら、データを0-1でしかみな
いJaccard係数を使うのはもったいないですね。数字の大小を見てくれる係数
を使うべきでしょう。

数字の大小を見てくれる係数として、ユークリッド距離かコサイン係数かは上
述の通りの判断となります。なお相関係数はこの2つのうちコサイン係数と似
た結果になるでしょう。相関係数かコサイン係数かどちらを使うのかというこ
とについては、まぁ、お好きな方をお使いください。

以上のような、Jaccard係数と0-0対のことや、ユークリッド距離はサイズ差も
見るといったことについて詳しくは、下記書籍が分かりやすいです。

Romesburg, H. C., 1984, Cluster Analysis for Researchers, Robert E. Kr
ieger Publishing Co. Inc.(西田英郎・佐藤嗣二訳, 1992, 『実例クラスタ
ー分析』 内田老鶴圃)