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
380
『GRANBLUE FANTASY: Relink』最高の「没入感」を実現するカットシーン制作手法とそれを支える技術
cygames
1
300
『GRANBLUE FANTASY Relink』ソフトウェアラスタライザによる実践的なオクルージョンカリング
cygames
0
310
高品質なフォトグラメトリデータを取得するためのハードウェア&ソフトウェア開発
cygames
0
1k
AIを活用した柔軟かつ効率的な社内リソース検索への取り組み
cygames
0
910
『GRANBLUE FANTASY: Relink』開発からリリースまでを支えたCI/CDの取り組み
cygames
0
230
『GRANBLUE FANTASY: Relink』専任エンジニアチームで回す大規模開発QAサイクル
cygames
0
240
『GRANBLUE FANTASY: Relink』クオリティと物量の両立に挑戦したフェイシャルアニメーション事例 ~カットシーンからランタイムまで~
cygames
0
270
『GRANBLUE FANTASY: Relink』キャラクターの個性にlinkした効果音表現
cygames
0
130
Other Decks in Technology
See All in Technology
製造現場のデジタル化における課題とPLC Data to Cloudによる新しいアプローチ
hamadakoji
0
220
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.8k
いざ、BSC討伐の旅
nikinusu
2
690
これまでの計測・開発・デプロイ方法全部見せます! / Findy ISUCON 2024-11-14
tohutohu
3
290
What to do after `laravel new`
mattstauffer
0
140
Datadog RUM を用いた UX 指標の監視・顧客対応への活用
imamura_ko_0314
0
120
DatabricksにおけるLLMOpsのベストプラクティス
taka_aki
4
1.6k
福岡新卒エンジニアの会
teba_eleven
1
190
Microsoft Intune アプリのトラブルシューティング
sophiakunii
1
410
エンジニアが一生困らない ドキュメント作成の基本
naohiro_nakata
2
150
マルチプロダクトな開発組織で 「開発生産性」に向き合うために試みたこと / Improving Multi-Product Dev Productivity
sugamasao
1
230
隣接領域をBeyondするFinatextのエンジニア組織設計 / beyond-engineering-areas
stajima
1
230
Featured
See All Featured
Faster Mobile Websites
deanohume
305
30k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
92
16k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
15
2k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Happy Clients
brianwarren
97
6.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
The World Runs on Bad Software
bkeepers
PRO
65
11k
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% • 誤字を見逃すケースが多いので改良の余地あり