NLP若手の会第9回シンポジウム (YANS2014) まとめ
「明日の発表、はじめて話す内容なのにスライド半分くらいしかできてないけどもう無理」と寝てしまったときに限ってひどい悪夢を見るのですが、どうしたらよいでしょうか
2014-09-22 07:12:31NLP 若手の会シンポジウム、Google 牧野 (@ta_makino) さんの招待講演です〜「研究の現場におけるコードの検証と共有」という内容です! #yans2014
2014-09-22 13:41:39「このコードで本当にいいのか?」一人で書いて誰にも見られないコード……。ウェット系の研究では実験ノートが重要。ドライ系はコードがあれば再現可能?いやいや……。最初の論文に使ったコードはどこにある?動かせる?データは再生成できる?#yans2014
2014-09-22 13:44:03科学の前提は、客観性と検証性(反証可能性)。新しい技術を取り入れて、研究ブロセスを再構築したい。まず、書いたコードの管理。前処理スクリプト、メインのプログラム、出力を後処理してグラフ化するコマンド。実はメイン以外も重要。管理しなさいといまはあまり言われていない。#yans2014
2014-09-22 13:46:16コードの管理に必要な条件。いつでも以前の状態に戻せる。複数人がコードを修正・マージできる。誰が何を(なぜ)変更したのか調べられる。バックアップ。これらを実現できる、バージョン管理システム (git, cvs, ...) を使おう。#yans2014
2014-09-22 13:49:20一般のファイル共有システム(Google Drive, Dropbox, ...)ではダメ?→ダメ。バージョン管理システムは、過去のバージョンを全部保持してくれる。変更した理由のコメントが残せる。行単位で変更を追跡できる。#yans2014
2014-09-22 13:51:52研究室単位でリポジトリを用意しよう。実験実行前には必ずコミットするとか。すべてのコード、論文のソース、共有できるデータはリポジトリに保存する。1日最低1回は必ずコミット。#yans2014
2014-09-22 13:53:18コードの検証。実験に使っているコードは本当に正しい?→正しさをちゃんと確認していないことが多い。一見分からない問題が隠れている。一度正しく動いてもあとの修正でバグを入れていることがある。システマティックな検証方法を用意する必要。テストコードを書こう。 #yans2014
2014-09-22 13:55:29テストコードを書くデメリット。コードを書く量が増大する。機能を変更したときに、テストも変更しなければならない。開発効率が落ちる。テストコードを書くメリット。より早くバグの混入を検出できる。誤りに気づかず仕事を進めるほうが大損失。メリットがデメリットを上回る。#yans2014
2014-09-22 13:57:05実行時検査。変数がありえない値になっていないか。プログラムが即死するので仕事では使いにくいが、研究では積極的に使ってよい。実行効率より人間の開発効率のほうが大事。結合テスト。自明な入力と出力を用意する。無効な入力にエラーを返す。必要なテストだけでもあるとよい。#yans2014
2014-09-22 14:04:10