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

  [No.886] 「抽出語」×「文脈ベクトル」表について 投稿者:袋井  投稿日:2011/12/18(Sun) 20:38:54

樋口先生さま

袋井と申します。

以前に、共起ネットワークについてご質問をした際には
ご丁寧にご教示していただき、ありがとうございました。


先生にお聞きしたいことがございます。
よろしくお願いいたします。

以下の2つの表
(1)「文書」×「抽出語」表
(2)「抽出語」×「文脈ベクトル」表
の意味合いについては、理解しています。

(2)は、注目する語の文脈窓を意識した「文脈ベクトル」を作成しており、
とても良いアイディアだと感心しました。

(2)へのSOM適用についても、意図を理解できています。
(SOMの原理、SOMマップ読解の留意点とU-MTXについても一通りの知識はございます)


貴重な(2)の活用方法を考えています。

抽出語の共起ネットワークでは、(1)を用いて類似度の計算、閾値に基づく2値の隣接行列化、
Rパッケージを用いたグラフ化をしていますが、
(2)についても、表を転置させて同様な共起ネットワークをRで作成してみました。

これを眺めながら色々と考えています。
(見通しのよいグラフができています)

文脈ベクトルを使う利点について、マニュアルで丁寧にご説明されていますが、
(精度向上、複雑さの低減の両立)
(2)の転置行列を用いた共起ネットワークにも同様な利点があるように思えます。

私の勝手な思い込みの恐れがあります。
樋口先生のご意見を頂戴できたらと思いました。
よろしくお願いいたします。


  [No.887] Re: 「抽出語」×「文脈ベクトル」表を使った共起ネットワーク 投稿者:HIGUCHI Koichi  投稿日:2011/12/19(Mon) 13:30:39

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

> (1)「文書」×「抽出語」表
> (2)「抽出語」×「文脈ベクトル」表

はい、お書きいただいた通り、必ずしもSOMに限らず、共起ネットワーク・多次
元尺度法・階層的クラスター分析を行う場合にも、(2)を使うメリットはあると
思います。ただし(現時点では)KH Coderのコマンドは(1)を使うように固定さ
れていますので、(2)を使うためには「手作業」が必要になります。

せっかくの機会なので、(2)を使って共起ネットワークを作成する方法を、簡単
にですがまとめておきます。※他にもいろいろな作成の方法はあるかと思いま
すが、1例として...

-------------------------------------------------------------------------------
(i) 「抽出語×文脈ベクトル」表の出力コマンドを使って、CSVファイルへの
出力を行います。

(ii) 共起ネットワークのRコマンドを得るために、KH Coderで作成した共起
ネットワークを「R Source」形式で保存します。

(iii) 上の(ii)で保存した*.rファイルを何カ所か編集します。

まず「# END: DATA」という行を探し、そこから上をすべて削除します。そし
て、かわりに以下のコマンドを入力します。なお1行目は、(i)で保存したCSV
ファイルのフルパスに変更します。また行頭の「>」は、この掲示板で引用を
あらわすための記号なので、Rのコマンドとしては入力しません。

> d <- read.csv( "C:\\test\\hoge.csv", header=T )
> row.names(d) <- sub( '\\([0-9]+\\)', "", d[,1], perl=T)
> freq <- as.numeric( gsub( '[^0-9]', "", d[,1], perl=T) )
> d[,1] <- NULL
> #d <- scale(d)

次に、少し下の「# 頻度計算」の部分を次のように変更します。行頭に「#」
を追加することで、実行されないようにコメントアウトします。

> # 頻度計算
> #freq <- NULL
> #for (i in 1:length( rownames(d) )) {
> # freq[i] = sum( d[i,] )
> #}

最後に、「# 類似度計算」の部分を次のように変更します。Jaccard係数では
なく、相関係数を指定しています。

> # 類似度計算
> library(amap)
> d <- Dist(d,method="correlation")
> d <- as.matrix(d)
> d <- 1 - d;

(iv) あとは、編集した*.rファイルを、KH Coderに付属のRで実行すれば完了
です。KH Coderに付属のRは、kh_coder.exeと同じ場所にあるR_gui.batをダブ
ルクリックすると起動します。コンソール画面に*.rファイルをドラッグアン
ドドロップすると実行されます。

