a lonely miner

ACL2013 マイ・リーディングリスト(1)

自然言語処理に関する最高峰の国際会議 ACL が先日開催されました. 発表された論文をいくつか眺めてみたのでメモ.

ほんとうはもっといっぱい紹介したい論文があるのだけれど,時間の都合上,5本だけ.気がむいたら続編あるかも.

すべての論文は,ACL Anthologyで入手することができる.


“Nonconvex Global Optimization for Latent-Variable Models” Matthew R. Gormley and Jason Eisner, ACL 2013

分枝限定法(評価関数の上限を推定しながら,探索木を刈りこむ)を用いて,隠れ変数モデルの大域解を求めよう,という話. 実験にはDMV(Dependency Model with Valence)というわりと有名な Unsupervised Dependency Parsingのモデルを用いている. グラフを見る限り,劇的に性能が良くなっているわけではなさそう,というか,線がつぶれてよく分からないw

正直さっぱり分かっていないんだけど,分枝限定法についてのぼくの限られた知識から推測すると, 隠れ変数が離散値をとる場合しか使えないような気がする. (正確にmarginalを計算しているのではなく,MAP解だけを数え上げているようにみえる)

実は,EMのような局所解に縛られる問題を,メタヒューリスティクスを使ってなんとかしよう,というのは,学部時代の恩氏が時々 言っていた話なのだけれど,当時は(いまも)能力が追いつかなくてぜんぜん歯が立ちませんでした.

すぐにどうこうする話ではなさそうだけれど,むかしから微妙に興味はあった話ではあるので, (小さな局所解がいっぱいあるような)モデルを扱うときのためにいちおう記憶にとどめておきたい.


“Scaling Semi-supervised Naive Bayes with Feature Marginals” Michael R. Lucas and Doug Downey, ACL 2013

Semi-supervised Naive Bayesというと,EMと組み合わせたNigamの有名な論文以来,きれいな構造とシンプルなアルゴリズムのため, よく使われるのだけれど,データ全体を何度もなめないといけないため,計算量が問題だった.あと,EMを使う以上,モデルが変な方向へ飛んでいってしまう(局所解につかまる)ため,性能が安定しないという問題があって,ちょっと扱いづらい.

そこで,featureの各クラスにおける出現確率だけをunlabeledデータから求める,というアイディアに基づいて高速化をはかったのがこの論文. ラベルつきデータが少数しか利用できない場合,featureの出現回数の”信頼性”が無くなってしまうので,大量に用意できるunlabeledデータを用いてパラメータを補正する,という感じ.

このとき,データが正例か負例かのどちらかに属する,という仮定を用いて,学習データにおける正例負例の割合をうまく取り込むことで精度を上げている.

Semi-supervised NBだと,わりと最近ではSemi-supervised Frequency Estimate(Su+ ICML’11)という,ワンパスで解いちゃう劇的に速い方法が提案されていて, アイディアもとても似ている.精度では今回提案された手法が優れているよう.計算時間の比較はなかったけど,同じくらい?

Naive Bayesは超有名なので,バリエーションも超大量にあるのだけれど,NBの良いところの一つはマルチクラス分類が自然に行えるところだと思っているので, データが2クラス限定になっちゃうこれはどうかなーと思ったりする部分もある. もちろん,one-versus-allのような仕組みでいくらでもマルチクラスに拡張できるのですが.

このへんは,2010年代っぽくない,とか言う人もいるけど,最近でも時々掘って成果を出している人がいるみたい.


“Unsupervised Transcription of Historical Documents” Taylor Berg-Kirkpatrick, Greg Durrett and Dan Klein, ACL 2013

このあいだ草津にいったときに,ちょっと趣きのある看板をみつけたので,

とか言ってたら,マジで論文が出てきた・・・.主に,むかしのタイプライターとか活版印刷で印刷された, 現在では読みにくくなってしまっている文書をいかにOCRするか,という題材.

モデルは, 言語モデル × typesettingモデル(文字のレイアウト:右にこれくらいズレてる,とか) × inkingモデル(インクのつけすぎで太くなっちゃってるとか) × ノイズモデル(経時変化による文字の欠けとか)を一つひとつ丁寧に組み上げて,Jointしている. 学習はEM.ちゃんと動くのか心配だけど,一つ一つの変数がちゃんと意味を持つよう工夫しているからか(むやみに変数が多くなりすぎないように工夫しているようにみえる), ちゃんと学習できているらしい.

