音声ライブラリから欲しいファイルをあいまい検索*するシステムforUnity
はじめに
欲しい音を探すとき大量の音声ファイルの中から自分が欲しい音を見つけるのって大変じゃないですか?
UnityのAssetStoreにある音声アセットや毎年 Game Developers Conference (GDC)で配布されるサウンドデータパックなど、使用可能な音源はたくさん存在しています
ですが、数十GBに及ぶような音声ライブラリの中から自分が欲しい音を見つけ出すのはかなり大変だなーと感じていました
この問題を最近のLLMまわりの技術の発展で解決することが出来るかなーと思い、Unity上で音声ファイルのあいまい検索*をできるようにするシステムを作りました。
https://github.com/witchpot-studio/UnitySoundSearchDemo
今回音声ファイル検索用として作りましたが、このシステムは音声ファイルに限らずあいまい検索*ができるもののため応用が効き発展性のあるものなので大まかな仕組みを書きたいと思います。
*「あいまい検索」という言葉が、”正確な文字列一致ではなく類似した意味のものを結果として出す検索”という意味で直感的なため使用しています。既存のあいまい検索の「部分一致」の意味としては正しくありません。英語圏ではembeddings based searchと呼ばれているものです。
検索の流れ
このシステムではファイル名が音声を表現した名前が割り振られていることを前提としています。
大まかな仕組みは下記のようになっています。
準備
検索対象の全ファイルに対して、ファイル名・フォルダ名の文字列のEmbeddingsを取得してリスト化検索
検索したい言葉(プロンプト)のEmbeddingsを取得
「プロンプトのEmbeddings」と1で準備した「検索対象リストのEmbeddings」のユークリッド距離を計算
距離が近い順に検索結果として表示する
Embeddings
OpenAIのEmbeddingsを使用しています
Embeddingsは文や単語、文字などのテキストをベクトル表現にしたもので関連性を測定できるようなもののようです
Embeddingsのベクトル間の距離が小さいほどそのテキスト同士は関連性が高く、距離が大きいほど関連性が低いと判断されます。
このため、全ファイルの名前やフォルダ名を利用してEmbeddingsを取得し自分が欲しいものを表す単語や文のEmbeddingsと比較することで一番イメージに近いファイル名を見つけることが出来るようになります。
実際に使ってみる
今回例としてUnityAssetStoreで無料で配布されているアセットを例に実際に検索をしてみます。
例として銃を撃った時の音がほしいので
と検索してみます
すると
の順に検索結果として出てきました。順番としては今回はハンドガンの音が欲しかったため1番近いものとしてRailgunは違いましたが2番目としてHand Gunが出てきています。
ここで見つけられたファイルを引っ張ってこればそのフォルダの周辺にgunに近い音がまとまっているので効率的にイメージに近い音を探すことが出来ます。
今まで正しい単語で検索しなければいけなかったものが、単語が一致しなくてもイメージに近い単語で検索できるシステムは便利です。
こちらのリポジトリをクローンすることで試すことが出来ます
https://github.com/witchpot-studio/UnitySoundSearchDemo
今後の展開
このシステムでは音の検索を例にあいまい検索*をしました。こういった機能はWitchpotの製品にも載せて行きます。
このようなシステムを使うとゲームステージ内のオブジェクトのマテリアルを自動で分類タグ付けして自動で音を設定、その位置をキャラクターが歩くとその音が鳴る仕組みなど、自動化の道が見えてきますね。
(この動画ではGDCのサウンドデータパックで実際に検索を行い地面の足音を付けてみました。画像の分類とタグ付けは実際にSegmentationを行うOSSのプロジェクトで分類したものを使用していますがUnity外部で行ったものでありイメージ動画です)
2023年現在OpenAIのGPTをはじめ言語モデルを活用した技術がどんどん発展しています
最近では音声ファイルや画像ファイルの内容を自然言語として説明するAIなどが出てきているため、今回ここで行ったファイル名の検索の他に、ファイルの内容を説明するタグが自動で生成されてあいまい検索*可能になっていくのではないかと思われます。
あいまい検索*できるのはGPTを利用したアプリケーション等を触っているとすごく効率的になることは実感されるので楽しみですね
コミュニティ紹介
Witchpotが出すサービスを中心にゲーム開発にGenerativeAIを活かす方法を共有するDiscordコミュニティを作っています!
興味がある方はぜひご参加ください!
まだ作ったばかりのコミュニティですので是非気軽にコミュニケーションとって頂ければです!
募集
株式会社Witchpotでは生成系AIをゲーム作りに活かすサービスづくりを行っており一緒に働く方を募集をしています。
興味がある方は中島のTwitterDMにお気軽にご連絡ください!
生成AIxゲーム開発に興味がありとりあえず話しだけ、などでも大丈夫です!
【内容】
エンジニア(業務委託)
自社Webサービス開発
フロントエンド・バックエンド各種あるので一部でも
ゲーム作りに応用可能な画像解析系の論文を実装し、Webサービス開発(一部受託)
生成AI x ゲーム作りの何でも屋さんアルバイト
新しいツールの実験やコンテンツ作りを一緒に行い記事にしたり広報などもする方。自分のゲーム開発してもらっても大丈夫です!
条件
VRAM 8GB以上のGPU搭載PCを持っている方
ゲーム作りしたい、してる方
サポートは開発・勉強用に使用させていただきます。