将棋成績管理アプリの進捗(戦法・戦型・囲いの自動判定)

どうも三十三間党です.

将棋成績管理アプリの一部が完成しましたので記事にしました.

こんな感じで,棋譜を入れたファイルを入れると戦法と戦型,囲いを自動で(ルールベースですが)判定して表にして表示し,csvに出力します.↓

f:id:tatuyosi98:20210811212912p:plain

これでとりあえずPythonを使える人であれば成績管理が楽にできるようになりました.

このあとは,GUIで操作できるようにして便利にしたり,Webアプリにすることで誰でも使えるようにしたいと思っています(GUIもWebアプリも作ったことがないので難所です).

また,すでに解析を行った棋譜を入れた場合,評価値からどこで悪手を指したか計算して,序盤中盤終盤どのあたりで悪手が多いかも表に加えたいと思っています.ただ,この方法には課題が2つあります.1つ目は僕が正規表現にそこまで慣れていないことで,これはまあ勉強しながら書けば良いと思います.2つ目が問題で,将棋の序盤中盤終盤の判定がコンピュータでどれくらい簡単に高精度でできるかが分からないということです.まず単純なのは,棋譜を1/3ずつ分割して序盤,中盤,終盤と判定することですが,あまりに芸がなさすぎます(とはいえはじめはこれで行くと思いますが).あとは序盤中盤終盤を判定する論文に書いてある手法を実装することが考えられます.ただ,僕の知っている限り,序盤中盤終盤の判定は決定版みたいなものがないので,どの手法を選択するかで難易度と精度が変わってくると思います.現在は『ニューラルネットワークによる将棋の局面進行状況の判断』[1999,加藤ら]という論文でニューラルネットワークが使われているので,これを真似しようと思っています.ちょうどPyTorchの勉強にもなるかなと思ったので(Chainerを使っていたんですが,開発終了したので他のフレームワークも勉強しようかなという感じです).

あとは評価値から詰み逃しも判断できるので,詰み逃しの回数を判断したり(これも難しくて,何回詰みを逃したかをどうカウントするかという問題があります),逃した局面を表示したりして実践詰将棋として解いてもらうという方法があります(これは特にデータの加工が要らないので簡単ですね).

公開しても良いかな,と思ったらGitHubとかで公開すると思います.

こういう機能があれば良いのではないか,といったアドバイス・要望はいつでもお待ちしております.