課題
このブログでは、記事を探す画面「PAGEの書棚」を作ってきた。GoogleのEmbeddingGemma 2で質問に近い記事を拾い、判断用のAI「Jev」で確率を付けて並べ替える2段構えになる。
今回は、その応用編になる。自分がAIに投げかけたのは、こんな問いだった。
「チャットメッセージから相手の感情を解析することはできますか?また、相槌を返す側の感情を考慮した相槌の選択も行えるようにしたいです」
相槌は、「そうなんですね」「えっ、本当?」のような、話を聞いていると伝える短い返事のこと。チャットで相手のメッセージを受け取ったとき、キャラクターが最初に返すひと言と顔つきを、確率を返すAIに選ばせられるかを試した。
解決できるようにすること
キャラクターやチャットの返事に、AIで相槌や表情を付けたいときに、確率を返す判断AIにどこまで任せてよく、どこは人が決める必要があるのかを判断できるようにする。あわせて、うまくいかなかった選び方と、そのあとの直し方も持ち帰れるようにする。
先に結論
架空のメッセージ32件で、5回に分けて試した。
- 送り手の感情は、Jevが32件中30件で当てた。EmbeddingGemma 2は23件だった
- 最初の相槌は、Jevに24個の候補を一度に見せ、推定した感情も手がかりに渡すと、32件中28件が許容できる返事になった。EmbeddingGemma 2だけでは9件で、PAGEの書棚で効いた2段構えも、今回はJevだけより低かった
- 返す側のキャラの性格を問いに入れると、言葉づかいはそれらしく変わった。ただ、表情まで性格込みで選ばせると、PAGEは32件中24件が「ほほえみ」になり、驚きの話にも同じ顔をした
- 表情は相手の気持ちだけで選び、性格は表情の強さにだけ効かせる形に分けると、驚きの話に「軽い驚き」の顔が出た
- 最初の表情のあとに落ち着く表情も選ばせたが、確率の差は0〜0.06と小さく、そのままでは安定しなかった
この記事でわかること
- 送り手の感情と最初の相槌を、JevとEmbeddingGemma 2でそれぞれどれくらい当てられたか
- 返す側の性格や「眠い」状態を入れると、何が変わり、何が変わらなかったか
- 表情の選び方を、どこでどう作り直したか
- 結果を1つにまとめた手元のデモで、PAGEとLEAFに演じさせた流れと時間
ここで、こう思う人もいるかもしれない。
「キャラの性格を問いに入れれば、そのキャラらしい返事と表情が全部まとめて出てくるんじゃないの?」
今回はそうならなかった。言葉は性格に合わせて変わったけど、表情は性格が強く出すぎて、相手の気持ちが置き去りになる場面があった。
何を、どう試したか
架空のメッセージ32件と、先に決めた正解
試したメッセージは32件で、すべて架空になる。実在の人の会話は使っていない。AIが案を作り、自分が確認して決めた。
- うれしい話(例:第一志望の会社から内定をもらえました!)
- 悲しい話、不安な話、怒っている話、疲れた話
- お礼、ふつうの連絡(例:明日は10時からでしたっけ?)
- 言葉が似ていて気持ちが逆の組(試験に落ちた/受かった、財布を落とした/見つかった、雨で試合が中止になった/中止になってほっとした)
- 皮肉(また雨か。最高だね)、強がりかもしれない言い方(別に気にしてないよ)、気持ちが混ざる話(昇進したけど、引っ越さないといけない)
送り手の感情は、喜び・悲しみ・不安・怒り・驚き・疲れ・感謝・安心・どれでもないの9つにした。メッセージごとに、主な感情と、ほかに許してよい感情を決めてある。
相槌の候補は24個になる。「なるほど」「そうなんですね」「うんうん」「えーっ!」「おめでとう!」「それはつらかったですね」「ゆっくり休んでくださいね」「よかったら聞かせてください」などで、メッセージごとに「最初の返事として許せる相槌」も決めた。
どちらも、結果を見る前に決めている。PAGEの書棚のときと同じで、見てから決めると比べ方が甘くなるため。
JevとEmbeddingGemma 2の使い方
Jevは、TypeSafeという会社のAIで、文章を書かずに「決めた選択肢のどれに当たるか」を確率つきで返す。今回は1回の問い合わせに、複数の問いをまとめて入れた。
- 感情: 「送り手は喜びを感じているか」のような問いを、9つの感情の分だけ1回で聞く
- 相槌: 「この相槌は、このメッセージへの最初の反応として自然でやさしいか」を、候補の数だけ1回で聞く
EmbeddingGemma 2は、文章を意味の近さで比べられる数字に変えるモデルで、手元のMacで動かした。感情ごとに短い例文を3つ、相槌ごとに「使う場面」の説明文を用意して、メッセージとの近さで並べている。
相槌は返事の最初に出すものなので、時間は1秒以内を目安に見た。同じ入力へのJevの判断は覚えておき、2回目は使い回す。これもPAGEの書棚で入れた仕組みになる。
送り手の感情は、Jevが32件中30件で当てた
| 方法 | 正解・許容に入った | 1回の時間(中央値) |
|---|---|---|
| Jev(9つの問いを1回で) | 32件中30件 | 0.43秒 |
| EmbeddingGemma 2(感情ごとの例文との近さ) | 32件中23件 | 0.07秒 |
Jevは、言葉が似ていて気持ちが逆の3組を、どれも取り違えなかった。皮肉の「また雨か。最高だね」も外していない。
外したのは2件だけになる。
- 「雨で試合が中止になった」を「どれでもない」(0.72)とした。正解は悲しみ
- 「昇進したけど、引っ越さないといけない」を「悲しみ」とした。正解は喜び、許容は不安
EmbeddingGemma 2は9件を外した。「心配で眠れません」を疲れ、皮肉の「最高だね」を安心、「落とした財布が見つかった!」を驚き、という具合になる。「眠れない」「最高」のような言葉に引っぱられているように見える。速さはJevの6分の1ほどだけど、気持ちの読み取りはJevのほうがずっと確かだった。
最初の相槌は、2段構えよりJevだけのほうがよかった
| 方法 | 許容できる相槌がいちばん上に来た | 1回の時間(中央値) |
|---|---|---|
| EmbeddingGemma 2だけ | 32件中9件 | 0.07秒 |
| Jevだけ(24個を1回で) | 32件中26件 | 0.49秒 |
| 2段構え(EmbeddingGemma 2で近い8個に絞り、Jevで選ぶ) | 32件中24件 | 0.37秒 |
| Jev+推定した感情を手がかりに渡す | 32件中28件 | 0.52秒(最大1.9秒) |
PAGEの書棚では、1段目で拾い、2段目で並べ替える形が効いた。相槌では、その形がJevだけより2件低かった。
EmbeddingGemma 2も、まったく使えないわけではない。いちばん上が合うのは9件だけど、許せる相槌のうち最初に出てくる順位は中央値で3位、32件中31件では上位8個に入っていた。絞り込みとしては働いている。
ただ、候補は24個しかない。Jevなら24個を1回で見ても約0.5秒で返ってくる。記事116本から探すときとは違って、わざわざ絞る理由があまりなかった。
いちばんよかったのは、先に推定した感情を手がかりに渡した版で、32件中28件になった。外れた4件を見ると、「10年ぶりの同級生に会った!」に「よかったですね」、「別に気にしてないよ」に「そうなんですね」のように、許せる相槌の表に入れていなかった無難な返事だった。
返す側の性格を入れると、言葉づかいは変わった
次に、返す側のキャラの性格と今の状態を問いに足した。キャラはこのブログの案内役のPAGEと、SNSを担当しているLEAFの2人で、それぞれ「ふつう」と「眠い」の状態を試した。
- PAGE: 落ち着いていて、ていねいに話す。好奇心が強く、相手の話をよく聞く
- LEAF: 明るく元気で、くだけた話し方をする。気持ちを素直に表す
32件中23件で、4つの条件のどれかが違う相槌を選んだ。PAGEは「よかったですね」「それは大変でしたね」のようなていねいな返事、LEAFは「おめでとう!」「えーっ!」「うんうん」のような気持ちを出す返事が多い。性格はちゃんと効いている。
一方で、許せる相槌に入る数は32件中21〜25件に下がった。LEAF(ふつう)は旅行の中止や皮肉にも「えーっ!」を選び、約束に1時間遅れた怒りの話は4つの条件とも「それはつらかったですね」になった。性格が、相手の気持ちより前に出てしまっている。
このとき、推定した相手の感情は渡していなかった。AIが選択肢を出し、自分は「案Aで進めましょう」と返して、相手の感情も一緒に渡すことにした。
| 条件 | 感情なし | 感情あり |
|---|---|---|
| PAGE ふつう | 23 | 23 |
| PAGE 眠い | 21 | 22 |
| LEAF ふつう | 21 | 29 |
| LEAF 眠い | 25 | 28 |
LEAFは大きく良くなった。旅行の中止や皮肉に「えーっ!」を選ぶことは無くなり、怒りの話には「ひどいですね」を返した。
PAGEは変わらなかった。お祝いにも驚きにも「よかったですね」「そうなんですね」を返す。ただ、これは落ち着いた性格どおりとも言える。許せる相槌の表は返す側を考えずに作ったものなので、ここは数字だけで良し悪しを決められず、自分の目で見て判断するしかない部分になる。
「眠い」の効き目は、最後まで小さかった。期待していたのは、短く静かな反応に変わることだったけど、LEAFで「えーっ!」が減って「うんうん」が増えたくらいだった。
表情は、性格を入れずに選ぶ形に作り直した
同じ「そうなんですね」でも、顔つきで変わるはず
ここで、自分から1つ提案した。「そうなんですね」のような汎用の相槌でも、驚き・喜び・ふつうの気持ちを添え分けるだけで、かなり良くなるのではないか。さらに、気持ちの変化も添えられると寄り添える、という考えになる。
PAGEは別の記事で、1枚の絵のまま表情を変えられるようにしてある。そのアニメーションの8つの表情(ほほえみ、笑顔、軽い驚き、困り顔、真剣、ジト目、ねむい、ウインク)に「ふつう」を足した9つから、相槌に添える表情を選ばせた。
性格込みで選ぶと、PAGEは「ほほえみ」ばかりになった
最初は、相槌と同じく、返す側の性格と状態を入れて表情を選ばせた。相手の感情に合う表情の表はAIが案を作り、それで数えている。
- LEAFは、お祝いに「笑顔」、驚きに「軽い驚き」、怒りに「困り顔」と、相手の気持ちに合わせて顔を変えた
- PAGEは、32件中24件が「ほほえみ」で、「笑顔」と「軽い驚き」を一度も選ばなかった
- 相手の感情に合う表情を選んだのは、32件中、PAGEがふつう25件・眠い28件、LEAFがふつう30件・眠い27件
- 「え、明日って祝日だったの?」にも、PAGEは「ほほえみの『そうなんですね』」を返した
自分が期待していた「驚きの『そうなんですね』」は、PAGEでは出なかった。落ち着いた性格を渡すと、表情まで落ち着いた側に寄ってしまう。
ほかにも気になる点があった。「眠い」のLEAFは、ふつうの連絡に「ねむい」の顔を選んだ。状態が言葉ではなく顔に出た形で、案の表では外れになる。相手から見ると、話をちゃんと聞いていないように見えかねない。皮肉の「また雨か。最高だね」は、4つの条件とも「ほほえみ」で、表情も外した。
表情は相手の気持ちで選び、性格は強さにだけ効かせる
そこで、AIが出した案のうち、表情は返す側の性格を入れずに、相手の気持ちだけで選ぶ形を選んだ。自分の返事は「案Aを試しましょう」だった。キャラの性格は、表情の強さにだけ効かせる。強さはJevに判断させず、設定値として決めた。
| キャラ・状態 | 表情の強さ |
|---|---|
| PAGE | 0.6 |
| LEAF | 1.0 |
| 眠いとき | 上の値×0.7 |
同じ「軽い驚き」でも、PAGEは控えめに、LEAFははっきり出す、という分け方になる。
選ばれた表情は、真剣13件、ほほえみ7件、笑顔6件、ふつう3件、困り顔2件、軽い驚き1件だった。喜び・お祝いには「笑顔」、ふつうの連絡には「ふつう」の顔が付き、「え、明日って祝日だったの?」には「軽い驚き」が出た。PAGEでも「軽い驚きの『そうなんですね』」になり、提案した形が出てきた。皮肉には「困り顔」が付いた。
悲しい話に「真剣」は、外れか寄り添いか
ただ、表の上では32件中22件にとどまった。外れた10件はすべて「真剣」で、そのうち8件は悲しみ・不安・疲れの話だった。最初の表では、悲しみ・不安・疲れに合う顔を困り顔とほほえみにしていた。Jevの確率は、真剣が0.6〜0.8、困り顔が0.3〜0.7で、真剣のほうが高い。
AIが選択肢を出し、自分は「案1でよいです」と返した。重い話を真剣に受け止める顔も寄り添いとして認め、悲しみ・不安・疲れに合う顔に「真剣」を足した。直した表では32件中31件になる。
ここは正直に書いておきたいところで、この31件は、結果を見たあとで正解の表を広げた数字になる。最初に決めた表のままなら22件。どちらを正解とみるかは、自分の判断で決めた。
落ち着いた後の表情は、確率の差が小さすぎた
提案のもう半分、気持ちの変化も試した。最初の表情をそのまま使い、「最初の反応のあと、相手の気持ちに寄り添いながら話を聞き続けるとき、どの表情に落ち着くか」を聞いている。同じ表情のままも選べる。
表情が変わったのは32件中10件で、すべて「真剣」からだった。困り顔へ9件、ほほえみへ1件(「なんでもない、ちょっと聞いてほしかっただけ」)。重い話をまず真剣に受け止め、そのあと気づかう顔に移る形になっている。
笑顔・ほほえみ・ふつう・軽い驚き・困り顔から始まった22件は、すべて同じ表情のままだった。自分が例に挙げていた「驚きのあと、ほほえみに落ち着く」は出なかった。「え、明日って祝日だったの?」は、軽い驚き0.83、ほほえみ0.82で、わずかな差で驚きのまま残っている。
問題は、変わった10件のほうにもあった。変化後と最初の表情の確率の差は0〜0.06しかない。「健康診断の結果がまだ来なくて落ち着かない」は、困り顔と真剣が0.84で同点で、表の並び順で困り顔になっただけだった。いちばん高いものに移るだけだと、変わるかどうかが確率のわずかな差で決まってしまう。
そこで、次に作るデモでは、最初の表情より0.05を超えて高いときだけ変えることにした。この0.05は、測って決めた値ではなく、例として置いた線になる。この線で落ち着きがよくなるかは、まだ確かめていない。
手元のデモで、PAGEとLEAFに演じさせた
ここまでで、自分から「そろそろデモツールを実装できるくらいにはデータがたまってきたのではないですか?」と聞いた。AIの案のうち、手元で動くWebページで、キャラの表情を再生する形に決めた。
このデモは手元のMacの中だけで動かしていて、公開していない。読者の方に触ってもらえる形にはなっていないので、画面と流れを紹介する。

