🤖
Unity Sentis 感情分析
Unity Sentis を使った感情分析
目的
Unity 上で Sentis を利用し、カメラで映したユーザーの表情から読み取れる感情(ポジティブ・ネガティブなど)をリアルタイムに分析する。
必要なもの
- Unity(2022.3 LTS 以上推奨)
- Unity Sentis パッケージ
- 感情分析用 ONNX モデル(例:DistilBERT + SST-2)
- 単語辞書 or トークナイザ(必要に応じて)
導入手順
1. Unity Sentis を導入する
-
Unity を開き、
Window > Package Manager
を開く。 -
+
→Add package from git URL
を選択。 -
以下の URL を入力し、追加:
https://github.com/Unity-Technologies/Sentis.git?path=Packages/com.unity.sentis
2. 感情分析モデル(ONNX)を入手
以下のサイトなどから感情分析用の ONNX モデルをダウンロードします。
※ 日本語対応モデルを使いたい場合は、cl-tohoku/bert-base-japanese をONNXに変換して使うことも可能です。
3. モデルを Unity に読み込む
Assets
フォルダに .onnx
ファイルを入れ、以下のように読み込みます。
using Unity.Sentis;
using UnityEngine;
public class SentimentAnalyzer : MonoBehaviour
{
public NNModel modelAsset; // Inspector に割り当てる
private Model model;
private IWorker worker;
void Start()
{
model = ModelLoader.Load(modelAsset);
worker = WorkerFactory.CreateWorker(BackendType.CPU, model);
}
void OnDestroy()
{
worker?.Dispose();
}
}
4. テキスト入力の前処理(トークナイズ)
モデルによっては、トークンIDへの変換が必要です。以下は簡易的な例です。
int[] TokenizeText(string inputText)
{
// 簡易的な語彙辞書(例)
Dictionary<string, int> vocab = new Dictionary<string, int> {
{ "i", 101 }, { "am", 102 }, { "happy", 103 }, { "sad", 104 }
};
var tokens = inputText.ToLower().Split(' ');
return tokens.Select(word => vocab.ContainsKey(word) ? vocab[word] : 0).ToArray();
}
※ 高精度なトークナイザを使いたい場合は、Pythonで事前にトークンIDに変換し、Unityに渡すのが現実的です。
5. 推論の実行
public string PredictSentiment(string text)
{
int[] tokenIds = TokenizeText(text);
Tensor inputTensor = new Tensor(1, tokenIds.Length);
for (int i = 0; i < tokenIds.Length; i++)
inputTensor[0, i] = tokenIds[i];
worker.Execute(inputTensor);
Tensor output = worker.PeekOutput();
float positive = output[0];
float negative = output[1];
return positive > negative ? "Positive" : "Negative";
}
サンプルの使い方
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
string userInput = "I am happy";
string result = PredictSentiment(userInput);
Debug.Log($"Sentiment: {result}");
}
}
5. 応用アイデア
音声認識(Speech-to-Text)と連携して、発話から感情分析
感情に応じてNPCのセリフや表情を変化
メンタルケアアプリや日記アプリで感情の可視化
補足情報
ONNXモデルは軽量なものを選ぶこと(特にMeta QuestなどのVRに展開する上では重要)
事前処理はUnity内で行うとやや複雑なため、Pythonなどで事前処理して結果だけUnityに渡す運用が現実的
モデルの出力形式はONNXモデルに依存するので、output名や形状を事前に確認すること
(Netronなどで可視化)
Discussion