駒がどのマスによく居るかを見るような棋譜の特徴量を作った.試しに各棋士の棋風を表現するために使ってみて,それなりに使えそうだということを確かめた.

棋譜の特徴量

既存の特徴量

棋譜の特徴量について,すでにある話としてはまず,以前考えた将棋ウォーズの棋譜に付いている持ち時間の使い方の情報を使って特徴量を作るというのがある.この簡素な特徴量でもそれなりに分類タスクが成功したりするのだが,将棋ウォーズから取得できる棋譜以外で持ち時間の情報が付いている棋譜はなかなか無いため汎用性に欠けるし,そもそもあまり情報を含んでいないという欠点があった.

そこでもう少し汎用性があって情報を多く含んでいそうな特徴量を考えてみる.

余談として,「利きの無いマスに歩を打たない」などの棋風を表しそうな特徴を考えて,タイトル所持者とそれ以外の棋士の間で”棋風”に差があるかを確かめる論文があった1.今回考える特徴量を拡張するために使えそうな気がするが,とりあえず紹介するだけにとどめておく.

基本的なアイデア

1つの棋譜の先手後手それぞれの指し手の特徴を見るために,両者の駒がどの辺によく居るか を数値に落とすことを考えてみる.

まず説明のため,まず先手の「歩」の情報のみをもとに,先手の特徴を考えることにする.

具体的には,先手のすべての歩がそれぞれのマスを踏んだ回数を見ることを考える.ここで,「踏んだ回数」と言っても,プレイヤーが1手指すごとに歩が居た位置をそれぞれのマスについてカウントすることに注意する.例えば,1筋の歩が初手から100手目までずっと放置され続けた場合は,歩が1六の地点を100回踏んだと考える(この辺の定義は,抽出したい特徴によっては適当に改変しても良さそうではある).そして,この情報を使って,盤面上に歩がよく居る位置のヒートマップを描くことができる.

例えば,以下のヒートマップは羽生四冠先手の棋譜 (データ元については「使用した棋譜データセット」の項目を参照.以下このデータセットのことを「棋譜データセット」と呼ぶ) について,歩の動きのみについてヒートマップを描いたものである.(わかりやすさのため,右上が1一,左上が9一になるように調整してある.また,踏んだ回数については適当に正規化してある)

Heatmap of kifu of Habu

羽生四冠は基本居飛車を指すため2 ,2筋の歩を伸ばす場合が多く,反対に左側,特に8筋の歩をほとんど突いていないのがわかる.しかし,これだけだとよくわからないので,わかりやすい比較例として振り飛車党の藤井九段の歩の動きについてもヒートマップを描いてみる.

Heatmap of kifu of Fujii

先ほどの羽生四冠のヒートマップと比べると,羽生四冠とは違って2筋はほとんど突いておらず,反対に(?)6筋を突いているという違いが現れていることがわかる.おそらく,藤井九段は振り飛車を指すため,2筋は突かずに,早い段階で6筋の歩をつくのが影響していると考えられる2

以上の話から,このヒートマップを描くために使った $9 \times 9$ 行列が,先手の歩がどこによく居るかを表す81次元の特徴量として使えそうな気がしてくる.

特徴量の構成

上の羽生四冠の例では,歩についてのみヒートマップを考えたが,もちろんこれを全ての種類の駒について考えることもできる.つまり,1つの棋譜の先手について $81 \times 14 = 1134$ 次元の特徴量を作ることができる.このようにして構成した特徴量は,要は(数手の手順前後を無視して)駒の配置だけを見る特徴量になっていると期待できる.

実際の実装

実際には,上で考えた特徴量を適当に正規化したものを特徴量として使う.

また,今回はある駒とその成り駒は別の種類の駒として扱っているがそれらは同一視すべきとか,正規化の必要性や方法などについても議論の余地はあって,まあその辺は適当に調整すれば良いと思う.

実際に使ってみる

使用した棋譜データセット

2chkifu.zip を使う.今回はとりあえず全ての棋譜について,先手の指し手のみを抽出して特徴量を生成する.

その他詳細についてはこの図を描いたスクリプトを参照.

とりあえず階層型クラスタリング

今回考えた特徴量が棋士の特徴を捉えられているかを何となく見るために,とりあえず1000件の棋譜の情報だけを使って階層型クラスタリングにかけてみた結果が以下の図である.1000件の棋譜の中で10回より多く登場した棋士についてプロットしている.

hierarchy result 1000

この図から,今回作った特徴量を使うことで各棋士の特徴を拾えているように見える.

例えば,振り飛車党御三家 (久保利明 九段,鈴木大介 八段,藤井猛 九段) が居ることから,図下方の緑色のクラスタは (純粋?) 振り飛車党だと思われる.

他にも,例えば「丸山九段,谷川九段,郷田九段のクラスタは角換わりクラスタっぽい?」など何か言えそうな気がするが,正直なところ棋士の棋風については詳しくないのでよくわからない.しかもこれは2000年代前半くらいの棋譜が多く入っているデータセットなので,このデータセットを分析してわかるのは2000年代前半の棋士の特徴であることに注意しなければいけない.

ちなみに,2chkifu.zip のデータを全て使った場合(52,154件)の階層型クラスタリングの結果はここにある.これを見ると,△代大橋○○みたいな名前の人が近くに配置されていたりと,上の例と同様に何となく理解できる分類がされているように見える.詳しくないのでよくわからないが.

まとめと今後の課題

  • 駒がどのマスによく居るかを見る特徴量を作った
  • この特徴量を使って棋士を階層型クラスタリングした結果,なんとなく使えそうな感じだった

今後の課題としては,この特徴量が類似局面の検索に使えそうなので,そのへんを試していこうと思う.

  1. 澤宣成, & 伊藤毅志. (2011). 将棋における棋風を形成する要素に関する統計的分析. 研究報告ゲーム情報学(GI), 2011(3), 1–8. Retrieved from http://ci.nii.ac.jp/naid/110008584147/

  2. 棋譜データセット中の棋譜をきちんと確認したわけではないので推測でしかないが. 2



blog comments powered by Disqus

Published

18 July 2015

Tags