🗂

LLMを用いて囲碁の棋譜解説

2025/01/31に公開

はじめに

今回は私の趣味である囲碁(アマ初段程度の実力です)とLLMを組み合わせて棋譜の解説を試みます.

近年,機械学習や自然言語処理の飛躍的な進歩により,チャット型の大規模言語モデル(LLM)が特に注目されています.
文章生成能力の向上により,対話システムや文書要約などのテキストベースのタスクが大きく発展しました.
本記事では,そのLLM技術を「囲碁」の領域に応用できるかを模索する取り組みを紹介します.

囲碁AI大会に参加

2025年1月25〜26日に開催された囲碁AI大会「CGFオープン」に参加しました.
私の開発したAI「DeepEsper」は,単に囲碁を打つだけでなく,対局中に喋るのが特徴です.
本記事ではChatGPTによる解説を紹介します.
着手については別の機会に取り上げる予定です.

棋譜から解説を生成する

初期局面から解説をさせて,性能を確認

まず,大規模言語モデルが囲碁の解説をどの程度行えるのかを確認しました.
ChatGPTのGUIで質問をしてみたところ,以下のような問題が見られました.

ChatGPTのGUI

  • 星を小目と誤解している
  • 棋譜表記において,通常I列をスキップするが,含める記法もあるため誤解の可能性がある
  • D列の星の認識ミス(これは疑問が残る)

ただし,小目に関する解説自体は概ね妥当であり,棋譜の認識さえ正しくできれば,それなりの回答が期待できそうです.

解説機能の実装

囲碁解説システムを開発するにあたり,最低限の要件として以下の2点を設定しました.

  • 盤面の状況をアマチュアが理解できるように言語化する
  • NHKのテレビ囲碁番組のような分かりやすさと楽しさを両立する

今回は,この2つの機能に焦点を絞って開発を進めました.

ハードウェア

開発環境には,2023年のハイエンドゲーミングPCを使用しました.
主なスペックは以下の通りです.

  • CPU: Intel Core i7
  • メモリ: 32GB
  • GPU: NVIDIA GeForce RTX 4080
  • OS: Ubuntu(AIとの親和性を考慮して採用)

機械学習を行う場合は,この程度のスペックが求められますが,本記事の内容では学習は行わないため,これほどの性能は必要ありません.

囲碁エンジンのインストール

囲碁エンジンにはTamaGoを採用しました.
TamaGoはPythonで実装された囲碁AIで,実力はアマ初段程度と考えられます.

このエンジンを利用することで,スムーズな対局環境を構築できます.
開発にあたっては,囲碁ソフトとして問題なく対局できることを最低条件としました.

解説コメントの作成

下記のようなプロンプトを作成します.

python
prompt = (
    "19路盤の囲碁の初手からの棋譜は,黒Q16白D4黒D16白Q4黒C3白C4です.",
    "50文字以上100文字以内で,回答してください.",
    "PASSは無視してください."
)


"この囲碁の状況をまとめてください."
"この囲碁の最後の一手はどのような意味があるのでしょうか?"
"この囲碁は,形勢はどちらが良いでしょうか?"
"この囲碁の最後の3手くらいについてを特に重点的に解説してください."
"黒はこの囲碁をどこを重視して打てば勝利への道が見えますか?"
"白はこの囲碁をどのような意識で打っていくのが良いでしょうか?"
"この囲碁で重要な場所はどこでしょうか?"
"この囲碁では,黒と白ではどちらが有利ですか?"
"この囲碁について自由に語ってください?"
"この囲碁で,黒の最も重要な石を一つだけ教えてください.その理由も教えてください."
"この囲碁で,白の最も重要な石を一つだけ教えてください.その理由も教えてください."
"この局面を日本の囲碁の格言を使って解説してください."
"この囲碁の局面はどちらが何目勝っていますか?"
"黒の囲碁の打ち方はのプロの誰に似ていますか?白は誰に似ていますか?"
"この囲碁の局面で,次に打つ場所はどこですか?A1やE5のようにアルファベットと数値の座標で回答してください."
"この囲碁の最後の手は味が良い手ですか?その理由も教えてください."

ただ棋譜と質問を並べただけです.
質問はいくつかのパターンの中からランダムで選んでいます.
たまに真っ当な回答をしてくれることもありますが,出鱈目なことをそれっぽく言っています.

回答の例

次に打つべき手は,B2です.
この手は相手の石に対して攻めることができる一方,
自分の石を守ることもできるため,バランスの取れた手となります.
相手の次の手に備えつつ,自分の地盤を広げることができるでしょう.
黒の囲碁の打ち方は,井山裕太七冠に似ています.
白は,山下敬吾八段に似ています.
初手からの棋譜は,井山流の戦略を取り入れつつ,山下流の堅実な手を打っているようです.
「大局観を持ち,相手の手を読みながら着実に地を築く.
急がず,着実に進めることが勝利への近道だ.」
白は相手の石に対して攻めるよりも,まずは自分の地を確保することが重要です.
初手から相手の石に対して積極的に攻めるよりも,まずは自分の地を広げることを意識して打っていくと良いでしょう.
この囲碁の形勢は,黒がやや有利です.
黒の石が中央に広がり,白の石を圧迫しています.
ただし,白もまだ逆転の余地があります.
白は中央に厚みを持たせることで形勢を逆転させる可能性があります.

