ハンドボールの戦評を自動生成してみた Part.2
これは「スポーツアナリティクス Advent Calender 2021」18日目の投稿です。
けんざぶです。
#spoana アドベントカレンダー、3年連続出場です。今年も頑張って書いていきます。
とはいったものの、今年は去年のネタをより深めてみよう、といった内容です。1年越しのPart.2です。
去年の投稿はこれ。
去年できたこと/できなかったこと
inputはJHA(日本ハンドボール協会)やJHL(日本ハンドボールリーグ)のHPに載っているスコアシートを使う
outputも簡潔に
inputの量を考えるとあまり深くはできないが、速報として淡々と生成できるのでOKという考え方
ただし劇的な試合展開を人間味あふれる表現にできない
ざっくりとこんな感じでしょうか。
ちなみに、この時点で出力させている文は、
前後半のスローオフ
得点。数パターン表現できるようにした
普通の得点シーン
「前半14分59秒ジークスター東京がLuc Abaloのシュートで9-6」
先制・同点・勝ち越し
「前半0分48秒大同特殊鋼・石橋 龍が先制点を挙げた」
「後半21分59秒大同特殊鋼がIgor Anicのシュートで同点とした」
(「○○のシュートで5点差とした」とかもイケる)
チームが3連続得点以上
「後半28分26秒土井 レミイ杏利のシュートでジークスター東京が3連続得点を挙げ29-25」
「同点・勝ち越し」系と「連続得点」系など、組み合わせたもの
「後半21分18秒橋本 明雄のシュートでジークスター東京が3連続得点を挙げ勝ち越した」
7mスロー系
得点
「前半20分0秒ジークスター東京が東長濱 秀希の7mスローで12-8」
阻止
「後半8分26秒大同特殊鋼・GK久保 侑生が7mスローを阻止した」
タイムアウト
試合結果
「ジークスター東京が30-26で勝利」
スコアシートに書かれているものを基準に出力しているので、この試合でいうと66文出力されています。一応、目標の生成物を「JHLなどに掲載されている戦況文章(っぽいの)」としているので、試合後の戦評にするには多すぎます(試合中の速報なら…とか、とりあえずいっぱい出力して人間がいい感じにpickupするなら…とか、この時点は使いようがないわけではない)。
(なお、今回例文に使用している試合は'21/11/19ジークスター東京vs大同特殊鋼で、このページにある「スコア」のPDFを入力としています)
今年やってみること
この文章を戦評っぽくするために、要約の作業に取り組んでみます。要約は以下のタスクに分けられます。
文を抽出する
抽象化した文を生成する
文を抽出する
まずは重要そうな部分を取り出すことを考えてみます。今回試したのはこちらの2パターン。
生成される得点シーンのうち、「先制・同点・勝ち越し」「連続得点」を残してみるパターン
JHL公式のYouTubeにあるハイライト動画のシーンを生成させるパターン
まずは「先制・同点・勝ち越し」「連続得点」を残すパターンです。
今回の試合では66文->29文まで減らせました。ただ、試合展開に大きく左右される(とくに同点、勝ち越しは繰り返しやすい)点が気になります。
続いてJHL公式のYouTubeにあるハイライト動画のシーンを生成させるパターン。今年からJHLはYouTubeでリーグの試合を中継しているほか、1試合につき両チームのハイライト動画を1本ずつアップロードしています(ほかにもマンスリーハイライトなどがある)。
各1分半程度のハイライトをベースに文を抽出してみると、66文->19文にすることができました。ただし、「映像で見たいハイライトシーンと文章で読みたいハイライトシーンは違う」という面にぶつかります。映像のハイライトにあるスーパープレーや選手の表情はスコアシートに書かれていません。そもそもGKのセーブが今回のInputにはありません(7m阻止だけある)。
映像ベースで生成した文章を読んでみると、試合の状況が分かりにくくなっていて、ハイライト映像をそのまま流用するのは難しそうです(あとこのハイライト映像の公開が試合後1週間なので、その間に人間が素敵な文章を書けてしまう)。
抽象化した文を生成する
ここで去年の投稿を振り返ってみます。
ここまで生成した文はどれもその場面を取り上げたものでした。かろうじて、スコアや点差の表現はその直前までの得点を考慮しています。このように前後の場面・得点を考慮してあげた文を生成させてみようと思います。今回は以下の2点で生成させてみます。
チームがその場面(得点)までで最大点差のリードを奪ったとき
チームがその場面(得点)までで最大の連続得点を奪ったとき
(両方を満たしたとき)
まとめ
今回は去年作ったハンドボールの戦評の自動生成をアップデートすることにチャレンジしてみました。得点などを基準にたくさんの場面を文に起こすことができていたので、この中から抽出したり抽象化した文を生成させたりしました。抽出するべきポイントはまだ試行錯誤が必要そうですが、抽象化して生成させる文は(閾値を調節してあげることで)人間の戦評でもありそうなものを生成させることができました。去年書いていた抽象化のアイデアもまだあるので、また進捗あれば書いていきたいと思います。進捗が明日('21/12/19)までに出せれば、 すでに登壇予定にしているSports Analyst Meetup #12で報告します。
12/24 追記
この記事の投稿・spoana#12の発表から数日空いてしまいましたが、ちょっと追加でやったのでここにまとめておきます。
これまで表現できる得点シーンには「先制・同点・勝ち越し」がありましたが、追加で「逆転」を出せるようにしました。「逆転」に関しては、前者の3つと異なり、「ビハインドの状況」->「同点の状況」->「リードしている状況」がつながって起きる必要があります(野球やバスケなどは同点をすっ飛ばすこともできる。こういうところにも競技の特徴が出る)。これも考慮するため、今回は「抽象化した文を生成する」パートに追加してみました。
もう1点追記です。spoana#12での登壇のアーカイブ映像を公開していただいています。
なんか自分で宣伝するのは恥ずかしいですが、せっかくなのでご覧いただければ。特段このnoteと変わらない内容ですが、質疑の時間もいただいたので…。(spoana運営の皆様ありがとうございました!)(追記ここまで)
2022/2/22 追記
spoanaで登壇したものをログミーさんに載せてもらいました。
というわけでこちらも貼っておきます。担当の皆様ありがとうございました!