たつをの ChangeLog : 2007-09-19

カイ2乗値を使って単語間の関連度を調べる方法。
つまり、関連語を探すときに、χ二乗値を関連度として使う。

perl によるサンプルコード (chiword.pl)。昔、勉強がてら作ったコード。
#!/usr/bin/perl
use strict;
use warnings;

my %cnt;
my $pair_num;

while (<>) {
    chomp;
    next if /^\s*$/;
    my @list = sort split(/,/, $_);
    for (my $i = 0; $i < @list; $i++) {
        for (my $j = $i + 1; $j < @list; $j++) {
            next if $list[$i] eq $list[$j];
            $cnt{word}{$list[$i]}++;
            $cnt{word}{$list[$j]}++;
            $cnt{pair}{join("\t", sort $list[$i], $list[$j])}++;
            $pair_num++;
        }
    }
}

my %chi_square_value;
foreach my $p (keys %{$cnt{pair}}) {
    my ($w1, $w2) = split(/\t/, $p);
    my $o11 = $cnt{pair}{$p};
    my $o12 = $cnt{word}{$w2} - $o11;
    my $o21 = $cnt{word}{$w1} - $o11;
    my $o22 = $pair_num - $cnt{word}{$w1} - $cnt{word}{$w2} + $o11;
    my $n = $pair_num;
    $chi_square_value{$p} = ($n * ($o11*$o22 - $o12*$o21)**2) /
        (($o11+$o12)*($o11+$o21)*($o12+$o22)*($o21+$o22));
}

foreach (sort {$chi_square_value{$b} <=> $chi_square_value{$a}}
         keys %chi_square_value) {
    print "$chi_square_value{$_}\t$_\n";
}

χ二乗値は下記の式で計算する。
chi

添え字つきの O (オー) はプログラム中では $o11, $o12, $o21, $o22。

例えば、単語 cow と vache について考える。
対象のデータに対して、
それぞれが単体で現れる頻度、共起する頻度、どちらも表れない頻度を
カウントしたのが下記の表。

cow!cow
vache596
!vache8570934

cow と vache が同時に現れるドキュメントの数 ($o11) は 56。
cow は現れるが vache は含まれていないドキュメントの数 ($o21) は 8。
その逆のドキュメントの数 ($o12) は 6。
どちらも含まれていないドキュメントの数 ($o22) は 57930。

この4つの値でχ二乗値が計算できるというわけ。

以上、式の説明は、
"Foundations of Statistical Natural Language Processing" より。


さて、下記のサンプルデータ (chiword-samp.txt) でプログラムを実行。
1行1ドキュメント。フォーマットは CSV。
各行には、同じドキュメントに現れた単語が含まれている。
ドキュメントに現れた単語がカンマ区切りで並んでいると考えれば良い。
hello,this,is,a,pen
i,love,a,pen
i,have,the,pen,with,love
the,cat,with,love
this,pen,is,hello
this,pen,is,mine
a,pen,is,love

これを chiword.pl にかけると、つながりの強い順に単語ペアが出力される。
% ./chiword.pl chiword-samp.txt
2.83051588365177        is      love
2.61597458132189        pen     the
2.61597458132189        pen     with
2.23322255731561        love    pen
0.901101336606656       cat     with
0.901101336606656       cat     the
0.823194884563151       the     with
0.7703081232493         have    pen
0.689179927290065       i       pen
0.582010582010582       hello   this
0.55                    a       this
0.489672364672365       mine    this
0.396299545459209       is      pen
0.346638655462185       a       pen
0.346638655462185       pen     this
0.313854708550087       hello   pen
0.274216524216524       is      this
0.203161938534279       a       i
0.191637630662021       a       love
0.165304780689396       is      mine
0.131648936170213       have    i
0.131648936170213       have    the
0.131648936170213       have    with
0.108227585906157       hello   is
0.103803716608595       cat     love
0.0895400895400895      a       is
0.0862369337979094      have    love
0.0818452380952381      a       hello
0.031602384543561       mine    pen
0.0315117134449977      i       the
0.0315117134449977      i       with
0.00101934909926607     love    the
0.00101934909926607     i       love
0.00101934909926607     love    with


参考:
Christopher D. Manning and Hinrich Schutze, Foundations of Statistical Natural Language Processing, MIT Press. Cambridge, MA: May 1999.
[2006-04-11-2]

相互情報量を使う場合はこちらを参考に。
- [を] Blog Hackers Conference 2005[2005-05-27-1]

手軽にシンプソン係数[2006-03-08-2]でもよいかも。


追記070920: 数式まわりの解説を追加した。
追記140109: プログラムに間違いがあったため全面改訂。出力結果を head してたのをやめて全部出した。

夜、東京ミッドタウンの庭で何やらイベントをやってました。
椅子が並べられてて、人もたくさん。

eventevent

で、その正体はこれ!

- 第1回東京ミッドタウン能狂言
  http://www.tokyo-midtown.com/jp/event/808.html
【会場】
東京ミッドタウン ミッドタウン・ガーデン 芝生広場
【主催】
産経新聞社
【特別協賛】
東京ミッドタウン
【日時】
第一夜 9月19日(水) 19:00開演(18:00開場)
大蔵流狂言「三番三」(さんばそう) 茂山正邦/茂山 茂 ほか
大蔵流狂言「仁王」(におう) 茂山千五郎/茂山千三郎 ほか
和泉流狂言「蝸牛」(かぎゅう) 野村 萬斎/石田 幸雄

第二夜 9月20日(木) 19:00開演(18:00開場)
能囃子の世界『雪月花』 一噌幸弘/大倉源次郎/亀井広忠/金春國和
大蔵流狂言「二人大名」(ふたりだいみょう) 山本 則直/山本泰太郎/
  山本 則孝
観世流能「葵上 古式」(あおいのうえ こしき) 観世銕之丞/
  宝生 欣哉/山本順之 ほか

明日もあるみたいです。


追記: 翌朝に撮影したもの。
庭

Wiki小話/Vol.8 - イントラWikiを語る。
http://wikibana.socoda.net/wiki.cgi?Wiki%be%ae%cf%c3%2fVol%2e8

Wikiに関連した話題を取り上げるミニセミナー「Wiki小話」。
9ヶ月ぶりくらいで開催される第八回ではイントラネットでの Wiki を
テーマに取り上げます。ご興味のある方はぜひどうぞ。

日時は「2007年9月29日(土) 14時〜16時」で、
場所は都内のどこかです(未定)。

- Wiki小話
  http://wikibana.socoda.net/wiki.cgi?Wiki%be%ae%cf%c3

クールミントガムの「COOLMINT」の名を冠した炭酸飲料が
コンビニで売っていたので買って飲んでみました。

- クールミントサイダー サントリー
  http://www.suntory.co.jp/softdrink/coolmintcider/index.html
  COOLMINT
どちらかといえば普通のサイダー。
クールミントっぽいかと聞かれれば、確かにそんな気がする感じ。
ラムネみたい印象です。これはこれで悪くないかと。

COOLMINTCOOLMINT

あと、昔からあるけど、やっぱこのペンギンかわいいよな。
目が描かれてないのがポイントかも。
COOLMINTCOOLMINT

たつをの ChangeLog
Powered by chalow