📝

[週次報告] 第3回 Team たぬき

2024/04/15に公開

開発テーマ・概要

当チームでは、上質な日本語データベースの構築と活用に焦点を当てた開発を行っています。具体的には、高品質な日本語テキストデータを大規模に収集・加工し、大規模言語モデルの学習に適したデータセットを作成することを目指しています。

データ収集においては、CommonCrawlをはじめとする大規模ウェブデータから日本語テキストを抽出し、ルールベースのフィルタリングに加え、人手によるアノテーションを行うことで、クリーンで高品質なデータを選別します。また、学術論文や書籍など、ウェブ以外の日本語データも積極的に取り入れ、多様性に富んだデータベースの構築を目指します。

収集したデータは、先進的な自然言語処理技術を駆使して加工・統合し、大規模言語モデルの学習に最適化します。具体的には、文書のクラスタリングや重複除去、カリキュラム学習に対応したデータの順序付けなどを行います。

さらに、構築したデータベースを用いて、最先端の大規模言語モデルを学習・評価し、日本語処理タスクにおける性能向上を図ります。

  • 30種類以上の日本語・英語のコーパスを収集し、高品質なデータセットを準備した
  • 今後、10bパラメータの言語モデルを事前学習し、各種タスクでファインチューニングを行う

チーム全体の開発状況

  • データ準備はほぼ完了。30種類以上のコーパスを収集し、一部のクリーニングを済ませた。4/15の週中にはトークナイズまで完了の見込み。
  • 2.7bモデルで事前学習の動作確認を済ませ、llm-jp-13bの事前学習済みモデルでファインチューニングやevaluationも確認した。
  • シングルGPU、マルチノードでの学習コードの稼働を確認済み。
  • 10bモデルの事前学習に必要な準備はほぼ整った。ハードウェアトラブルなどの不安はあるが、できる限りの対策は講じている。
  • ファインチューニングについても既存のデータセットで動作確認済み。独自データセットの準備やDPO等の検討を進める。
  • 50bモデルに向けては、より大規模なデータセットの準備が必須。期間が限られているため、プロジェクト全体として、早急に取り組む必要があるように思われる。

概観スライド (hatakeyama)

https://docs.google.com/presentation/d/1r6kChto3tzABw8VL3tJiKx_AYMk-UW_Ax_ggrV1lme0/edit?usp=sharing

開発のマイルストーン(overview)

  • データ準備

  • モデル学習コード準備

    • 2.7bモデル、30 btokenで事前学習の動作確認済み(8gpu, 1node)
    • llm-jp-13bの事前学習済みモデルでファインチューニングやevaluationの動作確認済み
  • シングルGPUでの稼働確認、実績

    • 同上
  • マルチノードでの稼働確認、実績

    • 提供環境にて、0.1bモデルの学習コードが回ることを確認済み
  • うまくいきそうか計画の確信度

    • 事前学習
      • ハードウェアトラブルや予期せぬloss発散は不安だが、できる準備は概ね終えた段階
      • トピックごとにわけて継続学習(カリキュラム学習)を行う予定で、データの中身が切り替わるタイミングで、(当然ながら)lossが一時的に上昇する
        • 2.7bまでは特にlossの発散は起きなかったが、10bクラスの挙動はやってみないとわからない(やや不安)
    • ファインチューニング
      • 既存データセット+SFTでの動作は確認済み
      • プラスアルファとして、独自データセットの準備やDPOなどがどこまで上手くいくかは未知数
    • 50bモデル
      • 今からデータセットをきちんと準備しないと、全く間に合わないであろうという確信度が高い

開発のマイルストーン

  • 完了: 外部向け記事の作成協力者
    • 2名が立候補: ありがとうございました!
  • ほぼ完了: 事前学習用データセットの整備
    • 4/10頃から、1 weekほどかけて、データ処理を実施
    • 主なデータ
      • 計算マシンにダウンロード済み
        • mc4-ja, cc100, oscar, shisa, japanese2010
        • commoncrawl 2021 (warcから収集)
        • wikipedia ja/en
        • nhk school, news
        • j research corpus
        • 青空文庫
      • これから計算マシンにダウンロード
        • commoncrawl x5 snapshot (wetから収集)
        • 学術論文(pmc, pes2o)
        • commoncrawl pdf
        • code, culturaX
        • openmathinstruct-ja/en
  • これから: 事前学習の見守り体制の強化
    • TODOの洗い出し
  • これから: ファインチューニング, evaluationの検討
    • データセット作成
      • 人力
    • ファインチューニングの練習(何を学んだら、何ができるようになるのかの解明)
      • google colabなどで誰でも動かせるようにしたい
      • DPO, RLHFなどの検討
      • エキスパートモデルの切り替え
  • これから: 50bに向けた調査検討
    • 10bと50bでは、モデルやデータベースの設計が異なる
      • Chinchilla則から必要データを軽く見積もるだけでも…
        • 10bモデル: 200 b token (1 TB程度のテキスト)
        • 50bモデル: 1000 b token (5 TB程度のテキスト)
    • phase1-phase2の間に1week程度しかないので、今から準備しないと、明らかに間に合わない

