clusterに暮らすキャラクターAIについて思うことと、つくり方 ( Living AI in cluster )



![スクリーンショット 2021-12-02 22.35.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2241831/d3bd1d2b-e5a1-6d03-b878-58288d1c7a17.png)
## はじめに

こんにちは。はじめまして。現在クラスター株式会社でインターンをしているhattoriです。クラスターでは主にUnityでの制作のお手伝いをしています。大学ではデータサイエンス(主に深層学習・機械学習)を専攻しており、現在はモーションの自動生成・最適化の開発に取り組んでいます。

今回の記事ではメタバースの分野で自分が一番興味のあるキャラクターAIについてご紹介させていただきます。クラスターでインターンをする中で気づきも活かし、個人的に開発しているキャラクターAIについての内容です。今回の記事がclusterのキャラクターAIについて興味のある方の参考になれば幸いと思っています。
一応こちらの記事はインターンの業務では全く無いです。ご注意ください。また、私個人による見解だけではなく、ネットで調べて得た情報や勉強会・イベントで教えて頂いた情報も含んでいます。ご了承ください。


### 目次
- clusterにおけるキャラクターAI
- キャラクターAIのつくり方
    - プレイヤー操作をするAIモデル
    - ClusterCreatorKitでつくるキャラクターAI
- つくったキャラクターについて

   
## clusterにおけるキャラクターAI
キャラクターAIは、ゲームのNPCのように、キャラクターが環境認識して自律的に動くAIのことを指しています。今回紹介、つくっているキャラクターAIはclusterのプレイヤーとして振る舞い、簡単な応答もできるような対話型のキャラクターAIです。
clusterで対話型のキャラクターAIをつくるメリットは主に３つあると思っています。
- データの連続性を確認できる
- 3D空間の人と人とのコミュニケーションにリアルタイムに関わることができる
- キャラクターの自由な身体性

#### 連続性のあるデータ
データの連続性を確認できるというのは、対象のデータに紐づくデータを確認できるということです。clusterでは目視できる相手の場合、その人が「ワールドに入ってからワールドに出るまでの全てのデータ」を確認できます。例えば、〇〇さんが笑顔のスタンプを押したというデータを対象にした際、スタンプを押す前はどういった行動をしていたのか、その場にどういう人がいたのか、どういう会話をしていたのか等、全てのデータをとることができます。人が前後関係を考慮して対話するように、相手のことをちょっと察して話す対話型キャラクターを生み出しやすいと考えています。