学習したモデルでは,人工的にインクをダバ〜っとこぼした原稿も解読できたりするようで,このへんもなかなか興味深い.モデル自体の解釈も面白そう.


“Scalable Decipherment for Machine Translation via Hash Sampling” Sujith Ravi, ACL 2013

暗号解読のノリで,言語モデル+サンプリングを使って対訳コーパスなしで翻訳をしちゃうお話の続編. 2011年の初出以来,年々進化を続けていて,今回は主に高速化がテーマになっている.

最初はword-to-wordの置換に基づく翻訳だけだったのが,これまでの研究で,さまざまなfeatureが使えるようになったのだけれど, ちょっと計算に時間がかかりすぎるようになってきたので,Hash Samplingという手法で高速化を行っている.

Hash Samplingというのは,あんまりよくわかっていないのだけれど,ベクトル同士の類似度をはかる (指数分布族からのサンプリングに用いる尤度項のテイラー近似は,パラメータベクトルと事例ベクトルの内積を用いて表せるらしい) ときに,feature vectorの空間で直接内積をとる代わりに,適当なハッシュ関数を通して,その間の差分(ハミング距離とか)を用いる方法のよう.

この手法によって,現在のパラメーターに近い語は高い確率でサンプルされ,そうでない語は低い確率,というサンプリングを高速に実現している. {0,1}ベクトルのハミング距離は最近のCPUだとかなり高速に計算できるようで,BLEU値をほとんど落とさずに,2桁くらいの高速化を実現したらしい.

Hash Samplingは,かなり汎用性が高い高速化手法っぽいので,そのうちじっくり読む機会があればいいなと思っている. テイラー展開による近似 + ハッシュによる近似,という2段階の近似を経ているあたりが少し気になったりはする.


“From Natural Language Specifications to Program Input Parsers” Tao Lei, Fan Long, Regina Barzilay, and Martin Rinard, ACL 2013

ICPCなどのプロコンの問題を,コンピュータに解かせよう!というモチベーションがありそうな研究. といっても,今回はまだ問題を解くところまでは行っていなくて,入力データの解析部分に対する挑戦. プロコンの問題では,たいてい,

入力は複数のデータセットからなる. 各データセットは2つの整数 a0 と L が1個のスペースで区切られた1行であり, a0 が最初の整数を, L が桁数を表す. ただし, 1 ≤ L ≤ 6 かつ 0 ≤ a0 < 10L である.

from AIZU ONLINE JUDGE

というような入力データのフォーマット指示がなされているので,これを構文解析して,パーサーを構成するC++プログラムを自動で生成しよう,というテーマ.

用いることの出来るデータは,上に挙げたようなフォーマット指示の問題文(英語)と,実際にプロコン主催者から与えられる入力データ. 直接プログラムそのものへの変換を考えるのではなく,フォーマット指示文から,データ構造を表す “specification tree”を生成し, それを通してparsingプログラム(より正確には,yaccやbisonに入力するような形式文法)の生成を行っている.

モデルは, テキスト中のそれぞれの要素が,他の要素とどのような関係を持っているかを当てるための dependency parsing と, それぞれのノードがプログラム内でどのような役割をもつか当てるための role labeling のふたつの要素で構成されている.

学習は,だいたい次のような流れ.

  1. 現在のモデルから specification tree をサンプリングする
  2. サンプリングされたtreeからプログラムを生成し,テスト用データをすべてパースできるか調べる(feedbackと呼ばれている)
  3. treeがどれくらい良いか,に応じて,Metropolis-Hasting ruleで次の状態を定める

このfeedbackと呼ばれる学習手法によって,F値が54から80程度に向上したらしい. 著者による発表スライドもあるので,興味をもって頂けましたら,ぜひそちらも.

つづく・・・かも?

コンピュータが政治をする時代(あるいは,行列とテキストの結合モデル)について

前回のVanishing Component Analysisに関する記事が思いのほか好評だったようで, なんか自分に対してのハードルあげちゃった感あったり,記事冒頭でデブとか書くんじゃなかった・・・(ハハハ)と後悔してたり...