サブチームからの情報共有

サブチーム1: 指示データセット

やったこと

  • JMT-Benchに沿って指示データの作成を開始。
    • 4/15追記: 試験対策はやらない方針に転換
  • データセット作成Webページの作成。
    • Webページへタスクカテゴリの反映。
    • 分類階層の導入でUXの改善。

分かったこと

  • 指示データ作成1件あたり、10分以上かかりそう。
    • JMT-Benchの原題を拡張し、800件以上の作成を目標。
      • 4/15追記: 試験対策はやらない方針に転換
    • 5/10を目処に作成を終えることを目標とする。残り最大28日程度
    • 1日30件程度を登録する必要あり。

次やること

  • 毎日30件以上の指示データセットの作成
  • Webページのチーム内公開

サブチーム2: 事前学習データセット

基本方針

1)期間ごとにメインとなるデータセットを決めて、
そのデータセットを主に用意する

2)そのほかのデータセットについても, メインとなる
データセットが入れ替わった時にスムーズにいくように進める

3)高品質なデータセットの構築のため、人間のアノテーションをする

内容

1)AnnotationAppの作成

AnnotationAppは人の観点から高品質なデータをアノテーションし

データセット中の品質のいいデータを抽出できるようにするアプリ

やったこと

  • 本番運用のアナウンス

    • 畠山チーム内外へのアナウンスと参加者の募集
      • 合計22名に参加してもらっている。
      • 1366件のアノテーションを完了。(最新4/9 18:00時点 1477件)
    • アノテーション評価認識の共有
      • データの偏り改善
        • 6500件のデータでは偏りがあったため、畠山さんが加工いただいた最終的なクリーニングデータを追加してアノテーション対象のデータを約6.4万件にした。
        • アノテーションデータの法則性がわかってきたデータに対して、広告がある・なしに対応していく
      • 回答の優先度
        • Q1,Q3の回答のみを優先して進める。
        • Q2のfeedbacklはアノテーション速度向上のために省略
  • fasttextでの分類モデルの作成

    • 850件のアノテーションデータでの実装(SlackのURL
      • 4値分類できる分類モデルを作成
      • 学習用コードと可視化コードの共有
    • テキスト分類モデルの学習
    • テストデータを分類したデータを可視化して、分類できているか確認した

分かったこと

  • 23人、1週間で1366件のアノテーションは完了できた。

    • アノテーションデータの分布

      分類 頻度
      bad 329
      normal 588
      good 397
      very_good 57
      合計 1366
  • 学習用データ850レコード(1レコード300文字)でもfasttextで学習する時は高スペックででのマシンが必要

    • 32GBではメモリクラッシュする→メモリを上げて、学習したほうがよさそう。ml.m5d.8xlarge(32vcpu,120GB)以上準備する。
    • 1250レコードで学習してみたが48vpcu,192GBでもクラッシュする
  • ある程度分類はできていそう

    • 各クラスごとでの境界線がみられる
      • very goodは点が少ないのでよくわからない
      • good,normal,badはきれいに分かれていそう。

次やること

  • データの改善
    • 扱っているデータセットの偏り(広告がある, なし)の改善
  • アノテーションできるところまでアノテーション進める
    • 4/10 7時まで進められるところまで締め切りとして、すすめる
  • 分類モデルの作成
    • 850レコードではできたので、1366あるいはそれ以上のレコード数で作成する
      • 学習のためのマシンを準備する(AWSorGCP)
    • /togglあるいはそれ以上のレコード数で作成する
  • パイプラインへの組み込み

サブチーム3: Code

やったこと: スライド参照

分かったこと: スライド参照

次やること: マイルストーンを参照

サブチーム4: その他

やったこと

分かったこと

  • GSM8KデータセットにおいてLlama2-7Bで14.6, WizardMath-7Bで54.9だが、WizardMathはある意味カンニングである(OpenMathInstruct-1データセットを使っているから)
  • 近頃のモデルにおいてGSM8Kを答えることができるのは、GSM8Kを丸暗記しているから。
  • 特にOpenMathInstruct-1 データセットで学習したものは答えられるようになるのはある意味当たり前。
  • これらのモデルにaqua_ratに対して答えさせるとどうなるか?
  • 興味ぶかいのは仮にOpenMathInstruct-1で丸暗記させていたとしても、WizardMath 7B v1.1は, 英文のGSM8Kならば54.9で答えるが、日本語になると18.4まで落ちる

次やること

  • OpenMathInstruct-1でファインチューニングし、aqua_ratの問題を解く
  • WizardMath-7Bとllm-jp-13b-v1.0をマージしたら日本語のGSM8Kの正答率はどれくらいあがるか

その他

  • 新規メンバーなど
  • タスク割り振り
  • データベースの使い方
  • コンペ用にチーム内でデータセットを作る
    • タスクを具体的に振った方が良い
      • ランダムに割り振る
      • todo list
  • ファインチューニングの練習
    • Google colabでQLORAして、適当な質問に、どれくらい答えられるようになるかを見る
      • インストラクションチューニング
      • RLHF, DPO
    • Playground (google colab)の整備
      • trlx

データクリーニングの進捗

4/15 畠山追記: スケジュールの都合もあり、一通りの作業を1つのワークステーション上ですべて回しています。50bの際(?)は、もう少し組織的(?)に、うまく回せればと思っています。

(が、dedupなどは一括して行わないといけないので、どうやって分散処理すればよいのか、悩み中です)

(最近1週間、4月10日までの進捗状況)

1)形態素解析を使って, 不完全な文を除去(Komurasakiさん)

