各種将棋ソフト間での教師データの変換ツールの開発

【もっと良いコンバータを作ってQhapaqの侵略を阻止しよう】

このままだとデータのAperyとYaneuraOuを強くする変換器、略してKizunaAy converter(キズナアィコンバータ)が業界標準になってしまいます。助けて!

 

Aperyとやねうら王の間で未だに教師データがやり取りできない(個人的な開発はされているのかも知れないですが、基本機能として実装されていない)のを受けて、変換ツールを開発してみました。

 

Aperyとやねうら王の間では棋譜のHuffman符号化のルールが違ったり、データの形式が微妙に違ったり(例、勝ち負けに関する変数の値のとり方、手数の情報を保持するかetc)すること、今後もこうした仕様変更がありうることを受けて、一旦sfenベースのテキストファイルにすることにしました。

 

例:

sfen 6s1l/3p1sk2/5p1p1/p2+Bp1p1p/2p4N1/P5LPP/3GPPP2/1+p5K1/L4+r1NL b R2N2Pb3g2sp 0
move 6d5d
score -1917
ply 110
result -1
e
sfen 6s1l/3p1sk2/5p1p1/p2+Bp1p1p/2p4N1/P5LPP/3GPPP2/1+p5K1/L+r3S1NL w R2N2Pb3gsp 0
move 8i4i
score 2717
ply 109
result 1
e

(以下、続く)

 

 

sfen hoge  ...... 局面をhogeにする

move hoge ...... その局面でのbestmoveを指定する

score hoge ...... その局面での評価値

ply hoge ..... その局面での手数(Aperyでは無視される)

result hoge ..... 最終的な結果(2017.11のやねうら王を標準としてる。手番側が勝っていれば1、負けていれば-1、引き分けなら0)

e ...... 教師データ一局面分が終了する

 

【apery側での利用】

conv_teacher_sfen teacher output

teacherという名前のApery用の教師データをoutputという名前のsfenベースのテキストに変換します

conv_teacher_bin sfenfile output

sfenfileという名前のsfenベースのテキストをApery用の教師データに変換します

 

【やねうら王側での利用】

learn convert_plain output_file_name output input1 input2 ...

input1,input2 ...という名前のやねうら王用の教師データをoutputという名前のsfenベースのテキストに変換します

 learn convert_bin output_file_name output input1 input2 ...

input1,input2 ...という名前のsfenベースのテキストファイルをoutputという名前のやねうら王用の教師データに変換します。

 

【例:やねうら王のdepth 10の教師データをaperyに食わせたい】

教師データをDLする(ファイル名をshuffled_sfen.binとする)

./YaneuraOu-by-gcc

learn convert_plain output_file_name yane_sfen.txt shuffled_sfen.bin

 

./apery

conv_teacher_bin yane_sfen.txt shuffled_sfen_apery.bin

use_teacher shuffled_sfen_apery.bin 8

 

注:use_teacherの仕様はaperyのドキュメントなどを参照

 

【その他注意】

この形式でやねうら王の教師データを変換した場合、ファイルサイズは約3倍になるようです。それなりに鬱陶しいですがギリギリ我慢できるレベルかなとも思います。ストレージ圧迫が気になるなら、ファイルを分割して、変換と削除を繰り返しても良いでしょう。

 

Aperyとやねうら王のHuffman符号の仕様の差を読み込み、直接変換したほうが効率は良いのでしょうけど、今後も両者が同じ仕様で教師データを作り続けるかは怪しく、また、バグ取りが面倒だったのでこの形式でリリース(もとい、プルリク)します。隗より始めよ...ですね。