いつもどおり肩肘はらずに書きますね.例によって,マンスリー読み会で紹介した論文について.

行列と,その列or行に紐づいたテキストが存在するときに,行列をいかによくモデル化するか,というお話です.推薦システム界隈ではわりとよくある感じの話ではあると思うのですが,適用しているデータが面白かったので紹介.

なんと,アメリカ下院議員の(法案に対する)投票行動をモデル化しています.この問題ならではの面白い性質を使っているのかと思いながら読み進めたら実はそんなことも無くて肩透かしを食らった感じではあるのですが.

法案が議会を通過するか(採択されるか)を予測する,というタスクでは,法案のテキストだけが与えられた状況で,90%以上の正解率を達成しています. この数値が高いのか低いのか私には判断がつきかねる(そもそも,提出された法案がほとんど採択されるような状況では予測の意味が無い)ものの,かなり工夫の施された他手法に比べてもそれなりに高い性能を達成しているようです. 特に政治ドメインならではのモデリングを行っているわけではなく,かなりGeneralなモデルなのですが,たとえば,政治に特化した工夫がなされたIdeal Point Topic Model(IPTM)のような既存手法に比べても高い性能,というのはなかなか面白いところです.

割とよくある推薦システムの技術が,議会という,民主主義の根幹を担うおそらく極めて高度なシステムを,表面的にではあるもののエミュレーションできてしまう,というのはなかなか考えさせられるものがあります.

今回の論文では,「議員の過去の投票行動と,法案のテキスト」の間の関係をモデル化しているだけなのですが,外部の情報,たとえば経済指標だとかパブリックコメントだとか,を組み込むことができるとすると(能力のある研究者がその気になれば不可能ではないとはおもいます),コンピュータが政治を行う,という時代も意外と近づいてきているのかもしれません.

は〜ディストピアっぽい.


以下,テクニカルな部分について.私は推薦システムだとかベイズモデルだとかはあんまり詳しくないので,色々間違っているかも.

この論文では,テキストをFocused Topic Modelというトピックモデル,賛否を表す行列をBinary Matrix Factorizationという行列分解モデルで表現しています.

そのうえで,全体を繋ぎあわせるようなバイナリの変数を導入して,全体を一気にMCMCで推定する,という流れ.スライドの最後にも載せておきましたが,グラフィカルモデルにいろいろアノテーションしたものを貼っておきます.小さくて見づらい場合は「名前をつけて保存」とか,よしなに扱って頂いてかまいません.青四角はハイパーパラメータです.

そもそも,何故Focused Topic Modelなのか,何故Binary Matrix Fctorizationなのか,という部分には,論文中にはあまり説明がなかったのですが,ちょっと考えてみたらいくつか理由付け,というか動機の推察ができたのでメモしておきます.

一つは,Focused Topic Modelの性質として,IBPから生成されるバイナリベクトルをトピック分布のサブセット選択に用いているため,トピック分布をスパースになる,というものがあります.スパースであること自体はさほど重要ではないのですが,IBPから出てくるバイナリのベクトルが,Binary Matrix Factorizationのバイナリ表現とうまくマッチする,というのは考えられそうです.両者が等価なものだとはあまり思えないのですが,複数のモデルの間にインタラクションを持たせるための確率変数としては,なかなかよい選択に思えます.

あとは,Focused Topic Modelの論文でも述べられている,コーパスレベルでのトピック生起確率と,個々のドキュメントでのトピック生起確率の相関に関する問題が,”法案”というドメインにおいては顕著に現れるという可能性もあります.私はアメリカの法律なんて読んだことないのですが,もし一つ一つの法案が(互いに語彙の重なりが少ないという意味で)専門的な文書になっているとすれば,Focused Topic Modelの利点が効いてくるのかもしれません.

しかし,これくらいごちゃごちゃしたグラフィカルモデルをまじめに読み解くのは初めてで,なかなか骨が折れました.低ランク近似の周辺なんかは未だにイマイチつかめていませんし,Inferenceのところは理解を諦めてほぼ眺めただけですが,それでもたいへん勉強になりました.

さて,読んでばっかいないで実装しろ,という声が聞こえたので今日はこのへんにて.とりあえず,ビールでも飲みに行ってきます.

