タグ

ブックマーク / shuyo.hatenablog.com (49)

  • Kneser-Ney Smoothing を試してみた - 木曜不足

    Kneser-Ney Smoothing は高性能な言語モデルである。と、よく聞かされて知っているつもりだけど、まだ一度も試したことがなかったので、試してみた。 コードはここ。 https://github.com/shuyo/iir/blob/master/ngram/knsmooth.py 実験用にべったり書いているのでコピペは多いし、速度やメモリの効率も悪いが、まあ気にしないで。 コーパスは最初手元の適当なニュースコーパスを使っていたんだけど、それだと再現検証できないので、nltk のコーパスを使うように変更した。 nltk.corpus の下にあるコーパスモジュール名を -c オプションで与えると、そのコーパスを使って additive smoothing と Kneser-Ney smoothing の perplexity を出してくれる。 デフォルトでは Brown コーパス

    Kneser-Ney Smoothing を試してみた - 木曜不足
  • PRMLガール 〜 文芸部のマネージャーが「パターン認識と機械学習」を読んだら 〜 - 木曜不足

    放課後の学は、普段なら常時腹を空かせた運動部の連中があちこちにたむろっているのだが、今日は珍しく先客は一人きりだった。 静かな様子にほっとしたカズは、まったり休憩でもしようとジュースを片手に奥の目立たない席を目指す。が、学で筆記用具を広げている女子生徒の横を通り過ぎたところで突然立ち止まった。 振り返ってその先客をよく眺めると、ツインテールの頭をどこか見覚えのある黄色いに乗せて、机に突っ伏すようにして寝ていた。カズは思わず近寄って、の正体を確認するためにのぞき込もうとしたそのとき。 「やっぱ、わかんない! ……って、ひゃあ!?」 「わわっ」 突然跳ね起きたその生徒は、目と鼻の先にいたカズの姿にびっくりして悲鳴を上げた。カズもやはり驚きうろたえてしまった。 二人してしばらくそのまま息をのむようにして顔を見合わせていたが、そのうちどちらともなくぷっと吹き出した。 「あはは、ごめん……す

    PRMLガール 〜 文芸部のマネージャーが「パターン認識と機械学習」を読んだら 〜 - 木曜不足
  • エンジニアから機械学習への要望 - 木曜不足

    Machine Learning that Matters(ICML 2012) 読んだ - 糞ネット弁慶 (Wagstaff ICML2012) Machine Learning that Matters (原論文) 機械学習のトップカンファレンス ICML にて、「機械学習はこのままでいいの?」という感じの論文が発表された。 細かい内容は上の紹介記事を読んでいただくとして*1、乱暴に一言でまとめると「実応用から離れすぎ」ということになるだろう。 あるいは、2章の章題となっている "Machine Learning for Machine Learning's Sake" がこの論文をもっとも端的に表す一言と言ってみるのもいいかも。 内容についてはいちいち同感で、素性だの正則化だの最適化だのいう用語は分野外とのコミュニケーションを拒否しているとしか思えないとか、定量的なこともまあ大事だろ

    エンジニアから機械学習への要望 - 木曜不足
  • LDA のパープレキシティを使うとき - 木曜不足

    NLP2012 のポスター発表にて、LDA の文字を見かけるたびに思わずフラフラ〜と近寄り、あーだこーだ無責任なことを述べていたら、決まって「 shuyo さんですよね?」 なんでも、お茶の水大の小林先生の研究室の学生さんはみなさん揃って(かな?)トピックモデルをなにがしか絡めて研究されており、このブログの LDA ネタを参照していただけているという。なんとも有り難いというか照れくさいというか。 なにがしかのお役に立てているのはもちろん嬉しい反面、n_shuyo は言語処理も機械学習も専門家ではないので、ここに書いてあることを鵜呑みにはしないでいただくことはやっぱりお願いしておかなければ。 というわけで、不足や間違いの指摘は絶賛大歓迎>読者各位 で、ここまで前振り。 そうしたポスターの発表を拝見させていただいていた中で、パープレキシティ周りの扱いがちょっと気になったので、少し思うところをま

    LDA のパープレキシティを使うとき - 木曜不足
  • 極大部分文字列を使った twitter 言語判定(中谷 NLP2012) - 木曜不足

    来たる 3/13〜16 に広島で行われる言語処理学会年次大会(NLP2012)にて発表する「極大部分文字列を使った twitter 言語判定」の論文を公開。 中谷 秀洋, 極大部分文字列を使った twitter 言語判定, 言語処理学会第18年次大会, 2012 http://ivoca.31tools.com/misc/nlp2012_nakatani.pdf 【注】 言語処理学会の公開規定が「大会での発表後」であったため、一旦公開を取り下げていましたが、発表終了したので再公開しました。 http://www.anlp.jp/rules/repository.html 【/注】 第8回 TokyoNLP で発表した「∞-gram を使った短文言語判定」と基線は同じ。ただしその発表の時にお約束していたとおり、17言語の判定精度で 99.1% を達成している。99% 越えは作り始める前から

    極大部分文字列を使った twitter 言語判定(中谷 NLP2012) - 木曜不足
  • メトロポリス法による正規分布からのサンプリング - 木曜不足

    TokyoNLP #9 で tkng さんが MCMC で正規分布からサンプリングしてみたけど、1000件ぐらいだとなかなかきれいな釣鐘型にならない、という話をされていた。 途中の系列を捨ててないということだったので、そのせいでは? と思ってちょっと試してみたが、結論としては、そもそも 1000件くらいではきれいなヒストグラムにならないということがわかった。 それは R で「ちゃんとした正規分布からのサンプリング」を使ってヒストグラムを書けばすぐわかる。あえてグラフは載せないので、自分で実行してみてね。 hist(rnorm(1000), breaks=30) これで終わったら芸がないので、「相関を抑えるにはどれくらい捨てればいいか」を確認してみた。 まずはメトロポリス法による正規分布サンプリングのソース。 スライドで一瞬見ただけなので多分いろいろ違っているだろうがまあ大丈夫? #!/us

    メトロポリス法による正規分布からのサンプリング - 木曜不足
  • #TokyoNLP で「∞-gram を使った短文言語判定」を発表しました - 木曜不足

    TokyoNLP 第8回に のこのこ参加。主催者の id:nokuno さん、発表者&参加者のみなさん、そして会場を提供してくださった EC ナビさん改め VOYAGE GROUP さん& @ajiyoshi さん、お疲れ様でした&ありがとうございました。 今回は「∞-gram を使った短文言語判定」というネタを発表。「短文言語判定」って、要は「このツイートは何語?」ってこと。 こちらが資料。 ∞-gram を使った短文言語判定 View more presentations from Shuyo Nakatani そして実装したプロトタイプ ldig (Language Detection with Infinity-Gram) とモデル(小)はこちらで公開。 https://github.com/shuyo/ldig 言語判定とは「文章が何語で書かれているか」を当てるタスクで、以前一度

    #TokyoNLP で「∞-gram を使った短文言語判定」を発表しました - 木曜不足
  • Erlang の if 文のガード(条件節)に記述可能な関数 - 木曜不足

    何にでも手を出すのが信条、今巷で流行っているという噂の Erlang に手を出さずにおくべきか! というわけでは必ずしもないんだけど、ちょっと Erlang かじってます。 実は関数型言語を触るのは事実上初めてなので ( XSLT も一応関数型に分類されているけど、ちょっと違うしなあ)、ずいぶん戸惑いつつ、Programming Erlang あたりをせっせと読む今日この頃。 で、戸惑ったことは結構いろいろあるわけだが、「 illegal guard expression 」と頻繁に怒られてしまうことに一番参った。 これは例えば以下のように書くと出る。 X = 9. if math:sqrt(X) == 3 -> ok end. guard というのは if や when に使う条件節のことで、この場合は math:sqrt(X) == 3 のこと。 でも何が illegal なのかわから

    Erlang の if 文のガード(条件節)に記述可能な関数 - 木曜不足
  • 「機械学習とパターン認識」(PRML)のアンチョコ by herumi - 木曜不足

    社内で「機械学習とパターン認識」(PRML) の読書会をやっているのだけど、計算がやっぱり難しいようでみんな苦戦中。 そんなこんなで、光成さん(@herumi さん)が PRML の数式を手抜き無しで解説するアンチョコ(虎の巻 / PRML教科書ガイド)をマメに作ってくれている。*1 PRML のための数学(PDF) 内容は PRML の2章から4章と、9章、PRMLでもっとも計算が難しいと評判の10章を対象としている。 たとえば2章のアンチョコでは、2章の中で必要とされる解析や線形代数の道具(積分の変数変換、行列の各種操作)を一通り取り上げた後、ガウス分布の最尤推定における平均や分散による偏微分という、おそらく多くの人がつまづくのだろう計算がきちんと説明されている。 また3章のアンチョコでは、Woodbury の公式やヘッセ行列を解説しつつ、エビデンス関数などを導出しているし、4章になる

    「機械学習とパターン認識」(PRML)のアンチョコ by herumi - 木曜不足
  • 「数式を numpy に落とし込むコツ」を HMM に当てはめてみる - 木曜不足

    数式をnumpyに落としこむコツ View more presentations from Shuyo Nakatani という発表を Tokyo.SciPy #2 でさせてもらったのだが、発表&資料作成の時間の関係で、実際に数式を解釈する例を2つしか入れられなかったのが残念なところ。 今、社内 PRML 読書会で 13章の隠れマルコフをやっつけていて、その Baum-Welch の更新式がちょうどいい題材になっていることに気付いたので、ここで取り上げてみる。 (PRML 式 13.36) 結構複雑な印象のある数式だが、こいつも資料の流れに従えば簡単に実装できてしまうことを見ていこう。 数式を読み解く 数式を書き換える numpy に「逐語訳」する というわけでまず「読み解き」だが、これが一番重要なステップ。 特に今回の式の場合は , , の正体をちゃんと見極めておかないといけない。 「正

    「数式を numpy に落とし込むコツ」を HMM に当てはめてみる - 木曜不足
  • Interactive Topic Modeling を読む (Hu, Boyd-Graber and Satinoff ACL2011) - 木曜不足

    9/3 の ACL 読み会で読む [Hu+ ACL11] Interactive Topic Modeling(ITM) の資料です(途中ですが力尽きましたすいません……)。 【追記】 ディリクレ木と Interactive Adding Constraints and Unassigning(←これがこの論文のキモ!) についての説明を追加しました。 【/追記】 Interactive Topic Modeling(ITM) とは 通常の LDA は教師無しであり、結果の制御は基的にできない baseball と football が同じトピックに入って欲しいと思っても、うまく分類されない場合はパラメータを変えて試行錯誤するとか、分類後にトピックをクラスタリングするか ITM は LDA に「単語AとBは同じトピックに入って欲しい」という制約を「後から」入れられるモデル Notatio

    Interactive Topic Modeling を読む (Hu, Boyd-Graber and Satinoff ACL2011) - 木曜不足
  • ベイズの公式は地味に難しいので、確率の乗法公式を2回使おう - 木曜不足

    ベイズの公式はこんな形をしている。 これは実際に使おうと思ったら、意外と難しい。 例えば PRML (5.164) 式はこうなっている。 これをベイズの公式から出そうとしたら X と Y をどうしたらいいのやら。いや、なんか X と Y に当てはめようがないのもあるぞ。 そもそも「ベイズの公式を正しく憶える」のもなにげにハードルが高い。えーと、X と Y と X|Y と Y|X のどれが上で下で……。 でも、確率の乗法公式を2回使う方法なら、簡単。 まず同時分布を見極める。 上の (5.164) 式の右辺 p([A]|・)p([B]|・) の [A][B] の位置に出てくる変数に注目しておいて欲しい。 同時分布の確率変数は [A] と [B]、つまり w と D であり、残りは given なパラメータ or 変数なので、 がここで注目したい同時分布。 次はこの同時分布を [A] に使われ

  • 階層ディリクレ過程を実装してみる (2) HDP-LDA の更新式を導出・前編 - 木曜不足

    階層ディリクレ過程を実装してみる (1) HDP-LDA と LDA のモデルを比較 - Mi manca qualche giovedi`? の続き。 今回も [Teh+ 2006] に基づいて、Chinese Restaurant Franchise(中華料理店フランチャイズ, CRF) の枠組みで Hierarchical Dirichlet Process(階層ディリクレ過程, HDP) の Collapsed Gibbs sampling 推論を行う場合の更新式を導出していく。 まず今回は一般の HDP を CRF に落とすところ。次回はそこから full conditional を導出([Teh+ 2006] にある および t や k の事後分布を導出)、そして次々回あたりで、それらの更新式を HDP-LDA に当てはめた場合(つまり前回記事の base measure H

    階層ディリクレ過程を実装してみる (2) HDP-LDA の更新式を導出・前編 - 木曜不足
  • R で識別器を作ってみるのに必要な散布図の書き方・正規化の方法(iris データセットを例に) - 木曜不足

    PRML 4章とかを読んで、ちょっと試しに識別器を実装してみたい! というとき、初心者的にはデータセットをどこから持ってくるか、そのデータセットをどう使うか、実行結果をどうやってグラフなどに出力するか、といったあたりが悩み。 R はそのへんとてもよくできていて、すごくラクチン。 まず結構な数の著名なデータセットがあらかじめ入っている。その一つである iris dataset を例に「識別器を試作するための準備」について説明していこう。 iris dataset は、3品種(setosa, versicolor, verginica)のユリの花それぞれ50について、花の萼(がく)の長さと幅、花弁の長さと幅を測ったもの。 iris はデータがきれいに分かれているので、どんな識別器にわせてもそこそこ良い結果が出る。初心者が達成感を得るのに最適(笑)。 R での iris データセットの利用は

    R で識別器を作ってみるのに必要な散布図の書き方・正規化の方法(iris データセットを例に) - 木曜不足
  • はじめての生成文法・前編 - #TokyoNLP 5 - 木曜不足

    第5回 自然言語処理勉強会@東京 にのこのこ行ってきました。 いつもいつもありがとうございます>主催の @nokunoさん、会場の ECナビさん(@ajiyoshiさん)、発表者、参加者の皆さん 今回も、いつものように新境地で「生成文法」について発表させてもらった……という予定だったのだが、資料作りが間に合わず*1&分量がインフレを起こして、急遽前後編にわけさせてもらったら、生成文法が出てくる直前で「次回に続く」。ほんとすんません&次回もよろしく。 【追記】 後編はこちら。 「はじめての生成文法・後編」を TokyoNLP で発表してきました。 - Mi manca qualche giovedi`? 【/追記】 こちらが資料。眠くて変なテンションで、ずっとネイティブの関西弁でしゃべりとおしてたような気がする。まあ過ぎたことだし。 はじめての生成文法・前編 - #tokyonlp 5 Vi

    はじめての生成文法・前編 - #TokyoNLP 5 - 木曜不足
  • CICLing 2011 行ってきました - 木曜不足

    早稲田大で行われていた CICLing 2011 (International Conference on Intelligent Text Processing and Computational Linguistics) の最終日にのこのこ行ってきました。 FSNLP の 10章をちょうど読み終わったばかりという初心者が、自然言語処理の国際会議を聴きに行っちゃう無謀っぷり。 ちょうど1年くらい前、まだ PRML の 10章を読んでた頃に SIG-DMSM #12 (IBISML の前身?)に のこのこ行って、「わかるところはなんとかギリギリ。わからんところは言葉からしてさっぱりわからん……」と知恵熱でそうなほどぐるぐるしてたりしてたわけだが、ちょうどおんなじ感じ。 国際会議なんだから、感想も英語。 CICLing 2011 retrospective | Shuyo's Weblog

    CICLing 2011 行ってきました - 木曜不足
  • LDA で実験 その1:stop words の扱い方でどう変わる? - 木曜不足

    LDA Python 実装編 LDA 解説編 というわけで連載じゃあないけど第3回。わざわざ自前で実装したんだから、LDA で細かい設定で実験してみる。 NLTK のブラウンコーパスの 0〜99 までの 100 個のドキュメントをコーパスとし、トピック数は K=20、ハイパーパラメータはα=0.5, β=0.5、イテレーションは 100 回、というのが基条件。*1 そして stop words の扱いを「除外(-s 0)」、「除外しないで他の単語と同様に扱う(-s 1)」、そして「初期化時にストップワードを1つのトピック(k=0)に集中させる。その他の単語は残りのトピック(k>0)に分散させる (-s 2)」と変えてみて、それぞれ 10回推論を行わせて、perplexity やトピック-単語分布について確認する。ただし -s 0 のときは -s 2 との対比でトピック数 K=19 にして

    LDA で実験 その1:stop words の扱い方でどう変わる? - 木曜不足
  • Mahout の開発環境を Maven+Eclipse で作る (3) Eclipse で Hadoop の開発環境を作る - 木曜不足

    Mahout の、と言いつつ今回も Hadoop の話ばかり。 Hadoop は各ノードにアプリケーションを配布する関係から、通常 jar を作らなければならない。そのため、Eclipse で書いたコードを実行するのもデバッグするのも非常にめんどくさい。 でもうまくやれば、スタンドアローンモード限定だが、Eclipse から jar も作らずそのまま Map-Reduce ジョブを起動できる。デバッグ実行もできるので、ブレイクポイント入れてステップ実行とかも可能だ。 今回はそういう環境の作り方の話。ずいぶん苦労したけど、出来るようになったら簡単。 Eclipse のセットアップなどは済んでいるものとする。Mahout の開発環境を Maven+Eclipse で作る (1) - Mi manca qualche giovedi`? 参照。 なお、Hadoop を展開すると contrib/

    Mahout の開発環境を Maven+Eclipse で作る (3) Eclipse で Hadoop の開発環境を作る - 木曜不足
  • Latent Dirichlet Allocations(LDA) の実装について - 木曜不足

    昨日の "Latent Dirichlet Allocations in Python" の続きで実験結果を載せようかと思ったけど、先にやっぱりもうちょっと LDA を説明しておこう。 LDA の初出は [Blei+ 2003] Latent Dirichlet Allocation 。 ただし [Blei+ 2003] で "LDA" としているのはトピック-単語分布がただの多項分布(事前分布無し)のもの。"LDA" としてよく目にするトピック-単語多項分布にディリクレ事前分布が入ったものは "Smoothed LDA" として記載されている(確かにβでスムージングしているのと等価)。 今回実装した LDA も後者の "Smoothed LDA"。 その LDA はこんな感じ。αとβはハイパーパラメータだから、チビ黒丸で書いて欲しいんだけどね。 (図は Wikipedia-en の LD

    Latent Dirichlet Allocations(LDA) の実装について - 木曜不足
  • Latent Dirichlet Allocations の Python 実装 - 木曜不足

    LDA とは "Latent Dirichlet Allocation"。文書中の単語の「トピック」を確率的に求める言語モデル。 「潜在的ディリクレ配分法」と訳されていることもあるが、その名前だと「それってなんだっけ?」という人のほうが多そうw。 各単語が「隠れトピック」(話題、カテゴリー)から生成されている、と想定して、そのトピックを文書集合から教師無しで推定することができる。特徴は、果物の apple音楽apple とコンピュータ関連の apple を区別することが出来る(ことが期待される)という点。そのために、どのトピックを生成しやすいかという分布を各文章も持つ。細かい話は略。 結果の見方としては、定量的にはパープレキシティを見るし(一般に小さいほどいい)、定性的には各トピックがどのような単語を生成するか、その確率上位のものを見てふむふむする。この「各トピックが生成する単語」

    Latent Dirichlet Allocations の Python 実装 - 木曜不足