hns - 日記自動生成システム - Version 2.10-pl1

先月 2006年05月 来月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
HNS logo

2006年05月01日(月)

#1 淡路夢舞台

たまにはいわゆる日記を書いてみるテスト。(連休だし。)
普段はこういう日記は個人用の Changelog 日誌に書いているのですが, たまにはいいかなと。

有休を使って, 淡路島の 淡路夢舞台 に行ってきました。淡路花博の時には, 行こうと思いながら天邪鬼なため結局 行かなかったので。
関西からだと, JR舞子駅からJRバスの高速舞子バス停→高速バスで30分で 明石海峡大橋を渡って夢舞台に着きます。帰りはそうしましたが, 行きはそれでは 面白くないので, けいはんなプラザ(9:50発)から関西国際空港(11:30)→ 洲本パールライン で淡路島・洲本まで海路(11:50発)。

淡路島に上陸すると, まず花でいっぱいなのにびっくり。花博が終わった後も, 花の美しいまち, 淡路島という感じでキャンペーンを張ってさまざまな花を町中に植え ているようだ。
洲本港のあたりは昔鐘淵紡績(カネボウ)の工場があったらしく, 工場跡の赤煉瓦の 建物が新開発され, ごちそう館 御食国(みけつくに) や, 洲本アルチザンスクエア として新しいシンボル的場所になっているよう。 アルチザンスクエアはかなり綺麗な建物で, カフェ等が入っている他, 工房やギャラリーなどとしても利用されているようで, なかなか素晴らしい取り組みだと感じました。 洲本市酪農協同組合の出しているアイスクリームの店で飲んだ有機栽培コーヒーは超ウマ。 (洲本市酪農協同組合の取り組みについて) 僕はそういう教育を受けたので, 単に観光客というユーザーとしてというより, どういう風に地方の刷新と活性化を図るといいか, という行政側の視点からも とても興味深い。

洲本バスセンターから淡路島縦貫線で夢舞台までは約60分で, Westin 淡路の前に到着。 部屋はテラス付きで, すごい贅沢でした。ウィスラーの Westin よりも贅沢かも。 安藤建築のこの建物も, V字型のどちらからも海(と僕の部屋からは山)が見える設計 になっていて, 素晴らしい建築でした。
翌日は夢舞台を遊覧。 全編安藤忠雄の建築で素晴らしいのですが(これが大きな目的), 気になったのは, コンクリート打ち放しの耐用年数。花博から5年程度で, すでにある程度は雨で劣化が 始まっており, このまま20年など経った後に, よくあるコンクリート打ち放し建築 のように黒くなっていないか, かなり心配です。少なくとも今の美しさは保てない のではないかと。 (東京都庁はそういう懸念から, 壁面は花崗岩打ち込みになっている。) まあコンクリート打ち放しをやめてしまうと, 安藤建築でなくなってしまうかも 知れないので, 難しいところなのかとも思います。
夢舞台は今も花で一杯で, 素晴らしいところです。
最後に海の方へ橋を渡って 淡路交流の翼港 に行って, 海をのぞんでマターリ。本当に素晴らしい場所でした。


2006年05月11日(木)

#1 Learning with Scope