どんなデータでも(※)線形分離可能にしてしまう技術,Vanishing Component Analysis(ICML 2013)を紹介してきました

急に蒸し暑くなってきましたね.でぶちんなのでけっこうこたえます.タイトルはちょっと釣り気味.ビビっと来た方は是非論文に目を通してみてください:)

例によって,仲間内でやっている小さな勉強会で論文紹介をしてきましたので,そのご紹介です.ぼくの専門というか興味の中心は自然言語処理なので,ふだんはそっち方面を追っているのですが,勉強会では機械学習方面を中心にいろいろ読んでみてます.

今回は岡野原さんのこのツイートで興味を持った以下の論文を読ませていただきました.名前もかっこいい.ヴァニッシングコンポーネントアナリシス!

タイミングよく,ICML2013読み会という企画に乗っかるチャンスを頂けたので,今回はそちらでもお話させていただきました.会場には40人ほどいらっしゃったでしょうか.思いのほか多くの方が集まっており,演台から会場をみたときにちょっと圧倒されちゃいました・・・.外部でお話するのはとても久しぶりだったのですが,たいへん楽しい会でした.主催の @sla さん,会場を提供してくださった中川先生,ありがとうございました.

この論文は,PCAやICAに代表されるComponent Analysisに,これまでとはまったく別の角度からアタックした論文です.

PCA,ICAというと,特徴量抽出とか信号分離などによく使われているイメージですね.多くの「なんとかComponent Analysis」はデータの成分がある種の確率分布(多くの場合,正規分布)にしたがって生成されているという仮定に立脚しています.また,見つけることのできる成分(基底といいます)は線形なものに限られることがほとんど.

対してこの論文では,「多項式」で表現されるような基底を抜き出すことに焦点を当てています.無理やり1ページで説明しようとするとこんな感じ.

で,興味をもっていただけましたらスライドを眺めていただきたいのですが,この「多項式集合」を特徴量抽出に使うと,いい感じに組み合わせを考慮した素性を抽出することができるようです.しかも,(※多少の前提条件は必要ですが)この方法で抽出した特徴ベクトルを分類問題に適用すると,線形分離できることが保証される,というありがたさ.多項式カーネルを直接用いる分類に比べ,精度がほとんど落ちることなく,分類において最大100倍ほどの高速化を達成しています.

今後もいろいろな展開が考えられる,読んでいて楽しい論文でした.手法や達成した性能自体が凄い,というよりは,これまで機械学習で殆ど用いられてこなかった代数幾何の概念を完成度の高い形で既存の問題設定に組み込んだ.というのがBest Paperとして評価された一因なのかなとも思います.

ICML読み会での発表後にTwitterを眺めていたら,

とのご指摘が・・・.これはすずかけ台の勉強会でも指摘されて,ちょっとアレレってなっていた部分でもありました.説明できなくてスミマセン.

未だにアレレってなっているのですが,たしかに問題自体は多項式回帰の枠組みで考えることもできそうです.ただ,効率的にかつ冗長性を抑えながら,できるだけ小さい次数からFilterしていくということを考えると,イデアルのもつ吸収律を活用する,VCAのような枠組みが有効に働いてくるのではないかと思います.(スミマセン,イデアルとはいったい何なのか,グレブナー基底とはいったい何なのか,未だにあんまりわかってないので自信はありません・・・)

ちなみにこのチーム,すでにDeep Learningへの応用を考えていらっしゃるみたいで,そちらのプレプリントも出てたりします.なんともはや.

他の方の発表も興味深い話が盛りだくさんで,すずかけの方では元同期の @tma15 くんがオンラインコミュニティにおける参加者の寿命を言語的特徴から推測する話(WWWのベストペーパー)を紹介してくれたり,ICML読み会のほうは.

  • 超多クラスのロジスティック回帰の分散学習
  • オンラインのマルチタスク学習(Lifelong Learningというらしいです)の爆速化
  • 重みベクトルのビット数をAdaptiveに調節して省メモリに
  • ローカルには線形なSVMを多数組み合わせることで非線形分類を高速化
  • Deep LearningにおけるRectifierに代わる活性化関数Maxoutの提案
  • 高次の共起を考慮にいれたタグの補完に基づいた高速画像タギング
  • ビデオ映像からの人間の動作認識
  • 複数の目的関数をパレート最適に持っていくようなActive Learning
  • あんまり確率的ではないTopic Modelとその特徴付け

