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
August 31, 2023
Technology
0
310
AIによる自然言語処理を活用したゲームシナリオの誤字検出への取り組み
2022/08/25 CEDEC2022
Cygames
August 31, 2023
Tweet
Share
More Decks by Cygames
See All by Cygames
『GRANBLUE FANTASY Relink』キャラクターの魅力を支えるリグ・シミュレーション制作事例
cygames
0
300
『GRANBLUE FANTASY: Relink』最高の「没入感」を実現するカットシーン制作手法とそれを支える技術
cygames
1
250
『GRANBLUE FANTASY Relink』ソフトウェアラスタライザによる実践的なオクルージョンカリング
cygames
0
270
高品質なフォトグラメトリデータを取得するためのハードウェア&ソフトウェア開発
cygames
0
720
AIを活用した柔軟かつ効率的な社内リソース検索への取り組み
cygames
0
380
『GRANBLUE FANTASY: Relink』開発からリリースまでを支えたCI/CDの取り組み
cygames
0
170
『GRANBLUE FANTASY: Relink』専任エンジニアチームで回す大規模開発QAサイクル
cygames
0
190
『GRANBLUE FANTASY: Relink』クオリティと物量の両立に挑戦したフェイシャルアニメーション事例 ~カットシーンからランタイムまで~
cygames
0
190
『GRANBLUE FANTASY: Relink』キャラクターの個性にlinkした効果音表現
cygames
0
91
Other Decks in Technology
See All in Technology
トークナイザー入門
payanotty
2
1k
シェルとPerlの使い分け、 そういった思考の道具は、どこから来て、どこへゆくのか?v1.1.0
fmlorg
0
570
プロダクト開発の貢献をアピールするための目標設計や認知活動 / Goal design and recognition activities to promote product development contributions.
oomatomo
5
960
Product Utilization of Large Language Models Starting Today
ymatsuwitter
3
1.6k
AWS Lambdaで実現するスケーラブルで低コストなWebサービス構築/YAPC::Hakodate2024
fujiwara3
7
3.7k
Amplify Gen 2ではじめる 生成AIアプリ開発入門
tsukuboshi
0
290
Cosmos DB で持続可能な RAG を実現しよう!~ AOAI Dev Day ふりかえりを添えて / Sustainable RAG with Cosmos DB with recap AOAI Dev Day
miyake
0
130
Amazon CloudWatchで小さく始めるWebサービスのオブザーバビリティ / How to start Observability for Web Sevices with Amazon CloudWatch
sms_tech
3
110
テストを楽に書きたい
tomorrowkey
1
220
エンジニア向け会社紹介資料
caddi_eng
14
270k
データ分析基盤のためにS3を深堀りする~アーキテクチャ設計の考え方のヒントに~
nrinetcom
PRO
1
180
Qdrant を用いた検索改善施策の紹介 / Search Engineering Tech Talk 2024 Summer
visional_engineering_and_design
1
230
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
664
120k
Pencils Down: Stop Designing & Start Developing
hursman
119
11k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
228
52k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
355
29k
What's new in Ruby 2.0
geeforr
341
31k
Web Components: a chance to create the future
zenorocha
310
42k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Creatively Recalculating Your Daily Design Routine
revolveconf
217
12k
Code Reviewing Like a Champion
maltzj
519
39k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Happy Clients
brianwarren
97
6.7k
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 坂本 俊之 シーアンドアール研究所