algonote

There's More Than One Way To Do It

3Dキャラクター(VRM)の感情表現検討

パラメトリック感情表現のお勉強

f:id:hiromichinomata:20200920041409p:plain:w200

前口上

3Dのキャラクター作成ツールでは静的な見た目をカスタマイズした後に、絵作りのために差分として表情を可変できることも多い。また、LINEのスタンプでも通常同じキャラクターが複数のバリエーションで感情を表現している。

人間の感情はたくさんあるのでそれを網羅するのは大変。 できればデータの持ち方を工夫して少ない労力でたくさんの感情を量産したい。

VRMは3Dキャラクターのオープンなフォーマットであり、その作成ツールであるVRoid Studioを例に現状が最適か検討してみる。

VRMモデル現状

ラッセルの感情円環モデル[Russell 1980]は人間の感情表現を円環状の空間に当てはめたモデルで後続の研究でも参照されていることが多い。

快<=>不快、高活動<=>低活動の2軸で近しい感情を近しい2次元平面にプロットできる。

VRMモデルの表情パターンをに当てはめると下のようになる。 JOYとFUNが距離が近く、他の感情に当てはめた方が描写できる情報量は多い。 f:id:hiromichinomata:20200920041427p:plain

ref) 日本語訳ラッセル円環モデル http://hai-conference.net/proceedings/HAI2015/pdf/G-2.pdf

対角だとニュートラルになってしまうので厳しいがある程度は2個の感情の中間を生成するのにも使えると思われる。

採用事例

FFVIIリメイクでもラッセルの感情円環モデルを参考にキャラクタ表情を作成している。 右下のsneer(あざ笑う)は独自変更部分で本来リラックスの部分。sneerは本来左中央に近いのでは。

f:id:hiromichinomata:20200920041441j:plain

https://www.gamer.ne.jp/news/202009030009/

他のモデル

1 Russellの円環モデルの覚醒を強さと大きさに分けた3次元モデル

Russellの円環モデルの覚醒を強さと大きさに分けた3次元モデルが提案されている。

3つの感情の中間となる表情をパラメトリックに作れる可能性があるが、感情語の例が少なく言葉を当てはめづらい

f:id:hiromichinomata:20200920041455j:plain

https://note.com/fair/n/n8a0f600b2491

2020/09/22追記: 著者からフィードバックがあり手前側の平面から見るとラッセルと一致するとのこと

2. ラッセルに内向きか外向きかの感情軸を加えて3次元に拡張した独自モデル

1を参考にラッセルに内向きか外向きかの感情軸を加えて3次元に拡張した独自モデルを作成してみる。ラッセルの感情語をそのまま流用できるのが利点。

f:id:hiromichinomata:20200920041648p:plain

人間の感情の分類という意味では有用そうだが、身振り手振りも含む気がして(感謝なら顔より頭を下げた方が日本人にはわかりやすい)顔だけのためにはモデルが複雑 && VRM作成ソフトの作成難易度をあげてしまうのでvrmフォーマットがclosedに近づいてしまう。参入障壁が上がるというか

VRMを拡張するなら顔はあくまで model.updateState('face', 'angry') にとどめてより高度な感情を表現したいならラッパーAPI model.updateState('body', 'thanks') or model.updateState('all', 'thanks') を作った方が賢そう

ベクトルで表すとこんな感じ

(快、活動、外)
(-1, -1, -1): 憂鬱な
(-1, -1, 0): 悲しい
(-1, -1, 1): うんざりした
(-1, 0, -1): みじめな
(-1, 0, 0): イライラした
(-1, 0, 1): 不快
(-1, 1, -1): 緊張した
(-1, 1, 0): 怒った
(-1, 1, 1): 警戒した
(0, -1, -1): 疲れた
(0, -1, 0): 眠たい
(0, -1, 1): (無関心)
(0, 0, -1): (混乱した)
(0, 0, 0): ニュートラル
(0, 0, 1): (達観)
(0, 1, -1): 覚醒した 
(0, 1, 0): 興奮した
(0, 1, 1): 驚いた
(1, -1, -1): リラックスした 
(1, -1, 0): 落ち着いた
(1, -1, 1): 安心した
(1, 0, -1): 嬉しい
(1, 0, 0): 満足した
(1, 0, 1): 楽しい
(1, 1, -1): (感動)
(1, 1, 0): 歓喜した
(1, 1, 1): (感謝)

3. EMOTIC

機械学習の分野で文章がポジティブかネガティブかを当てる極性分類というタスクがあり、その発展形で文章にあった絵文字を当てるというものがある。

絵文字分類データセットEMOTICでは検討の結果、人間の感情は26の大分類に当てはめられるとしている https://openaccess.thecvf.com/content_cvpr_2017_workshops/w41/html/Lapedriza_EMOTIC_Emotions_in_CVPR_2017_paper.html

4. DeepMoji

DeepMojiも同様に絵文字分類の論文。SNSでよく使われる上位64の絵文字を当てる。

f:id:hiromichinomata:20200920041546p:plain

類似の絵文字が多く含まれており情報量が少ない。そのせいか階層的クラスタリングの結果をみてもポジティブ、ネガティブ以上の分類をするのは難しそうに見える。

f:id:hiromichinomata:20200920041606p:plain

https://medium.com/@bjarkefelbo/what-can-we-learn-from-emojis-6beb165a5ea0

5. フラクタル解釈

ラッセル以降の論文でも円環状の捉え方を拡張したものが多い。 1.18次元のフラクタル次元で捉えた方がモデル適合性が高いという論文があるが、だいたいラッセルなのでそれで十分と思われる。

f:id:hiromichinomata:20200920041619j:plain

https://www.jstage.jst.go.jp/article/jsre1993/9/1/9_1_31/_pdf

提案

f:id:hiromichinomata:20200920041409p:plain

後方互換性を考えて喜びを歓喜相当だとリフレーミングしつつsurprised, disgusted, sleepy, relaxedを追加するとバランスが取れそう

(-1, -1): 悲しい
(-1, 0): 不快
(-1, 1): 怒った
(0, -1): 眠たい
(0, 0): ニュートラル
(0, 1): 驚いた
(1, -1): リラックスした
(1, 0): 楽しい
(1, 1): 歓喜した