$30 off During Our Annual Pro Sale. View Details »

AIによる自然言語処理を活用したゲームシナリオの誤字検出への取り組み

Cygames
August 31, 2023

 AIによる自然言語処理を活用したゲームシナリオの誤字検出への取り組み

2022/08/25 CEDEC2022

Cygames

August 31, 2023
Tweet

More Decks by Cygames

Other Decks in Technology

Transcript

  1. View Slide

  2. 2/55
    この講演で得られること
    AIを使った誤字検出機能の開発⽅法
    データセットの作り⽅、UIの改善、
    ルールベースの⽂章校正
    AIによる⾃然⾔語処理のためのアイデア

    View Slide

  3. 3/55
    1. 昨年までの開発状況
    2. 新しい誤字検出機能の開発
    3. 実装上の改良点
    4. シナリオ執筆ツールのUIを改良
    5. ルールベースの⽂章校正機能
    6. まとめ
    アジェンダ

    View Slide

  4. 4/55
    ⽴福 寛
    開発運営⽀援 / エンジニア
    複数のゲーム会社でコンテンツパイプラインの構築、モバイルゲームの開
    発・運営などを担当。2018年10⽉に株式会社Cygamesへ⼊社。2019年
    後半からAIの社内導⼊に取り組んでいる。
    CEDEC2021では「ゲーム制作効率化のためのAIによる画像認識・⾃然⾔
    語処理への取り組み」という発表を⾏った。
    ⾃⼰紹介

    View Slide

  5. 5/55
    昨年までの開発状況

    View Slide

  6. 6/55
    はじめに
    n 社内のシナリオライターが使⽤するツール
    n 執筆、監修、台本作成などの豊富な機能
    n Cygames Tech Conference : ウマ娘 プリティーダービーの⼤規模シナ
    リオ制作を効率化するソリューション 〜社内Webアプリ開発運⽤事例〜
    社内向けのシナリオ執筆ツール

    View Slide

  7. 7/55
    最初の誤字検出機能を開発
    誤字なし 誤字あり 誤字の種類
    写真を撮ってほしい 写真を取ってほしい 漢字の間違い
    おはようございます おはいようございます 余計な⽂字が⼊っている
    掛けてもらった 掛けて貰った 補助動詞が漢字
    n 誤字検出機能を開発、ツールへ組み込み
    n 誤字の位置を求めることができるようになった
    最初の誤字検出機能
    n シナリオ執筆ツールのユーザー「シナリオの誤字をAIで⾒つけて欲しい」
    開発の経緯

    View Slide

  8. 8/55
    最初の誤字検出機能の構成
    3つのモデルから誤字の位置を求める
    ⽂章を誤字なし・ありに分類
    形態素解析
    単語の出現順を求める
    誤字の位置を決定

    View Slide

  9. 9/55
    最初の誤字検出機能の結果
    成功「イベントは⼤盛況のちに終わった」
    単語1 単語2 単語3 単語4 単語5 単語6 単語7
    イベント は ⼤ 盛況 のち に 終わった

    View Slide

  10. 10/55
    最初の誤字検出機能の課題
    n 誤検出のときにわかりにくい
    結果が「誤字の位置」のみ
    n ツールのUIを改善する必要がある
    n 後半で詳しく説明
    利⽤するユーザーが限られていた

    View Slide

  11. 11/55
    新しい誤字検出機能の開発

    View Slide

  12. 12/55
    以前のバージョンの課題
    n 誤検出のときに問題
    n 誤字なのか︖ 誤検出なのか︖
    「誤字の位置」だけではわかりにくい
    ここに誤字があります
    「彼⼥の⼿を放した」
    あってるけどなぁ︖

    View Slide

  13. 13/55
    訂正候補を出すように変更
    n AIがどのように考えたのか理解しやすい
    n 誤字と誤検出の判断が簡単に
    「訂正候補」があるとわかりやすい
    こちらが正しいのでは︖
    「彼⼥の⼿を放した」

    「彼⼥の⼿を離した]
    違うよ︕
    (誤検出か〜)

    View Slide

  14. 14/55
    新しい誤字検出のモデル

    View Slide

  15. 15/55
    新しい誤字検出機能の概要
    n 元の⽂章と誤字を⼊れた⽂章のセットを学習
    n 誤字を⼊れた⽂書を元の⽂章の差をなくすように学習
    n 誤字を含む⽂章を⼊⼒すると元の⽂章を出⼒
    BERTを使った⽂章校正
    誤字のある⽂章
    誤字の位置、訂正候補
    BERT

    View Slide

  16. 16/55
    ⾃然⾔語処理モデルBERT
    n 2018年10⽉にGoogleから発表された⾃然⾔語処理モデル
    n 翻訳、⽂書分類、質問応答などのタスクで当時の最⾼スコアを達成
    n ⾃然⾔語処理でよく使われている
    BERT
    n 新しいモデルが登場
    n 前回使ったので慣れている
    n ドキュメントが充実
    なぜBERT?
    n 今回の実装で参考
    n 資料の最後に記載
    参考⽂献

    View Slide

  17. 17/55
    BERTの学習
    ⼊⼒ 今⽇ は MASK です
    いい
    BERT
    分類スコアが最⼤の単語
    正解ラベル
    今⽇ は ? です
    いい
    今⽇ は 天気 です
    いい
    n ⼊⼒トークンをランダムで[MASK]に⼊れ替え
    n 正しいトークンをクラス分類問題として学習(クラス数=BERTの語彙数)
    n BERTはトークンごとのラベルの分類スコアを出⼒
    テキストの⽳埋め問題

    View Slide

  18. 18/55
    BERTによる⽂章校正(学習)
    誤字のある⽂章 今⽇ MASK 天気 です
    いや
    BERT
    誤字のない⽂章
    今⽇ ︖ 天気 です
    いか
    今⽇ は 天気 です
    いい
    分類スコアが最⼤の単語
    n ⼊⼒︓誤字のある⽂章
    n 正解ラベル︓誤字のない⽂章
    ⼊⼒と正解を⼊れ替え

    View Slide

  19. 19/55
    BERTによる⽂章校正(推論)
    推論時にはトークンごとに分類スコアを求める
    n 分類スコアが最⼤の単語を選ぶ
    誤字のある⽂章 今⽇は は 天気 です
    BERT
    分類スコアが最⼤の単語
    >訂正候補
    今⽇ は 天気 です
    推論結果 {c:[ʻ今⽇ʼ,ʼはʼ,ʼいいʼ,ʼ天気ʼ,ʼですʼ], index:2}
    いや
    いい

    View Slide

  20. 20/55
    学習データセットについて

    View Slide

  21. 21/55
    学習データセット
    学習データセット
    n ゲームシナリオの⽂章
    n 上記に独⾃の⽅法で誤字を⼊れた⽂章(後ほど詳しく説明)
    n ゲーム中の表⽰単位︓1⾏
    元の⽂章と誤字を⼊れた⽂章のセットで学習
    誤字を⼊れた⽂章
    元の⽂章

    View Slide

  22. 22/55
    ゲームシナリオ
    学習データセット
    ⽣成した誤字パターンの数
    シナリオ1⾏
    誤字を⽣成
    x5
    誤字あり⽂章
    元の⽂章
    x5
    元の⽂章
    元の⽂章
    x5
    n 元の⽂章も5つ追加して、5:5とした
    n 正しい⽂章を正しいと学習してほしい
    ゲームシナリオ1⾏から5パターンの誤字を⽣成

    View Slide

  23. 23/55
    プロジェクトA+B
    プロジェクトB
    プロジェクトA
    データセットを分ける︖合体する︖
    n 明らかに精度が落ちたのでボツ
    n ゲームごとのシナリオの傾向が原因か
    合体したほうが精度が⾼いのでは︖
    データセット
    モデル
    データセット
    モデル
    データセット
    モデル
    n 90万⾏と170万⾏のゲームシナリオ
    n 今回はデータセットとモデルをそれぞれ作成
    2つのゲームプロジェクトが対象

    View Slide

  24. 24/55
    以前のバージョンとの⽐較
    以前のバージョン 新しいバージョン
    機械学習モデル 3つの機械学習モデル
    BERT>BERT>RandomForest
    1つの機械学習モデル
    BERT
    メンテナンス性 低い ⾼い
    実⾏時間(AWS Lambda上) 5〜10分 5分以下
    出⼒ 誤字の位置 誤字の位置と訂正候補
    誤字が無いことを正しく推論 88% 90%
    誤字の位置を正しく推論 23% 63%

    View Slide

  25. 25/55
    実装上の改良点

    View Slide

  26. 26/55
    実装上の改良点3つと精度
    誤字パターンの改良
    トークンのマッチングの⼯夫
    学習・テストデータの分割⽅法の改善
    最終的な精度

    View Slide

  27. 27/55
    誤字パターンの改良

    View Slide

  28. 28/55
    誤字パターンの改良(その1)
    n 「よく間違えられる単語リスト」を使って⼊れ替え(*)
    n ひらがなに囲まれている「ない」を削除
    n 「っ」を落とす
    n 「が」「を」などの助詞を⼊れ替える
    n 助詞を落とす
    n ひらがなのABをBABにする
    n ひらがなorカタカナをランダムで1⽂字落とす
    n 詳細はCEDEC2021の発表資料を参照
    以前の誤字パターン(7つ)
    n (*)の部分と⼊れ替え
    n 詳細を次で説明
    ⽇本語Wikipedia⼊⼒誤りデータセットを導⼊

    View Slide

  29. 29/55
    ⼊⼒誤りデータセット
    誤字パターンの改良(その2)
    訂正前の⽂章 訂正後の⽂章
    訂正される単語 訂正後の単語
    訂正の種類
    n 京都⼤学 ⿊橋・褚・村脇研究室
    n JSON形式で⼊⼒誤りを訂正した情報
    ⽇本語Wikipedia⼊⼒誤りデータセットを導⼊

    View Slide

  30. 30/55
    ⼊⼒誤りデータセット ゲームシナリオ
    誤字パターンの改良(その3)
    教 ⇨ 今⽇ 今⽇はいい天気です
    学習データ 教はいい天気です
    ゲームシナリオに適⽤
    n 訂正後の単語をゲームシナリオから検索
    n 訂正前の単語で置き換えて誤字を⽣成
    n 単純な⽂字列マッチング(2⽂字以上、品詞は無視)

    View Slide

  31. 31/55
    トークンマッチングの⼯夫

    View Slide

  32. 32/55
    トークンマッチングの⼯夫(その1)
    n トークン数が⼀致するデータセットしか利⽤できない
    n 全体の6割程度しか利⽤できない(もったいない︕)
    今回の仕組みはトークン数の⼀致が必要
    n 2つの⽂章のトークンがずれている場合の処理
    n 元の⽂章にPADを⼊れて対応を取る(⼀番対応が取りやすいところへ)
    n 推論時の出⼒にPADがあれば削除
    PADを使って調整
    誤字のある⽂章 教 は 休み に し よ ー
    元の⽂章 今⽇ は 休み に し よ ー
    誤字のある⽂章 準備 は で い て いる。
    元の⽂章 準備 は でき て いる。
    調整後 準備 は [PAD] でき て いる。

    View Slide

  33. 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の数を増やした場合の⽐較

    View Slide

  34. 34/55
    学習・テストデータの分割⽅法の改善

    View Slide

  35. 35/55
    学習・テストデータの分割⽅法の改善
    前回のバージョンのデータセット
    ゲームシナリオ
    誤字追加
    学習データ テストデータ
    今回のバージョンのデータセット
    ゲームシナリオ
    学習⽤ テスト⽤
    学習データ テストデータ
    誤字追加
    誤字追加
    シャッフルして分割
    同じ⽂章から⽣成した⽂章が含まれる︕!

    View Slide

  36. 36/55
    最終的な精度

    View Slide

  37. 37/55
    最終的な精度
    n テストデータ10万⾏(誤字なし・あり、40%が誤字)
    n プロジェクトA︓データセット 170万⾏
    n プロジェクトB : データセット 90万⾏
    分離しておいたテストデータでテスト
    正しく判定
    プロジェクトA
    正しく判定
    プロジェクトB
    誤字を正しく訂正 38% 32%
    誤字の位置を正しく検出 66% 60%
    正しく判定
    プロジェクトA
    正しく判定
    プロジェクトB
    誤字のない⽂章 94% 87%
    誤字のある⽂章 72% 72%

    View Slide

  38. 38/55
    シナリオ執筆ツールのUIを改良

    View Slide

  39. 39/55
    以前のUI
    n 誤字検出機能は別の「⼀括処理画⾯」に⼊っていた
    n UIの実装⼯数は少ない
    シナリオ執筆画⾯から移動して誤字検出を実⾏
    ユーザーによっては使い勝⼿が悪い
    AIの機能を開発してもUIが悪いと使われない
    別画⾯へ
    移動して実⾏

    View Slide

  40. 40/55
    シナリオ執筆ツールのユーザー
    シナリオ執筆
    誤字検出︓使ってない
    シナリオ校正
    誤字検出︓使ってる
    n 執筆されたシナリオを⼀括でチェックする
    n 複数シナリオをまとめて誤字検出
    シナリオを校正する⼈
    n シナリオ執筆画⾯をメインに使う>別の画⾯の機能は使いにくい
    シナリオを執筆する⼈

    View Slide

  41. 41/55
    誤字検出実⾏までのUIの改善
    シナリオ執筆画⾯
    ⼀括処理画⾯
    シナリオ検索
    誤字検出実⾏
    結果待ち
    結果確認
    以前のUI 新しいUI
    シナリオ執筆画⾯
    誤字検出実⾏
    結果待ち
    結果確認
    シナリオ執筆画⾯に
    追加されたボタン

    View Slide

  42. 42/55
    バックグラウンドで⾃動実⾏
    n ⼀定時間経過後に実⾏(AWSのコストのため)
    シナリオ保存時に⾃動実⾏
    n 結果⼀覧画⾯でユーザーが実⾏した結果と⾃動実⾏の結果が混じる
    n ユーザー「結果が確認しにくい」
    n ユーザー⽬線での確認が⾜りていなかったと反省
    問題があったので保留

    View Slide

  43. 43/55
    ルールベースの⽂章校正機能

    View Slide

  44. 44/55
    ルールベースの⽂章校正機能
    n 漢検1級、準1級の漢字を検出
    n よく使われる漢字ならOK
    n 漢字のテーブルを持っておいてマッチしているだけ
    難しい漢字の検出


    n 補助動詞に漢字が使われていたら検出
    n 例︓ちょっと寄って来る
    補助動詞の漢字を検出
    n ⽂章校正のチェック対象
    n ら抜き⾔葉が全部NGではない
    ら抜き⾔葉を検出

    View Slide

  45. 45/55
    補助動詞の検出

    View Slide

  46. 46/55
    補助動詞の検出
    n Juman++ : 形態素解析システム 京都⼤学
    Juman++での形態素解析の結果を利⽤
    ⾒出し 参考 に して 頂く
    品詞 名詞 助詞 動詞 動詞
    意味情報 - - - 付属動詞候補
    n 「参考にして頂く」の「頂く」を検出したい
    n Juman++で形態素解析
    n 品詞と意味情報をパターンとして登録
    検出したい⽂章からパターンを作成
    パターンとして登録

    View Slide

  47. 47/55
    補助動詞の検出例
    ⾒出し 今 から 話して 下さい
    品詞 名詞 助詞 動詞 接尾辞
    意味情報 - - - -
    ⾒出し これ まで も 戦って 参り ました が
    品詞 指⽰詞 助詞 助詞 動詞 動詞 接尾辞 助詞
    意味情報 - - - - 付属動詞候補 - -
    品詞 動詞 接尾辞
    意味情報 - -
    品詞 助詞 動詞 動詞 接尾辞
    意味情報 - - 付属動詞候補
    パターン
    マッチング
    パターン
    マッチング

    View Slide

  48. 48/55
    ら抜き⾔葉の検出

    View Slide

  49. 49/55
    ら抜き⾔葉を検出(その1)
    n Webの記事を参考にして実装
    n ラ抜き⾔葉判定アルゴリズムを考えてみる
    (https://blog.mohyo.net/2015/03/1343/)
    ら抜き⾔葉の検出について調べる
    n Juman++で形態素解析して代表表記と活⽤形1を利⽤
    n あるトークンの代表表記が「れる/れる」
    n ⼀つ前のトークンの活⽤形1が「未然形」「カ変動詞来」「⺟⾳動詞」
    判定⽅法

    View Slide

  50. 50/55
    ら抜き⾔葉を検出(その2)
    ⾒出し 5 時 に 来 れ ます か
    代表表記 - 時/じ - 来る/くる れる/れる ます/ます か
    活⽤形1 * * * カ変動詞来 ⺟⾳動詞 動詞性接尾辞ます型 *
    n あるトークンの代表表記が「れる/れる」
    n ⼀つ前のトークンの活⽤形1が「未然形」「カ変動詞来」「⺟⾳動詞」
    検出の例︓5時に来(ら)れますか

    View Slide

  51. 51/55
    ら抜き⾔葉を検出(その3)
    n 検出158 正解148 失敗10
    n ⾒逃しているケースもある
    n 誤検出は少ない
    シナリオ全体でテスト
    n こんなにたくさん⾷べ(ら)れない
    n 初⽇の出が⾒(ら)れた
    n あの⼈が来るとは考え(ら)れない
    正しく検出
    n 写真撮ってきたから⾒れ︕
    n あれ︖あれれれ︖
    n 今こそ来たれ︕
    誤検出

    View Slide

  52. 52/55
    まとめ

    View Slide

  53. 53/55
    まとめ
    BERTを使った誤字検出機能の開発
    データセットの作成、UIの改良、
    ルールベースの⽂章校正
    AIによる⾃然⾔語処理のためのアイデア

    View Slide

  54. 54/55

    View Slide

  55. 55/55
    参考⽂献
    n BERTの各種タスクの使い⽅をわかりやすく説明
    n 第9章 ⽂章校正を参考にして誤字検出を実装
    BERTによる⾃然⾔語処理⼊⾨
    ストックマーク株式会社 (編集), 近江 崇宏, ⾦⽥ 健太郎,
    森⻑ 誠, 江間⾒ 亜利 (共著) オーム社
    n Transformer/BERTの動作の説明が詳しい
    作ってわかる! ⾃然⾔語処理AI
    坂本 俊之 シーアンドアール研究所

    View Slide