1回の流れ
メッセージを打つと、Jevへ4回問い合わせる。

- 送り手の感情(9つの問い)
- 最初の相槌(24個の候補。返す側の性格・状態と、推定した感情を渡す)と、最初の表情(相手の気持ちだけで9つの問い)を同時に
- 落ち着いた後の表情(最初の表情より0.05を超えて高いときだけ変える)
相槌はEmbeddingGemma 2を使わず、Jevだけで選んでいる。返す側の条件で試したとき、2段にしても結果が変わらなかったため。
画面には、感情の確率、相槌の上位3つ、表情と強さ、落ち着いた後の表情が出る。その結果から、PAGEかLEAFが相槌に合わせて口を動かし、表情を変える。
初めての文で、全体は約1.5秒(架空の文1件で1回だけ測った値で、1.49秒)だった。Jevへの1回の問い合わせは0.4〜0.5秒ほどで、相槌と表情は同時に聞いている。同じ文をもう一度打つと、覚えた判断を使うので待ち時間はほぼ0になる。時間はこのMacの回線での往復込みで、スマホの回線では測っていない。
AIが自動で動かすブラウザで確かめたところ、PAGEは「財布を落としちゃった」に真剣の顔から困り顔へ移り、LEAFは「え、明日って祝日だったの?」に軽い驚きの顔で「えーっ!」と口を動かした。
作りながら合わせたところ
- アニメーションには「ふつう」の表情が無い。そこで、基本の顔(ほほえみ)を強さ0で表示している
- アニメーションに表情の強さの指定も無かったので、0〜1で強さを渡せるように足した
- 口は、相槌のかなから母音を割り当てて、1音0.13秒で開け閉めする
LEAFに相槌の声を作ってもらった
デモには声も付けた。声は、SNSを担当しているLEAFの作業場所で、音声合成のIrodori-TTSを使って作ってもらっている。
全部で24個の相槌×9つの表情×2人の432本を頼み、まず「そうなんですね」を9つの表情×2人で18本作った。表情の違いは、声の説明文に話し方の一文を足して指定していて、聞き分けられるかは作る前から分からなかった。
試しの18本は、自分で聞いて確かめ、「仮でOK」にした。LEAFは表情ごとに長さや高さが変わり、PAGEは高さの違いだけだったけど、落ち着いた性格ならこれでよい、と判断した。
432本は2026年10月12日にそろい、すべてデモに入れた。選ばれた相槌と最初の表情の組み合わせの声を鳴らし、口を音量に合わせて動かす。声はこの記事には載せていない。
うまくいった点と、うまくいかなかった点
うまくいったのは、Jevが送り手の気持ちをよく読んだことになる。言葉が似ていて気持ちが逆の組も、皮肉も外さなかった。推定した感情を相槌の選び方に渡すと、相槌も良くなった。1回の問い合わせは0.4〜0.5秒ほどで返ってくる。
うまくいかなかったのは、次の5点になる。
- PAGEの書棚で効いた2段構えは、候補が24個の相槌では効かなかった
- 性格をまとめて問いに入れると、表情が性格に引っぱられた。表情を選ぶ問いと、性格の効かせ方を分ける必要があった
- 「眠い」状態の効き目は小さかった
- 落ち着いた後の表情は、確率の差が小さすぎて安定しなかった。0.05の線もまだ確かめていない
- 返事の最初に出すための目安は1秒にしていたけど、デモの流れ全体では約1.5秒かかった。感情を推定してから相槌を選び、そのあと落ち着く表情を聞くので、問い合わせが3段に重なる
もう1つ、正解の付け方の難しさもあった。返す側の条件や「真剣」の顔のように、最初に作った表では外れでも、見方を変えれば自然な選び方がある。そこは数字だけで決めずに、自分の目で判断して表を直した。そのぶん、数字は甘くなっている。
こんな人に向いている
- キャラクターやチャットボットの返事に、相槌や表情を付けたい人
- 確率を返す判断AIを、検索以外の用途に使えるか知りたい人
- 「キャラらしさ」を、AIの判断にどう入れるか迷っている人
実際のチャットに使う場合は、相手が書いた文章がJevへ送られることになる。PAGEの書棚の記事にも書いたとおり、Jevは米国のサーバーで処理されるので、外へ送ってよい文章かどうかを先に考えたほうがいい。今回、架空のメッセージだけを使ったのはそのためになる。
今回は確認できなかったこと
- メッセージは架空の32件だけで、正解の表もAIの案を自分が確認して決めたもの。実際の会話では試していない
- 表情の正解の表は、結果を見たあとで「真剣」を足して広げている
- 落ち着いた後の表情を、0.05の線で選び直したときの結果
- デモの時間は、架空の文1件で1回だけ測った値。スマホの回線では測っていない
- 声で表情が聞き分けられるか。試しの18本は「仮でOK」だったけど、432本すべてを聞き比べたわけではない
- 言葉と表情と声を合わせたとき、相手から見て寄り添っているように感じるか
まとめ
| 項目 | 内容 |
|---|---|
| 結論 | 感情の推定と最初の相槌はJevで十分に選べた(感情30/32、相槌28/32)。表情は、性格を入れずに相手の気持ちだけで選び、性格は強さにだけ効かせる形に分けた |
| 効かなかったこと | 相槌の2段構え(24/32でJevだけの26/32より低い)、性格込みの表情選び(PAGEがほほえみ24/32)、「眠い」の状態 |
| 残った課題 | 落ち着いた後の表情は確率の差が0〜0.06で安定しない。0.05の線は未検証。数字の一部は、結果を見たあとで広げた正解の表によるもの |
| 確認日 | 2026-10-11〜10-12(Jev 1.13.0、EmbeddingGemma 2、手元のMac) |
同じことを試すときのポイント
- 正解は結果を見る前に決めておく。あとで広げる場合は、広げる前と後の数字を両方残す
- 候補が少ないなら、絞り込みの段を入れる前に、判断AIに全部見せた場合と比べる
- 送り手の気持ちを先に推定して、相槌を選ぶ問いに手がかりとして渡す
- キャラの性格は、言葉づかいと表情の強さに分けて効かせる。表情を選ぶ問いに性格を入れると、相手の気持ちより性格が前に出ることがある
- 確率の差がわずかな選び方は、いちばん高いものを選ぶだけにしない。変えるかどうかの線を引き、その線も試して確かめる
次に読むなら
今回、PAGEとLEAFが表情を変えるのに使ったのは、1枚の絵のまま瞬きや口パクをさせる仕組みになる。表情づけを自分のキャラで試すなら、作ったときにつまずいた点を先に読んでおくと進めやすい。
- 1枚絵キャラの瞬き・口パクを4人に広げたら、自動チェックは合格なのに目元と唇に違和感が残った話 — 同じ仕組みをキャラごとに合わせるときに、どこを自分の目で確かめればよいかが分かる
この記事の紹介動画
この記事の内容を、ブログの案内役のPAGEと、SNSを担当しているLEAFが動画で紹介している。
この記事は、筆者が運営しているブログの案内役キャラクターで、チャットの相槌と表情の選び方を試した作業記録(2026年10月11日〜12日)を基に、独自調整したAIが下書きを作成し、筆者が事実確認・編集を行った上で公開しています。デモで使った声は、音声合成(Irodori-TTS)で作成しています。

