Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AIによる自然言語処理を活用したゲームシナリオの誤字検出への取り組み
Search
Cygames
PRO
August 31, 2023
Technology
0
510
AIによる自然言語処理を活用したゲームシナリオの誤字検出への取り組み
2022/08/25 CEDEC2022
Cygames
PRO
August 31, 2023
Tweet
Share
More Decks by Cygames
See All by Cygames
【CEDEC2025】『Shadowverse: Worlds Beyond』二度目のDCG開発でゲームをリデザインする~遊びやすさと競技性の両立~
cygames
PRO
2
470
【CEDEC2025】大規模言語モデルを活用したゲーム内会話パートのスクリプト作成支援への取り組み
cygames
PRO
2
1.2k
【CEDEC2025】現場を理解して実現!ゲーム開発を効率化するWebサービスの開発と、利用促進のための継続的な改善
cygames
PRO
0
1k
【CEDEC2025】ブランド力アップのためのコンテンツマーケティング~ゲーム会社における情報資産の活かし方~
cygames
PRO
0
660
【CEDEC2025】『ウマ娘 プリティーダービー』における映像制作のさらなる高品質化へ!~ 豊富な素材出力と制作フローの改善を実現するツールについて~
cygames
PRO
0
350
【CEDEC2025】LLMを活用したゲーム開発支援と、生成AIの利活用を進める組織的な取り組み
cygames
PRO
1
3.2k
【TiDB GAME DAY 2025】Shadowverse: Worlds Beyond にみる TiDB 活用術
cygames
PRO
0
2.3k
雲だけじゃない!『GRANBLUE FANTASY: Relink』の世界に奥行きを出す半透明スプライト活用術
cygames
PRO
0
1.1k
最高のアートワークを発信する『Cygames展 Artworks』企画制作事例
cygames
PRO
0
170
Other Decks in Technology
See All in Technology
初めてAWSを使うときのセキュリティ覚書〜初心者支部編〜
cmusudakeisuke
1
280
人工衛星のファームウェアをRustで書く理由
koba789
15
8.3k
20250910_障害注入から効率的復旧へ_カオスエンジニアリング_生成AIで考えるAWS障害対応.pdf
sh_fk2
3
280
ブロックテーマ時代における、テーマの CSS について考える Toro_Unit / 2025.09.13 @ Shinshu WordPress Meetup
torounit
0
130
DroidKaigi 2025 Androidエンジニアとしてのキャリア
mhidaka
2
390
「何となくテストする」を卒業するためにプロダクトが動く仕組みを理解しよう
kawabeaver
0
440
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
480
OCI Oracle Database Services新機能アップデート(2025/06-2025/08)
oracle4engineer
PRO
0
180
プラットフォーム転換期におけるGitHub Copilot活用〜Coding agentがそれを加速するか〜 / Leveraging GitHub Copilot During Platform Transition Periods
aeonpeople
1
240
AIがコード書きすぎ問題にはAIで立ち向かえ
jyoshise
1
250
AWSで始める実践Dagster入門
kitagawaz
1
750
下手な強制、ダメ!絶対! 「ガードレール」を「檻」にさせない"ガバナンス"の取り方とは?
tsukaman
2
460
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
4 Signs Your Business is Dying
shpigford
184
22k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Into the Great Unknown - MozCon
thekraken
40
2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
Statistics for Hackers
jakevdp
799
220k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
Transcript
None
2/55 この講演で得られること AIを使った誤字検出機能の開発⽅法 データセットの作り⽅、UIの改善、 ルールベースの⽂章校正 AIによる⾃然⾔語処理のためのアイデア
3/55 1. 昨年までの開発状況 2. 新しい誤字検出機能の開発 3. 実装上の改良点 4. シナリオ執筆ツールのUIを改良 5.
ルールベースの⽂章校正機能 6. まとめ アジェンダ
4/55 ⽴福 寛 開発運営⽀援 / エンジニア 複数のゲーム会社でコンテンツパイプラインの構築、モバイルゲームの開 発・運営などを担当。2018年10⽉に株式会社Cygamesへ⼊社。2019年 後半からAIの社内導⼊に取り組んでいる。 CEDEC2021では「ゲーム制作効率化のためのAIによる画像認識・⾃然⾔
語処理への取り組み」という発表を⾏った。 ⾃⼰紹介
5/55 昨年までの開発状況
6/55 はじめに n 社内のシナリオライターが使⽤するツール n 執筆、監修、台本作成などの豊富な機能 n Cygames Tech Conference
: ウマ娘 プリティーダービーの⼤規模シナ リオ制作を効率化するソリューション 〜社内Webアプリ開発運⽤事例〜 社内向けのシナリオ執筆ツール
7/55 最初の誤字検出機能を開発 誤字なし 誤字あり 誤字の種類 写真を撮ってほしい 写真を取ってほしい 漢字の間違い おはようございます おはいようございます
余計な⽂字が⼊っている 掛けてもらった 掛けて貰った 補助動詞が漢字 n 誤字検出機能を開発、ツールへ組み込み n 誤字の位置を求めることができるようになった 最初の誤字検出機能 n シナリオ執筆ツールのユーザー「シナリオの誤字をAIで⾒つけて欲しい」 開発の経緯
8/55 最初の誤字検出機能の構成 3つのモデルから誤字の位置を求める ⽂章を誤字なし・ありに分類 形態素解析 単語の出現順を求める 誤字の位置を決定
9/55 最初の誤字検出機能の結果 成功「イベントは⼤盛況のちに終わった」 単語1 単語2 単語3 単語4 単語5 単語6 単語7
イベント は ⼤ 盛況 のち に 終わった
10/55 最初の誤字検出機能の課題 n 誤検出のときにわかりにくい 結果が「誤字の位置」のみ n ツールのUIを改善する必要がある n 後半で詳しく説明 利⽤するユーザーが限られていた
11/55 新しい誤字検出機能の開発
12/55 以前のバージョンの課題 n 誤検出のときに問題 n 誤字なのか︖ 誤検出なのか︖ 「誤字の位置」だけではわかりにくい ここに誤字があります 「彼⼥の⼿を放した」
あってるけどなぁ︖
13/55 訂正候補を出すように変更 n AIがどのように考えたのか理解しやすい n 誤字と誤検出の判断が簡単に 「訂正候補」があるとわかりやすい こちらが正しいのでは︖ 「彼⼥の⼿を放した」 ↓
「彼⼥の⼿を離した] 違うよ︕ (誤検出か〜)
14/55 新しい誤字検出のモデル
15/55 新しい誤字検出機能の概要 n 元の⽂章と誤字を⼊れた⽂章のセットを学習 n 誤字を⼊れた⽂書を元の⽂章の差をなくすように学習 n 誤字を含む⽂章を⼊⼒すると元の⽂章を出⼒ BERTを使った⽂章校正 誤字のある⽂章
誤字の位置、訂正候補 BERT
16/55 ⾃然⾔語処理モデルBERT n 2018年10⽉にGoogleから発表された⾃然⾔語処理モデル n 翻訳、⽂書分類、質問応答などのタスクで当時の最⾼スコアを達成 n ⾃然⾔語処理でよく使われている BERT n
新しいモデルが登場 n 前回使ったので慣れている n ドキュメントが充実 なぜBERT? n 今回の実装で参考 n 資料の最後に記載 参考⽂献
17/55 BERTの学習 ⼊⼒ 今⽇ は MASK です いい BERT 分類スコアが最⼤の単語
正解ラベル 今⽇ は ? です いい 今⽇ は 天気 です いい n ⼊⼒トークンをランダムで[MASK]に⼊れ替え n 正しいトークンをクラス分類問題として学習(クラス数=BERTの語彙数) n BERTはトークンごとのラベルの分類スコアを出⼒ テキストの⽳埋め問題
18/55 BERTによる⽂章校正(学習) 誤字のある⽂章 今⽇ MASK 天気 です いや BERT 誤字のない⽂章
今⽇ ︖ 天気 です いか 今⽇ は 天気 です いい 分類スコアが最⼤の単語 n ⼊⼒︓誤字のある⽂章 n 正解ラベル︓誤字のない⽂章 ⼊⼒と正解を⼊れ替え
19/55 BERTによる⽂章校正(推論) 推論時にはトークンごとに分類スコアを求める n 分類スコアが最⼤の単語を選ぶ 誤字のある⽂章 今⽇は は 天気 です
BERT 分類スコアが最⼤の単語 >訂正候補 今⽇ は 天気 です 推論結果 {c:[ʻ今⽇ʼ,ʼはʼ,ʼいいʼ,ʼ天気ʼ,ʼですʼ], index:2} いや いい
20/55 学習データセットについて
21/55 学習データセット 学習データセット n ゲームシナリオの⽂章 n 上記に独⾃の⽅法で誤字を⼊れた⽂章(後ほど詳しく説明) n ゲーム中の表⽰単位︓1⾏ 元の⽂章と誤字を⼊れた⽂章のセットで学習
誤字を⼊れた⽂章 元の⽂章
22/55 ゲームシナリオ 学習データセット ⽣成した誤字パターンの数 シナリオ1⾏ 誤字を⽣成 x5 誤字あり⽂章 元の⽂章 x5
元の⽂章 元の⽂章 x5 n 元の⽂章も5つ追加して、5:5とした n 正しい⽂章を正しいと学習してほしい ゲームシナリオ1⾏から5パターンの誤字を⽣成
23/55 プロジェクトA+B プロジェクトB プロジェクトA データセットを分ける︖合体する︖ n 明らかに精度が落ちたのでボツ n ゲームごとのシナリオの傾向が原因か 合体したほうが精度が⾼いのでは︖
データセット モデル データセット モデル データセット モデル n 90万⾏と170万⾏のゲームシナリオ n 今回はデータセットとモデルをそれぞれ作成 2つのゲームプロジェクトが対象
24/55 以前のバージョンとの⽐較 以前のバージョン 新しいバージョン 機械学習モデル 3つの機械学習モデル BERT>BERT>RandomForest 1つの機械学習モデル BERT メンテナンス性
低い ⾼い 実⾏時間(AWS Lambda上) 5〜10分 5分以下 出⼒ 誤字の位置 誤字の位置と訂正候補 誤字が無いことを正しく推論 88% 90% 誤字の位置を正しく推論 23% 63%
25/55 実装上の改良点
26/55 実装上の改良点3つと精度 誤字パターンの改良 トークンのマッチングの⼯夫 学習・テストデータの分割⽅法の改善 最終的な精度
27/55 誤字パターンの改良
28/55 誤字パターンの改良(その1) n 「よく間違えられる単語リスト」を使って⼊れ替え(*) n ひらがなに囲まれている「ない」を削除 n 「っ」を落とす n 「が」「を」などの助詞を⼊れ替える
n 助詞を落とす n ひらがなのABをBABにする n ひらがなorカタカナをランダムで1⽂字落とす n 詳細はCEDEC2021の発表資料を参照 以前の誤字パターン(7つ) n (*)の部分と⼊れ替え n 詳細を次で説明 ⽇本語Wikipedia⼊⼒誤りデータセットを導⼊
29/55 ⼊⼒誤りデータセット 誤字パターンの改良(その2) 訂正前の⽂章 訂正後の⽂章 訂正される単語 訂正後の単語 訂正の種類 n 京都⼤学
⿊橋・褚・村脇研究室 n JSON形式で⼊⼒誤りを訂正した情報 ⽇本語Wikipedia⼊⼒誤りデータセットを導⼊
30/55 ⼊⼒誤りデータセット ゲームシナリオ 誤字パターンの改良(その3) 教 ⇨ 今⽇ 今⽇はいい天気です 学習データ 教はいい天気です
ゲームシナリオに適⽤ n 訂正後の単語をゲームシナリオから検索 n 訂正前の単語で置き換えて誤字を⽣成 n 単純な⽂字列マッチング(2⽂字以上、品詞は無視)
31/55 トークンマッチングの⼯夫
32/55 トークンマッチングの⼯夫(その1) n トークン数が⼀致するデータセットしか利⽤できない n 全体の6割程度しか利⽤できない(もったいない︕) 今回の仕組みはトークン数の⼀致が必要 n 2つの⽂章のトークンがずれている場合の処理 n
元の⽂章にPADを⼊れて対応を取る(⼀番対応が取りやすいところへ) n 推論時の出⼒にPADがあれば削除 PADを使って調整 誤字のある⽂章 教 は 休み に し よ ー 元の⽂章 今⽇ は 休み に し よ ー 誤字のある⽂章 準備 は で い て いる。 元の⽂章 準備 は でき て いる。 調整後 準備 は [PAD] でき て いる。
33/55 トークンマッチングの⼯夫(その2) PADの数 利⽤できる⽂章の割合 0 64.12% 1 78.57% 2 85.84%
3 86.50% 4 86.64% n PADの数を増やすと利⽤できる⽂章が増える n 増やしすぎると推論の精度が落ちる n PADの最⼤数3が推論の精度が最⼤に PADの数を増やした場合の⽐較
34/55 学習・テストデータの分割⽅法の改善
35/55 学習・テストデータの分割⽅法の改善 前回のバージョンのデータセット ゲームシナリオ 誤字追加 学習データ テストデータ 今回のバージョンのデータセット ゲームシナリオ 学習⽤
テスト⽤ 学習データ テストデータ 誤字追加 誤字追加 シャッフルして分割 同じ⽂章から⽣成した⽂章が含まれる︕!
36/55 最終的な精度
37/55 最終的な精度 n テストデータ10万⾏(誤字なし・あり、40%が誤字) n プロジェクトA︓データセット 170万⾏ n プロジェクトB :
データセット 90万⾏ 分離しておいたテストデータでテスト 正しく判定 プロジェクトA 正しく判定 プロジェクトB 誤字を正しく訂正 38% 32% 誤字の位置を正しく検出 66% 60% 正しく判定 プロジェクトA 正しく判定 プロジェクトB 誤字のない⽂章 94% 87% 誤字のある⽂章 72% 72%
38/55 シナリオ執筆ツールのUIを改良
39/55 以前のUI n 誤字検出機能は別の「⼀括処理画⾯」に⼊っていた n UIの実装⼯数は少ない シナリオ執筆画⾯から移動して誤字検出を実⾏ ユーザーによっては使い勝⼿が悪い AIの機能を開発してもUIが悪いと使われない 別画⾯へ
移動して実⾏
40/55 シナリオ執筆ツールのユーザー シナリオ執筆 誤字検出︓使ってない シナリオ校正 誤字検出︓使ってる n 執筆されたシナリオを⼀括でチェックする n 複数シナリオをまとめて誤字検出
シナリオを校正する⼈ n シナリオ執筆画⾯をメインに使う>別の画⾯の機能は使いにくい シナリオを執筆する⼈
41/55 誤字検出実⾏までのUIの改善 シナリオ執筆画⾯ ⼀括処理画⾯ シナリオ検索 誤字検出実⾏ 結果待ち 結果確認 以前のUI 新しいUI
シナリオ執筆画⾯ 誤字検出実⾏ 結果待ち 結果確認 シナリオ執筆画⾯に 追加されたボタン
42/55 バックグラウンドで⾃動実⾏ n ⼀定時間経過後に実⾏(AWSのコストのため) シナリオ保存時に⾃動実⾏ n 結果⼀覧画⾯でユーザーが実⾏した結果と⾃動実⾏の結果が混じる n ユーザー「結果が確認しにくい」 n
ユーザー⽬線での確認が⾜りていなかったと反省 問題があったので保留
43/55 ルールベースの⽂章校正機能
44/55 ルールベースの⽂章校正機能 n 漢検1級、準1級の漢字を検出 n よく使われる漢字ならOK n 漢字のテーブルを持っておいてマッチしているだけ 難しい漢字の検出 胡
坐 n 補助動詞に漢字が使われていたら検出 n 例︓ちょっと寄って来る 補助動詞の漢字を検出 n ⽂章校正のチェック対象 n ら抜き⾔葉が全部NGではない ら抜き⾔葉を検出
45/55 補助動詞の検出
46/55 補助動詞の検出 n Juman++ : 形態素解析システム 京都⼤学 Juman++での形態素解析の結果を利⽤ ⾒出し 参考
に して 頂く 品詞 名詞 助詞 動詞 動詞 意味情報 - - - 付属動詞候補 n 「参考にして頂く」の「頂く」を検出したい n Juman++で形態素解析 n 品詞と意味情報をパターンとして登録 検出したい⽂章からパターンを作成 パターンとして登録
47/55 補助動詞の検出例 ⾒出し 今 から 話して 下さい 品詞 名詞 助詞
動詞 接尾辞 意味情報 - - - - ⾒出し これ まで も 戦って 参り ました が 品詞 指⽰詞 助詞 助詞 動詞 動詞 接尾辞 助詞 意味情報 - - - - 付属動詞候補 - - 品詞 動詞 接尾辞 意味情報 - - 品詞 助詞 動詞 動詞 接尾辞 意味情報 - - 付属動詞候補 パターン マッチング パターン マッチング
48/55 ら抜き⾔葉の検出
49/55 ら抜き⾔葉を検出(その1) n Webの記事を参考にして実装 n ラ抜き⾔葉判定アルゴリズムを考えてみる (https://blog.mohyo.net/2015/03/1343/) ら抜き⾔葉の検出について調べる n Juman++で形態素解析して代表表記と活⽤形1を利⽤
n あるトークンの代表表記が「れる/れる」 n ⼀つ前のトークンの活⽤形1が「未然形」「カ変動詞来」「⺟⾳動詞」 判定⽅法
50/55 ら抜き⾔葉を検出(その2) ⾒出し 5 時 に 来 れ ます か
代表表記 - 時/じ - 来る/くる れる/れる ます/ます か 活⽤形1 * * * カ変動詞来 ⺟⾳動詞 動詞性接尾辞ます型 * n あるトークンの代表表記が「れる/れる」 n ⼀つ前のトークンの活⽤形1が「未然形」「カ変動詞来」「⺟⾳動詞」 検出の例︓5時に来(ら)れますか
51/55 ら抜き⾔葉を検出(その3) n 検出158 正解148 失敗10 n ⾒逃しているケースもある n 誤検出は少ない
シナリオ全体でテスト n こんなにたくさん⾷べ(ら)れない n 初⽇の出が⾒(ら)れた n あの⼈が来るとは考え(ら)れない 正しく検出 n 写真撮ってきたから⾒れ︕ n あれ︖あれれれ︖ n 今こそ来たれ︕ 誤検出
52/55 まとめ
53/55 まとめ BERTを使った誤字検出機能の開発 データセットの作成、UIの改良、 ルールベースの⽂章校正 AIによる⾃然⾔語処理のためのアイデア
54/55
55/55 参考⽂献 n BERTの各種タスクの使い⽅をわかりやすく説明 n 第9章 ⽂章校正を参考にして誤字検出を実装 BERTによる⾃然⾔語処理⼊⾨ ストックマーク株式会社 (編集),
近江 崇宏, ⾦⽥ 健太郎, 森⻑ 誠, 江間⾒ 亜利 (共著) オーム社 n Transformer/BERTの動作の説明が詳しい 作ってわかる! ⾃然⾔語処理AI 坂本 俊之 シーアンドアール研究所