#### 3D空間の人と人とのコミュニケーションにリアルタイムに関わることができる
マインクラフトといった3DゲームのAI開発は数多くされていますが、clusterのように日常会話がされているようば環境ではまだまだ少ないように思えます。日常会話に絞れば、[エアフレンド](https://airfriend.ai/ja/) といった有名なテキストベースの対話AIは現在あります。clusterのキャラクターAIでやりたいことは、3Dゲームとテキストベースの技術を組み合わせることです。身体性をもった日常会話に介入するキャラクターAIの存在は、新しい体験をもたらしてくれるかもしれないです。メタバースの取り組みが増えているため、まるでその仮想空間に暮らしているようなキャラクターAIの実現はそう遠くないと思います。

#### キャラクターの自由な身体性
3D空間でキャラクターの身体性が自由であるということは、結構当たり前のように感じるとは思うのですが、上記の「3D空間の人と人とのコミュニケーションにリアルタイムに関わること」を含めると特徴的な要素だと思います。日常的なコミュニケーションをイメージすると現実という物理的な制約によってできないことがありますが、clusterではそれが全く無いのです。


## キャラクターAIがいることで生まれるコミュニケーション
つくり方に入る前に、コミュニケーションに絞って補足させていただきます。対話キャラクターAIがいることで、新しいコミュニケーションが生まれると思っています。

### AIがいない場合
- 人と人とのコミュニケーション

### AIがいる場合
- 人と人とのコミュニケーション
- **AIがいることで人と人とのコミュニケーションの場が和む**
- **人とAIと人のコミュニケーション**
- **直接言えないことをAIが代わりに伝える**
- **(気が合うはずだけど、お互い知らない人同士のコミュニケーション)**

#### AIがいることで人と人とのコミュニケーションの場が和む
これは丸の内のKITTEの中にあるGOOD DESIGN STORE TOKYO by NOHARAで[LOVOT](https://lovot.life/)というロボットが接客しているのを見て考えたことです。何回か行ったことがあったお店だったのですが、その日だけとても和やかに感じました。犬や猫がいると場が和むことに近い感覚でした。猫や犬といった生命が人を癒したり、場を和ませたりするのはよくあることだとは思います。ですが、生命に近いとは言えど人工的に作られたものがそういった影響をもたらすことは新しい発見でした。LOVOTについて調べてみると「自然と顔がニコニコ」という意見が多く集まっています。

[黒谷友香、ロボットと生活で母性 充実の今に「自然と顔がニコニコ」](https://www.oricon.co.jp/news/2185582/full/)

人が多くなるにつれて、コミュニケーションのトラブルがあるとは思うのですが、AIがそういった場を起こしにくくする可能性があると思いました。

#### 人とAIと人のコミュニケーション
これもLOVOTがお店にいる時思ったことです。店員さんとお客さんがLOVOTとコミュニケーションをとっている様子をみるという今までにないお店での体験をしました。
ポケモンも例に出させていただきます。こちらはアニメの例になるのですが、ポケモンがいることで、「人とポケモンと人のコミュニケーション」が生まれているのだと思いました。

<iframe width="560" height="315" src="https://www.youtube.com/embed/P2ROQZfSKW4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

AIがいなかったら相手のことをよく知らずコミュニケーションが終わるっということも少なくないかもしれないです。

#### 直接言えないことをAIが代わりに伝える
これも人と人とのトラブルに関する要素です。直接言えないけど言うべきことをAIなら伝えることができるかもしれないという内容です。

#### (気が合うはずだけど、お互い知らない人同士のコミュニケーション)
「人とAIと人のコミュニケーション」では、コミュニケーションをする中でで、AIがいることで更に相手のことがわかるという内容でしたが、こちらはそもそもコミュニケーションにつながっていない人たちを対象にしています。よく人と人とをうまく繋げる方がいらっしゃると思うのですが、その方のように、あらゆるコミュニケーションデータから、「気が合うはずだけどけど知らない人と知らない人」をつなげることも可能性としてあると考えています。


## clusterのキャラクターAIのつくり方
clusterでのキャラクターAIの作り方を２つ紹介します。
- プレイヤー操作をするAIモデル
- ClusterCreatorKitでつくるキャラクターAI
cluster内で対話可能で、暮らしているように振る舞うようなAIは現状１つ目の方法でないと厳しいです。

### プレイヤー操作をするAIモデル
AIの最新技術をclusterに組み込むための手法の１つです。[PyAutoGui](https://pyautogui.readthedocs.io/en/latest/)というRPA（Robotic Process Automation）ツールを用います。Pythonで実装することができるので、Python側で、意思決定、物体検知、言語処理、音声処理の処理を用意することで、その処理結果をclusterの操作に反映することができます。デバイスを操作するロボットを作るという手段もあるとは思います。


#### 意思決定
現状は、シンプルなビヘイビア・ツリーで構成されています。暮らしているようなAIにするために最適なモデルを現在追求しています。
今年のCEDECでも発表があったのですが、感情を持ったAIをつくる取り組みがされており、こういった「感情」はもっともこのキャラクターAIに組み込みたい要素だと考えています。

[［CEDEC 2021］知性と感情を持ったNPCとのコミュニケーションを実現するスクウェア・エニックスの取り組み]
(https://www.4gamer.net/games/999/G999905/20210825066/)


#### 物体検知

[YOLOv5](https://github.com/ultralytics/yolov5)といった物体検知モデルを使うことで、プレイヤーの行動を認識します。そしてプレイヤー自体もこちら認識します。
![スクリーンショット 2021-12-02 23.04.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2241831/727090b2-7212-6fef-be86-5747ac994566.png)
ここでの気づきなのですが、プレイヤーの上にあるidが表示されないと、その人のことを覚えることができないということです。今までちょっと邪魔かも...と思ったのですが、アバターの変化ができるclusterにおいてはその人の識別に必要不可欠な要素となっています。初めての人にとっては覚えるための強いシンボルになってるかもしれないです。

#### 言語処理
GPT-3といった大型で高性能の言語処理モデルを使いたいところですが、まだ実装できていないです。
ワールド内でのコメントやメッセージのコメントを取得し、言語分析をして相手のことを把握したり、言語を生成してPyAutoGuiによってclusterで送信することを考えています。

#### 音声処理
こちらもまだ未実装です。音声の検知によって相手の感情を認識している例もあるので、実装は進めていきたいです。

### ClusterCreatorKitでつくるキャラクターAI
ClusterCreatorKitでのAI現状難しいです。その中でもキャラクターAIをつくるのに活かせる手法をご紹介します。
#### コリジョンセンサーを回してプレイヤーを検知
こちら他のクリエイターの方が発信されているものです。後ほどリンクを載せさせていただきます。
#### アニメーションのステートマシン
こちらも他のクリエイターの方が発信されているものです。後ほどリンクを載せさせていただきます。
#### 意思決定オブジェクトの生成の繰り返し
意思決定を決めるオブジェクトを**生成し、破壊されるときに条件分岐を利用して生成**を繰り返すことで、意思決定に近い表現を実現します。
#### リアルタイムのアップロードでキャラクターを変化させる(プレイヤー操作をするAIモデルの検知を活かす)
１つ目の手法で検知した情報をもとに、ワールドのアップロードの内容を変更するという手法です。現状かなり非現実的な手法ではあります。

## つくったキャラクターについて
２つのコンセプトを持って、２つのキャラクターAIをつくっています。ワールドで見かけたら是非声をかけてみてください。
人との関わりによってキャラクターが成長します。
### 和み ツムグ
「場を和ませるような、人と人とをつなぐ人型AI」
この記事で主張が多い「キャラクターAIがいることで生まれるコミュニケーション」を目指してつくっているキャラクターAIです。理想はclusterのコミュニケーショントラブルを減らせれることです。
データを取得や行動処理をすることでエラーを起こすことがあります。その際は、膝をついて目をぐるぐるさせてログアウトしちゃいます。突然の行動でびっくりするかもしれないですが、そっとしてもらえると助かります。

### c.001
「小さくて丸っこい、ノンバーバル(非言語)なロボット型AI」
clusterでは「ピュッピュー」(スタンプ)でコミュニケーションが取れることをアイデアにしたノンバーバルなキャラクターAIです。AIを考える中で１つ課題感を感じていたのが、綺麗な人型の場合近寄り難く感じてしまうということです。人より小さくて、ちょっとダサい(良い意味で
です。)からこそ近寄ることができるのだと思います。スターウォーズのR2D2のようなものと考えるとイメージしやすいと思います。
<iframe width="560" height="315" src="https://www.youtube.com/embed/JLmOteqmDYc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

## おわりに

ここまで記事を読んでくださりありがとうございます。clusterでは様々なコミュニケーションがされているとおもうのです、記事でも書いたように、キャラクターAIによって新しいコミュニケーションができる可能性についてお話しさせていただきました。まだ上手くいくかわからない状況ですが、ちゃんと役割を持つように共生できることを目指していきたいです。
今までAIエンジニアとして他の会社でインターン・共同研究の経験があるのですが、そういったAIの観点のからも、clusterのデータの特性に興味を持っていました。ソーシャルなデータだからこそ、SAOのアリスようなAIがうまれるのではないのかと淡い期待を持っていました。こちらのAIモデルは最終的に色んな人でもつくり育てることができるようにすることを考えています。clusterで様々なワールドをつくっているように、様々なキャラクターを生み出して、ポケモンの世界のように人とは違った生命がいるからこそ楽しい世界がうまれるかもしれないです。
(ポケモンGO公式サイトより、https://www.pokemongo.jp/news/540/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2241831/d6a96a4b-30be-b4a5-fe85-022610807b15.png)