計算言語学の学生として、私は機械学習実験を頻繁に行っています。そこでは、生または注釈付きのテキストコーパスや構文ツリーバンクなど、あらゆる種類のさまざまなリソースからトレーニングデータを準備する必要があります。すべての新しいタスクとすべての新しい実験について、必要な機能と値を抽出し、データをある形式から別の形式に変換するプログラム(通常はPython、場合によってはJava)を作成します。これにより、通常、非常に多くの非常に大きなファイルと、いくつかの機械学習フレームワーク(Wekaのarffファイルなど)の入力を取得するためにそれらを処理する非常に多くの小さなプログラムが生成されます。
それを処理し、大量のデータの重要な特性、例外、またはエラーを見逃さないように細心の注意を払ってプログラムするために、非常によく組織化する必要があります。設計パターンやリファクタリングパラダイムなどの優れたソフトウェア設計の多くの原則は、セキュリティ、保守性、持続可能性などはそれほど重要ではないため、これらのタスクにはあまり使用されません。プログラムがデータを正常に処理すると、データは不要になります。これはこれまでのところ、Pythonコードとプログラムで単純な手続き的な方法でクラスや関数を使用することさえまったく気にしないようになっています。次の実験では、独自の特性と異なる形式の異なるデータセットが必要になるため、いずれにせよ、それらの準備を最初からプログラムする必要があります。これまでの私の経験はそれが プロジェクトの時間の80〜90%をトレーニングデータの準備に費やすのは珍しいことではありません。何時間も何日も、あるデータ形式から別のデータ形式に移行する方法を考えるだけで過ぎ去ります。時々、これはかなりイライラすることがあります。
さて、あなたはおそらく私が意図的にさえ少し誇張していると推測しました、しかし私はあなたが私が言おうとしていることを理解していると確信しています。私の質問は、実際には、これです:
これらのタスクに取り組むための一般的なフレームワーク、アーキテクチャ、ベストプラクティスはありますか?最適な設計があれば、私が書いたコードのどれだけが再利用可能であると期待できますか?