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

  [No.3514] 共起ネットワーク<語ー外部変数・見出し>のJaccard係数 投稿者:SAITOH  投稿日:2018/03/05(Mon) 11:54:32

先日の東京セミナーに参加した者です。先生のお人柄があふれる親切丁寧な内容で、非常にわかりやすく有意義なセミナーでした。しかし、ひとつ疑問が残ったので、具体的な事例をあげて質問をさせていただきます。(実例クラスター分析を買って読みもしたのですが理解に至らずです・・・)


語A−語BのJaccard係数は、集計単位が段落であった場合、<語Aと語Bが共起した段落数>÷(<語Aのみが出現した段落数>+<語Aと語Bが共起した段落数>+<語Bのみが出現した段落数>)で計算されると理解しています。KH Coderでの出力値と私の検算が一致するのでこの理解は妥当と考えています。
しかし、語−外部変数・見出しのJaccard係数となると、検算ができず、理解ができません。

以下のデータ条件に対してKH CoderがJaccard係数を出力してくるのですが、どのように計算しているかをお教えいただければ幸いです。よろしくお願いします。

◆テキストデータ(以下、2つの見出しで構成されている)
見出し<前半> 合計21段落
見出し<後半> 合計15段落

◆集計単位
段落

◆語〇−見出し<前半>とのJaccard係数の出力結果
・語Aは<前半>の2段落と<後半>の1段落に合計3回出現。このときのJaccard係数は0.3。
・語Bは<前半>の3段落のみに合計8回出現。このときのJaccard係数は0.41。
・語Cは<前半>の2段落と<後半>の1段落に合計4回出現。このときのJaccard係数は0.3。
※edgeは語A, B, Cいずれも見出し<前半>とだけ繋がっている。
※ほかに必要な情報がありましたら、お手数ですがご指示いただければと存じます。


  [No.3515] Re: 共起ネットワーク<語ー外部変数・見出し>のJaccard係数 投稿者:HIGUCHI Koichi  投稿日:2018/03/05(Mon) 16:11:23

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

先日のセミナーにご参加いただきありがとうございました。あんなに多くの方
にご参加いただいたのは初めてのことで、驚きましたし、大変光栄です。

さて、結果から申しますと、共起ネットワークで「語―外部変数・見出し」を
選択した場合、KH CoderはJaccard係数に対して独自の調整を加えていました。
したがって表示されているのはJaccard係数そのものではなく、検算の難しい
数字でした。

マニュアルの記載が不十分で、なおかつ口頭でお伝えした情報も不正確だった
こと、まことに申し訳ございません。また疑問をお持ちになった点についてお
知らせいただき大変ありがとうございます。おかげさまでまた1箇所KH Coder
を改善できます。

----------------------------------------------------------------------

なお調整の内容ですが、そのままのJaccard係数を使うと、<前半>には30語ほど
つながるけれど<後半>には1語しかつながらないといったことが時折起こり
ます。こうなると<後半>の内容がまるで分かりません。そこで、<前半>と
各語の係数、<後半>と各語の係数が、おおむね同じ範囲に分布するよう調整
を加えています。<後半>と各語の係数が全体に小さいため、ネットワーク上
で<後半>とつながる語が1つしかないといった事態を避けるためです。統計
用語では標準化と呼ぶような操作を行なっています。

そういうわけで、<前半>と語Aの係数と、<前半>と語Bの係数とは、一応比
較可能で、「数値の大きい方が<前半>と強く結びついていた」といった判断
が可能です。しかし、<前半>と語Aの係数と、<後半>と語Aの係数とは、別
々に調整(標準化)されているため比較不可能です。どっちが大きいといった
ことに意味がありません。「強い共起関係ほど濃い線に」オプションによる描
画も同様です。

こうしたことですので、現時点では、「語―外部変数見出し」ネットワークに
おいて、「係数を表示」「強い共起関係ほど濃い線に」オプションの利用はお
勧めできません。もしお使いになる場合は、
・調整してあること
・比べられる組み合わせと、比べても意味のない組み合わせがあること
に十分ご注意ください。