mC4, CommonCrawlへの形態素解析を実際に回す

進捗状況

→「Wikipedia \n を見る」などを形態素分析+機械学習で判別し、これらを一行にしたのちに、形態素分析+機械学習で一行ごとの文末判定(終止形判定っぽいこと)をして文末じゃないものを弾くプログラムを作成

2)形態素解析以外のクリーニングのfix及びデータセットの実際の加工(上林さん、内藤さん、t_nakanoさん)

自動挿入されたような文の除去(内藤さん)

同じ文が多く含まれる文章の除去(上林さん, t_nakanoさん)

進捗状況

→クリーニングしたファイルを「.parquetファイル」経由で処理してリポジトリに登録する手順を作成( t_nakanoさん**)**

3)クリーニングの実行(dataset_for_btmのコードを一通りて見る)(N_Yoshimotoさん)

進捗状況

→持ち前のPCでは3clean_and_clustering.pyの処理に相当時間がかかり4/10時点でまだこのファイルを回している状況。document_distributor.pyのモデルの読み込みが相当重く(コメントアウトで#load modelsとしている箇所)、並列処理を16にすると自前のPCではKilled処理が行われて実際にcleaningされないということが起きる。dedepuingは300ファイルくらいcleaningしたファイルを集めて4/11程度から実施する予定。

4)データセット内の文章同士のdedup(Namiuchiさん)

進捗状況

mc4のstreamingしてきたデータを対象に、うまくいかない例があればそれに対処するような関数を追加

5)アノテーション(N_Yoshimotoさん、Esty)

進捗状況

→アプリを利用して、アノテーション済みテキストのサンプルを増やす作業。4月10日6時時点で1600のサンプルを作成。

6) コード系(the stack v2)

進捗状況

 落とすscriptを誰か(miwaさん?)に、作って貰ったが、awsのアカウントを介してダウンロード→データ解析→ コーパス統合  みたいな作業が必要で、ちょっと止まっている
 (awsではなくHuggingfaceとかから落とせるscriptだと、楽)

7) mdpiというオープンアクセス論文

進捗状況

→オープンアクセス論文からごっそり落としてきた論文のhtmlデータも全く解析できてない

8) culturaxから英語を少し綺麗にするコード

進捗状況

→誰かが途中までやってくれていた

9) pes2oというオープンアクセス論文のコーパスからcc nc系を抜いてコーパス化するコード

進捗状況

→ datasetがodc-byだったので、解決

10) 50bに向けて、日本語スクリプトをブラッシュアップする

進捗状況

→ これから。

11) リンクの除去、機械学習ベース(アノテーションしてもらってるやつ)でのクリーニング、遊撃部隊的に課題の発見など

進捗状況

これから。

Discussion