今考えている話に関係がありそうだったので(実際は直接は関係なかったかも), 2年位前に読んだ Blei (2002) (@UAI'02) "Learning with Scope, with Application to Information Extraction and Classification" を読み直した。 面白いのに, これを引用している論文が全然ないのが不思議なので, ちょっと紹介。

LDA などのテキストモデルは単語の中身だけを対象にしているが, 実際は HTMLなどの場合には文字には<h1><b><i>などのタグが振られていたり, 色が違っていたり, フォントが違っていたりする。つまり, 単語は中身と素性の ペアになっている。
いま, 例えば情報抽出の問題で特定のクラスに属する文字列(たとえば「職業」)をHTMLから 分類する問題を考えると, ある文書ではそれは <li> 要素の中の <font color="blue"> だったりし, そのフォーマットは一つの文書の中で 共通して使われている。ゆえに, その情報を入れることで, <li><font color="blue">エンジニア募集</font>のような文字列の分類がより正確に なる。

しかし問題は, 上のようなフォーマットはある文書では正しくても, 他の文書では正しくないということ。他の文書ではエンジニア募集は <th><font color="green"> かもしれない。 これを解決するために, 単語の意味を生成するLDA的なモデルの中に, 素性を同時に生成するモデルを含めるというのがこの論文。

いま, 素性として "エンジニア募集" -> c_1, "内容" -> c_2, .. のようなクラスを考え, HTMLの修飾を f_1 -> <h1>, f_2 -> <h2>, f_3 -> <b>, f_4 -> <i>, .. などとしたとき, 上のエンジニア募集の文字列は p(w|c_1) に従って単語を出力し, p(f|c_1) に従ってその修飾タグを決めるというモデルになる。 p(w|c) はグローバルなパラメータだが, p(f|c) は文書によって違う。
いま, 新しい文書が与えられて, ある修飾を持つ文字列 <w_n,f_n> が 募集広告かどうかを判別するとき, 文書に隠れた修飾パラメータ p(f|c) を隠れ変数として, EMを使って

  1. <w_n,f_n> が c_i に属する確率 p(c_i|w_n,f_n) を求める (← p(f_n|c_i) を使う)
  2. p(c_i|w) から, p(f_n|c_i) を更新する
という感じに, 文書の尤度を最大化するように分類を行う。
直感的に言うと, 「単語の中身から, この単語列が求めるクラスに分類されたと すると, それと同じHTMLタグを持つこちらの単語列もそのクラスになる。 そうすると, 単語を分類する パラメータも違ってくるし, このタグがそのクラスから生成される確率も高まる。 そうすると, こちらの単語列もそのクラスに属することになって..(以下同様)」 ということ。

普通によくやるように, 素性のベクトルを作ってSVMやCRFにかける方法と違う のは, 各文書は固有のローカルなパラメータを持っていて, そのパラメータを推定しながら分類を進める, という点。しかも, 同時に ナイーブベイズ的に *1 グローバルな単語の意味的情報も使うことができる。
クラスが与えられていれば, 学習は単に数を数えるだけで終わりで, 推定には変分ベイズEMが使える。さらに, 上のような生成モデルによる間接的な分類だけでなく, 直接識別モデルと して考えることも可能でその方がもちろん性能がよく, その場合にはMEをEMで回すようなことも可能らしい。

この間の言語処理学会2006で, 二つの損失関数をλ:1-λで線形補間する損失関数を 考えるという話は, グローバルに一つのλがあるのではなくて, λ自体がたとえば Beta分布 λ ~ Be(a,b) に従っていて, その文書ごとに最適なλ(最適な損失関数) を推定しながらできると一番美しいんじゃないでしょうか, というコメントをした のですが, これも上のような話と共通点があると思う。
ただ, このためには Bayesian CRF (AISTAT 2005)みたいなものが必要そうですが, Bayesian CRF にはMinkaの最新技術が詰まりまくって いるので, やるとするとかなり気合いがいるかも, と思います。

-:

ちなみに, この論文は最初に抽象的な議論が続いてちょっと分かりにくいので, もし読む場合は, 最初に後ろの実例から読んだ方が内容がわかりやすいと思います。


*1: この場合, 単語毎に隠れクラスが割り当てられるので, いわゆるナイーブベイズ とは本当は違う。LDAで, クラス割り当てが既知の場合が近い。

2006年05月12日(金)

#1 scbib-guile

なんか, SICPが松本研でも流行ってたりするみたいですが..。
Bibtex で使う参考文献の管理には, 僕は高林君の書いた scbib の Guile 版を自分で書き直して使っています。
(article
 (abbrev "rijsbergen75cranfield")
 (title "Document clustering: An evaluation of some experiments with the cranfi
eld 1400 collection")
 (author "C. J. van Rijsbergen" "W. Bruce Croft")
 (journal "Information Processing and Management")
 (volume "11")
 (number "5--7")
 (pages "171--182")
 (year "1975")
 (note "http://ir.dcs.gla.ac.uk/resources/test\\_collections/cran/"))
のようなエントリを書いておくと,
% db2bibtex rij<TAB> ← TABで補完できる.
@article{rijsbergen75cranfield,
    author = {C. J. van Rijsbergen and W. Bruce Croft},
    title = "{Document clustering: An evaluation of some experiments with the cranfield 1400 collection}",
    journal = "{Information Processing and Management}",
    volume = "{11}",
    number = "{5--7}",
    pages = "{171--182}",
    year = "{1975}",
    note = "{http://ir.dcs.gla.ac.uk{\slash}resources{\slash}test\_collections{\slash}cran{\slash}}",
}
のように変換できます。 scbib はあまり使っている人がいないみたいですが, bibtex を直接書いておく方式 に比べて断然優れているのは, などなど。

正確には, 上の高林君の scbib は, フォーマットに一般性があって

(bib
 (bibtype "inproceedings")
 (..
のようになっていますが, 僕は論文の整理にしか使っていないので, 自分で書き直して 上のように (inproceedings (.. という形式で使えるようにしています。 ちなみに上の Gauche 版の元になった Guile 版を使っていますが, guile の方が いまどきの Linux ならどこでも入っているので, 標準的で便利かなと思っています。
この scbib は,
% db2bibtex cranfield 20news (← 文字列マッチしているので, 適当な文字列で検索できる)
のように abbrev を後ろに並べることでそれを全部表示できるので, 論文を書く時には とりあえず \cite{...} とそのまま書いてコンパイルしておいて, できた *.aux に対して, その中から citation を抜き出すスクリプト
#!/usr/local/bin/perl
#
#    auxref
#    extract citations from *.aux.
#    $Id: auxref,v 1.1 2005/01/25 06:27:22 dmochiha Exp $
#
while (<>)
{
    next if /^\s*%/;
    while (/\\citation{([^}]+)}/g) {
       @cit = split(',', $1);
       for $cit (@cit) {
           print $cit, "\n";
       }
    }
}
みたいなものを用意しておけば,
% auxref paper.aux | sort | uniq | xargs db2bibtex > paper.bib
のようにして簡単に *.bib が作れます。楽楽。 *1 ところで, Reference に長いURLを載せる時は, / を使わずに {\slash} としておくと そこで適当に改行してくれるので good, というのは tips ですが, http:// のところで改行されると困るので, コードを書き直すのがめんどいので そのまま放っておいて手で直していたのですが(w, ちょうど少し時間ができたので 下のように書いてみたところ, 最初の例のようにうまく自動的に変換してくれる ようです。
;; --*- scheme -*--
(use-modules (ice-9 regex))
;; マニアックな URL スキーム(w
(define url-handler "(https?|ftp|wais|telnet|gopher)://")
;; LaTeX 用に文字列をエスケープする関数
(define (latex-escape s)
  (set! s (regexp-substitute/global #f "~" s 'pre "\\~{}" 'post))
  (set! s (regexp-substitute/global #f "&" s 'pre "\\&" 'post))
  (let ((match (string-match url-handler s)))
    (if match
        (let* ((pos (match:end match))
               (handler (substring s 0 pos))
               (content (substring s pos)))
          (string-append handler
                         (regexp-substitute/global #f "/" content
                                                   'pre "{\\slash}" 'post)))
        s)))
一度書いておくと, 後はずっと幸せになれるといういい例ですね。
というわけで, scheme も実際的に便利だなぁと。
ちなみに, guile はそのまま起動すると, "guile> " とかいう超ダサーなプロンプト になりますが ~/.guile に
(set! scm-repl-prompt "> ")
と書いておくと,
> 
という Elk のような寡黙なプロンプトになるようです。(Elk好き。)
*1: *.bib から citation を抜き出して作り直すには, % sed -n '/^@/{s/^@[^{]*{//;s/,$//p}' *.bib とすればよいようです。マニアック。(笑)

2006年05月18日(木)

#1 GaP & NMF

明日5:00-からの DMLA では, GaP (Gamma-Poisson)テキストモデルと NMF (Nonnegative Matrix Factorization) の話をします。
GaPは普通に読むとかなり難しいので, 興味のある方はお越しください。 NAIST以外の方でも, 参加は誰でも可能だと思います。


2006年05月22日(月)

#1 GaP & NMF (2)

結構準備に時間がかかったので, レジュメ(手書き)をスキャンして 置いておきます。 gap-nmf.pdf
個人用メモ: jpg->PDFの作製
% jpeg2ps -p a4 1.jpg > 1.ps
% psmulti -nodecor -pages 1 *.ps -o gap-nmf.ps
% ps2pdf gap-nmf.ps

3番目に紹介した論文は以下です。(ICA 2006)
"Csiszar's Divergences for Non-Negative Matrix Factorization: Family of New Algorithms", Andrzej Cichocki, Rafal Zdunek, and Shun-ichi Amari. [Link]
時間が押していたのでうっかり最後言うのを忘れたのですが, φ-divergenceを考えてそのβ→1の極限を取るというのは単に一般化 しているというだけではありません。さらに正則化項の付いたダイバージェンス を考えることができて((13)式), そうするとFig.1の(b)だけから元の信号を復元 する問題で, NMFの普通のKLダイバージェンス最小化では(c)のように混じった 復元がされてしまうのに対して, 正則化付きダイバージェンスを最小化すると (d)のように, 見事に原信号(a)が復元できますよ, という話でした。 とても面白いのに, 言い忘れてしまって残念。
GaPも, MステップはNMFそのものですが, EステップはGamma事前分布が入っている分 正則化項のようなものが入っているので, 似た所があると思います。
あと, 今回はとても紹介している時間がなかったのですが, Wray Buntine の "Discrete Principal Component Analysis" (2005) [PDF] はこの辺のモデルが統一的にまとめられていて, かつNMFのような最尤/MAP推定では なく, Gibbsや変分法によるベイズ解法も示されているので, 興味がある方には お勧めです。


以上、5 日分です。
タイトル一覧
カテゴリ分類
Powered by hns-2.10-pl1, HyperNikkiSystem Project