Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AIによる自然言語処理を活用したゲームシナリオの誤字検出への取り組み
Search
Cygames
August 31, 2023
Technology
0
340
AIによる自然言語処理を活用したゲームシナリオの誤字検出への取り組み
2022/08/25 CEDEC2022
Cygames
August 31, 2023
Tweet
Share
More Decks by Cygames
See All by Cygames
『GRANBLUE FANTASY Relink』キャラクターの魅力を支えるリグ・シミュレーション制作事例
cygames
0
450
『GRANBLUE FANTASY: Relink』最高の「没入感」を実現するカットシーン制作手法とそれを支える技術
cygames
1
380
『GRANBLUE FANTASY Relink』ソフトウェアラスタライザによる実践的なオクルージョンカリング
cygames
0
350
高品質なフォトグラメトリデータを取得するためのハードウェア&ソフトウェア開発
cygames
0
1.2k
AIを活用した柔軟かつ効率的な社内リソース検索への取り組み
cygames
0
1.1k
『GRANBLUE FANTASY: Relink』開発からリリースまでを支えたCI/CDの取り組み
cygames
0
270
『GRANBLUE FANTASY: Relink』専任エンジニアチームで回す大規模開発QAサイクル
cygames
0
300
『GRANBLUE FANTASY: Relink』クオリティと物量の両立に挑戦したフェイシャルアニメーション事例 ~カットシーンからランタイムまで~
cygames
0
340
『GRANBLUE FANTASY: Relink』キャラクターの個性にlinkした効果音表現
cygames
0
140
Other Decks in Technology
See All in Technology
Amazon ECSとCloud Runの相互理解で広げるクラウドネイティブの景色 / Mutually understanding Amazon ECS and Cloud Run
iselegant
19
2.4k
専門領域に特化したチームの挑戦
leveragestech
0
250
開志専門職大学特別講義 2024 オープニング
1ftseabass
PRO
0
220
Kaggleふりかえり会〜LLM 20 Questions & ISIC 2024
recruitengineers
PRO
2
140
LangChainとSupabaseを活用して、RAGを実装してみた
atsushii
0
140
My Generation 年配者がこの先生きのこるには (Developers CAREER Boost 2024 Edition)/My Generation How elder engineers can survive
kwappa
3
110
知らない景色を見に行こう チャンスを掴んだら道が開けたマネジメントの旅 / Into the unknown~My management journey~
kakehashi
6
910
総会員数1,500万人のレストランWeb予約サービスにおけるRustの活用
kymmt90
3
2.8k
Autonomous Database サービス・アップデート (FY25)
oracle4engineer
PRO
0
220
間違いだらけのポストモーテム - ホントに役立つレビューはこうだ!
jacopen
5
960
検証と資産化を形にするプロダクト組織へ/tapple_pmconf2024
corin8823
1
7.3k
Kubernetes だけじゃない!Amazon ECS で実現するクラウドネイティブな GitHub Actions セルフホストランナー / CNDW2024
ponkio_o
PRO
6
430
Featured
See All Featured
Optimizing for Happiness
mojombo
376
70k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
GraphQLとの向き合い方2022年版
quramy
44
13k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Typedesign – Prime Four
hannesfritz
40
2.4k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
480
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
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 坂本 俊之 シーアンドアール研究所