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
September 01, 2021
Technology
3
8.1k
ゲーム制作効率化のためのAIによる画像認識・自然言語処理への取り組み
2021/08/26 CEDEC2021
Cygames
September 01, 2021
Tweet
Share
More Decks by Cygames
See All by Cygames
『GRANBLUE FANTASY Relink』キャラクターの魅力を支えるリグ・シミュレーション制作事例
cygames
0
410
『GRANBLUE FANTASY: Relink』最高の「没入感」を実現するカットシーン制作手法とそれを支える技術
cygames
1
340
『GRANBLUE FANTASY Relink』ソフトウェアラスタライザによる実践的なオクルージョンカリング
cygames
0
320
高品質なフォトグラメトリデータを取得するためのハードウェア&ソフトウェア開発
cygames
0
1.1k
AIを活用した柔軟かつ効率的な社内リソース検索への取り組み
cygames
0
990
『GRANBLUE FANTASY: Relink』開発からリリースまでを支えたCI/CDの取り組み
cygames
0
250
『GRANBLUE FANTASY: Relink』専任エンジニアチームで回す大規模開発QAサイクル
cygames
0
260
『GRANBLUE FANTASY: Relink』クオリティと物量の両立に挑戦したフェイシャルアニメーション事例 ~カットシーンからランタイムまで~
cygames
0
300
『GRANBLUE FANTASY: Relink』キャラクターの個性にlinkした効果音表現
cygames
0
130
Other Decks in Technology
See All in Technology
10XにおけるData Contractの導入について: Data Contract事例共有会
10xinc
6
660
100 名超が参加した日経グループ横断の競技型 AWS 学習イベント「Nikkei Group AWS GameDay」の紹介/mediajaws202411
nikkei_engineer_recruiting
1
170
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
複雑なState管理からの脱却
sansantech
PRO
1
150
Can We Measure Developer Productivity?
ewolff
1
150
Security-JAWS【第35回】勉強会クラウドにおけるマルウェアやコンテンツ改ざんへの対策
4su_para
0
180
AGIについてChatGPTに聞いてみた
blueb
0
130
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
7
2.7k
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
1
110
Zennのパフォーマンスモニタリングでやっていること
ryosukeigarashi
0
150
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
3.2k
OCI 運用監視サービス 概要
oracle4engineer
PRO
0
4.8k
Featured
See All Featured
Optimizing for Happiness
mojombo
376
70k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Designing for humans not robots
tammielis
250
25k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
Raft: Consensus for Rubyists
vanstee
136
6.6k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Facilitating Awesome Meetings
lara
50
6.1k
Transcript
© Cygames, Inc. 1/63ページ
© Cygames, Inc. この講演で得られること 2/63ページ • ゲーム会社へAIを導入した事例をいくつか紹介 • 画像認識系のAI、自然言語処理のAIの開発 •
AIの学習、インフラ構築、作業分担、デプロイ環境などについて一通り紹介 • これからAIを導入されるゲーム会社の参考になると思います
© Cygames, Inc. 自己紹介 3/63ページ • 立福 寛(たてふく ひろし) •
前職:コンテンツパイプラインの構築、モバイルゲームの開発・運営など • 2019年に株式会社Cygamesへ入社 • 2020年からAIの開発に着手 – 前からAIを専門にやっていたわけではない – これからAIを導入される方の参考になりそう
© Cygames, Inc. 講演内容 4/63ページ • AI導入の経緯・開発環境 • 物体検出・画像認識アルゴリズムを利用した自動タグ付け –
機械学習モデルの説明(キャラクター・背景) – デプロイ • 表記揺れ機能の開発 – アルゴリズムの説明 – デプロイ • 誤字検出機能の開発 – 機械学習モデルの説明 – デプロイ • まとめ
© Cygames, Inc. 講演内容 5/63ページ • AI導入の経緯・開発環境 • 物体検出・画像認識アルゴリズムを利用した自動タグ付け –
機械学習モデルの説明(キャラクター・背景) – デプロイ • 表記揺れ機能の開発 – アルゴリズムの説明 – デプロイ • 誤字検出機能の開発 – 機械学習モデルの説明 – デプロイ • まとめ
© Cygames, Inc. 今のチームの紹介 6/63ページ • 開発運営支援 プロジェクト共通基盤チーム – 複数のゲームプロジェクトに共通のツールなどを提供するチーム
– リソース管理ツール、シナリオ執筆ツールなどを開発・サポート – ゲームを面白くするためのプロセス改善と組織デザイン(CEDEC2019)
© Cygames, Inc. AIを導入した経緯 7/63ページ • 書籍化やWebなども含め、機械学習の導入事例が増えてきた – ゲーム開発での導入事例も増え、情報にアクセスしやすくなった •
AIを導入しやすいチーム – データを管理するツールを開発 → データを利用しやすい – 複数のプロジェクトにツールを提供 → 開発したAIを利用してもらえる • 個人的に興味があった – 最初は個人レベルで始めるので、興味のある人のほうがよい – ある程度固まった期間を確保してAIに専念
© Cygames, Inc. どこへAIを導入するか? 8/63ページ • 一番簡単そうな画像認識から導入 • リソース管理ツールの自動タグ付け機能を開発
© Cygames, Inc. 開発環境 9/63ページ • 当初はWindows+GTX1080Tiで開発 – 動作が不安定 •
Ubuntu18.04+GTX2080Tix2環境へ移行 – 環境ごとのdockerで作業 – 安定性が高い、デプロイが楽 • ローカルPCで学習 – クラウドのGPUインスタンスはまだ高い – 費用を気にしないでいいので担当エンジニアの気が楽(これは結構大きい)
© Cygames, Inc. 講演内容 10/63ページ • AI導入の経緯・開発環境 • 物体検出・画像認識アルゴリズムを利用した自動タグ付け –
機械学習モデルの説明(キャラクター・背景) – デプロイ • 表記揺れ機能の開発 – アルゴリズムの説明 – デプロイ • 誤字検出機能の開発 – 機械学習モデルの説明 – デプロイ • まとめ
© Cygames, Inc. 物体検出アルゴリズムを利用したキャラクター画像の自動タグ付け 11/63ページ • キャラクターが一人以上含まれる画像を入力 > 名前を返す •
複数のキャラクターが含まれるので物体検出アルゴリズムを使う • 社内のリソース管理ツールの機能として実装(後述) Aさん Bさん Cさん Dさん
© Cygames, Inc. リソース管理ツールの紹介 12/63ページ • スペースが分けられる画像・動画のアップローダー – チームで開発しているツール –
複数のプロジェクトで利用 – 画像・動画のアップロード・検索・閲覧 – タグの追加・検索 – Web APIでリソースの一括ダウンロードが可能(重要!)
© Cygames, Inc. 物体検出アルゴリズム(SSD)について 13/63ページ • 画像の中に何が含まれるか、領域と名前を検出する機械学習モデル – SSD(Single Shot
Multibox Detector) – オープンソースのPyTorchの実装を使用 • 学習データ – 画像 – 物体の領域 – クラス名 • 推論 – 入力:画像 – 出力:領域とクラス名 Aさん Bさん Cさん Dさん
© Cygames, Inc. 学習データの準備 14/63ページ • リソース管理ツールにはタグのついた画像が数千枚登録済 – キャラクターが一人だけ含まれる画像を利用 –
二人以上含まれる場合は、どちらが誰か判別できないため – 今回の対象は1プロジェクトのみ • キャラクターの顔領域を検出 – OpenCVのアニメ顔認識モデル(オープンソース)で顔の領域を取り出す – 「画像+顔の領域の座標+キャラクターの名前」のセットが手に入る • キャラクターは200人程度、画像の数は70から7枚程度 – キャラクターにより画像数の差がある アニメ顔認識モデル 顔を取り出す 二人以上含まれる 画像は利用しない
© Cygames, Inc. SSDで学習してテスト 15/63ページ • ローカルPCで学習してテスト – 1日程度学習 –
キャラクター名を当るテスト:精度は90%前半 • 複数人が含まれる画像でテスト。精度80%以上 – 学習データが多いキャラクターは精度が高い(逆も同様) – 顔や髪型に特徴が少ない一部のキャラクターは精度が低い • 大きくデフォルメされた画像の扱い – 学習データに含めると精度が大きく落ちた – 混ぜないでモデルを分けた方がよい • 左右対称のキャラクターがいる場合 – 学習時に左右反転して使わない • 他の要素について – 顔が回転しているケースの扱い – 片目が隠れている場合
© Cygames, Inc. 画像認識アルゴリズムを用いた背景画像の自動タグ付け 16/63ページ • 背景画像にも同様の機能を実装 • AWS Sagemaker(後述)の画像認識モデルを利用
• 学習データ – 画像数:1400枚(モバイルゲームの背景画像) – 分類クラス数:180程度(公園、街中、控え室、etc) • 実際のデータでの精度は7割ほど タグ:公園 タグ:ライブ会場
© Cygames, Inc. 講演内容 17/63ページ • AI導入の経緯・開発環境 • 物体検出・画像認識アルゴリズムを利用した自動タグ付け –
機械学習モデルの説明(キャラクター・背景) – デプロイ • 表記揺れ機能の開発 – アルゴリズムの説明 – デプロイ • 誤字検出機能の開発 – 機械学習モデルの説明 – デプロイ • まとめ
© Cygames, Inc. デプロイ環境を検討(初期実装) 18/63ページ • リソース管理ツールはAWS上に構築 → AWSで完結したい •
AWS Sagemakerを使うことに決定 – Sagemakerは機械学習の統合環境 – 様々な機械学習モデルの学習・エンドポイント作成などが行える • Sagemakerの物体検出アルゴリズムで学習・テスト – 同じデータで学習したが精度が低い(80%程度) – AWSのサポートと相談 > データのバリーエションを増やして解決 – 先にオープンソースの実装でテストしていたのが役立った
© Cygames, Inc. デプロイ環境を検討(初期実装) 19/63ページ • API Gateway > Lambda
> Sagemaker 経由で呼び出す • まず、この構成でリリース • 問題点:SagemakerはAPIごとに1CPUインスタンス必要になる – 機能を増やすごとに毎月のコストが増える – 利用頻度が低いのでコスト的に辛い – Lambdaで単体で動作するように後ほど修正 リソース 管理 ツール API Gateway Lambda Sage maker
© Cygames, Inc. デプロイ環境を検討(最終的な実装) 20/63ページ • Lambda単体で動かすように変更 – 最初のオープンソースのSSDの実装を使う –
機能を増やすごとにコストが増えない – 機械学習エンジニアの気が楽(!) • Lambdaのdockerイメージを利用 – ユーザーのdockerイメージをLambdaで動かせる – 最大10GBまで – Pythonの機械学習のモジュールを動かすのが非常に楽 – こちらは後の自然言語処理でも利用
© Cygames, Inc. リソース管理ツールへ機能追加 21/63ページ • 画像のアップロード時にタグの予測ボタンを押すと推論実行 – 実行時間:数秒(初回呼び出し時のみ20秒程度)
© Cygames, Inc. 作業分担 22/63ページ • 今回はそれぞれの担当が作業 • AIの学習・APIの作成(一人) –
機械学習モデルの作成(2ヶ月) – デプロイ(2ヶ月) • AWSのインフラ構築(一人) – インフラ担当者(1週間) • リソース管理ツールへの機能追加(一人) – ツールの開発者(1週間)
© Cygames, Inc. 講演内容 23/63ページ • AI導入の経緯・開発環境 • 物体検出・画像認識アルゴリズムを利用した自動タグ付け –
機械学習モデルの説明(キャラクター・背景) – デプロイ • 表記揺れ機能の開発 – アルゴリズムの説明 – デプロイ • 誤字検出機能の開発 – 機械学習モデルの説明 – デプロイ • まとめ
© Cygames, Inc. 次は表記揺れ・誤字検出機能の開発 24/63ページ • 次のネタを探すために社内でヒアリング • シナリオ執筆ツール上で「表記揺れ・誤字」を検出してほしい •
まず表記揺れ、次に誤字検出を開発
© Cygames, Inc. シナリオ執筆ツールとは? 25/63ページ • 社内シナリオライターが使用するWeb上のシナリオ作成環境 – シナリオの作成・監修・台本の印刷・音声の管理なども行える •
APIからシナリオが一括で取得できる(今回はここが大きい!) – エクセルと比べてフォーマットが完全に統一されている
© Cygames, Inc. シナリオ執筆ツールへの表記揺れ機能の開発 26/63ページ • 以下のような表記揺れを検出してほしい – 「キャンパス」「キャンバス」(表記揺れではなく誤字) –
「一緒」「いっしょ」 • 日本語の表記揺れについて調査 • 参考にした論文 – 「仕様書特有表現の表記揺れを検出するツールの試作と評価」 • 調査した結果、機械学習よりルールベースのほうが適切 • 形態素解析+ルールベースでの実装
© Cygames, Inc. 形態素解析とは? 27/63ページ • 文章を入力すると単語(トークン)ごとに分割 • 読み仮名、品詞などを取得できる •
例:Juman++で「私もあさって日曜最終日」を形態素解析した結果 見出し 読み仮名 品詞 私 わたし 名詞 も も 助詞 あさって あさって 名詞 日曜 にちよう 名詞 最終 さいしゅう 形容詞 日 ひ 名詞
© Cygames, Inc. 表記揺れ機能のアルゴリズム 28/63ページ • 文章を形態素解析 → 品詞が「名詞」のものを取り出す –
名詞が連続している場合、結合して一つの単語として扱う • 単語同士で「表記揺れのスコア」を求める(後述) – スコアが高いほど表記揺れの可能性が高い – スコアが高い順に30程度を返す関数として実装 表記揺れ順位 スコア 単語A 単語B 1 3.1 たこ焼 たこ焼き 2 3.0 一時間 1時間 3 2.8 カット カラット 4 2.8 ホント ヒント
© Cygames, Inc. 形態素解析モデルについて 29/63ページ • 2つの形態素解析モデルを試した • Juman++ –
RNNを用いて単語の並びの意味的な自然さを考慮した解析を行う – https://nlp.ist.i.kyoto-u.ac.jp/?JUMAN%2B%2B • mecab-ipadic-Neologd – 大きな辞書を持ち、固有表現に強い – https://github.com/neologd/mecab-ipadic-neologd/ • ゲームシナリオは話し言葉が多く豊富な語彙は必要ない → Juman++を採 用
© Cygames, Inc. 表記揺れスコアの詳細 30/63ページ • 参考にした論文をベースに表記揺れのスコアを構築 • 編集距離が小さい →
スコア大 – 編集距離とは? – 単語Aを単語Bにするために必要な手順の数 – (ABC,BBB)の場合は2 • 出現回数に差がある → スコア大 • 単語の漢字表記が異なるが読みが同じ場合 → スコア大 – 「たこ焼き」「タコ焼き」 単語A/単語B 出現回数 読み 編集距離 表記揺れ たこ焼き/タコ焼き 10/1 たこやき/たこやき 2 大 たこ焼き/カレー 10/8 たこやき/かれー 4 小
© Cygames, Inc. 講演内容 31/63ページ • AI導入の経緯・開発環境 • 物体検出・画像認識アルゴリズムを利用した自動タグ付け –
機械学習モデルの説明(キャラクター・背景) – デプロイ • 表記揺れ機能の開発 – アルゴリズムの説明 – デプロイ • 誤字検出機能の開発 – 機械学習モデルの説明 – デプロイ • まとめ
© Cygames, Inc. AWS Lambda上へ実装 32/63ページ • Dockerイメージは使わずに実装 • Juman++の辞書ファイル(430MB)が大きい
– Lambdaのパッケージサイズの制限にひっかかる • LambdaにファイルシステムのEFSをマウント – 大きいファイルは最初に一度S3へアップロードして、EFSへコピー Lambda S3 EFS 辞書ファイル
© Cygames, Inc. シナリオ執筆ツールへの組み込み 33/63ページ • 表記揺れを調べたいシナリオを選択してAPIへ渡す • 10-30秒程度で結果が戻る •
表記揺れ検出は全単語をO(N^2)で比較するので重い – 30秒を超えるとインフラ側の制限に引っかる – 後で回避策を導入(誤字検出のところで説明) 結果画面(サンプルシナリオの結果なので、表記揺れ検出として適切な例ではない)
© Cygames, Inc. ユーザーからのフィードバック 34/63ページ • 過去シナリオと比較できるので、プロジェクトに新規で入ったメンバーに好評 • 「動詞」の表記揺れも欲しい –
こちらも同様に対応 • 表記揺れを調べる単語を指定できる機能を追加 – 漢字か読み仮名で指定
© Cygames, Inc. 作業分担 35/63ページ • 今回も同じ分担 • 機械学習の学習・APIの作成(一人) –
機能開発(2ヶ月) – デプロイ(1ヶ月) • AWSのインフラ構築(一人) – インフラ担当者(2日) • リソース管理ツールへの機能追加(一人) – ツール開発者(1週間)
© Cygames, Inc. 講演内容 36/63ページ • AI導入の経緯・開発環境 • 物体検出・画像認識アルゴリズムを利用した自動タグ付け –
機械学習モデルの説明(キャラクター・背景) – デプロイ • 表記揺れ機能の開発 – アルゴリズムの説明 – デプロイ • 誤字検出機能の開発 – 機械学習モデルの説明 – デプロイ • まとめ
© Cygames, Inc. 誤字検出機能の開発 37/63ページ • シナリオ中に含まれる誤字を検出したい • 機械学習による誤字検出は有料のサービスが複数存在する –
毎月課金が必要+機密の問題 > 独自に実装してみる • 参考にした論文: – 「Bidirectional LSTMを用いた誤字脱字検出システム」 2019年度人工知能学会全国大会 • こちらを参考にして、新しい自然言語処理モデルで実装
© Cygames, Inc. 検出したい誤字の例 38/63ページ • 社内のユーザーからもらった誤字の例 誤字なし 誤字あり 誤字の種類
写真を撮ってほしい 写真を取ってほしい 漢字の間違い おはようございます おはいようございます 余計な文字が入っている 掛けてもらった 掛けて貰った 補助動詞が漢字
© Cygames, Inc. 誤字検出アルゴリズムの概要 39/63ページ 文章を誤字なし・ありに分類 形態素解析 単語の出現順を求める 誤字の位置を決定
© Cygames, Inc. 自然言語処理モデルBERTについて 40/63ページ • 2018年10月にGoogleから発表された自然言語処理モデル • 翻訳、文書分類、質問応答などのタスクで当時の最高スコアを達成 •
今回は「文章分類」「単語の出現順の推論」の2つのタスクを利用 • 2021年の段階では新しいモデルが出ているが…… – BERTは広く利用されている – 日本語の学習済みモデルが複数公開されている
© Cygames, Inc. 文章を誤字なし・ありに分類するモデル 41/63ページ 文章を誤字なし・ありに分類 形態素解析 単語の出現順を求める 誤字の位置を決定
© Cygames, Inc. 文章を誤字なし・ありに分類するモデル 42/63ページ • BERTの文章分類タスクを使用 – ニュース記事などをジャンルごとに分類 –
(記事、ジャンル)を学習データとして用意 – 記事をBERTへ入力 > ジャンルが出力 • 今回は「誤字なし」「誤字あり」の2種類に分類する • 学習データは2種類 – 誤字なし(ゲームシナリオの文章) – 誤字あり(誤字をあとで加えたもの。後述) • BERT(Base)+TensorFlowで実装 • 形態素解析にSentencePieceを使用 – https://github.com/google/sentencepiece – 少し精度が上がった
© Cygames, Inc. 学習データ用に誤字を作る 43/63ページ • 学習データに誤字を含む文章がほしいので自動生成した • ユーザーからもらった校正のテキストからパターンを抽出 1.
「よく間違えられる単語リスト」を使って入れ替える(後述) 2. ひらがなに囲まれている「ない」を削除 3. 「っ」を落とす 4. 「が」「を」などの助詞を入れ替える 5. 助詞を落とす 6. ひらがなのABをBABにする (例:いつの間にか > いつの間にかに) 7. ひらがなorカタカナをランダムで1文字落とす
© Cygames, Inc. 「よく間違えられる単語リスト」を使って入れ替える 44/63ページ • 校正のテキストから手動で抽出(全部で150パターン程度) • 今回は文章中の品詞は考慮せずに入れ替えている •
例:元の文章 > 誤字を入れた文章 – イラストを描いた > イラストを書いた – 予想を超える > 予想を越える 元の単語 入れ替える単語 描いた 書いた 超えた 越えた 乗せて 載せて 上って 昇って 観る 見る
© Cygames, Inc. 文章分類のモデルの学習 45/63ページ • 元の文章と誤字を含む文章を(1:5)で用意してBERTの文章分類で学習 – 学習データの誤字のパターンを増やしたいので、誤字の比率を増やしている •
学習データは90MB程度 – 867,330行、平均36文字 • 精度は85%程度 • 推論はCPUでも比較的高速
© Cygames, Inc. 誤字検出アルゴリズムの概要 46/63ページ 文章を誤字なし・ありに分類 形態素解析 単語の出現順を求める 誤字の位置を決定
© Cygames, Inc. 単語ごとの出現順を求めるモデル 47/63ページ • 単語ごとの「出現順」を求めるモデル – 単語ごとにMASKして出現順を求める –
小さいほうが正しい – 出現順=1:元の単語を正しく推論できた場合 • 入力:誤字の入った文章 • 出力:単語ごとの出現順 単語1 単語2 単語3 単語4 単語5 今日 は イラスト を 書いた 単語1 単語2 単語3 単語4 単語5 2 3 30 1 2134
© Cygames, Inc. 単語ごとの出現順を求めるモデルを学習 48/63ページ • BERTの事前学習のように文章(ゲームシナリオ)学習させる – Juman++で形態素解析 –
単語をランダムに一つMASKして学習 • 学習に使うのは元の文章のみ – 誤字を入れた文章は推論時に使う • PyTorchとJuman++で実装 – BERT(Base)を利用 単語1 単語2 単語3 単語4 単語5 今日 [MASK] イラスト を 書いた
© Cygames, Inc. 単語ごとの出現確率を求めるモデルで推論 49/63ページ • 元の文章、誤字を入れた文章を学習済みモデルへ入力して推論 – 入力:元の文章、誤字を入れた文章 –
出力:単語ごとの出現確率の順番 • この出力を次のモデルの学習データで使う – 誤字を入れた段階で誤字の位置を覚えておく – 誤字無しの場合は-1 誤字の位置 単語1 単語2 単語3 単語4 -1 1 1 3 10 3 2 3 1204 40 4 2 23 987 8913
© Cygames, Inc. 誤字検出アルゴリズムの概要 50/63ページ 文章を誤字なし・ありに分類 形態素解析 単語の出現順を求める 誤字の位置を決定
© Cygames, Inc. 誤字の位置を求めるモデルとその学習 51/63ページ • 前のモデルの出力結果を学習データとして使う – 入力:誤字の位置、出現順 –
出力:誤字の位置(誤字がない場合は-1) • ランダムフォレストモデルで学習 – ランダムフォレストは決定木をたくさん集めたもの – 機械学習の分野でよく使われる – scikit-learnの実装を利用 目的変数 説明変数 誤字の位置 単語1 単語2 単語3 単語4 -1 1 1 3 10 3 2 3 1204 40 4 2 23 987 8913
© Cygames, Inc. 誤字の位置を求めるモデルの実行結果 52/63ページ • 精度は35〜45%程度 – 誤字を含む文は形態素解析に失敗するので前後1単語分も許容 –
扱う誤字のパターンを増やすと精度が下がる – 15%程度で誤字の位置を間違える / 50%程度は誤字の存在を見逃す • 実際に検出できた誤字の例(イベントは大盛況のうちに終わった) • 誤字の位置を間違えた例(素敵な歌詞になったと思う) 単語1 単語2 単語3 単語4 単語5(予測/正解) 単語6 単語7 イベント は 大 盛況 のち に 終わった 単語1(予測) 単語2 単語3(正解) 単語4 単語5 素敵な 歌詞に なた と 思う
© Cygames, Inc. 講演内容 53/63ページ • AI導入の経緯・開発環境 • 物体検出・画像認識アルゴリズムを利用した自動タグ付け –
機械学習モデルの説明(キャラクター・背景) – デプロイ • 表記揺れ機能の開発 – アルゴリズムの説明 – デプロイ • 誤字検出機能の開発 – 機械学習モデルの説明 – デプロイ • まとめ
© Cygames, Inc. AWS Lambda上で実装 54/63ページ • TensorFlow, PyTorch, scikit-learnを使用
– Lambdaのdockerイメージを利用 • dockerイメージは小さいほうが更新が早い – 学習済みモデルはdockerイメージに含めずにファイルシステム(EFS)経由で読み込む – 通常のLambdaの更新よりは時間がかかる > ローカルでしっかりテスト • Lambdaのメモリは一番大きいものを利用 – 今回利用している機械学習モデルは大きい – メモリは最大の10GBを利用 – ランダムフォレストのサイズが大きくなりがち
© Cygames, Inc. 実行が遅いので回避策を導入 55/63ページ • インフラ(API Gateway)の制限時間(30秒)に引っかかる – Lambdaの最大スペックでも1シナリオの誤字検出に40秒程度必要
– 単語の出現順を求めるモデルが重い • AWS StepFunctionsを利用して非同期呼び出し – AWSで非同期呼び出しを行うための仕組み • 最大10分まで処理を行える – 10分はLambdaの最大のタイムアウト時間 API Gateway Step Functions Lambda ①実行開始 ③結果受取 ②実行待ち API Gateway Step Functions Lambda
© Cygames, Inc. シナリオ執筆ツールのUIを変更 56/63ページ • 処理待ち時間が長いので、実行中のタスク一覧画面を追加 – 処理が終わり次第ステースが変わって結果が見れる –
過去の実行結果が見れる。実行結果を他人とシェアできる – 表記揺れ機能にも対応 • AIの処理時間を隠蔽 – インフラのコストをおさえつつ、ユーザーの利便性を向上 – 利用頻度が低い機能にはいい選択肢
© Cygames, Inc. インフラ構築を誰がどのように行うか? 57/63ページ • 機械学習向けのインフラ構築はゲーム運用やWebサービス運用とは異なる – インフラ担当でも構築実績がないことがある –
機械学習エンジニアが試行錯誤できるように、インフラ構築を兼任したほうが話が早い • インフラ構築は未経験だが、機械学習エンジニアがインフラ構築を担当する ことに
© Cygames, Inc. AWS CDKを利用 58/63ページ • Infrastructure as Code(コードによるインフラ構築)
– AWS CDK:コードベースでAWSの構築を行う環境 – チーム内ではすでに導入済み – 既存の構成のコードに新規分を追加するだけ • 手元で作業が完結しているのでデバッグが圧倒的に早い – 二人に分かれて作業していたら大変だった API Gateway Lambda 既存の構成 API Gateway Step Functions Lambda 今回の構成
© Cygames, Inc. 作業分担 59/63ページ • 今回は機械学習エンジニアがインフラ構築も担当 • 機械学習の学習・APIの作成、AWSのインフラ構築(一人) –
機械学習モデルの作成(4ヶ月) – インフラ構築(2週間) – デプロイ(1.5ヶ月) • リソース管理ツールへの機能追加(一人) – ツール開発者(2週間)
© Cygames, Inc. 講演内容 60/63ページ • AI導入の経緯・開発環境 • 物体検出・画像認識アルゴリズムを利用した自動タグ付け –
機械学習モデルの説明(キャラクター・背景) – デプロイ • 表記揺れ機能の開発 – アルゴリズムの説明 – デプロイ • 誤字検出機能の開発 – 機械学習モデルの説明 – デプロイ • まとめ
© Cygames, Inc. まとめ 機械学習モデルについて 61/63ページ • 画像認識・物体検出は既存のものが利用できるので最初の導入としては最適 • 自然言語処理はAIを導入できる余地が大きい
– そのまま利用できる日本語対応のサービスは少ないので独自開発が必要 – 表記揺れ検出は簡単な割に効果が高い – 誤字検出は精度を上げるのが難しい
© Cygames, Inc. まとめ データの集約・作業分担 62/63ページ • リソース管理ツールなどのデータを集約する場所があると便利 – 学習データを簡単に用意できる
– 共有フォルダやエクセルに散らばっているデータは利用しずらい – どこかの段階で誰かが時間をかけてデータをツールへ入力する必要がある • 作業分担が必要 – AI開発、インフラ構築、アプリへの組み込み – 一人で全部担当するのは大変 – 作業分担・スケジュールを考えておいた方がよい
© Cygames, Inc. CygamesではAIの力も活用して 最高のコンテンツを作っていきます 63/63ページ
© Cygames, Inc. 以降は補足資料 64/63ページ
© Cygames, Inc. ルールベースの誤字検出も追加 65/63ページ • 校正のテキストを調べるとルールベースで検出できる誤字のほうが多い • 補助動詞に漢字が含まれていたら検出 –
例:お土産を買って来る、ひとまず初めて見る – 形態素解析の品詞の並びから判定 • 難しい漢字が含まれていたら検出 – 常用外漢字などの漢字のリストを用意して判定 • 機械学習による誤字検出は精度が低い > ルールベースも合わせてリリー スしたほうがユーザーに使ってもらえる
© Cygames, Inc. 最終的な結果 66/63ページ • ここまでの3つのモデルを使ってテスト – 誤字の位置を正しく推論できた:23% –
誤字の位置を間違えた: 18% – 誤字がないことを正しく推論できた:88% – 誤字を見逃してしまった:60% • 誤字を見逃すケースが多いので改良の余地あり