GUIと音声

NHKの囲碁番組のように聞き手と解説者とで掛け合いしながら解説していくGUIを作成しました.
DeepEsper GUI
音声も読み上げるようにしました.
テレビの囲碁中継を観るように楽しめます.

今後の発展内容

状況から正確な解説を生成する方法の確立(最重要)

今回のコメント生成は,単純に棋譜とスクリプトをLLMに入力し,コメントを出力する方式でした.
そのため,誤解を招く解説や正確性に欠ける表現が混じることがあります.

最も重要なのは,「盤面の状況をどのように捉え,どの情報をもとに解説するか」を明確にし,それを的確にLLMへ渡す仕組みを構築することです.
具体的には,以下の要素を取り入れることで精度向上を図る必要があります.

  • 盤面から得られる石の配置
  • エンジンが算出した評価値数値
  • コウやアゲハマの情報
  • 最善手と読み筋(複数手先のプラン)
  • 最善手の複数候補の情報の利用
  • 対局者の意図・戦型の特徴など,メタ情報

LLMへのプロンプトに,これらを適切に組み込む必要があるでしょう.

言語モデルの選択と可換性

CGFオープンではgpt-3.5を使用しました.
開発当初はgpt-4が未公開だったため,3.5で開発を進めていましたが,gpt-4公開後もモデルのバージョンを特に意識せずに3.5を使い続けていました.
現在の課題はgpt-4への移行とプロンプトの最適化です.

大会直前にはDeepSeekが公開されました.
中国製のモデルであるため,学習データに囲碁の情報が多く含まれている可能性が高く,囲碁に関する知識が深いことが期待されます.
試した範囲ではgpt-4と大きな性能差は感じられませんでしたが,複数のモデルを組み合わせた合議制を導入することで,さらなる性能向上を目指します.

また,ローカルLLMとしてMeta社のLlamaも試しましたが, ChatGPT (gpt-3.5) には及びませんでした.
現在のところ, RAGやファインチューニングの実装はできておらず,今後の課題となっています.

GUIと音声の工夫

囲碁AI大会では,19路盤の場合,持ち時間は双方30分の切れ負けで,1手あたり約9秒で打つのが一般的です.
音声による解説を行う場合,この短い時間内に解説を終えなければなりません.

また,変化図を示しながらの解説も理想的ですが,9秒以内に伝えるのは難しく,初手から終局まで全ての手を解説するのは現実的ではありません.
そのため,重要な手のみを選んで解説する工夫が求められます.

棋力に応じた解説内容

どの手が重要かは,棋力によって異なります.
級位者や入門者に深い読み筋を解説しても理解が難しく,高段者に基礎的な説明をしても冗長に感じられ退屈になってしまうでしょう.
また,雑談を多めにするか,盤面の解説を重視するかも,視聴者の興味関心により異なります.

テレビ放送やネット配信では,多くの視聴者に向けた一般的な解説しかできませんが,ソフトウェアを活用すれば,視聴者の棋力に応じた解説が可能です.
プロ棋士や囲碁インストラクターが指導碁で行っている相手の棋力に応じた解説の実現を目指します.

おわりに

本記事では,LLM技術を囲碁の着手と解説に活かす取り組みについて紹介しました.
まだ開発途上の部分は多いものの,実際に解説を生成してみると「なるほど,こういう観点で解説するのか」といった気づきがあり,非常に興味深いです.

今後,LLMによる囲碁解説がどのように進化し,囲碁の学習や観戦体験をどう変えていくのか,引き続き注目していきたいと思います.
興味を持たれた方は,ぜひ一度スクリプトを試し,実際にどのような解説が生成されるかを確認してみてください.
新たな発見や面白いアイデアが生まれるかもしれません.

本取り組みでは,多くのアイディアを参考にさせていただきました.
LLMによる解説の発想は,日本視覚障害者囲碁協会のブログ記事『ChatGPTを使った囲碁勉強法について』を参考にしました.
また,スクリプト内で棋風をプロ棋士に例えるアイディアは,野狐囲碁の棋風診断機能から着想を得ています.
囲碁エンジン部分はTamaGoを使用し,多大な恩恵を受けています.
本ブログ記事にあたっては,GMOインターネットグループのブログ記事『llmを用いて将棋の棋譜解説 その1』を参考にさせていただきました.

これら素晴らしい成果を開発・公開してくださった方々に,心より感謝申し上げます.
今後も敬意を払いながら,囲碁AIの機能改善・拡張に努めてまいります.

GitHubで編集を提案

Discussion