今後としては、描画する共起関係を選ぶためにはこれまでと同じように調整し
た係数を使いつつ、「係数を表示」「強い共起関係ほど濃い線に」オプション
利用時にはもとの純粋な係数を用いることを考えています。次のリリースから
このように改善する予定です。

----------------------------------------------------------------------

本来の計算としては、以下のようになるはずです。

a) 語Aが出現していて、<前半>という条件を満たす段落:2
b) 語Aが出現しているが、<前半>という条件を満たさない段落:1
c)語Aは出現していないが、<前半>という条件を満たす段落:19

a / (a + b + c) = 0.0909091


  [No.3516] Re: 共起ネットワーク<語ー外部変数・見出し>のJaccard係数 投稿者:SAITOH  投稿日:2018/03/05(Mon) 20:57:12

早速、ご丁寧な回答をいただきありがとうございます。

> あんなに多くの方にご参加いただいた

予想はしていたものの、私自身も会場の熱気に圧倒され、また同時にKH Coderの関心の高さを肌で感じました。これほど社会のニーズをとらえたソフトを、世に生み出された先生の御功績に同じ研究者として敬服いたします。

さて、以下について改めてご教示いただきたく質問させていただきます。

> 今後としては、描画する共起関係を選ぶためにはこれまでと同じように調整し
> た係数を使いつつ、「係数を表示」「強い共起関係ほど濃い線に」オプション
> 利用時にはもとの純粋な係数を用いることを考えています。

つまり、改善後に表示される係数はJaccard係数になるだけであり、edgeおよび共起語の状況は今のKH Coderのバージョンで描かれる結果と同じと理解します。
したがって、手計算(上でご教示いただいた計算式)により各edgeのJaccard係数を計算すれば、この係数はそれぞれの見出しで標準化された値ではないため、<前半>と<後半>のJaccard係数について大小比較できると理解してよろしいでしょうか?例えば、<前半>と語A、<後半>と語AのそれぞれのJaccard係数において、前者の方が大きければ語Aは<前半>に比較的多く表れていたと言ってよいのでしょうか?

また、「描画するedgeの選択」で現状はJaccard係数≧0.3と条件づけて出力しているわけですが、この条件値も標準化された数値と解釈します。この場合、例えば論文化する際はどのように記述することが適当と言えるでしょうか?

最後に標準化についてですが、この全体像をここでお教えいただくのは無理があるのだろうと想像しますが、可能ならばヒントだけでもご教示いただけないでしょうか(他者へ説明するために)。例えば、それぞれの見出しの抽出語数や段落数を標準化に用いているのか、或いは数学の〇〇法を用いているのか、などをご教示いただければ幸いです。
よろしくお願いいたします。


  [No.3517] Re: 共起ネットワーク<語ー外部変数・見出し>のJaccard係数 投稿者:HIGUCHI Koichi  投稿日:2018/03/05(Mon) 21:54:05

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

いえいえ、出身研究室の先輩方が代々取り組んでこられたことを私もしていた
だけなのですが、たまたま私の時に流行となったものと思います。(あとは、
少しばかりしつこくやっていたというくらいです)

> つまり、改善後に表示される係数はJaccard係数になるだけであり、edgeおよ
> び共起語の状況は今のKH Coderのバージョンで描かれる結果と同じと理解します。

はい、その通りです。

> したがって、手計算(上でご教示いただいた計算式)により各edgeのJaccard
> 係数を計算すれば、この係数はそれぞれの見出しで標準化された値ではない
> ため、<前半>と<後半>のJaccard係数について大小比較できると理解してよろ
> しいでしょうか?

はい、比較可能です。

手計算するよりは、特徴語の表を作った方が楽かとは思います。「ツール」「外
部変数と見出し」(変数または見出しをクリックしてから)「▽特徴語」「一覧
(Excel形式)」です。これによって「関連語検索」が自動的に動いて、結果(上
位10語)が整理されます。あらかじめ「関連語検索」の「フィルタ設定」で、
「条件付き確率が低下する語も表示」にチェックを入れておくと、共起ネットワ
ークと見比べやすくなるかもしれません。

