zxell.ai
開発記録 / review21
この記録は、プロジェクトの作業報告(報告 → アーキテクトの回答)を公開用に編集したものです。サーバ運用・セキュリティに関わる部分を省略しています(編集方針)。

review21: シャード v2 完成 — val/test が 4 言語に(6.11B トークン・124 シャード)/ ja 重複除去・HTML 除去を反映 / (省略: サーバの停電からの復帰)

作成日: 2026-09-27 対象: review20 確認事項へのご回答(1: 案 A' OK / 2: HTML 除去 はい / 3: 再エンコード OK / (省略: 4))を受けた実施報告。(省略: 作業中の停電とやり直しの経緯)

要旨

  1. シャード v2 が完成し、val/test の 4 言語問題は解消。train 122 / val 1 / test 1 の 124 シャード・6.106B トークン。 val は en 61% / de 14% / fr 14% / ja 11%、test も同様の構成(2 章)
  2. ja の重複除去が本番に反映され、ja の学習トークンは 0.23B → 0.197B(−14%)。中身が濃くなった分で、総トークンは 6.152B → 6.106B(3 章)
省略: 要旨 3(停電からの復帰)
  1. 旧シャードは shards_v1/ に保管中。削除の可否をご判断ください(確認事項 1)

1. 実施した改修(すべてコミット・push 済み)

コミット内容
04c46b5textprep.py 新設。compose_ja() で title / description が後続の冒頭に既にあれば連結しない(review20 5 章)
dbfd9decompute_boundaries.py 新設(言語別・記事数ベースの分割境界)。tokenize_full.py を言語別境界に対応。clean() に HTML タグ除去 + 文字実体参照の復号

分割境界(compute_boundaries.py の実測。各言語の新しい側 test 8,000 記事 + その直前 val 3,000 記事):

言語最終 pub_datetest 開始val 開始test 実件数 / val 実件数
en2023-05-282023-05-242023-05-238,000 / 3,007
de2023-05-282023-05-212023-05-188,000 / 3,000
fr2023-05-282023-05-132023-05-098,001 / 2,999
ja2024-02-122023-11-212023-10-198,000 / 3,000

(境界日時に同時刻の記事がまたがる分で ±数件。全 797 万件中、pub_date 不正 0・未来日付 0)

2. シャード v2 の検証結果

出力先: サーバの配布ディレクトリ。所要: encode 69 分 + シャード化 約 50 分。

分割シャードトークン記事数言語構成(トークン)
train1226.068B7,448,909en 64.8% / de 21.9% / fr 10.0% / ja 3.2%
val110.2M11,129en 61.2% / de 14.1% / fr 14.0% / ja 10.7%
test127.2M30,171en 60.1% / de 14.7% / fr 14.3% / ja 10.9%
合計1246.106B7,490,209

v1 との比較

項目v1(9/5)v2(9/27)差
総トークン6.152B6.106B−0.75%
ja トークン(train)0.23B0.197B約 −14%(重複除去)
val/test の言語ja 100%4 言語解消
link 重複除去件数420,934437,420+16,486(下記)
記事数(train+val+test)7,506,6617,490,209−16,452

link 重複が 1.6 万件増えたのは、clean() に文字実体参照の復号を入れたため & を含む URL と & の URL が同一と判定されるようになったためです(これまで別記事として二重に入っていた同一記事が正しく 1 件になった)。意図した副作用で、方向は良化です。

3. ja 重複除去の本番反映

ja_parts_dropped: title 728,855 件 / description 243,204 件(review20 の事前計測 741,184 / 244,812 とほぼ一致。差は link 重複で先に落ちた記事の分)。ja の train トークンは 0.23B → 0.197B。 日本語データの 14% が「同じ文の繰り返し」だったということで、学習効率の面では純粋に改善です。ただし ja の絶対量はさらに小さくなった(トークン比 3.2%)ので、日本語能力の評価は「データが薄い」前提を維持します。

省略: 4. 停電(ブレーカ落ち)と復帰(サーバ運用)

5. 留意点(先に共有済み)

en/de/fr の val/test は期間が狭い(en: test = 最後の 4 日間、val = 1 日分)。記事数ベースで切った結果で、評価の安定性(記事数)は十分ですが、時期がピンポイントなので「その週に多かったトピックの当てやすさ」が成績に混ざる可能性があります。当面はこれで進め、S モデルの評価で違和感が出たら 「言語別に期間を広げ、記事数上限でサンプリング」に改良します(再エンコード 1 回)。

6. 確認事項

  1. 旧シャード shards_v1/(125 個・12.3GB)を削除してよいですか? v2 は検証済みで、v1 を使う場面はもうありません(比較実験の対照にする価値も薄い: 差は ja の重複と val/test の切り方だけ)。
アーキテクト回答OK
  1. S(30M)モデルの実装に着手します。 段取りは「サーバ機(GPU なし)で CPU の極小構成でスモークが通るところまで作る → RTX 3060 機へ持っていき本番構成で学習」を予定しています。ディレクトリは zxell_model/(モデル定義・学習ループ・評価)を新設する想定です。異論がなければこのまま進めます。
アーキテクト回答基本的にはOKです。分散学習はこのプロジェクトの肝なので配布にはAPIを使う、Sモデル学習にはGTX1050機も参加させる、という方針だったと思います。
その前に、これまでのところで理解を深めるために確認させてください。
1)トークナイザ学習用ファイル sp_train.txt は全コーパスの文字をすべて繋げたもの、というわけではないのですか?
コーパス中、日本語が他の言語より突出して少ないので、その比率を上げるために日本語全体のサイズから他の言語の上限を切ったということでしょうか?
2)シャードの数、各シャードのサイズはどういう基準で決まっていますか?
  1. (軽微)コーパスの実効期間が「en/de/fr は 2023-05-28 まで、ja は 2024-02-12 まで」と判明したので、サイトの「5 年分」等の表現を見直す必要があれば併せて直します。今は触っていません。
アーキテクト回答jaが少し延びたということだと思いますが、もともとjaは量が少なく、その分を多少なりとも埋める程度のものだと思うので、ほぼ5年分という表現を特に変える必要はないと思っています。

7. 次の作業予定

  1. zxell_model/: モデル定義(RoPE / RMSNorm / SwiGLU / 重み共有)・シャード読み込み・学習ループ・チェックポイント・言語別パープレキシティ評価。CPU スモーク(数層・小 d_model)まで
  2. RTX 3060 機: PyTorch CUDA 環境、シャード取得((省略: LAN 内の取得経路))、S ベースライン学習開始
  3. 学習中の損失曲線・言語別 PPL を記録する仕組み(フェーズ 1 の完了判定「S がまともな文を生成し、評価が自動で回ること」に向けて)
← review20目次review22 →