CoolFace
Datasetpublic

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.

sourceHugging Facemitupdated 24d agoView on Hugging Face
0likes59downloads
Dataset Card

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
python
from datasets import load_dataset

ds = load_dataset("qleap/Balanced_extended_dataset_by_NAGISA_V4", split="train")

手数の内訳

`ply`局面数
3225,866
33162,345
34607,851
352,001,168
365,835,330
3716,443,206

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手目まで、次を繰り返して広げた。

  1. 1.提案 — 方策ネット b15c256 (ONNX) が top-p 0.90、親 1 つにつき最大 16 手
  2. 2.採点 — attic-gensfen が --multipv 1 --eval-tolerance 0、評価関数は halfka2304/nagisa_v4
  3. 3.採否 — その子の評価値を根の手番に直したものが、自分の 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 の和集合とは一致しない。

ラベルの作り方

探索エンジンattic-gensfen
評価関数NAGISA_V4 (NNUE, HalfKA-2304)
FV_SCALE28
探索--depth 9 --multipv 5、置換表は既定 (16 MB)
value_qtanh(cp / 1512.173)、詰みは ±1
方策候補手の cp に対する温度 100 cp の softmax

全段を一律 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 − 詰みまでの手数) のまま入っている。 値の大きさで通常の評価値と区別するので、帯が重ならないことを実測した。

全 125,369,164 候補での実測
通常の評価値の最大 (絶対値)21,148
詰みスコアの最小 (絶対値)31,989

|cp| ≥ 31,900 を詰みとみなせばよい。 該当するのは 1,510 候補 (0.0012%)。 互角の局面から 5 手しか進んでいないので、詰みはほとんど現れない。

列

列型内容
packed96 byte局面そのもの。mailbox 形式で、最後のバイトが手番
plyuint16局面の手数。32〜37
value_qfloat探索の root value。tanh(cp / 1512.173)
weightuint32畳み込んだ探索の本数。このコーパスは全行 1
candidateslist\<struct\>mv (uint16), prob (float), cp (int16)

packed は符号化ではなく pack である。学習側の入力層 (Manaka のアキュムレータ、 DLManaka の 105 plane) は読み込み時にここから組み立てる。

cp と value_q は手番側視点 (pov = side_to_move)。先手視点ではない。

prob は cp の softmax なので保存する必要は本来無いが、温度が読み手に 分からなくなるのを避けるため列にしてある (温度はフッタの softmax_temp_cp)。

候補手の本数

本数局面数
525,069,479
43,779
31,749
2647
1112

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/>