最初に追加した「#d <- scale(d)」という部分の「#」を削除した方が好まし
い結果になる場合もあるかもしれません。データの特性や、分析の方針に応じ
て「#」の有無を選んでいただくと良いでしょう。
-------------------------------------------------------------------------------

こうした形で、dist()関数ないしはその派生(?)のDist()関数を使う場合は、
転置する必要は無いかと思います。ただ、もし列と列の類似度を計算する関数
を使われる場合には、転置しなくてはいけないでしょう。

以上、ご参考になる部分がありましたら幸いです。

p.s.
以前ご示唆をいただいたボナチッチ中心性ですが、2.b.27から「共起ネット
ワーク」コマンドに取り入れさせていただきました。名称は「中心性(固有ベ
クトル)」としてあります。その節はありがとうございました。


  [No.888] Re: 「抽出語」×「文脈ベクトル」表を使った共起ネットワーク 投稿者:袋井  投稿日:2011/12/20(Tue) 21:54:22

樋口先生さま

袋井と申します。
ご丁寧なご教示をありがとうございました。

私のほうでも、先生がお示しをしてくださいましたような、外部ファイルから読み込むRスクリプトを作成して実験を行いました。

ただし、特徴ベクトルの類似度計算は余弦(Cosine)を用いました。

個人的な経験から、特徴ベクトルの計算では、距離よりも余弦(Cosine)を用いています。

余談となりますが、
多次元情報の二次元可視化では、SOMとSammonを併用することが多いです。
SOMについては、先生が阪大時代にご使用されたオーストリア製品をはじめ、多くのSOMソフトを持っております。

ボナチッチ中心性については、早々に提供していただき、誠にありがとうございました。
色々なデータで検証をして、後日に感想を述べたいと思います。

色々とありがとうございました。


  [No.889] Re: 「抽出語」×「文脈ベクトル」表を使った共起ネットワーク 投稿者:HIGUCHI Koichi  投稿日:2011/12/21(Wed) 01:31:33

いつもご示唆をいただき、また大変ご丁寧にご対応いただき、まこ
とにありがとうございます。

気が向いた時にお試しいただくくらいのおもむきで、気楽にお付き
合いいただけましたら幸いです。


  [No.969] Re: 「抽出語」×「文脈ベクトル」表を使った共起ネットワーク 投稿者:袋井  投稿日:2012/05/17(Thu) 20:33:01

樋口先生 様;

お世話になります、袋井と申します。

毎々、細かい質問でご迷惑をお掛けしております。


過去にご教示いただきました内容について、再確認させてください。

> # 類似度計算
> library(amap)
> d <- Dist(d,method="correlation")
> d <- as.matrix(d)
> d <- 1 - d;


多次元ベクトルの類似度ですので、私はコサイン類似度を使用することが多いです。

library(amap)
d <- Dist(dat,method="pearson")
d <- as.matrix(d)
d <- 1 - d

値が0〜1の範囲となります。


ご教示いただきました以下の計算についても、相関係数だから、値が0〜1の範囲となると思い込んでおりましたが、
計算結果を確認したところ必ずしもそうなりません。

> # 類似度計算
> library(amap)
> d <- Dist(d,method="correlation")
> d <- as.matrix(d)
> d <- 1 - d;

> d <- Dist(d,method="correlation")
は、1を超える場合もあり、結果として、
> d <- 1 - d;
は、マイナスになる場合がございますが、それでよいのでしょうか?

よろしくお願いします。


  [No.970] Re: 「抽出語」×「文脈ベクトル」表を使った共起ネットワーク 投稿者:HIGUCHI Koichi  投稿日:2012/05/17(Thu) 22:15:18

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

申し訳ありません。コマンドに誤りがありました。
ご指摘いただき、大変ありがとうございます。

Dist(d,method="correlation")は、「1 - 相関係数」を返します。
相関係数が-1から1までですので、「1 - 相関係数」は0から2まで
ですね。

したがって、相関係数を使う場合は以下のようにする必要があります。

> # 類似度計算
> library(amap)
> d <- Dist(d,method="correlation")
> d <- as.matrix(d)
> d <- 2 - d; # ←ここを「2」に修正

Dist(dat,method="pearson")でコサイン係数をお使いいただく場合は
変更なしで大丈夫でしょう。


  [No.971] Re: 「抽出語」×「文脈ベクトル」表を使った共起ネットワーク 投稿者:袋井  投稿日:2012/05/19(Sat) 10:53:03

