タグ

ブックマーク / hillbig.cocolog-nifty.com (19)

  • C++の便利ツール・ライブラリ - DO++

    フルタイムで働きはじめて4ヶ月。 いろんなことがありました。 今日はインターンが来ているということもあり日頃のC++コーディングライフの中で大変重用しているツールを紹介します。といってもどれも有名なツールでググれば解説がでてくるとは思いますので、一言ずつだけ紹介してみます。みなさんも何かよさげなライブラリ・ツールがありましたら教えてください。 - valgrind/callgrind/cachegrind プログラムの実行結果を解析するツール群。まぁ、王道であえて紹介する必要はないかもしいませんが.。valgrindはプログラムのどこかでメモリが漏れているかどうかのチェックに使います.コードのどの部分で確保した領域がどこで漏れているかまで追跡することができます valgrind --leak-check=full command プログラムのどのが計算量的にボトルネックになっているかを調べ

    C++の便利ツール・ライブラリ - DO++
  • http://hillbig.cocolog-nifty.com/writingpaper.txt

  • 博士生活振り返り - DO++

    ずっとドタバタしていたのですが、ようやく新しい生活のリズムがでてきました。 無事、情報理工学の博士号を取得して卒業し、4月からPreferred Infrastructureでフルタイムで働いています。 研究方面からのお誘いもいろいろあったのですが、会社一に専念しております。 ただ、研究活動はこれからも会社のバックアップのもとしていきます。 また、3月に結婚もしました。 年明けから博士卒業、結婚の二柱に加えてNLPチュートリアル、会社の仕事とテンパってました。 なんとか体を壊さず乗り越えられたのはみなさんの助けです。 しかし、喉元過ぎると熱さ忘れるという言葉通り、「これはもうだめだろう」と追い詰められていた時の気持ちを既に忘れつつあります。 誰かの参考になるかもしれませんので、この時の気持ちも含め博士3年過ごして感じたことや、研究の話とかを思い出せる範囲で書いてみます。 --- 私が修

    博士生活振り返り - DO++
  • NLP2010 言語処理学会チュートリアル - DO++

    今日から開催されている言語処理学会のチュートリアルで ”超高速テキスト処理のためのアルゴリズムとデータ構造” というタイトルで発表させていただきました。 チュートリアル資料はこちら(pdf)です。(出典などは適宜追加します) 今までいろいろなところで話してきた、オンライン学習、文字列、疎ベクトルデータ構造を最新の話を追加して、さらに乱択化(Hash Kernel, 乱択化SVD)を解説しています。 発表自体は途中でブルースクリーンが出るということもありましたが、なんとか終えられてよかったです。 これに付随していろいろツールを公開する予定だったがまにあわなかった。そのうち公開します

    NLP2010 言語処理学会チュートリアル - DO++
  • 天気予報から機械学習、金融工学まで - DO++

    もう随分経ちますが,先日CompView秋の学校というのに行き,2泊3日みっちり機会学習を勉強してきました.講師陣は豪華でどの話も面白かったのですが特にElad Hazanによる"Prediction in the dark: the multi-armed bandit problem"が非常に面白かったです. その話を説明するために,まず簡単ながら驚くべき性能を達成するアルゴリズムを紹介しましょう. 解きたい問題は,毎日,次の日の天気が晴れか雨かを予想する問題です.t日目が晴れの場合 y(t)=1, 雨の場合 y(t)=0と表すことにしましょう.t日目にy(t+1)を予想するわけです. さて、自分は天気の専門家ではないので,自分で予報せずに,専門家に頼ることにしてみます.M人の天気予報士がいて,それぞれが独自に次の日の天気を予想しています.i人目の天気予報士のt日目の予報をp(i,t)

    天気予報から機械学習、金融工学まで - DO++
  • netflix prize is over, 時間経過による嗜好性の変化 - DO++

    米国のオンラインDVDレンタルサービス「Netflix」が、現在利用しているレコメンデーションシステムの性能をはじめに10%改善したチームに100万ドルの賞金を与えるという触れ込みで始まったnetflix prizeは当初の予想よりも時間がかかったが、つい最近最初からトップを走り続けていたbellkorと、上位陣のコラボレーションのチームが10%の壁を破った(leaderboard)。 彼らの手法は「非常に多くの様々な種類のレコメンデーションシステムの結果を混ぜ合わせる」という愚直だがいかにも精度が出そうだという方法を採用している(、と昨年度の結果からは思われる。近々詳細は出るだろう。) 実際に使ってとどめになったかどうかは分からないが、彼らのチームの主要メンバーがKDDで新しい手法を発表しており、単一の手法による最高精度を達成している。ちなみに今年のKDD(データマイニング系の学会の最高

    netflix prize is over, 時間経過による嗜好性の変化 - DO++
  • NAACL/HLT 2009報告 - DO++

    コロラド・ボルドーで開催されたNAACL/HLT 2009に行ってきました。 NAACLは自分の中での分類では自然言語処理の学会で統計的な手法とかが多い学会に思える(それに対しヨーロッパではEACLでは文法とか言語理論とかが多い)。比較的自分にあう学会。 開催地となったコロラド大ボルダー校はとてもきれいなキャンパスで(、「全米で最も美しいキャンパス」の4位にランキング)、宇宙飛行士をたくさん輩出してたり、ノーベル物理学賞を4名輩出するなど、研究レベルも高いそうです。 で、学会は適当に休みながらまったり聞いていたのですが全体的に教師無学習に関する話が多かったような気がします。教師有学習による言語処理がある程度成熟してきているのに対し、教師無の方はまだまだ伸びしろが多いので研究がしやすいのでしょう。教師無に利用するモデルも、単純な混合分布から、様々な分布が入り乱れる複雑なグラフィカルモデルにな

    NAACL/HLT 2009報告 - DO++
  • DO++ : 長ければいいわけではないのだが・・

    Frustratingly Easy Domain Adaptation, Hal Daume III ACL 2007 to appear(pdf) はドメイン適用問題での現在の最高精度を、perlで10行ぐらい書いて入力データを変換させたら達成できたよという論文。Frustratingly(訳:ストレスのたまるほど) と書いたほど、簡単な方法。 俺も修論の発表で、成果の重要度を、高い順に並べたとき(C++の)ソース量で考えると10行、500行、1万行。そして、発表の流れ上、二つ目、三つ目の内容を捨てざるを終えなかった。その時の気持ち・・ --- 上の論文は名前が面白いだけじゃなく、内容も面白いので簡単な説明 ドメイン適用は実アプリケーションではよく問題になることで、学習器を作ろうとしたとき、ある分野(例えば新聞記事)に関する正解データは大量にあるけど、今から解こうとしている問題(例えば

    DO++ : 長ければいいわけではないのだが・・
  • ohmm(オンラインEMによるHMM学習)をリリースしました - DO++

    Ohmm-0.01をリリースしました [Ohmm 日語] [Ohmm English] これは、以前のブログで書いた、オンラインEM法をそのまま素直に隠れマルコフモデル(HMM)に対し適用したライブラリです。 使う場合は、単語(アクセス履歴とかなんでもよい)に分けられているテキストを入力として与えれば、HMMによる学習を行い、結果を出力します。他で利用できるように、パラメータを出力したり、単語のクラスタリング結果を出力します。 HMM自体は、言語情報やアクセス履歴、生物情報(DNA)といったシーケンス情報において、前後の情報を用いて各要素をクラスタリングしたい場合に用います。 ライブラリの特徴はオンラインEMの特徴通り、従来のEMよりも速く収束します。一応標準的な最適化手法(スケーリング、スパースな期待値情報の管理)もいれているので、そこそこ高速に動きます 速度的には100万語、隠れ状

    ohmm(オンラインEMによるHMM学習)をリリースしました - DO++
  • オンラインEMアルゴリズム - DO++

    EMアルゴリズム(Expectation Maximizationアルゴリズム、期待値最大化法、以下EMと呼ぶ)は、データに観測できない隠れ変数(潜在変数)がある場合のパラメータ推定を行う時に有用な手法である。 EMは何それという人のために簡単な説明を下の方に書いたので読んでみてください。 EMのきちんとした説明なら持橋さんによる解説「自然言語処理のための変分ベイズ法」や「計算統計 I―確率計算の新しい手法 統計科学のフロンティア 11」が丁寧でわかりやすい。 EMは教師無学習では中心的な手法であり、何か観測できない変数を含めた確率モデルを作ってその確率モデルの尤度を最大化するという枠組みで、観測できなかった変数はなんだったのかを推定する場合に用いられる。 例えば自然言語処理に限っていえば文書や単語クラスタリングから、文法推定、形態素解析、機械翻訳における単語アライメントなどで使われる。

    オンラインEMアルゴリズム - DO++
  • 大規模データを基にした自然言語処理 - DO++

    人工知能問題研究会 (SIG-FPAI)でタイトルの題目で一時間ほど話してきました。 発表資料 [pptx] [pdf] 話した内容は - 自然言語処理における特徴ベクトルの作り方と、性質 - オンライン学習, Perceptron, Passive Agressive (PA), Confidence Weighted Learning (CW) 確率的勾配降下法 (SGD) - L1正則化, FOLOS - 索引を用いた効率化, 全ての部分文字列を利用した文書分類 で、スライドで70枚ぐらい。今までの発表とかぶっていないのはPA CW SGD FOLOSあたりでしょうか オンライン学習、L1正則化の話がメインになっていて、その両方の最終形の 確率的勾配降下法 + FOLOSの組み合わせは任意の損失関数に対してL1/L2正則化をかけながらオンライン学習をとても簡単にできるという一昔前

    大規模データを基にした自然言語処理 - DO++
  • ベンチャーの興し方 PFI編 - DO++

    ベンチャーの話を昨日、R2P IST 1周年記念シンポジウム [link]というところでしてきました。 発表資料 [pptx] [zip(pdf)] Preferred Infrastructure (PFI)という会社をどのようにやってきたか、学生と会社の関係とかの話です。 話すこと前提で書いているのでパワポだけではちょっと話の流れが見えにくいかも。会場やその先の飲み会ではもうちょっと突っ込んだ話をして面白かったのだが、そこが書けないのが残念。直接聞いてください。 Choose magnets to a craft store and then you can begin looking for the interchangeable accents you can create. What we do in this step is convince our subconscious

    ベンチャーの興し方 PFI編 - DO++
  • レコメンド, LSH, Spectral Hashing - DO++

    WEB+DB press vol.49にレコメンド特集の記事をtkngさんと書きました。 内容は最初は、協調フィルタリングやコンテンツマッチの簡単な話から、特徴量をどのように表すか、大規模データをどのように処理するかにいき、特異値分解などの低ランク行列分解によるレコメンドやRestricted Boltzmann Machineといった最近のnetflix prizeの上位の手法など、かなり突っ込んだ議論もしてます。 個人的には三章でLocality Sensitive Hash(LSH)について扱っているあたりがお勧めです。 レコメンドの内部の問題を極言すると、データというのは疎な高次元の数値ベクトル(数百万次元とか)で表され、クエリでベクトルが与えられた時、これと似たようなベクトルを探してこいという問題になります。”似たような”を数学的にいえば、クエリのベクトルとの内積(各ベクトルは長

    レコメンド, LSH, Spectral Hashing - DO++
  • 昨年の論文をふりかえる - DO++

    新年すっかりあけてました。 今年もよろしくお願いします。 年末年始はドタバタして昨年を振り返られなかったのですが、せっかくなので2008年に読んだ論文で私個人のベスト5を以下に列挙してみます。 D. Sontag, et. al. "Tightening LP Relaxations for MAP using Message Passing", UAI 2008 [pdf] Graphical ModelのMAP推定問題で従来解けなかった規模の複雑さの問題を高速にしかも最大であるという保障付きで解けるようにした。書いたメンバーはこの問題に関するオールスターのような感じ。解く問題は、n個の頂点からなるグラフで、各頂点には変数x1...xnがついていて、各頂点と各枝に対し関数gi(xi)、gij(xi,xj)が与えられた時、∑i gi(xi) + ∑ij gij(xi,xj)が最大となるよう

    昨年の論文をふりかえる - DO++
  • DO++: 海外のブログのお勧め

    海外のブログでお勧めはどういうのありますかとよく聞かれるのでかいてみます。 といってもそんなないけど。 Terence Tao 非常に幅広い分野の第一線で活躍している数学者のテレンスタオ[jawiki]のブログ.ブログで毎回新しい定理を証明しちゃったり、突然、相対性理論の分かりやすい証明をしたりとすごい.コメントでの議論も丁寧. ブログで書いたのをまとめたが出るそうですが、目次を読むとブログの範疇をこえてる・・ natural language processing blog 自然言語処理ではたぶん一番有名なブログ. による.いろいろな手法の解説から現在ある問題(自然言語処理以外にもアカデミック的な問題とかも含め).守備範囲が大体私と似ていて読んでいて楽しい.ちなみにHal Daumeはハスケラーで、そこそこ有名なhaskel tutorialかいてたりする Google Resear

    DO++: 海外のブログのお勧め
  • DO++: 機械学習による自然言語処理チュートリアル

    自然言語処理のときに使う機械学習手法のテクニックをざーっと2時間程度で紹介してほしいとのことだったので今日話してきました。基的に、そんなに頑張らなくても効果が大きいものを中心に説明(特にパーセプトロンとか)を説明してます。 紹介した手法はパーセプトロン、最大エントロピー、正則化、多クラス分類、系列分類(CRF, Structured Perceptron)などなどです。どれも一かじりする感じで網羅的に見る方を優先してます。個々の詳しい話はそれぞれの文献や実装などを当たってみてください。 スライド [ppt] [pdf] ここで話しているのは線形識別モデルの教師有り学習が中心で教師無し学習(クラスタリングなど)など他の自然言語処理を支える技術は省いてます。 こういうのを使って(使わなくてもいいけど)どんどんアプリケーション作らないといかんね。 Tarot is not used to ma

    DO++: 機械学習による自然言語処理チュートリアル
  • DO++: 自然言語処理の話

    先日、自然言語処理はどのように役に立つのかというので酒の席で討論になりました。 自然言語処理とは、人が日常的に使っている自然言語(コンピュータ言語との対比でそうなってるらしく、日語とか英語とか)をコンピュータに処理させる技術で、様々な技術と問題が融合する境界領域です。純粋な言語理論だけではなく、人工知能やら統計やら何でもまじってます。広義だと情報検索(の基盤といったほうがいいかな)とかも含まれます。 絵とか動画がいくらリッチな情報だとは言え、「昨日私がクーラーかけっぱなしのまま、裸で寝てしまい風邪をひいた」ということを言語情報無しで正確に伝えるのは難しいです。世の中の殆どの情報は自然言語で表されています。 で、自然言語処理が抱える宿命として、人にやらせると、言語処理は、ほぼ100%できてしまうということがあります。難しくないのです。 これは他の学問ではあまり見られないことで、例えば300

    DO++: 自然言語処理の話
  • OLL: オンライン機械学習ライブラリをリリースしました。 - DO++

    様々なオンライン学習手法をサポートしたライブラリ「OLL (Online-Learning Library)」をリリースしました。 プロジェクトページ 日語詳細ページ 学習、推定を行なう単体プログラムと、C++ライブラリからなります。(C++ライブラリ解説はまだ)。 New BSDライセンス上で自由に使えます。使った場合は感想や苦情などいただけると幸いです。 オンライン学習とは、一つずつ訓練データを見てパラメータを更新していく手法で、訓練データをまとめて見てから学習するバッチ学習(SVMs, 最大エントロピー法)と比べて非常に効率良く学習を行なうことができます。それでいながらSVMs, やMEsに匹敵する精度が出ます。 学習するデータの性質にもよりますが、例えば、英語の文書分類タスクで、15000訓練例、130万種類の素性の訓練データに対する学習が1秒未満で終わります(SVMsだと実装に

    OLL: オンライン機械学習ライブラリをリリースしました。 - DO++
  • DO++ : 線形識別器チュートリアル

    ワークショップ中の夕で話したのですが、今のところ日で(素性関数ベース&線形識別器)機械学習のいろいろな手法をまとめて体系的に教えてる資料などがあまりないなぁという話をしていました。 で、探すと、このあたりの大部分をまとめて説明しているいいチュートリアル(英語)がありました。 夏の学校資料[pdf] その他のコードやリンク ちょっとだけ解説 現在自然言語処理の多くで使われている学習器は線形識別器です。 入力x(例:単語、文、文書)から出力y(例:品詞、品詞列、文書のトピック)を予測したいという場合は、(x,y)のペアからいろいろな値を取り出し(x,yのペアから値を取り出す関数を素性関数と呼ぶ)、その値を並べたベクトルを素性ベクトルと呼び、f(x,y)とかきます。そして、その素性ベクトルf(x,y)と同じ次元数を持つ重みベクトルwとの内積を測って、その値が正か負か、または大きいか小さいかを

    DO++ : 線形識別器チュートリアル
  • 1