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
350
AIによる自然言語処理を活用したゲームシナリオの誤字検出への取り組み
2022/08/25 CEDEC2022
Cygames
August 31, 2023
Tweet
Share
More Decks by Cygames
See All by Cygames
最高のアートワークを発信する『Cygames展 Artworks』企画制作事例
cygames
0
14
社内にバーチャルスタッフ!?「スイちゃん」のキャラクターデザインと施策の広げ方の秘訣
cygames
0
53
全高3m超のバハムート像がスマホを通して躍動する! ~『Cygames展 Artworks』ARコンテンツの開発プロセスと実装~
cygames
0
6
最高の資料を目指すために!社内フリーイラスト制作チームの取り組みについて
cygames
0
44
「生きているモーション」を作り出すCygamesのモーションキャプチャー
cygames
0
31
『Cygames展 Artworks』におけるShadowverseデジタルサイネージ制作事例
cygames
0
17
『GRANBLUE FANTASY: Relink』 原作の世界観に没入するステージの絵作り
cygames
0
16
『GRANBLUE FANTASY: Relink』イラストを再現する為のキャラクターモデル制作事例
cygames
0
20
『GRANBLUE FANTASY: Relink』キャラクターの魅力を支えるリグ制作事例
cygames
0
23
Other Decks in Technology
See All in Technology
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1.1k
ゼロから創る横断SREチーム 挑戦と進化の軌跡
rvirus0817
2
270
多領域インシデントマネジメントへの挑戦:ハードウェアとソフトウェアの融合が生む課題/Challenge to multidisciplinary incident management: Issues created by the fusion of hardware and software
bitkey
PRO
2
110
.NET 9 のパフォーマンス改善
nenonaninu
0
940
OpenAIの蒸留機能(Model Distillation)を使用して運用中のLLMのコストを削減する取り組み
pharma_x_tech
4
560
サイバー攻撃を想定したセキュリティガイドライン 策定とASM及びCNAPPの活用方法
syoshie
3
1.3k
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
190
統計データで2024年の クラウド・インフラ動向を眺める
ysknsid25
2
840
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
270
社外コミュニティで学び社内に活かす共に学ぶプロジェクトの実践/backlogworld2024
nishiuma
0
260
re:Invent をおうちで楽しんでみた ~CloudWatch のオブザーバビリティ機能がスゴい!/ Enjoyed AWS re:Invent from Home and CloudWatch Observability Feature is Amazing!
yuj1osm
0
120
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
460
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
The Cost Of JavaScript in 2023
addyosmani
45
7k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Why Our Code Smells
bkeepers
PRO
335
57k
We Have a Design System, Now What?
morganepeng
51
7.3k
Statistics for Hackers
jakevdp
796
220k
Being A Developer After 40
akosma
87
590k
How GitHub (no longer) Works
holman
311
140k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
Side Projects
sachag
452
42k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.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 坂本 俊之 シーアンドアール研究所