樋口先生 様;

お世話になります、袋井と申します。

ご教示をいただき、誠にありがとうございました。

多次元ベクトルの類似度、距離については色々な指標がありますが、題材に適したものをと考えております。

私が変な思い込み、思い違いをしているのかもしれませんが、解せない箇所がございます。

細かい話で恐縮ですが、ご確認させてください。
よろしくお願いいたします。


> Dist(d,method="correlation")は、「1 - 相関係数」を返します。
> 相関係数が-1から1までですので、「1 - 相関係数」は0から2まで
> ですね。

dat <-read.table("file.csv",header=T,row.names=1,sep=",")

# "pearson"
d1 <- Dist(dat,method="pearson")
d1 <- as.matrix(d1)

# 1 - "pearson"
d2 <- 1 - d1
d2 <- as.matrix(d2)

# "correlation"
d3 <- Dist(dat,method="correlation")
d3 <- as.matrix(d3)

d3は0から2までの範囲となっていますので、これはOKです。


> Dist(d,method="correlation")は、「1 - 相関係数」を返します。

書かれている「相関係数」は、d1のことでしょうか?

d2とd3は一致する必要はないのでしょうか?



> # 類似度計算
> library(amap)
> d <- Dist(d,method="correlation")
> d <- as.matrix(d)
> d <- 2 - d; # ←ここを「2」に修正

対角成分は、
"correlation" の場合には、0
2 -"correlation" の場合には、2
となりますが、それはそれでよいのでしょうか?

類似度、距離を行列で表現する場合には、対角成分は0または1になるように思い込んでおりますので、
対角成分が2となることの意味合いが分かりません。


細かい話で大変に恐縮ですが、ご確認させてください。

よろしくお願いします。


  [No.973] Re: 「抽出語」×「文脈ベクトル」表を使った共起ネットワーク [追記あり] 投稿者:HIGUCHI Koichi  投稿日:2012/05/19(Sat) 14:28:09

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

(取り急ぎ、こちらに返信させていただきます)

> 書かれている「相関係数」は、d1のことでしょうか?

いえ、異なっております。これはRのamapライブラリに入っている「Dist」と
いう関数の紛らわしい部分です。

> # "pearson"
> d1 <- Dist(dat,method="pearson")

ここでd1には、1 - コサイン係数が入力されているはずです。
「Dist」ではコサイン係数を「pearson」と呼んでいるようなのです。

> library(amap)
> help(Dist)

を実行すると、このあたりの詳細が表示されます。

> d2とd3は一致する必要はないのでしょうか?

相関係数(d3)とコサイン係数(d2)という違いがありますので、一致しなく
ても問題ありません。

> 対角成分

対角成分はネットワーク(グラフ)の描画・計算には使われていないので、
気にする必要はないと思います。

強いて言えば、ある語Aから自分(語A)につながるedgeの強さが1とか2になる
ということになりますでしょうか。そして、この「1とか2」というのが、存在
しうる最大の類似度をあらわします。

※これはあくまで考え方であって、実際には「語Aから自分(語A)につながる
edge」はKH Coderでは描画しません(存在しないものとします)。

> "correlation" の場合には、0
> 2 - "correlation" の場合には、2

本題から外れるかもしれませんが、「Dist」は類似しているほど小さくなる値
を「距離」として返します。よって、edgeの強さ=類似しているほど大きくな
る値(類似度)に直すために、「2 - "correlation"」とした方が良いでしょう。

[追記]
edgeの強さとして負の値を入力するのはまずいと思います。しかし、edgeの強
さの最大値が1から2になっても問題ないように思います。


  [No.974] Re: 「抽出語」×「文脈ベクトル」表を使った共起ネットワーク [追記あり] 投稿者:袋井  投稿日:2012/05/19(Sat) 19:35:12

樋口先生 様;

お世話になります、袋井と申します。

ご丁寧にご教示をいただきましたので、よく分かりました。

多次元ベクトルの「距離」については、例えばユークリッド距離、マハラノビス距離などがありますが、
では「類似度」はと言われると、距離から単純に計算できるものと、できないものがあります。

Rのパッケージの仕様を正しく理解する重要性を感じました。

いい勉強をさせていただきました。

ありがとうございました。