> 例えば、<前半>と語A、<後半>と語AのそれぞれのJaccard係数において、
> 前者の方が大きければ語Aは<前半>に比較的多く表れていたと言ってよいの
> でしょうか?

Jaccard係数ですから、直接的には「<前半>という条件との関連がより強い」
という結果ですが、含意としてはそのようになるでしょう。

> 最後に標準化についてですが、この全体像をここでお教えいただくのは無理
> があるのだろうと想像しますが、可能ならばヒントだけでもご教示いただけ
> ないでしょうか(他者へ説明するために)。

うーん、以下のような計算なのですが、ちょっとシンプルには説明しにくいか
もしれません。

分析に含めた語の数だけ、<前半>と各語のJaccard係数が計算されています。
これらのJaccard係数グループの平均を計算し、すべての係数から平均を引き
ます。これによってグループの平均を0に揃えています。これを中心化と呼び
ます。

「<前半>と各語のJaccard係数」グループ、「<後半>と各語のJaccard係数」
グループ、それぞれのグループごとに中心化しています。以上の処理によって、
<前半>グループと<後半>グループの係数の大きさをおおむね揃えるという
目的は達しています。

ただ、このままだと正の数と負の数に(無意味に)分かれていますので、すべ
ての係数に1つの数字を足すことで正の範囲に移動し、さらにすべての係数を
最大値で割ることで最大値を1にしています。これはグループを問わず、すべて
の係数に同じ処理をしていますから、もうただ見え方を変えているだけです。

どうせなら、もとのJaccard係数の最小値・最大値の範囲に収まるようにした方
が、「Jaccard係数もどき」という感じになって良いかもれしれませんね。すな
わち、標準化後の係数も、もとのJaccard係数と同じ最小値・最大値をとるよう
にすれば「Jaccard係数の大きさに準じる」と言って言えなくはないでしょうか。
次のリリースからはこの形にしようと思います。

# なお、Rコマンドが読めればの話なのですが、共起ネットワークを「R Source
# 形式」で保存して、Rコマンドを見ていただければ、計算の過程はすべてそこ
# 記載されてはいます。ただ、長いので解読はなかなか大変かもしれません。

ということで、やはり説明しやすくはない感じですね。外部変数・見出しと語と
の関連を表現したい場合で、さらに厳密な説明が求められる場合には、上述の特
徴語の表や、対応分析の方が使いやすいかもしれません。


  [No.3518] Re: 改良版を公開しました 投稿者:HIGUCHI Koichi  投稿日:2018/03/06(Tue) 01:17:23

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

「次のリリース」を3.Alpha.12として公開しました。
https://sourceforge.net/projects/khc/files/KH%20Coder/3.Alpha.12/

「係数を表示」時にはもとの(調整していない)Jaccard係数を表示します。
また標準化後の係数が、もとのJaccard係数と同じ最小値・最大値を持つよう
にしています。

現在SourceForgeの機能に不具合が発生しているため、Windows版のみの公開で
す。SourceForgeが完全に復旧したらLinux・Mac版もリリースします。


  [No.3519] Re: 改良版を公開しました 投稿者:SAITOH  投稿日:2018/03/06(Tue) 10:47:42

早速のご回答と、改良版の公開について超迅速なご対応をまことにありがとうございます。
さっそく改良版を使用させていただきましたが、確かに表示されたJaccard係数は検算ができました。

ただし、「描画するedgeの選択」でJaccard係数を具体的な数値で指定したところ(例えば0.13)、
出力されたedgeの中にはそれより小さいJaccard係数(例えば0.09)のものも表示されています。

No.3516(以下)でもお聞きしたのですが、もしかしたらこの部分にまだ改良の余地が残っているのかと感じた次第です。

 > また、「描画するedgeの選択」で現状はJaccard係数≧0.3と条件づけて出力しているわけですが、この条件値も
 > 標準化された数値と解釈します。この場合、例えば論文化する際はどのように記述することが適当と言えるでしょうか?


  [No.3520] Re: 改良版を公開しました 投稿者:HIGUCHI Koichi  投稿日:2018/03/06(Tue) 10:54:33

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

