qleap/Balanced_extended_dataset_by_NAGISA_V4
NAGISA_V4 balanced-extended teacher data 互角局面集を 37手目まで広げた将棋の局面に、NNUE エンジン (NAGISA_V4, HalfKA-2304) で depth 9・MultiPV 5 の評価値と候補手を付けた教師データ。 自己対局のコーパスではない。 対局は 1 局も指していない。1 行が 1 局面で、 局面同士に前後関係は無い。勝敗を持つデータが要るなら qleap/Knowledge_distilled_dataset_by_NAGISA_V4 のほう。 局面数: 25,075,766 シャード数: 26 (data/shard-00000.parquet … data/shard-00025.parquet) 合計: 1,606,525,370 B from datasets import load_dataset ds = load_dataset("qleap/Balanced_extended_dataset_by_NAGISA_V4", split="train")… See the full description on the dataset page: https://huggingface.co/datasets/qleap/Balanced_extended_dataset_by_NAGISA_V4.
NAGISA_V4 balanced-extended teacher data
互角局面集を 37手目まで広げた将棋の局面に、NNUE エンジン (NAGISA_V4, HalfKA-2304) で depth 9・MultiPV 5 の評価値と候補手を付けた教師データ。
自己対局のコーパスではない。 対局は 1 局も指していない。1 行が 1 局面で、 局面同士に前後関係は無い。勝敗を持つデータが要るなら qleap/Knowledge_distilled_dataset_by_NAGISA_V4 のほう。
- 局面数: 25,075,766
- シャード数: 26 (
data/shard-00000.parquet…data/shard-00025.parquet) - 合計: 1,606,525,370 B
from datasets import load_dataset
ds = load_dataset("qleap/Balanced_extended_dataset_by_NAGISA_V4", split="train")手数の内訳
32手目から 37手目しか無い。 手数が偶数の段は全て後手番、奇数の段は全て 先手番なので、片方の段だけ使うと手番が偏る。
盤面は全段を通じて一意。 manaka-pack に 25,075,766 レコードを渡して 25,075,766 行が出ている (畳まれた行はゼロ)。weight は全行 1。
対局から来ていないということ
- `value_z` の列が無い。 勝敗が存在しないため。評価値と勝敗を混ぜる lambda を既定で使う学習設定にこのデータを渡すなら、明示的に lambda = 1 (評価値のみ) にすること。 0 を埋めると「全局引き分け」として学習される。
policy_sourceはsoftmax_cp。方策ラベルは訪問数ではなく候補手の cp を softmax したもの。game_idもstart_sfenも無い。行は互いに独立で、並びに意味は無い。
局面の作り方
出発点は BalancedPositions2025 (yaneurao 氏, MIT) の 32手目 26,273 局面。水匠10 で 1局面 2億ノード探索し、 評価値の絶対値が 50 以下だった局面である。
そこから 1 手ずつ 37手目まで、次を繰り返して広げた。
- 提案 — 方策ネット
b15c256(ONNX) が top-p 0.90、親 1 つにつき最大 16 手 - 採点 —
attic-gensfenが--multipv 1 --eval-tolerance 0、評価関数はhalfka2304/nagisa_v4 - 採否 — その子の評価値を根の手番に直したものが、自分の 32手目の祖先の 評価値から ±50 センチポーン以内なら残す
基準は根ごとであって全体で 1 つではない。測っているのは絶対評価ではなく 「互角と分かっている局面からどれだけずれたか」なので、浅い探索自身の偏りが 打ち消される。
採否の探索を depth 9 で回した系統と depth 16 で回した系統の両方を作り、 その和集合から盤面の重複を落としたものがこの局面集である。 段が進むほど 2 つの集合の重なりは小さく、37手目では depth 16 が採った局面の 77% が depth 9 側に無い。片方だけでは狭い。
局面集そのもの (sfen のテキスト) は qleap/shogi-balanced-positions-2025-extended にある。ただしあちらは depth 9 の系統と depth 16 の系統を別々に置いてあり、 この repo の和集合とは一致しない。
ラベルの作り方
全段を一律 depth 9 で付け直している。 採否に depth 16 を使った局面も、 教師ラベルは depth 9 の値で上書きしてある。V4 のコーパスが 38手目以降を depth 9 で採点しているので、手数と相関する系統誤差を持ち込まないため。 一様に大きい誤差のほうが、段によって精度が変わるより扱いやすい。
`FV_SCALE` が centipawn を centipawn たらしめている。 NNUE が積み上げた 内部の値はこの数で割られて初めて評価値になる。同じネットをエンジン既定の 16 で 読めば、ここに並んでいる cp はすべて 1.75 倍の値になっていた。他所のデータと 混ぜるなら、まずこの数が一致しているかを見ること。
これらは parquet のフッタの key-value にも入っている (fv_scale, mate_scale, mate_slack, pov, policy_source, eval_coef, softmax_temp_cp)。 カードとフッタが食い違ったらフッタが正しい。 あちらはストリームのヘッダから 機械が写したもので、こちらは人が書いたものである。
詰みスコアの読み方
詰みはエンジンの内部表現 ±(32000 − 詰みまでの手数) のまま入っている。 値の大きさで通常の評価値と区別するので、帯が重ならないことを実測した。
|cp| ≥ 31,900 を詰みとみなせばよい。 該当するのは 1,510 候補 (0.0012%)。 互角の局面から 5 手しか進んでいないので、詰みはほとんど現れない。
列
packed は符号化ではなく pack である。学習側の入力層 (Manaka のアキュムレータ、 DLManaka の 105 plane) は読み込み時にここから組み立てる。
cp と value_q は手番側視点 (pov = side_to_move)。先手視点ではない。
prob は cp の softmax なので保存する必要は本来無いが、温度が読み手に 分からなくなるのを避けるため列にしてある (温度はフッタの softmax_temp_cp)。
候補手の本数
5 本に満たないのは合法手がそれしか無い局面。 王手を受けていて逃げ方が 限られる類で、取りこぼしではない。
行の並び
シャッフルしてある。 固定シードの Fisher-Yates で、同じ入力からは byte-identical なシャードが出る。行は互いに独立なので、先頭から連続して読んでも 手数や戦型は偏らない。
train/val の分け方
行をランダムに切ってよい。 盤面は一意で、ラベルは局面ごとに決まる探索の 評価値なので、切り方に条件は無い。
使いどころ
序盤の局面の広さを稼ぐためのもの。 自己対局のコーパスは開始局面が少ないと 同じ手順を何度も踏むので、それを散らす目的で作った。
SPRT の自己対局の開始局面には使わないこと。 採否の基準が零点ではなく根から の距離なので、37手目の局面は零点から最悪 ±100 まで開きうる。互角であることの 保証にはならない。
出所とライセンス
元の局面は BalancedPositions2025 (yaneurao 氏, MIT License) の派生物。 MIT なので派生物にも著作権表示が要る。
- <https://github.com/yaneurao/YaneuraOu/releases/tag/BalancedPositions2025>
- <https://yaneuraou.yaneu.com/2025/07/29/yaneuraou-balanced-position-collection-2025/>
