タグ

ブックマーク / tkng.hatenablog.com (14)

  • Large Scale Learning to Rankを読んだ - 射撃しつつ前転 改

    当は三が日中にまともなエントリを1ぐらいは書く予定だったのだが、ちょっと無理だった。というわけで、実質的に新年一目のエントリです。Large Scale Learning to Rank (D. Sculley, NIPS Workshop on Advances in Ranking, 2009) (pdf) を読んだので、1目のエントリとしてこの論文を紹介したい。 では早速題に入ろう。順位学習において、Pairwise Learningを単純に行うと、n^2の学習コストがかかる。これは計算時間としては厳しい部類に入る。そもそも順位学習ってなに、という人は、WWW2009のチュートリアル(pdf)とかを参照してください。 Bottouらは、SGDの一般化能力はデータセットのサイズに依らず、どれだけのstochastic stepを実行したかで決まると言う事を示した。そこで、Sc

    Large Scale Learning to Rankを読んだ - 射撃しつつ前転 改
  • RethinkDBが良さそうな気がしたので調べてみた - 射撃しつつ前転 改

    日記書くの数カ月ぶりだけど、以下、何事もなかったかのように再開します。 HackerNewsでRethinkDBのニュース記事が上位入賞していたのでちょっと調べてみた。MongoDBライクな感じで、独自のクエリ言語で使えるみたいだ。 RethinkDBは元々はSSDに特化したMySQL用のストレージエンジンだったのが、方向転換してMemcached互換なサーバになった(そしてSSD特化という特徴を捨てた)というところまでは知っていたのだが、いつの間にこんなクエリ言語を備えていたのか。方向転換のニュースを見た時にはふーんぐらいにしか思わずオフィシャルサイトはチェックしなかったので、実は去年の時点ですでにクエリ言語とかも備えていたのかもしれないけど、githubとかで調べた感じだと1.2.0がThis is the first release of the productと書いてあるところから

    RethinkDBが良さそうな気がしたので調べてみた - 射撃しつつ前転 改
    mooz
    mooz 2013/01/08
    いつのまに……「SSDに特化したMySQL用のストレージエンジンだったのが、方向転換してMemcached互換なサーバになった(そしてSSD特化という特徴を捨てた)」
  • たくさんタブを開く人にとってFirefox 5は福音となったか - 射撃しつつ前転 改

    3ヶ月ほど前に、たくさんタブを開く人にとってFirefox 5は福音となる…かも という記事を書いた。 6/21にFirefox 5がリリースされ、実際にFirefox 5が使えるようになった。確かに、Firefox 5になってから、CPU使用率は下がったようだ。タブを100個以上開いた場合でも、CPU使用率は5%程度にまで下がっている。そういう意味では恩恵は大きい。 ここで話が終わればいいのだが、今度は数秒に1度のCPU使用率のスパイクが気になるようになってきた。環境によってスパイクぶりは違ってくるのだが、会社のFirefoxだと、CPU使用率が80%程度にまで一瞬だけ上がる。しかも、そのたびにブラウザが固まる。最近は会社だと暑くて数秒に1回ファンがうるさく回るので、Firefoxを使えなくなってしまった。 数秒に一度のCPU使用率の上昇というと、まず疑うべきはGCだろう。「firefo

    たくさんタブを開く人にとってFirefox 5は福音となったか - 射撃しつつ前転 改
    mooz
    mooz 2011/07/12
    javascript.options.mem.log を true にすると GC の走るタイミングでログを吐いてくれるように.CC: Cycle Collector.
  • google-glogに潜むトリックを解明する - 射撃しつつ前転 改

    google-glogは非常に有名なロギングライブラリであり、その名前からわかる通りgoogleの人々によって開発されている。使い方は簡単で、 LOG(INFO) << "this is not a drill"; みたいな感じで、LOG()が返すオブジェクトoperator<<で記録したいオブジェクトをつなげていくだけで使える。とても便利である。実は、この便利さの裏には、実はいくつかのトリックが隠れている。適当に見た目を真似して作るだけでは、glogと同じような便利さは実現できないのである。今日は、その便利さを実現しているトリックを紹介したい。 なぜLOG()はマクロなのか まず、このLOG(INFO)というのは一見、関数もしくはクラスのコンストラクタかなにかに見える。しかしその実体は実はマクロで、以下のように展開される。 LogMessage(INFO).stream() LOGという

    google-glogに潜むトリックを解明する - 射撃しつつ前転 改
    mooz
    mooz 2011/05/16
  • clangでソフトウェアをビルドしC++を知る - 射撃しつつ前転 改

    clangというのはllvm向けのC/C++/Obj-Cのためのフロントエンドで、最近はGoogle ChromeとかFirefoxもコンパイルできるレベルにまで成熟してきているらしい。 いくつかのブログで紹介されているのを見ても、ふーん、ぐらいにしか思っていなかったのだが、あんな大規模なソフトウェアがコンパイルできるというのは、考えてみるとすごいことである。大事なことなので強調しておくが、すごいことである。十分に実用的なレベルに到達していることだ。ビルドも早いし生成されたコードもg++と同程度には速いというし、試してみる必要がある。 という訳で、いくつか実際にソフトウェアをビルドしてみた。試してみた限りでは、 libstdc++のtr1/unordered_mapがビルドできない C++のコーナーケースで、clangが許容しないものが多い といった問題があったが、割とどれもすんなりとコン

    clangでソフトウェアをビルドしC++を知る - 射撃しつつ前転 改
    mooz
    mooz 2011/05/09
  • 強烈に便利なzshrcの設定 3種盛り - 射撃しつつ前転 改

    タイトルはやや釣りぎみのような気もするが、この設定がないサーバで長時間作業したくない、と思う程度には便利なので、個人的には釣りではないと言える。 ctrl + 矢印で単語単位のカーソル移動 コマンドの真ん中あたりに間違いがあった場合、修正するためにカーソルを移動させるのはちょっとした苦痛である。デフォルトのキーバインドだと、emacsバインディングであればalt + bとかalt + nで単語単位で移動できるのだが、これは片手で打つと親指に無理がかかるキーバインドである。そこで、emacsと同じように、ctrl + ←→ で単語単位の移動を可能にしておく。ついでに、/は単語の一部と見做さない様に設定しておく。この設定により、長いパス名の中程に間違いがあった場合に修正するのが楽になる。 bindkey ";5C" forward-word bindkey ";5D" backward-wor

    強烈に便利なzshrcの設定 3種盛り - 射撃しつつ前転 改
    mooz
    mooz 2010/07/13
    url-quote-magic と make の出力に色付けが便利そう
  • 言語処理のための機械学習入門を読んだ - 射撃しつつ前転 改

    言語処理のための機械学習入門というが出版される、という話はtwitterで知っていたのだが、8月ぐらいに出るのだろうとばかり思っていたら、なんかもう発売されているらしい。Amazonでは早速売り切れていたので、某大学生協の書籍部まで行って購入してきた。おかげで、この週末は280円で過ごすハメになってしまった。 まだざっと眺めただけだが、 ラベルを人手でつけるのに隠れマルコフモデルと言うのは来はちょっとおかしいんだけどNLPの分野だとそう表現する事が多いよ 対数線形モデルと最大エントロピーモデルは同じものだよ 出力変数の間に依存関係がなければCRFではなく対数線形モデルとか最大エントロピーモデルと表現するべきだよ といった、これまでの教科書にはあまり載っていなかったような事が載っているのはとても良いと感じた。こういった情報は、これまではどこかの大学の研究室で学ぶか、もしくはウェブ上の資料

    言語処理のための機械学習入門を読んだ - 射撃しつつ前転 改
    mooz
    mooz 2010/07/12
    参考書籍やリンクも.
  • UnicornでSinatraアプリをデプロイしてみた - 射撃しつつ前転 改

    最近は仕事でSinatraアプリを書いたりしているので、Sinatraアプリを動かすためにはどのHTTPサーバを使うのがベストなのかが気になっている。(先に結論を書いておくけれど、どれがベスト、という唯一の選択肢は今のところありません。適材適所です。) SinatraはRackの上に構築されているので、Rackに対応したHTTPサーバーを使って動かす事になるのだが、この数がやたらと多く、どれを使えばいいのか迷う。代表的なものを挙げただけでも、WebRick, Mongrel, Thin, Unicorn, Passenger(Apacheとかに組み込んで使うやつ), FastCGI, (普通の)CGI、これぐらいは選択肢がある(いくつかHTTPサーバじゃない物も混ざっているが、Rackが対応してるという点は共通している)。 WebRickはそもそもパフォーマンスに重点を置いていないし、Mo

    UnicornでSinatraアプリをデプロイしてみた - 射撃しつつ前転 改
    mooz
    mooz 2010/07/08
    Unicorn で Sinatra を.
  • 単語分割器Micterを公開しました - 射撃しつつ前転 改

    しばらく日記書いてなかったら、また文体忘れて敬体で書いちゃったよ…。でも常体に書き換えるのもめんどくさいのでこのままうpします。 単語分割器を作ったので、githubで公開しました。→http://github.com/tkng/micter 名前は単純にMIC segmenTERでmicterにしました。作ってから気づいたのですが、segmentという単語のうち、最後のtしか名前に入っていません。今更名前を変えるのも面倒なのでこのままにしておきますが、微妙に失敗した感がありますね…。 形態素解析器としては既にmecabやらchasenやらjumanやらがありますし、最近では単語分割&読み推定のkyteaもあります。そんなにいろいろある中でまた似たようなツールを書いたのは、自分のパッケージに取りこめる小さな単語分割器が欲しかったのが理由です。文章を単語に分割する機能だけあればいいんだけど、

    単語分割器Micterを公開しました - 射撃しつつ前転 改
    mooz
    mooz 2010/06/27
    単語分割器. 学習機能付き. FOBOSで最適化を行う線形SVM. "文章を単語に分割する機能だけあればいいんだけど、そのためにmecabに依存するのはめんどくさい、そんな時に使うことを想定しています。"
  • Mozc(Google日本語入力)のコードを読んだメモ - 射撃しつつ前転 改

    Google日本語入力がOSS化されたということで、気になっていたところをいくつか確認してみた。 変換アルゴリズムはどんな感じか? twitterの工藤さんの発言にも「わりと古典的な最小コスト法」とあるけれど、まさにそんな感じ。人名の処理とかでちょっと特別なコードが入ったりもしているが、ほぼ基的な統計的かな漢字変換のモデル。係り受けの情報とかは使っていない。Viterbiでベストパスを求めて、品詞ベースで文節にまとめあげている。コストモデルは接続コストが品詞対品詞で、単語コストの方は単語毎に設定されているっぽい。 src/converter/immutable_converter.ccのImmutableConverterImpl::ViterbiがViterbiアルゴリズムの部分で、その後にMakeSegmentsで文節にまとめている。読むならImmutableConverterImp

    Mozc(Google日本語入力)のコードを読んだメモ - 射撃しつつ前転 改
    mooz
    mooz 2010/05/14
    基本的な統計的かな漢字変換. Bigram の Viterbi. 品詞ベース. ひらカナ変換に Double Array. システム辞書に LOUDS. Darts と rx 使用.
  • 2009年に書いた記事とかを振り返る - 射撃しつつ前転 改

    1月から12月までに何を書いたかとか、その時にどんな事を考えていたかとかを振り返ってみます。後日談もいくつか書いたよ。 2009年1月 昨年の12月に書いたComplement Naive Bayesの記事がウケたが、 Confidence Weighted Linear Classificationを読んだ (あ、これは1月じゃなかった…) SVMにおける損失と正則化 といった記事はウケず、機械学習がウケているのではなく、"はてなが使っている"というところが注目を集めたんだ、とわかってちょっと悲しくなった。 Confidence Weightedはオンライン学習で今のところ最強、と目されてきたわけだが、今年のNIPSでAdaptive Regularization of Weight Vector (AROW)という論文をK. Crammerらが発表した。こちらのアルゴリズムはConfi

    2009年に書いた記事とかを振り返る - 射撃しつつ前転 改
    mooz
    mooz 2009/12/26
    射撃しつつ前転 2009 まとめ。
  • Googleのトップページを開くと毎秒100回JavaScriptが実行されるよ - 射撃しつつ前転 改

    FirefoxがCPUを常に15%ぐらいうのが気になっていたので調べてみたら、Googleのトップページを開くとものすごい勢いでJavaScriptが実行されることがわかった。具体的には、var k=t.value;k!=h&&X(0);h=k というコードが毎秒100回実行されている。このせいで、自分の使っているPCだと、Googleのトップページを開くだけでCPU使用率が2%ぐらい上がっているようだ。Firefox特有の問題というよりは、ウェブページ側の作り方に依るものみたいだ。たぶん他のブラウザでも問題は変わらないだろう。 Googleのトップページの場合、コードを調べてみた限りでは、原因はどうも検索候補の自動補完用のコードみたいだ。現在の入力文字列が過去の記録と違ったら補完の提示をやり直す、みたいなことをやっているように見える。 HTMLではテキストボックス内のテキストが変更され

    Googleのトップページを開くと毎秒100回JavaScriptが実行されるよ - 射撃しつつ前転 改
    mooz
    mooz 2009/09/30
    例の Google Suggest がタイマー使ってテキストボックスを監視しているため。他にも結構こういう荒技を使っているサイトがある模様。
  • 新はてなブックマークでも使われてるComplement Naive Bayesを解説するよ - 射撃しつつ前転 改

    新はてブ正式リリース記念ということで。もうリリースから何週間も経っちゃったけど。 新はてなブックマークではブックマークエントリをカテゴリへと自動で分類しているが、このカテゴリ分類に使われているアルゴリズムはComplement Naive Bayesらしい。今日はこのアルゴリズムについて紹介してみる。 Complement Naive Bayesは2003年のICMLでJ. Rennieらが提案した手法である。ICMLというのは、機械学習に関する(たぶん)最難関の学会で、採択率はここ数年は30%を切っている。2003は119/371で、32.1%の採択率だったようだ。 Complement Naive Bayesの位置づけは 実装が簡単 学習時間が短い 性能もそこそこよい という感じで、2003年段階にあっても、絶対的な性能ではSVMに負けていた。しかし、学習が早いというのは実アプリケーシ

    新はてなブックマークでも使われてるComplement Naive Bayesを解説するよ - 射撃しつつ前転 改
    mooz
    mooz 2009/07/28
    入力パターンのカテゴリを推定する方法。カテゴリ毎に単語の出現確率を計算しておく。Naive Bayes => 入力パターン中の単語の各カテゴリにおける出現確率の積を計算。Complement => 補集合。属さない文書。
  • Firefoxからsshのダイナミック転送を使って非公開サーバへアクセスする - 射撃しつつ前転 改

    sshにはダイナミック転送という機能がある。この機能を使うと、sshはアプリケーション側にはSOCKSプロクシとして振る舞うが、そこからsshの接続先までは暗号化された状態で通信が行われる。 これだけだと通常のトンネリングとどう違うのかよくわからないかもしれないが、ダイナミック転送の場合は転送ポートを指定する必要がない。ここがダイナミックと表現される所以だろう。 例えば、オフィスAにある開発サーバdev1にオフィス外からアクセスしたいとする。しかし、dev1はオフィス外には公開されておらず、踏み台サーバladd1を経由してしかアクセスするしかない。ladd1はsshのみが動いており、これまではsshのトンネリング機能を使ってアクセスしてきたのだが、ウェブアプリケーションをデバッグする際はいちいちウェブアプリケーションのポート毎にトンネルを掘るのが面倒くさい。オフィスに限らずデータセンターへ

    Firefoxからsshのダイナミック転送を使って非公開サーバへアクセスする - 射撃しつつ前転 改
    mooz
    mooz 2009/06/21
    プロクシ自動設定スクリプトってこう書くのか。勉強になった。
  • 1