> ただし、「描画するedgeの選択」でJaccard係数を具体的な数値で指定した
> ところ(例えば0.13)、出力されたedgeの中にはそれより小さいJaccard係数
> (例えば0.09)のものも表示されています。

共起関係(線)を描画するかどうかの選択には調整済みの係数を用い、一方
で画面表示は調整なしの係数ですので、どうしても両者にはずれが生じます。
この部分はちょっといかんしともしがたいかもしれません。

もし、改善のアイデア等ございましたらお教え下さい。


  [No.3521] Re: 改良版を公開しました 投稿者:SAITOH  投稿日:2018/03/06(Tue) 15:52:00

Rを触れたこともない素人のため、建設的なアイデアを提示できずに心苦しい限りです。
その素人の短絡的な考えで大変恐縮ですが、以下のようなプログラムをRに組み入れるのは難しいのでしょうか?

・「描画するedgeの選択」では実際のJaccard係数を指定(入力)できるようにする
 ↓
・共起ネットワークは調整済み係数に基づいて、とりあえずの描画(計算)をする
 ↓
・最後に、指定したJaccard係数に達していない抽出語およびedgeを削除して、描画(出力)する

これが難しい場合は、描画されたedgeのJaccard係数をしらみつぶしに見て、最小値を特定し、
「この共起ネットワークはJaccard係数〇〇以上で描画した」などと論文等では記述しようと考えます。


  [No.3523] Re: 改良版を公開しました 投稿者:SAITOH  投稿日:2018/03/06(Tue) 17:28:04

直前のコメントは少し短絡的であったことが分かりました。

ツール→外部変数・見出し→特徴語→Jaccard係数を確認

とやると、見出しの<前半>と<後半>で足切りとなるJaccard係数は異なっています。
これは標準化に由来するものと考えます。
このことから、仮に<前半>と<後半>で共通の足切りJaccard係数を指定して描画すれば、
現在のバージョンとは異なる共起ネットワークが出力されるものと予測します。

しかし、それでも<前半>と<後半>で共通の足切りJaccard係数を指定できた方が、
解釈のしやすい結果を出力できるように思うところです…

その場合は、中心化(標準化)のやり方を変える必要があろうかと想像します。
それぞれの外部変数・見出し毎に中心化をするのでなく、全体として中心化をする、
つまりすべての外部変数・見出しのJaccard係数の平均を求め、それを中心化の基準とする
というのは描画にとって不都合になるのでしょうか?


  [No.3524] Re: 標準化について 投稿者:HIGUCHI Koichi  投稿日:2018/03/06(Tue) 20:43:03

Re: 標準化について (画像サイズ: 1785×758 371kB)

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

> とやると、見出しの<前半>と<後半>で足切りとなるJaccard係数は異なって
> います。
> これは標準化に由来するものと考えます。
> このことから、仮に<前半>と<後半>で共通の足切りJaccard係数を指定して
> 描画すれば、現在のバージョンとは異なる共起ネットワークが出力されるも
> のと予測します。

はい、まさしくお書きのとおりです。

この標準化を行なわないと、「<後半>には50語がつながっているけれど、
<前半>には1語しかつながっていなくて、<前半>の様子がまったくわから
ない」ということが時に起こります。こうした事態を避けるための標準化な
のです。

こうした事態が起こってもかまわないから、共通のJaccard係数で足きりする!
ということでしたら、「中心化(標準化)のやり方を変える」というより、単
に標準化/中心化/調整を行なわなければそれですみます。


標準化を行なわないようなオプション、あった方が良いでしょうか?

ちなみに、現状ですと
・共起ネットワークを「R Source形式」で保存し、
・テキストエディタで開いて「d[(n_words+1):nrow(d),1:n_words] <- std」を
 検索してこの行頭に「#」を加えて上書き保存し、
・Rで実行すると、
標準化を行なわない結果が得られます。「th <- 0.1」のような部分を検索して
「0.1」のような数値を変更すると、足きりする数値を変更できます。

「R Source形式」での保存と実行についてはこちらがご参考になると思います。
https://www.slideshare.net/khcoder/r1kh-coder

ご参考までに「こころ」データで、標準化した場合としない場合の結果を添付
しています。標準化しないと、「下」に多くの語がつながっていて、「上」が
少々寂しく、内容が分かりにくくなっています。


