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
PRO
September 09, 2024
Technology
0
2.4k
AIを活用した柔軟かつ効率的な社内リソース検索への取り組み
Cygames
PRO
September 09, 2024
Tweet
Share
More Decks by Cygames
See All by Cygames
【CEDEC2025】『Shadowverse: Worlds Beyond』二度目のDCG開発でゲームをリデザインする~遊びやすさと競技性の両立~
cygames
PRO
1
370
【CEDEC2025】大規模言語モデルを活用したゲーム内会話パートのスクリプト作成支援への取り組み
cygames
PRO
2
890
【CEDEC2025】現場を理解して実現!ゲーム開発を効率化するWebサービスの開発と、利用促進のための継続的な改善
cygames
PRO
0
820
【CEDEC2025】ブランド力アップのためのコンテンツマーケティング~ゲーム会社における情報資産の活かし方~
cygames
PRO
0
330
【CEDEC2025】『ウマ娘 プリティーダービー』における映像制作のさらなる高品質化へ!~ 豊富な素材出力と制作フローの改善を実現するツールについて~
cygames
PRO
0
270
【CEDEC2025】LLMを活用したゲーム開発支援と、生成AIの利活用を進める組織的な取り組み
cygames
PRO
1
2.7k
【TiDB GAME DAY 2025】Shadowverse: Worlds Beyond にみる TiDB 活用術
cygames
PRO
0
1.9k
雲だけじゃない!『GRANBLUE FANTASY: Relink』の世界に奥行きを出す半透明スプライト活用術
cygames
PRO
0
1k
最高のアートワークを発信する『Cygames展 Artworks』企画制作事例
cygames
PRO
0
160
Other Decks in Technology
See All in Technology
事業特性から逆算したインフラ設計
upsider_tech
0
140
20250807_Kiroと私の反省会
riz3f7
0
240
Delegate authentication and a lot more to Keycloak with OpenID Connect
ahus1
0
220
Eval-Centric AI: Agent 開発におけるベストプラクティスの探求
asei
0
130
生成AIによるデータサイエンスの変革
taka_aki
0
3k
Amazon Q と『音楽』-ゲーム音楽もAmazonQで作成してみた感想-
senseofunity129
0
150
Lambda management with ecspresso and Terraform
ijin
2
170
✨敗北解法コレクション✨〜Expertだった頃に足りなかった知識と技術〜
nanachi
1
740
Kiro と Q Dev で 同じゲームを作らせてみた
r3_yamauchi
PRO
1
100
MCP認可の現在地と自律型エージェント対応に向けた課題 / MCP Authorization Today and Challenges to Support Autonomous Agents
yokawasa
5
2.4k
ロールが細分化された組織でSREと協働するインフラエンジニアは何をするか? / SRE Lounge #18
kossykinto
0
220
「AIと一緒にやる」が当たり前になるまでの奮闘記
kakehashi
PRO
3
150
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Rails Girls Zürich Keynote
gr2m
95
14k
Speed Design
sergeychernyshev
32
1.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
How STYLIGHT went responsive
nonsquared
100
5.7k
Site-Speed That Sticks
csswizardry
10
770
A Modern Web Designer's Workflow
chriscoyier
695
190k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Navigating Team Friction
lara
188
15k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
760
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
Transcript
1/63 株式会社Cygames 開発運営支援 ゲームエンジニア / 立福 寛 エンジニアリング・プロダクション AIを活用した 柔軟かつ効率的な社内リソース検索への取り組み
2/63 はじめに
3/63 立福 寛 開発運営支援 / ゲームエンジニア 複数のゲーム会社でコンテンツパイプラインの構築、モバイルゲームの開発・運営などを担当。 2018年10月に株式会社Cygamesへ入社。2019年後半からAIの社内導入に取り組んでいる。 CEDEC2021:ゲーム制作効率化のためのAIによる画像認識・自然言語処理への取り組み CEDEC2022:AIによる自然言語処理を活用したゲームシナリオの誤字検出への取り組み
CEDEC2023:AIによる自然言語処理・音声解析を用いたゲーム内会話パートの感情分析への取り組み 自己紹介
4/63 この講演で得られること AIを使った画像検索の原理 サーバレスで実装する場合の問題点と 解決方法 楽曲・効果音への適用
5/63 今回解決したい課題 ◼ 人力で行うには大変すぎる ◼ 担当者によってばらつきがでてしまう 大量の画像へのタグ付けをAIで行えないか? ◼ 所属部署が社内に提供しているWebアプリ 対象は社内のリソース管理ツール
6/63 リソース管理ツール : CyResource ◼ 画像、動画、音声、スライドなどをアップロード可能 ◼ タグ付け、バージョン管理、ユーザー管理 ◼ 用途ごとに「スペース」が分かれている
社内向けの汎用アップローダー ◼ アップロードされたリソースはS3に格納される AWS上に実装
7/63 リソース管理ツールにAI検索を実装 ◼ テキストで画像を検索 ◼ 画像で画像を検索 ◼ 色で画像を検索 AIを使えば テキストで直接画像検索できる
◼ 画像のアップロード時に検索用情報を登録 ◼ 検索時には登録された情報を使って検索 登録と検索
8/63 原理と機能
9/63 AI画像検索の原理と機能
10/63 AI画像検索の原理(その1) ◼ 画像を扱うAIでよく利用されているモデル ◼ テキストと画像を関連付けすることができる ◼ 日本語モデルも公開されている CLIPモデルを利用 ◼
CLIP : OpenAI(英語) ◼ Japanese CLIP : rinna、日本語対応したCLIP(今回採用) 利用可能なCLIPモデル
11/63 AI画像検索の原理(その2) ◼ CLIPはテキストと画像をベクトルに変換する 基本的な原理 意味が近いものは ベクトル間の距離が近くなる 近い 遠い 「赤いりんご」
テキスト ベクトル (スイカ) ベクトル (テキスト) ベクトル (りんご) 相談 画像 画像
12/63 AI画像検索の原理(その3) ◼ Web上の画像とそのテキストのペアを4億セット学習している ◼ ゼロショット(ファインチューニングなし)で高い性能を達成 CLIPの学習 赤いリンゴ テキスト 大きなスイカ
テキスト 相談 画像 画像
13/63 AI画像検索の原理(その4) 1. あらかじめ「検索対象の全画像」をベクトルに変換 2. 検索テキストをベクトルに変換 3. 2のベクトルに近い順に画像のベクトルをソート テキストで画像を検索 1.
あらかじめ「検索対象の全画像」をベクトルに変換 2. 検索画像をベクトルに変換 3. 2のベクトルに近い順に画像のベクトルをソート 画像で画像を検索
14/63 例:画像検索の結果
15/63 リソース管理ツールの検索結果(1) 「パン」で検索 ◼ 左から右に近いものが並ぶ ◼ 原理上、多少違うものが上位に来ることがある
16/63 リソース管理ツールの検索結果(2) 「テレビ」で検索 ◼ デフォルメのイラストでも大丈夫 ◼ 完全一致するテキストでなくても検索できる
17/63 リソース管理ツールの検索結果(3) 「マグロの寿司」の画像で検索 ◼ 同じものがトップに来る
18/63 CLIPによる検索の特徴と限界 画像の「意味・要素」で検索できる 類似した構図でも検索したいが…… 同じポーズ・似た構図を検索したい 意味を優先してしまう(別のアプローチが必要)
19/63 実装
20/63 機能の概要
21/63 機能の概要: 画像のアップロード 画像をベクトル変換して登録 アップロード API:登録処理 相談 画像 AI検索 画像
相談 リソース管理ツール 検索インデックス ベクトル
22/63 機能の概要: テキストで検索 テキストをベクトル変換 検索インデックス ベクトル 検索 AI検索 近いベクトルを検索 赤いリンゴ
テキスト 赤いリンゴ テキスト 検索結果 画像 相談 リソース管理ツール API:検索処理
23/63 実装 : デプロイ環境、ベクトル検索エンジン ◼ サーバレスで扱いやすい ◼ コストが低い ◼ リソース管理ツールとは別に実装(後で役に立った)
◼ Lambdaの詳しい話は次のデプロイのところで AWSのLambda上にデプロイ ◼ ベクトル間の距離を高速に求める ◼ Meta社のfaissを利用 https://github.com/facebookresearch/faiss ◼ 今回は検索件数が数万の単位なので必須ではない ベクトル検索エンジンを利用
24/63 実装 : ベクトル検索エンジン faiss ◼ C++実装なので高速 ◼ 多様な検索方法、GPUサポート(今回はCPU版を利用) 特徴
◼ コサイン類似度:2つのベクトルのなす角のコサイン値(同じベクトルの場合1) ◼ faiss.IndexFlatIPがコサイン類似度で検索 ◼ 削除時:検索インデックスを再作成(削除機能がないため) 今回はコサイン類似度が近いものを検索 ◼ 検索前:ベクトルを追加して「検索インデックス」を構築 ◼ 検索時:「検索したいベクトル」と「検索インデックス」から検索 ◼ 検索結果は距離が近い順のインデックス値 [2,3,1,…] 検索インデックスを構築 > 検索
25/63 実装 : faissはベクトルしか格納できない ◼ 同じ順番でfaissのインデックスを作成 ◼ faissの検索結果を使って、リソースIDを取得 ◼ 「ベクトル間の距離が近い順」の「リソースIDのリスト」を返す
◼ Pythonのpickle形式で保存 (リソースID:ベクトル)の配列を別に持つ 検索結果 リソースリスト リソースID1, 画像のベクトル1 リソースID2, 画像のベクトル2 リソースID3, 画像のベクトル3 faissの検索インデックス 画像のベクトル1 画像のベクトル2 画像のベクトル3 検索
26/63 実装 : APIごとの処理 ◼ 画像の登録時 > 検索インデックスの登録処理 ◼ 画像の検索時
> 検索してソートされたリソースIDのリストを返す リソース管理ツールからAPIを呼び出す
27/63 実装 : 登録時の処理 1. 登録する画像をCLIPでベクトルに変換 2. リソースリストを読み込む 3. リソース名とベクトルのペアをリソースリストに追加
4. リソースリストを使ってfaissのインデックスを再作成 インデックスの追加 faissの検索 インデックス インデックス 再作成 • ベクトル • リソースID リストに 追加 リソースリスト 画像 CLIPで ベクトル変換
28/63 実装 : 検索時の処理 1. テキストor画像をCLIPでベクトルに変換 2. faissのsearch関数で検索 3. コサイン距離が近い順に配列のインデックスのリストが返る
4. リソースリストからリソースIDのリストを取得して返す faissの検索+リソースIDのリストを返す faissの検索 インデックス リンゴ テキスト ベクトル Search関数で 近いベクトルを検索 リソースIDの リストを取得 CLIPで ベクトル変換 リソースリスト
29/63 デプロイ
30/63 デプロイ上の問題点と解決策 ◼ 合計15万枚を登録 ◼ 1回のAPI呼び出しで20枚登録 ◼ 1分間に1回実行 ◼ 5日以上
アップロード済みの画像を登録 ◼ 同時アクセスで検索インデックスが壊れる ◼ AIのモデルがインフラの帯域制限に引っかかってしまう ◼ 制限時間内に処理が終わらない 実行すると問題が多数発生
31/63 システム構成
32/63 システム構成 リソース管理ツール AI画像検索 EFS 帯域制限 ファイル転送 API Gateway Lambda
/tmp エフェメラルストレージ 30秒の制限 S3
33/63 AI画像検索 API Gateway EFS リソース管理ツール 帯域制限 ファイル転送 API Gateway
Lambda /tmp エフェメラルストレージ 30秒の制限 S3
34/63 Lambda リソース管理ツール AI画像検索 EFS 帯域制限 ファイル転送 Lambda API Gateway
30秒の制限 /tmp エフェメラルストレージ S3
35/63 EFS リソース管理ツール AI画像検索 EFS 帯域制限 ファイル転送 API Gateway Lambda
/tmp エフェメラルストレージ 30秒の制限 S3
36/63 S3 リソース管理ツール AI画像検索 S3 EFS 帯域制限 ファイル転送 API Gateway
Lambda /tmp エフェメラルストレージ 30秒の制限
37/63 発生した問題
38/63 検索インデックスが同時アクセスで壊れる ◼ Faissの検索インデックスのファイルをEFSに保存 ◼ 登録時、検索時にロード&セーブ ◼ 同時アクセスするとファイルが破損! 当初の実装 ◼
ネットワークファイルシステムなのでアクセス制御してくると思っていた EFSは同時アクセスの制御はしてくれない ◼ fcntl.LOCK_EXで排他ロック ◼ ロックファイルはサービスごとに作成(EFSに作成) ◼ サービス単位での同時アクセス数が少ないので問題なかった シンプルにファイルロックで回避
39/63 AIのモデルがインフラの帯域制限に引っかかる ◼ モデルをS3に配置 ◼ 最初の一回だけS3からEFSにコピー ◼ 実行時にEFSからモデルをロード 当初の実装 ①コピー
②ロード モデルファイル モデルファイル S3 EFS Lambda
40/63 AIのモデルがインフラの帯域制限に引っかかる ◼ Lambdaの関数を呼び出していくと途中で重くなる ◼ EFSは一定枠までは高速に使えるがそれ以上は制限がかかる(知らなかった!) 最初は問題なく動くが……! ①コピー ②ロード モデルファイル
モデルファイル S3 EFS Lambda 帯域制限
41/63 AIのモデルがインフラの帯域制限に引っかかる ◼ 関数呼び出しごとにS3から/tmpへモデルをコピー ◼ 2022年4月から/tmpの容量を追加できる Lambdaのエフェメラルストレージで解決 モデルファイル S3 Lambda
/tmp
42/63 faissのファイルも帯域制限に引っかかる ◼ faissの検索インデックスをEFSに保存 ◼ 画像登録・検索ごとにEFSからロード 当初の実装 ◼ faissの検索インデックスは数十MB ◼
数千回EFSから読み込むと制限がかかって遅くなる こちらも最初は問題なく動くが……! ◼ 関数呼び出しごとにS3から/tmpへ検索インデックスをコピー ◼ 更新後はS3へ戻す ◼ 最終的にEFSはロックファイル置き場としてのみ利用 同じ方法で解決
43/63 画像の登録処理が制限時間内に終わらない ◼ 画像の登録処理は20件まとめて行う ◼ Lambda内部では1件の登録処理を20回呼ぶ実装 ◼ モデルを20回S3から転送するので遅い! ◼ API
Gatewayの制限のため30秒以内に終わらせたい 当初の実装 1. S3からモデルをコピー 2. 20件まとめて画像をベクトルに変換 3. faissにベクトルを登録 4. faissの検索インデックスをS3へコピー まとめて処理する実装に変更
44/63 開発期間 ◼ Japanese CLIPとfaissを使った実装 1週間 ◼ Lambdaでの初期実装 2週間 ◼
リソース管理ツールへの組み込み 1ヶ月(別の担当者) ◼ デプロイ時のトラブル対応 1ヶ月 初期実装からリソース管理ツールへの組込みまで ◼ 基本構成は過去のAI機能と同じ ◼ AWSのインフラ構成も同じ ◼ AWS CDKのコードを流用 過去のAI機能の実装を使い回す
45/63 導入後の感想と今後の改善
46/63 リリース後の社内の感想
47/63 リリース後の社内での感想 ◼ 新しく入ったAI検索機能ものすごくいいです。...今まで発掘できなかったイラストが、 グーグル検索のように適当に思い浮かんだ言葉で検索出来てしまう。 これはまさに、かゆかったところに手が届く機能です!ありがとうございます! ◼ 本日の更新にてAI機能がつきました!とてもすごいのでぜひ使ってみてください~! (「青」って入れたら、青系イラストがいっぱい出てきました。すごい) 社内の感想
◼ 予想以上に好印象 ◼ 開発中の問題は多かったが、導入してよかった ◼ これもAIでできるんじゃない?という相談が増えた 想定以上に評判がよかった
48/63 別のアプリケーションでも使いたい ◼ シナリオライターがゲーム中の背景画像を指定 ◼ 数百枚以上ある背景画像を検索したい ◼ タグやファイル名を知らないと探せない ◼ 埋もれている背景がある
社内のシナリオ執筆ツールに導入してほしい ◼ リソース管理ツールとは独立している ◼ 別のサービスからでもAPIを呼び出せる 独立した実装になっているので導入が簡単
49/63 AI画像検索の改善
50/63 検索システムの改善 ◼ 「赤いリボンを付けたキャラクターA」で検索できるとさらに便利 ◼ Japanese CLIPのファインチューニングが必要 ◼ ファインチューニングの実装コードがない キャラクター名でも検索したい
◼ とあるカンファレンスで開発者の講演があった ◼ 講演後に話をして教えてもらった ◼ OpenAIのCLIPと同じ方法でファインチューニング可能 開発者に直接質問できた
51/63 ファインチューニングを行ってみた(その1) ◼ リソース管理ツールにはキャラクター名がタグで付いている ◼ 画像とキャラクター名の対応は取れるのでこれを学習 ◼ キャラクター名は学習できるが、学習済みの情報が失われてしまう キャラクター名を学習 ◼
ファインチューニングで学習した知識は増えるが、他の知識を忘れる現象 ◼ 両者のバランスを維持するファインチューニング手法 ◼ PAINT ◼ Patching open-vocabulary models by interpolating weights ◼ 参考文献:深層学習による画像認識の基礎 オーム社 菅沼 雅徳 破滅的忘却
52/63 ファインチューニングを行ってみた(その2) ◼ LLaVA1.5は画像に対してテキストで問い合わせを行えるモデル ◼ キャラクターの名前+画像の説明テキストを学習 ◼ 「(キャラクター名)の画像です。ギターを持った女性がいます」 ◼ 出力は英語なので日本語に翻訳して適用
◼ 学習してみたが精度が上がっていかなかった ◼ 生成テキストが学習に向いていなかった可能性 LLaVA1.5モデルで画像からテキストを生成 画像 テキスト 「画像を説明して」 プロンプト LLaVAモデル 「ギターを持った 女性がいます」
53/63 楽曲と効果音への適用
54/63 社内の楽曲管理について ◼ 社内リソース管理ツールのUIを変更したもの ◼ 楽曲管理に便利な機能を足してある ◼ 2023年から導入中 社内の楽曲管理システム:MusicDB ◼
担当者ごとにぶれてしまう ◼ こちらをAIで自動化できないか? 手動でタグを付けているが大変
55/63 音声版のCLIP : CLAP ◼ 画像以外を扱うCLIPモデルが多数公開済み ◼ 今回はLAION-AI/CLAPモデルを利用 音声版のCLIPを使えば可能! ◼
CLAP : Contrastive Language-Audio Pretraining ◼ 楽曲、効果音を扱えるCLIP(英語のみ) ◼ 商用利用可能なライセンス ◼ 精度が高い ◼ 先頭の10秒のみ利用(10秒以下の場合はリピート) ◼ 楽曲用の事前学習モデルを利用 LAION-AI/CLAP
56/63 楽曲の自動タグ付け ◼ CLAPをクラス分類に適用 ◼ ジャンル : クラシック、カントリー、ジャズ、…… ◼ テンポ:速い、普通、ゆっくり
◼ ムード:クール、楽しい、ロマンティック、悲しい、…… ジャンル、テンポ、ムードを自動タグ付け ◼ ジャンル分類の場合 ◼ 例:this audio is {ジャンル名} sound ◼ ジャンル名 : 'classical', 'country', 'jazz’ , … ◼ 「テキスト」と「楽曲」の距離が近いものへ分類 テキストのテンプレートを利用してクラス分類 ◼ 途中でテンポやムードが変わる曲は扱えない 実際の運用に使える精度
57/63 類似楽曲の検索 ◼ 楽曲から楽曲を探せる機能 ◼ 便利な機能なのでこちらから提案 ◼ 同じ曲のアレンジ版が上位に出てきたので正しく動作している ◼ たまに間違える(まったく別の曲が出てくる)
画像検索と同様に類似楽曲を検索できる
58/63 Lambdaでの実装 ◼ モデルファイルがrinna社のCLIPより大きい ◼ 初期化に時間がかかる 同様にAWS Lambdaで実装 ◼ LAION-AI/CLAPはモデルのファイルサイズが2.2GB
◼ これをS3から毎回転送するのは時間がかかる ◼ モデルを16bitに変換すると383MB(精度変わらず) モデルファイルが大きい ◼ 特定のクラスのインスタンス化に数秒かかる ◼ インスタンスをPythonのpickle形式で保存 ◼ 毎回S3から転送して読み込むことで高速化 初期化に時間がかかる
59/63 現在実装中 ◼ リソース管理ツールへの組み込み待ち Lambda側は完成
60/63 効果音の検索 ◼ 大量の効果音にタグを付けるのは大変 ◼ 担当者が異動すると引き継ぎのコストが大きい ◼ LAION/CLAPは効果音(環境音)の扱いが得意なモデル 効果音の検索もやりたい! ◼
テキストで効果音を検索 ◼ 効果音で効果音を検索 楽曲と同様のシステムとして提供(予定)
61/63 まとめ
62/63 まとめ : AIを使ったリソース検索を開発 ◼ 「いままで発掘できなかった画像が見つかった」など ◼ タグは使わずに、テキストで直接検索 ◼ 担当者ごとの感覚の違いに影響されない
AI画像検索は評判がよかった ◼ 同様の仕組みで楽曲・効果音も検索できる ◼ 工夫すればクラス分類も実装可能 楽曲・効果音の検索にも利用可能 ◼ 原理は極めてシンプル ◼ サーバレスでの実装には工夫が必要 ◼ 独立したシステムにすると他でも使える サーバレスでの実装は少し大変
63/63
参考文献 ◼ https://github.com/openai/CLIP CLIP ◼ https://github.com/rinnakk/japanese-clip Japanese CLIP ◼ https://github.com/facebookresearch/faiss
faiss
参考文献 ◼ https://github.com/LAION-AI/CLAP LAION-AI/CLAP ◼ https://github.com/haotian-liu/LLaVA LLaVA 1.5
参考文献 ◼ MERT: Acoustic Music Understanding Model with Large- Scale
Self-supervised Training ◼ https://github.com/yizhilll/MERT MERT ◼ Patching open-vocabulary models by interpolating weights ◼ https://arxiv.org/abs/2208.05592 PAINT
参考文献 ◼ オーム社 菅沼 雅徳 ◼ 8章 3.6 CLIP 深層学習による画像認識の基礎
参考文献 ◼ https://magazine.cygames.co.jp/archives/19967 社内のシナリオ執筆ツール
クラス分類の精度を向上できないか? ◼ テキストor楽曲による検索がメイン ◼ 開発者がクラス分類は得意でないとコメント LAION-AI/CLAPはクラス分類は得意ではない ◼ タスクごとのモデルの精度を見れるサイト ◼ Music
Auto-Tagging ◼ Music Genre Recognition ◼ Music Question Answering ◼ Music Classification Papers with Codeで探す ◼ 楽曲生成はかなり盛り上がっているのに…… 楽曲分類は人気がない
LAION-AI/CLAPより高精度のモデル ◼ 楽曲をベクトルに変換するモデル ◼ ジャンル分けなどのクラス分類の精度が高い ◼ ソースコードは商用利用可能 ◼ 事前学習モデルが商用利用不可! MERT