ピーFIの研究開発現場
海野 裕也 (@unnonouno)
自己紹介
海野 裕也 (@unnonouno)	

Preferred Infrastructure	

自然言語処理、機械学習などの研究開発	

画像処理もちょっとやります	

NLP若手の会共同委員長(2014~)
宣伝1:NLP若手の会(YANS)
言語処理の若手研究者が自身の研究を進めるための集まり	

9月にシンポジウム(合宿の予定)、3月の言語処理学会年
次大会期間中に懇親会(飲み会)をやります	

スポンサーも募集する予定です
宣伝2:オンライン機械学習本(4
月発売予定)
第2稿までできました
今日のお題
ピーFIの開発体制とか	

はなしてください
えー、研究開発的なので	

良ければ・・・
ピーFIの研究開発の	

開発スタイルについてはなします
労働環境とか
だいたい40人くらい(9割方エンジニア)	

全員DELLの大きいディスプレイ支給	

椅子はコンテッサ	

Mac 8割	

だいたい10時くらい∼20時くらい(人によってマチマチ)
セミナーとか
PFIセミナー(Ustream中継):週1	

論文読み会:週1	

輪読会:週1	

読書会:週1	

突然論文のリンクが飛んでくる:不定期
だいたいこんな感じ
core = C++
preprocess =
Python
demo = Python +
javascript
server = C++
experiment =
maf
DATA
第一言語アンケート
自由に書きすぎやろお前
ら・・・	

実際はC++が一番多い	

Pythonは一部に根強い
Bash
Scala
C#
OCaml
Go
JavascriptRuby
Python
C++
C++
C++03 (RHEL6対応)	

w/ pficommon, wo/ Boost	

waf (autotoolsは地獄や)	

gtest / cmdline.h / Eigen / jemalloc
PFICOMMON
Boostはバージョンが上がると互換性が切れやすく、製品に
組み込むのには辛い	

Boostのサブセットを独自実装した	

スマートポインタ、ハッシュマップ、HTTPサーバー、
JSON、シリアライザなど
WAF
Pythonの言語内DSLで書かれたビルドツール	

./waf configure && ./waf && ./waf installでOK	

Python DSLなので覚えるのが楽、autotools覚えるの辛い	

unittest_gtest.pyを使うと単体テストも簡単に組み込める
CMDLINE.H
tanakhさん謹製のコマンドライン引数パーザー	

Pythonのargparseとおなじ感覚で使える
C++はここがいい!
CPU命令レベルで最適化できる	

データ構造の工夫の余地が大きい	

メモリ管理まで追求できる
C++はここがいやだ・・・
書くのがしんどい	

データ構造を工夫しないと無駄なコピーが発生する	

メモリの断片化に悩まされる	

もう疲れた・・・
Go

社内的には流行り、サーバーや文字列処理	

Java

GCで固まるので不人気、前職は全部Java	

Javascript

AngularJSの方が好き	

OCaml

構文木とパーサーは楽(Jubatusのコード生成器)	

Haskell

ツカワナイヨ
おまけ:エディタアンケート
Emacsが多数派	

殆どの人はコンソールを全画
面表示	

GUIとは何だったのか・・・
sakura
sublime
vi Emacs
その他の環境
Github Enterprise(以前は社内git + redmine)	

Jenkins	

Slack(以前はSkype)	

maf(実験スクリプト)	

Sphinx(報告書)	

Google Apps
MAF
ビルドシステムのwafを利用した実験スクリプト	

各ジョブで中間生成物(例えば特徴ベクトル)を作って、
様々なハイパーパラメータに対して実験できる	

マルチスレッドで動作するので、並列実行可能
SPHINX
報告書などは基本的にSphinxの日本語LaTeX	

ソースはGithubで管理、HTML版をGithub pagesで参照可	

困ったらSphinxのソースを確認
まとめ
C++は大変	

mafは便利	

Sphinxはオススメ

ピーFIの研究開発現場