review21: シャード v2 完成 — val/test が 4 言語に(6.11B トークン・124 シャード)/ ja 重複除去・HTML 除去を反映 / (省略: サーバの停電からの復帰)
作成日: 2026-09-27 対象: review20 確認事項へのご回答(1: 案 A' OK / 2: HTML 除去 はい / 3: 再エンコード OK / (省略: 4))を受けた実施報告。(省略: 作業中の停電とやり直しの経緯)
要旨
- シャード v2 が完成し、val/test の 4 言語問題は解消。train 122 / val 1 / test 1 の 124 シャード・6.106B トークン。 val は en 61% / de 14% / fr 14% / ja 11%、test も同様の構成(2 章)
- ja の重複除去が本番に反映され、ja の学習トークンは 0.23B → 0.197B(−14%)。中身が濃くなった分で、総トークンは 6.152B → 6.106B(3 章)
- 旧シャードは
shards_v1/に保管中。削除の可否をご判断ください(確認事項 1)
1. 実施した改修(すべてコミット・push 済み)
| コミット | 内容 |
|---|---|
| 04c46b5 | textprep.py 新設。compose_ja() で title / description が後続の冒頭に既にあれば連結しない(review20 5 章) |
| dbfd9de | compute_boundaries.py 新設(言語別・記事数ベースの分割境界)。tokenize_full.py を言語別境界に対応。clean() に HTML タグ除去 + 文字実体参照の復号 |
分割境界(compute_boundaries.py の実測。各言語の新しい側 test 8,000 記事 + その直前 val 3,000 記事):
| 言語 | 最終 pub_date | test 開始 | val 開始 | test 実件数 / val 実件数 |
|---|---|---|---|---|
| en | 2023-05-28 | 2023-05-24 | 2023-05-23 | 8,000 / 3,007 |
| de | 2023-05-28 | 2023-05-21 | 2023-05-18 | 8,000 / 3,000 |
| fr | 2023-05-28 | 2023-05-13 | 2023-05-09 | 8,001 / 2,999 |
| ja | 2024-02-12 | 2023-11-21 | 2023-10-19 | 8,000 / 3,000 |
(境界日時に同時刻の記事がまたがる分で ±数件。全 797 万件中、pub_date 不正 0・未来日付 0)
2. シャード v2 の検証結果
出力先: サーバの配布ディレクトリ。所要: encode 69 分 + シャード化 約 50 分。
| 分割 | シャード | トークン | 記事数 | 言語構成(トークン) |
|---|---|---|---|---|
| train | 122 | 6.068B | 7,448,909 | en 64.8% / de 21.9% / fr 10.0% / ja 3.2% |
| val | 1 | 10.2M | 11,129 | en 61.2% / de 14.1% / fr 14.0% / ja 10.7% |
| test | 1 | 27.2M | 30,171 | en 60.1% / de 14.7% / fr 14.3% / ja 10.9% |
| 合計 | 124 | 6.106B | 7,490,209 |
- val/test は記事数では 4 言語ほぼ均等(各約 2,800 / 7,500 記事。link 重複・空本文を除いた後の数)。トークンでは en が長文なので比率が高く出る — 言語別パープレキシティは記事数・トークン数とも十分な規模で測れる
- 抜き打ち sha256(train_050 / val_000 / test_000): メタデータと一致
- 目視(peek_shard): test の先頭はフランス語(サッカー)、中程はドイツ語(地方紙)、後段は日本語(映画賞)。train 先頭は英語 — 狙いどおり
- 走査統計: 全 7,969,236 行 / link 重複 437,420 / 空 41,607 / 異常 0 / スナップショット損傷 0
v1 との比較
| 項目 | v1(9/5) | v2(9/27) | 差 |
|---|---|---|---|
| 総トークン | 6.152B | 6.106B | −0.75% |
| ja トークン(train) | 0.23B | 0.197B | 約 −14%(重複除去) |
| val/test の言語 | ja 100% | 4 言語 | 解消 |
| link 重複除去件数 | 420,934 | 437,420 | +16,486(下記) |
| 記事数(train+val+test) | 7,506,661 | 7,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%)ので、日本語能力の評価は「データが薄い」前提を維持します。
5. 留意点(先に共有済み)
en/de/fr の val/test は期間が狭い(en: test = 最後の 4 日間、val = 1 日分)。記事数ベースで切った結果で、評価の安定性(記事数)は十分ですが、時期がピンポイントなので「その週に多かったトピックの当てやすさ」が成績に混ざる可能性があります。当面はこれで進め、S モデルの評価で違和感が出たら 「言語別に期間を広げ、記事数上限でサンプリング」に改良します(再エンコード 1 回)。
6. 確認事項
- 旧シャード
shards_v1/(125 個・12.3GB)を削除してよいですか? v2 は検証済みで、v1 を使う場面はもうありません(比較実験の対照にする価値も薄い: 差は ja の重複と val/test の切り方だけ)。
- S(30M)モデルの実装に着手します。 段取りは「サーバ機(GPU なし)で CPU の極小構成でスモークが通るところまで作る → RTX 3060 機へ持っていき本番構成で学習」を予定しています。ディレクトリは
zxell_model/(モデル定義・学習ループ・評価)を新設する想定です。異論がなければこのまま進めます。
その前に、これまでのところで理解を深めるために確認させてください。
1)トークナイザ学習用ファイル sp_train.txt は全コーパスの文字をすべて繋げたもの、というわけではないのですか?
コーパス中、日本語が他の言語より突出して少ないので、その比率を上げるために日本語全体のサイズから他の言語の上限を切ったということでしょうか?
2)シャードの数、各シャードのサイズはどういう基準で決まっていますか?
- (軽微)コーパスの実効期間が「en/de/fr は 2023-05-28 まで、ja は 2024-02-12 まで」と判明したので、サイトの「5 年分」等の表現を見直す必要があれば併せて直します。今は触っていません。
7. 次の作業予定
zxell_model/: モデル定義(RoPE / RMSNorm / SwiGLU / 重み共有)・シャード読み込み・学習ループ・チェックポイント・言語別パープレキシティ評価。CPU スモーク(数層・小 d_model)まで- RTX 3060 機: PyTorch CUDA 環境、シャード取得((省略: LAN 内の取得経路))、S ベースライン学習開始
- 学習中の損失曲線・言語別 PPL を記録する仕組み(フェーズ 1 の完了判定「S がまともな文を生成し、評価が自動で回ること」に向けて)
zxell.ai