なお、現状のように標準化を行なっている状態では、係数による足きりを厳密に
行なうことはできませんので、「係数○○以上」を使うことをは非推奨です。
「語―外部変数・見出し」を選択した場合は、「係数○○以上」の選択肢はグレ
ーアウトすべきかなと思案中です。


  [No.3526] Re: 標準化について 投稿者:SAITOH  投稿日:2018/03/08(Thu) 11:24:37

分かりやすく図示していただき、理解が深まった感があります。ありがとうございます。
たしかに「標準化あり」は各章の様子をうかがい知るのに適しているように思います。
しかし、一方で各章同士の公平な比較は難しいと考えます。

たとえば、『人間』の抽出語が「標準化あり」では<上_先生と私>と繋がるのに対し、「標準化なし」では<下_先生と遺書>と繋がります。このことから、各章における『人間』の出現割合(Jaccard係数に相当)を比較すれば、<下_先生と遺書>が最も高い、つまり実際には『人間』の出現がこの章で相対的に多かったと読み取れます。

ここからは想像によるのですが…、
このような結果になるのも分析対象が小説であるため、章が進むにつれて内容が濃くなる、すなわち後半に行くほど特徴的な単語の出現割合が高くなっていくからなのでしょうか?最初の章にも特徴語は出てくるが、序章という性格上、一般的な単語も多くあり、そのため文の数も増えるので特徴語の出現割合が高くはならないのかなと考えました(検証せず)。
たしかに小説のようなデータであれば、目的によっては「標準化あり」が適するように思います。しかし、もし分析対象が例えば事前と事後のアンケート結果であれば、<事前>と<事後>は互いに関連しないはずなので(同一の特徴語が<事後>で増えるという傾向はないor弱い)、標準化をしないJaccard係数で描画させて公平に比較するのがよろしいと思います。

 > 標準化を行なわないようなオプション、あった方が良いでしょうか?

私が主として対象としているのはアンケート結果ですので、私としては上のオプションはとても魅力的です(私の想像が正しければですが)。この追加によって本ソフトの操作性がそれほど複雑にならないようであれば、ぜひご検討いただければ幸いです。


  [No.3527] Re: 標準化について 投稿者:HIGUCHI Koichi  投稿日:2018/03/08(Thu) 21:49:14

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

場合によっては標準化しない方が良いということは、確かに、おっしゃるとお
りと考えました。

そこで、「描画する共起関係(edge)の選択」部分に「係数を標準化する」と
いうオプションを加えました。「語―外部変数・見出し」のネットワーク作成
時に、標準化を行ないたくない場合は、このオプションのチェックを外して下
さい。

このオプションを加えたバージョンを3.Alpha.12aとして公開しています。よろ
しかったらお試し下さい。


  [No.3528] Re: 標準化について 投稿者:SAITOH  投稿日:2018/03/09(Fri) 11:51:29

さっそく3.Alpha.12aを利用させていただきました。
結果、予想どおりアンケート結果に対しては標準化アリもナシも、ほぼ同様の結果が得られました。

下の想像がずれてなくて安心しましたが、これも樋口先生に即改良していただいたからこそ、
労せず(Rを使わずに)確認することができたものです。

 > 事前と事後のアンケート結果であれば、<事前>と<事後>は互いに関連しない
 > はずなので(同一の特徴語が<事後>で増えるという傾向はないor弱い)


これまで根気強く、また親切丁寧にご対応いただき誠にありがとうございました。
疑問点などがまた出てきましたら、その際もよろしくお願いできればと存じます。


  [No.3529] Re: 標準化について 投稿者:HIGUCHI Koichi  投稿日:2018/03/11(Sun) 22:57:17

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

ご質問・ご要望いただいたおかげで、また1つ、KH Coderの改良を進めること
ができました。感謝申し上げます。

標準化アリが良いかナシが良いかは、データの特性や、分析のご方針次第と
いう面が強いかと思います。ですので、ソフトとしては選択肢があることが
大切かと思い、追加させていただきました。

ともあれ、重ねて御礼申し上げます。