時間とリソースの制約下での前処理:事前学習用データセットの構築方法
はじめに
こんにちは、松尾研GENIACプロジェクト、チームビジネスの角谷あおいです。
東京大学松尾研究室にて、経済産業省によるGENIACの国産大規模言語モデル(Large Language Model: LLM)開発に参加しています。早くもPhase1が終了しましたが、開発過程や知見を外部に発信していくこととなりました。今回は、チームビジネスにおける事前学習用データセットの前処理構築についてご紹介します。
今回、大規模なデータセットサイズを採用したため、前処理に非常に時間がかかりました。時間とリソースが限られている中で、どのような考えのもとにデータセットを構築したのかについて説明します。
なお、Phase1結果発表会の録画は以下から視聴可能です。まだご覧になっていない方は、ぜひご覧ください。
なぜデータセットの前処理が必要なのか
そもそも、データセットの前処理は何のために行うものなのでしょうか。これを考えるにあたり、事前学習ではどのようなデータセットが好ましいのかについてご紹介しようと思います。
一般的に、事前学習では大規模で多様性があり、品質の良いデータセットが好ましいとされています。例えば、『A Survey of Large Language Models』[1]でも触れられている通り、基本的な言語モデルではWebCorpusがよく用いられます。ここには一般的なドメインの様々なカテゴリが含まれており、代表的なWebコーパスとしてはCommon CrawlやWikipediaなどが挙げられます。
しかし、WebCorpusをそのまま使用すると、言語モデルの精度が低下するという課題があります。前述のように、事前学習では大規模で多様性があり、品質の良いデータセットが求められますが、WebCorpusには学習に適さないデータが大量に含まれています。例えば、重複したデータや、文章になっていない・意味をなしていないデータが多く含まれていることが問題です。
なお、品質の低いデータセット(ノイズデータ)が言語モデルの性能に与える悪影響については『Physics of Language Models: Part 3.3, Knowledge Capacity Scaling Laws』[2]でも触れられています。
これらを踏まえると、データセットには一定の前処理が必要であることがわかります。前処理の代表例としては、言語判定、重複削除、有害コンテンツの除去、個人情報のマスキングなどが挙げられます。有害コンテンツや個人情報の処理は、LLMの出力を制限するためのアプローチといえます。一方、重複したデータは学習データセットに多様性を持たせるために削除されることが一般的で、MinHashなどが用いられます。
チームビジネスにおける前処理手法
今回は前処理にかけられる時間やリソースが限られていたため、より文章らしいデータを残し、有害コンテンツを省くという点を中心に以下の手法を採用しました。
ここで、パラグラフ・文単位で実行を分けているのは、元のデータセットサイズに限りがあるため、できるだけ多くのきれいな文章を残すためです。『Scaling Laws for Neural Language Models』[3]や『Training Compute-Optimal Large Language Models』[4]にもあるように、大規模言語モデルでは数十億から数兆トークンという膨大なデータセットサイズが求められます。
例えば、1文レベルで記号や名詞の割合が高い文章、例えば「#朝食メニュー スクランブルエッグ クロワッサン コーヒー」など、文章として成り立っていないデータセットを取り除くことができます。
データセットの前処理コードを作成する際には、実行する順番や並列化の利用が重要であることを改めて認識しました。例えば、パラグラフレベルで最低文字数を満たしていないものを最初に削除することで、文レベルでの処理をする前に後の計算量を減らすことができます。また、ファイルを細かく分割し、CPU並列化を利用することも有効です。重複削除も時間がかかりますが、このような前処理工程が増えるほど時間はかかり、場合によっては数十時間かかることもあります。
さいごに
本記事では、事前学習における前処理手法についてご紹介しました。今回ご紹介した方法以外にも有用な手法があると思いますので、今後も様々な方法を検証していこうと思います。
参考
事前学習のデータセット前処理においては以下の記事なども参考にすることができます。
この成果は、NEDO(国立研究開発法人新エネルギー・産業技術総合開発機構)の助成事業「ポスト5G情報通信システム基盤強化研究開発事業」(JPNP20017)の結果得られたものです。
東京大学 松尾・岩澤研究室が運営する松尾研LLMコミュニティのLLM開発プロジェクト[GENIAC] の開発記録、情報発信になります。 各種リンクはこちら linktr.ee/matsuolab_community
Discussion