再現可能性とコード公開のジレンマ【ChatGPT統計解析】
再現可能性とは、完全に自動化され、ソースコードが作業の記録として公開され、他の科学者が同じ結果を再現できる状態を指す。統計ソフトはこれを可能にするため進歩してきた。例えば、SweaveはLaTeXで書かれた論文にRの統計結果を組み込めるが、学術誌はまだ採用していない。PythonユーザーはIPython Notebookで分析過程を記録し、他者がソースコードを参照しやすくなるが、共有を躊躇する理由もある。例えば、競争相手に利用されるリスクや、公開するコードの品質への懸念である。CRAPLは、学術ソフトのライセンスに関連するジョークとして、研究者の努力の複雑さやコードの不完全さを認識している。計算の自動化は便利だが、科学者にとってコードの公開は利益をもたらさないことが多く、学術的な評価を得にくい。
▼▼▼▼▼▼▼▼
チャンネル登録はこちら
再現可能性を簡単に
完全に自動化され,そのソースコードが作業の決定的な記録として精査のために手に入るようにする理想的にはこうした方法を再現可能(reproducible)と呼ぶのだろう。
こうした方法が使われていれば,誤りを簡単に見つけて修正できただろうし,どんな科学者でもデータセットとコードをダウンロードすることで,まったく同じ結果を生み出すことができただろう。
コードがその目的を記した記述と一緒になっていれば,もっと良い。
統計ソフトは,このことを可能にするために進歩しつづけてきた。
例えば,Sweaveというツールでは,科学や数学の出版で広く使われている組版システムのLaTeXで書かれた論文の中に,人気のあるRというプログラミング言語を使って行われた統計の結果を簡単に埋めこむことができる。
結果は普通の科学論文と同じように見えるが、その論文を読んでその手法に興味を持った他の科学者がソースコードをダウンロードすることができる。
そのソースコードにはすべての数値と図がどのように求められたかが書いてある。
しかし,学術誌は複雑な組版・出版システムを使っていて,まだSweaveでの出版を受け入れていない。
だから, Sweaveの使用は限定的だ。
似たようなツールは他のプログラミング言語にも出てきている。
例えば,プログラミング言語のPythonを利用するデータ分析者は, IPython Notebookを使って進捗を記録することができる。
これを使えば,文章による説明,Pythonのコード,そしてPythonのコードから作られた図や画像を一緒に織りこむことができる。
IPython Notebook で作られたノートは,文章をともなうコードによって,データをどう読みこみ,処理し,取捨選択し,分析し,図にしたかという分析過程の物語として読むことができる。
どの段階の誤りでもそれを修正することができ,コードを再度実行すれば新しい結果が得られる。
そして,これで作られたノートは,ウェブページやLaTeX文書に変換することができるので,他の研究者はコードを読むためにIPythonをインストールする必要がない。
何よりもすばらしいことに, IPython Notebook のシステムはRのような他の言語でも動くように拡張されつつある。
計算生物学や統計学のように,非常に計算機をよく使う分野の学術誌は,分析ソースコードの投稿・公開を推奨するコード共有方針を採用しはじめている。
こうした方針は,まだデータ共有の方針ほど広く受け入れられてはいないが,一般的なものとなりつつある。
再現可能性を保証し,誤りの発見を容易にするためのもっと総合的な戦略としては,生物医学の研究者グループが作成した「計算機を使用した再現可能な研究のための10個の簡単な規則」(Ten Simple Rules for Reproducible Computational Research)に従うことが挙げられるだろう。
これらの規則には,データ操作と形式変更の自動化,分析ソフトとカスタムプログラムに対するすべての変更のソフトウェアバージョンコントロールシステムによる記録,生データすべての保存,一般の分析のためにスクリプト・データを入手可能にすることが含まれている。
どの科学者も論文を読んでいるときに「一体どうやってあの数値を出したのか」と不思議に思い,困惑したことがある。
こうした規則があれば,この質問に答えるのはずっと簡単になる。
こうするのは非常に手間がかかる仕事で,どうやって分析したのかについてすでに知っている科学者にとっては,そうする動機がない。
もっと研究するのではなく,そこから利益を得る他の人が理解しやすいコードを作るために,なぜこれほど多くの時間を割かなくてはならないのだろうか。
実は,多くの利点がある。
自動化されたデータ分析は,新しいデータセットでソフトを試すのが簡単だし,個々の部分が正しく機能しているかを試すのも簡単だ。
バージョンコントロールシステムを使えば,すべての変更を記録できるので,行きづまって「前の火曜日には動いたコードが何で今日は動かないんだ?」と不思議に思うようなことも一切なくなる。
そして,計算とコードを完全に記録することによって,いつでも後から同じことを繰り返すことができる。
私は,前に公刊する論文での図の形式を改めなくてはならなかったときに,とても当惑したことがある。
私が分かったのは,その図を作るためのデータが何だったか思い出せないということだけだった。
自分自身のぐちゃぐちゃな分析のせいで,私は図を作り直そうとするために一日中狼狽した。
しかし,分析を完全に自動化した場合でも科学者はコードを共有したがらない。
これは無理からぬことだ。
もし競争相手の科学者がそれを使ってこちらを出し抜いて,先に発見をしたらどうなるというのか。
もしコード公開が相手に義務づけられていなければ,相手はこちらのコードを使ったことを公開する必要がなくなり,ほとんどこちらの仕事に基づいた発見から学術的な栄誉を得ることができる。
もしコードがプロプライェタリなソフトウェアや商業的ソフトウェアに基づくもので,公開することができなかったらどうなるだろうか。
そして,コードの中には,あまりにも品質が悲惨なため,科学者が共有を恥ずかしがるようなものがある。
マット・マイトが草案を書いたコミュニティ研究学術プログラミングライセンス(Community Research and Academic Programming License: CRAPL)という学術ソフトウェアの使用に関する著作権契約には,「定義」の節として以下のものが載っている。
@「プログラム」とは,「あなた」に提供されるソースコード・シェルスクリプト・実行可能ファイル・オブジェクト・ライブラリ・ビルドファイルを寄せ集めたもの,あるいは「あなた」による修正がなされたこれらのファイルを指す。〔「プログラム」におけるデザインの見た目はいかなるものも純粋な偶然であり,思慮深いソフトウェア構築の証拠と間違えられるべきではない。〕
A「あなた」とは,「プログラム」を使用するのに十分なほど勇敢で愚かな個人または複数の人のことを指す。
B「文書」とは,「プログラム」を指す。
C「作者」とは,投稿の締切前のわずかな間だけ「プログラム」を動かしたカフェインでおかしくなった大学院生のことを多分指す。
CRAPLは使用者が「『プログラム』中に発見されるその場しのぎの手法,急いで作られた整合性のないもの,証拠なしに信じこむことに関して「作者」が恥ずかしい思いをしたり,困惑したり,嘲られたりしないようにすることに同意する」とも規定している。
CRAPLは法的に非常に厳格な使用許諾文書ではないかもしれないが,学術関連のコードの作者が直面する問題を訴えかけるものではある。
つまり,ソフトウェアを一般の使用のために書くことは,個人的な使用のためにコードを書くより多くの労力を要する。
その労力の中には,例えば,説明する文書を作ったり,ソフトウェアのテストを実施したり,幾晩ものその場しのぎの手法が貯まってしまったのをきれいにしたりすることが含まれる。
こうした余計な仕事は,プログラムを書く人にとってほとんど利益がない。
重要なソフトを書くのに何か月かけたとしても,学術的な栄誉は得られないのだ。
科学者はコードを点検してバグを発見する機会をうまく使うだろうか。
コードの誤字を確かめても,そこから学術的栄誉は得られないのだ。
再現可能性とは、研究成果が他の科学者によって同じ条件で再現され、同じ結果が得られることを意味する。理想的な再現可能性は、作業が完全に自動化され、すべてのソースコードが決定的な記録として公開されている状態である。このような方法が採用されていれば、誤りの発見と修正が容易となり、科学者はデータセットとコードをダウンロードすることで同じ結果を再現することができる。さらに、コードにその目的を明確に記した説明が添えられていれば、より一層理解しやすい。統計ソフトウェアは再現可能性を実現するために進歩を続けてきた。たとえば、Sweaveというツールは、科学や数学の分野で広く使用される組版システムLaTeXとRというプログラミング言語を組み合わせて論文を作成することができる。これにより、科学論文内に直接統計結果を埋め込むことが可能である。読者がその論文に興味を持てば、ソースコードをダウンロードし、論文に記載された数値や図がどのように生成されたかを確認することができる。しかし、学術誌の多くは未だにSweaveによる出版を受け入れていない。それは、複雑な組版システムや出版の慣習が背景にあり、このような自動化ツールの利用を妨げているためである。だが、類似のツールは他のプログラミング言語にも登場している。たとえば、データ分析者が利用するPythonには、IPython Notebook(現在のJupyter Notebook)があり、分析の進捗を記録することができる。このツールは文章による説明、Pythonコード、そしてコードから生成される図やグラフを一緒に含めることができるため、読者は分析過程を段階的にたどることができる。IPython Notebookで作成されたノートは、どのようにデータを読み込み、処理し、選別し、分析し、図を作成したかを説明する「物語」として機能する。これにより、誤りが発見された際も修正が可能で、コードを再実行することで新しい結果が得られる。さらに、このノートはウェブページやLaTeX文書に変換することができ、IPythonをインストールしていない研究者でも内容を確認することができる。何よりも注目すべきは、IPython NotebookのシステムがRなど他のプログラミング言語に対応できるよう拡張されている点である。計算生物学や統計学のように計算を多用する分野では、分析のソースコードを提出・公開する方針を採用する学術誌が増えてきている。これらの方針はまだデータ共有の方針ほど広く受け入れられてはいないが、確実に一般化しつつある。再現可能性を保証し、誤りの発見を容易にするための戦略として、生物医学の研究者グループによって作成された「計算機を使用した再現可能な研究のための10個の簡単な規則(Ten Simple Rules for Reproducible Computational Research)」がある。これらの規則には、データ操作とフォーマット変更の自動化、分析ソフトウェアやカスタムプログラムに対するすべての変更をソフトウェアバージョンコントロールシステムで記録すること、生データの保存、一般の分析用スクリプトとデータを入手可能にすることが含まれている。これにより、論文を読んでいる科学者が「どうやってこの数値を算出したのか」と不思議に思い、困惑する場面を減らすことができる。このような規則に従えば、研究成果の理解が深まり、質問への回答がより迅速かつ明確になる。しかし、再現可能性の高い研究を実現することは非常に手間のかかる作業であり、すでにその分析を知っている研究者にとっては動機付けが乏しい。なぜなら、時間と労力をかけてコードを共有し、それを他の人が容易に理解できる形にすることが、必ずしも直接の利益にはならないからである。だが、自動化されたデータ分析は、新しいデータセットに対するテストや個々のコードの機能確認を簡単にする利点がある。バージョンコントロールシステムを使えば、変更が全て記録されるため、「前に動いたコードがなぜ今日は動かないのか」といった事態を防げる。また、計算とコードを完全に記録することで、同じ作業を後から何度でも繰り返すことが可能となる。過去に私が経験したように、発表済みの論文の図の形式を変更しようとした際、どのデータを使用したかを思い出せず、結果として作業に一日中苦労したということも防げる。分析の自動化によっても、科学者がコードを共有したがらない理由は存在する。たとえば、競争相手が公開されたコードを使って先に発見をし、学術的な栄誉を得るリスクである。公開されたコードが相手に義務付けられていなければ、相手はそのコードを使ったことを明らかにせず、自分の成果として発表することが可能になる。さらに、コードがプロプライエタリソフトウェアや商業的なソフトウェアに基づいている場合、共有が難しい場合もある。また、科学者の中にはコードの品質が低いことを理由に共有をためらう者もいる。例えば、マット・マイトが起草した「コミュニティ研究学術プログラミングライセンス(Community Research and Academic Programming License: CRAPL)」は、学術ソフトウェア使用における著作権契約で、コードの欠点や不完全さを認識しつつ使用者に寛容さを求めている。このライセンスでは、「プログラム」とは「勇敢で愚かな個人または複数の人が使用するソースコード、スクリプト、実行可能ファイルなど」であり、「作者」とは締切間際にカフェインを過剰摂取した大学院生のことを指すといったユーモラスな定義がなされている。また、CRAPLは使用者に対し、「プログラムの不完全な手法に関して作者が恥ずかしい思いをしないようにすること」を同意させる。このようなライセンスは厳格な法的文書ではないが、学術コード作成者が直面する課題を象徴している。すなわち、一般の使用を念頭に置いたソフトウェアを書くことは、個人用のコードを書くよりも多大な労力を必要とする。説明文書の作成やテストの実施、コードの整理といった追加作業は多くの時間を要し、そのような努力は通常、直接的な学術的栄誉に繋がらない。科学者が他人のコードを精査してバグを見つけても、その努力が学術的な成果として評価されることはほとんどない。それでも再現可能性は、科学研究における信頼性を高め、後の研究者が過去の結果を検証し、新しい知見を得るための重要な要素である。
関連記事