などなど(発表の要旨をつかめてなかったらすみません),何でもありな感じでワクテカ.実際の現場で機械学習を応用されてるPFIの方の発表が多かったこともあり,精度を下げずにいかに高速化するか,という方向性の論文が多かったように思います.

個人的には, @sla さんがオープニングで話してくださった,「なんでもi.i.dを仮定するのはそろそろ脱却して,時間/空間に沿って変化するような動的なデータに対しても理論を作っていくべき」というコメントがたいへん興味深く感じました.

機械学習が実世界に浸透していくにしたがって,これからはひとつのモデルなり分類器なりがそれなりに長く使われることを考えなければならない時期にきているのかなとも思います.そういう状況のもとでは,(たとえば言語の話でいえばその時々で流行語があるように)入力の分布がどんどん変わっていくような状況に対してうまく適応していくような問題設定を明確に意識していく必要がありそうです. @unnonouno さんが紹介してくださった,Lifelong Learningも,そういうモチベーションを含んでいるのかな.

私個人としましては,もう長いこと途絶えてしまっている外部へのアウトプットを再開するよい機会になりましたので,今後は知識を頂くだけではなく,自分の学んだことを共有することを心がけていきたいと感じた会でした.

久しぶりにお会いした方もいらっしゃったので,ゆっくりお話できれば良かったのですが,ちょっと事情がありまして早々と帰宅.また近いうちにお会いできる機会があれば幸いです(人生相談にのっていただきたいのでした・・・)

Programming by Exampleに対する機械学習からのアプローチ(あるいは,「重い」処理を機械学習で「軽く」する,という視点)について

およそひと月ぶりに,仲間内で行っている小さな勉強会で論文紹介をしてまいりました.ICML2013の予稿がちょっとづつ出てきているので,本日はその中から一本.

機械学習を使って,Programming by Example(PbE)をしようという論文です.PbEというのは私も初耳だったのですが,ざっくり言うと,人間が「例」を与えることで,その例をうまく再現するようなプログラムを自動的に生成する,というタスクのようです.

それを部分的に実現している(らしい)のが,Excel2013に新しく搭載されたという“Flash Fill”という機能.ユーザーの意図を推測して,ルールにしたがったセルの補完なんかをしてくれるみたいです.百聞は一見にしかず,以下の動画をご覧ください.

Flash Fillは一行から一行(というよりは,セルからセル)への変換のみがターゲットでしたが,本論文では集計であるとか,重複の削除のように,複数の行にまたがった処理をうまく解く枠組みを提案しています.

具体的には以下の例が分かりやすいかもしれません.

「書き換え前」「書き換え後」の文字列を与えると,それらをうまく繋ぐようなプログラムを生成する,というイメージです.Perlいらず?

手法としてはさほど難しいことはしておらず,無理やり一言でまとめてしまうと,「書き換えプログラム」の生成モデルをPCFGでモデル化して,それぞれの生成ルールの確率をlog-linearで書き,そのパラメータをPCFGのn-best導出を延々と求めながら更新していく,というだけ.見方によっては,あまりICMLっぽくは無いかも.

もちろん,書き換えルールの元になるような基礎的な関数セット(最低限チューリング完全なものがあれば原理的には可能ですが,現実的には重複除去とかカウントとかを用意しておくみたいです)はあらかじめ定義しておかなければならないのですが,あとは探索時間さえ掛ければ任意の書き換えを行うプログラムが生成可能である,というのがポイントです.

ただ,現実的な時間で探索を行うためには探索に優先順位をつける必要があります.そこで,効率的に探索を行うために機械学習を用いて「書き換え」の集合をあつめたコーパスからPCFGのパラメータを学習しましょう,というのがこの論文の本旨のようです.実際,探索が難しいプログラムほど高速化が期待でき,brute forceな方法にくらべると40倍ほど速くなる場合もあるとのこと.

機械学習は「適応的なシステム」を作るのに使われる「重い」手法,というイメージがありますが,もともと原理的に解ける問題を「高速化」するために用いる,という意味で面白い視点を与える論文だと思いました.

