こんにちは!技術開発推進室でインターンをしている中村友哉です。
今回はデータサイエンティストとして業務する中で感じたインターンならではの難しい技術的要素について話していきます。
データサイエンティストを目指している学生、就活生に向けた記事となっています。
個人学習では得ることのできなかった視点をお伝えできればと思います。
最近はもっぱらアプリケーションに導入するための自然言語モデルの研究開発を行なっています。
具体的には、自社が抱える膨大なデータを活用して適切な文章を生成させることを目標に、データの前処理やモデルの学習を行っています。
地道な作業・仮説検証を繰り返す日々を送っており、うまくハマった時の快感を求めて三千里って感じです笑
そろそろ本題に入っていこうと思いますが、ポイントは大きく分けて3つです。
よくネットに転がっている分析練習用のデータセットはある程度形式が整っていますよね。しかし、実際に業務で扱うデータは思っていた以上に量が膨大かつ汚いんです。
個人的に勉強していた頃とは異なり前処理の手段や量が増えたので、最適な前処理を見つけることが難しくなりました。
例えば、
といった検討事項があり、前処理パターンが複数あるので地道に検証していく必要があります。
データサイエンスは前処理が8割とよく言われますが、重要度は体感9割くらいに感じています。
おかげで正規表現や前処理の技術は自然と身につきましたが、まだまだ研鑽が必要だと感じています。
全部で3557197データ
先ほどデータ量の大きさについて言及しましたが、データが多くなるにつれてモデルの学習時間も当然増えます。
使いたいデータは数百万件もあるのですが、全てCPUで学習させると400時間(約2週間)かかることが判明して絶望しました笑
ここで、如何に現実的な学習時間でアウトプットを最大化させるかという課題に直面します。
改善策としては、データ量を減らす、マシンのスペックを上げるなどが考えられますが、PoC段階ということもありデータ量を減らすことから試してみました。
想定していましたが、データ量を減らすと過学習気味になってしまい思うようなアウトプットが出せませんでした。
そこで、上長にマシンスペックを上げたいと提案し、最近になってGPUを使用することが叶いました!
なんとか目標であった24時間以下の計算時間を実現できましたが、今度は精度が向上しないという問題に直面します。
現在は精度向上に向けてパラメータをイジイジしてますが、これまた最適解を見つけるのが難しいんです。
いやはや、これまで精度だけ考えればよかったものの学習時間がボトルネックになるとは思いませんでした汗汗
これが一番インターンならではの難しいところではないでしょうか。
企業で働く上で避けては通れないのがコスト面。
インターン生が直接悩むところではありませんが、自身の開発環境に直結するのでインパクトはかなり大きいです。
先ほどGPUを使用できるようになったと言いましたが、当然コストがかかるので無限に使えるわけではありません。
いかにコストを抑えた状態でアウトプットを最大化させるかが重要なのです。
また、コストと学習時間はトレードオフなのでどちらを優先させるかで実装内容も変わってきます。
現在は学習時間の優先度が高いので24時間以内で計算が終わるギリギリのスペックで開発しています。
個人学習では自身のお財布と直接相談できますが、企業で働くとえいやでスペックを上げることができないのが難しいところですね。
スペック毎の料金表(参照:https://aws.amazon.com/jp/sagemaker/pricing/)
いかがだったでしょうか。私も半年前までは上記のことを意識せず学習をしていたので偉そうに語ることはできませんが、今では開発する中で意識することがガラリと変わりました。
この記事を読んで、少しでも参考になったり企業で働くイメージが湧いてくれれば嬉しいです。