タグ

ブックマーク / ny23.hatenadiary.org (4)

  • 移植性の高い Python スクリプトを書く - ny23の日記

    以前 Lua の処理系 LuaJIT が速くて羨ましいという話を書いたが,最近は Python でも JIT コンパイラ PyPy の性能向上が著しいようだ.どれぐらい速いかというと,以前実験した PA-I(機械学習)で LuaJIT での実行速度を上回るぐらい*1.Python はもともとスクリプト言語の中では実行速度が速い方だったが,PyPy の急速な性能向上によって PerlRuby といった競合言語に対して(実行速度の点で)差を広げつつあるようだ. そういうわけで,最近スクリプトを Python で書く機会が増えている.Python でコードを書く上でやっかいなのは(まともな)ワンライナーが書けないこと*2と,(処理系のバラつきに起因する)移植性の問題である.前者はどうにもならないので,perl / ruby / sed + awk などで回避することになるが,後者は公開する

    移植性の高い Python スクリプトを書く - ny23の日記
    dann
    dann 2012/04/20
  • 二進対数の高速計算を用いた単語クラスタリングの高速化 - ny23の日記

    先日実装した単語クラスタリングでは,相互情報量を計算する際の対数計算がボトルネックとなっている.``Premature optimization is the root of all evil'' とは良く言ったものだが,これ以上コードを更新するつもりもなかったので,高価な演算(対数計算)を単純な演算に置き換える定番の最適化を行ってみた. 今回の高速化の対象は, float pmi (float p_ij, float p_i, float p_j) { return p_ij == 0 ? 0 : p_ij * log2 (p_ij / (p_i * p_j)); } という関数.この手の計算を高速化するには,可能な引数に対する結果を事前に計算した lookup table を用意するのが常套手段*1.lookup table を用いた対数計算の高速化手法は,以下の論文で提案されている.

    二進対数の高速計算を用いた単語クラスタリングの高速化 - ny23の日記
  • 機械学習 × MapReduce - ny23の日記

    個人的な興味というより,雑用絡みで眺めた論文の紹介.機械学習アルゴリズムを並列分散化するという話が最近流行っているようだ.全然網羅的ではないけど,誰かの役に立つかも知れないので,幾つかメモしておく.まず古典的にはこれ, Map-reduce for machine learning on multicore (NIPS 2006) 古典的な機械学習アルゴリズム(バッチ学習)の多くは,Statistical Query Model で記述できて,それらは summation form で記述できる (から,MapReduce で並列化できる).実装は Mahout.ただ最近は,バッチアルゴリズムで解ける問題には多くの場合対応するオンラインアルゴリズムが提案されていて,バッチアルゴリズムを並列化することのメリットはあまり無い.オンラインアルゴリズムだとパラメタが連続的に更新されるので,MapR

    機械学習 × MapReduce - ny23の日記
  • 大規模データで単語の数を数える - ny23の日記

    大規模データから one-pass で item(n-gram など)の頻度を数える手法に関するメモ.ここ数年,毎年のように超大規模な n-gram の統計情報を空間/時間効率良く利用するための手法が提案されている.最近だと, Storing the Web in Memory: Space Efficient Language Models with Constant Time Retrieval (EMNLP 2010) とか.この論文では,最小完全ハッシュ関数や power-law を考慮した頻度表現の圧縮など,細かい技術を丁寧に組み上げており,これぐらい工夫が細かくなってくるとlog-frequency Bloom filter (ACL 2007) ぐらいからから始まった n-gram 頻度情報の圧縮の研究もそろそろ収束したかという印象(ちょうど論文を読む直前に,この論文の7節の

    大規模データで単語の数を数える - ny23の日記
  • 1