ビッグデータ感もなければ,ディープラーニングでもなく,曼荼羅のようなグラフィカルモデルもなんとかダイバージェンスも出てこない論文ですが,なかなか面白かったです.実用に近そうなのもいい.

話は変わりまして,先日大学の同期とのプチ同窓会で10人ばかり集まったのですが,誰一人結婚してなくて笑.もちろん,ある種の集合バイアスもあるとは思いますが,おいおい俺らそろそろみそじやで.

統計データに基づくGoogle各種サービスの生存予測

先日Prismaticを眺めていたら,興味深い記事を見つけたので紹介.

Google Readerの停止がアナウンスされたのは記憶に新しいですね.はじまりあるものは,すべて終わりもあるもの.実際,最近のGoogleはビジネスにならないと判断したプロダクトを大胆に切っていっているような印象をうけます.

この記事では,これまでGoogleが運営してきた350のサービス/プロダクトのデータを,疫学統計でよく用いられる(らしい)Coxモデルとよばれる統計モデルによって解析し,どのようなサービスが今後停止されるおそれが高いのか,分析を行っています.

特徴量

特徴量として用いているのは以下のような情報.詳細な基準は元記事を参照いただくとして,簡単に抜粋してみます.

  • プロダクト名をクエリとしたGoogleのヒット数(そのまま使うのは不公平なので,サービスのリリース時期に応じて補正を加えているそうです)
  • プロダクトのタイプ.サービスなのか,プログラムなのか,モノ(Chrome Bookとか)なのか,それ以外(SoCとかI/Oのようなイベント等)なのか
  • そのプロダクトが,直接Googleに収入をもたらしているか
  • そのプロダクトが,FLOSSであるか,またはFLOSSに直接関係したものであるか
  • そのプロダクトは,他社から買収したもの,またはそれをもとにしたものであるか
  • そのプロダクトが,ソーシャルな要素を含んでいるか
  • そのプロダクトは,Googleが2005年以前にリリースされたものであるか

元記事の著者はこれらの情報をまとめたCSVファイルを公開してくださっていますが,そのままではちょっと見にくいので,Google Docsに転載&ちょっと整形してみましたのでよろしければご覧ください.ライセンスは元記事のとおり,CC0で.

分析結果

このデータをCoxモデルにフィットさせた結果,以下のような要素がシャットダウンのリスクを低減させることが分かったそうです.

  1. Googleが他社から買収したプロダクトではないこと
  2. FLOSSではないこと
  3. Googleに直接収益をもたらすこと
  4. ソーシャルネットワークと関係ないこと
  5. Google検索でのヒット数が多いこと
  6. 2005年以前にリリースされたものであること

2番,4番の要素がちょっと意外.

その結果,以下のようなプロダクトがシャットダウンのリスクが高い,という予測を行っています.

  1. Schemer
  2. Boutiques
  3. Magnifier
  4. Hotpot
  5. Page Speed Online API
  6. WhatsonWhen
  7. Unofficial Guides
  8. WDYL search engine
  9. Cloud Messaging
  10. Correlate

あまり聞いたことないプロダクトが並びます.あれ,Google Boutiquesって閉鎖したんじゃなかったっけ?Google Correlateも,生きていたのが意外です. 逆にシャットダウンのリスクが低いプロダクトは以下の通り.

  1. Search
  2. Translate
  3. AdWords
  4. Picasa
  5. Groups
  6. Image Search
  7. News
  8. Books
  9. Toolbar
  10. AdSense

まぁこちらは妥当な感じ.PicasaやToolbarは微妙な感じもしますが.

元記事には,いくつかの有名プロダクトの5年生存率を計算した表もありますので,そちらもあわせてご覧ください.Google Glassの5年生存率は37%,とか,ちょっぴりセンセーショナルな結果もあります.

まとめ

350ものGoogleプロダクトのデータを用いて,どのようなサービスがシャットダウンのリスクが高いのか分析を行った記事を紹介しました.

特徴量としては,ここに挙げられているもの意外にもさまざまなな要因が考えられるとは思いますが,分析の切り口として面白いものではあると思います.ソーシャルものは苦手だとか,FLOSSには消極的になりつつあるとか,何となく感じていたGoogleの企業としての特徴がデータからも透けてみえるのが興味深い.

個人的には,Google Code Searchのシャットダウンが痛かった...いまだによい代替を見つけられずにいます.