kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

Alexaの発話がより感情豊か・自然になるSSMLタグ「amazon:domain」「amazon:emotional」が日本語に対応

f:id:kun432:20201125233345p:plain

久々にAlexa公式ブログに更新があったので早速やってみました。

これまで一部のロケールでしか使えなかったSSMLタグ「amazon:domain」「amazon:emotional」が日本語でも対応したようです。これにより、アレクサをより感情的に発話させたり、より自然に発話させることが可能になります。それぞれ実際にやってみましょう。

公式の日本語ドキュメントはまだ更新されていません。英語ドキュメントの方は更新されていますので、詳しくはそちらをご覧ください。

Speech Synthesis Markup Language (SSML) Reference | Alexa Skills Kit

amazon:domain

公式の日本語ドキュメントから説明だけ抜粋します。

amazon:domain

音声に異なるスタイルを適用します。スタイルでは、読み上げ音声でイントネーション、抑揚、一時停止などのさまざまなバリエーションを使用して、音声をコンテンツの種類に合わせます。例えば、newsスタイルでは、Alexaの音声がテレビやラジオのニュースのような話し方になり、主にニュース記事やその他のニュースベースのコンテンツを聞くユーザー向けに提供されています。

音声合成マークアップ言語(SSML)のリファレンス | Alexa Skills Kit

<amazon:domain name="スタイル">こんにちは。</amazon:domain>

という感じで使います。name=で以下の4種類のスタイルから選択します。ただし、現時点で日本語で対応しているのは現時点で"conversational"のみです。

  • conversational 日本語対応!
    • 友人や家族に話すような、よりカジュアルな会話的に発話します。
  • news ※日本語非対応
    • テレビやラジオのニュースキャスターのようなスタイルで発話します。
  • music ※日本語非対応
    • 音楽ラジオのDJようなスタイルで発話します。
  • long-form ※日本語非対応
    • ポッドキャストや本のような、長いコンテンツの読み上げに適したスタイルで発話します。

では違いを見てみましょう。Alexa開発者コンソールでテストシミュレータを開き、「音声と語調」をクリックします。

f:id:kun432:20201125235528p:plain

下の入力欄に以下に用意したテキストをコピペして全部上書きします。

f:id:kun432:20201126000946p:plain

<speak>
  最初は普通に話します。<break time="2s" />
  こんにちは、私の名前はアレクサです。今日はいい天気ですね。たくさん話しかけてくださいね。<break time="2s" />  
  次はカジュアルに話します。  <break time="2s" />  
  <amazon:domain name="conversational">
    こんにちは、私の名前はアレクサです。今日はいい天気ですね。たくさん話しかけてくださいね。
  </amazon:domain>
  <break time="2s" />
  違いがわかりましたか?  
</speak>

テキストをコピペしたら、言語を「日本語(日本)」にして、「再生」をクリックします。

f:id:kun432:20201126000624p:plain

実際の発話はこんな感じになります。

2回めのほうがとても自然な感じでいいですね!

amazon:emotional

公式の日本語ドキュメントから説明だけ抜粋します。

amazon:emotion

amazon:emotionタグは、Alexaが話すときに感情を表します。これは、ストーリー、ゲーム、ニュース、その他の物語体のコンテンツに役立ちます。たとえば、ゲームでは、正解時に「興奮」の感情を使用し、誤答時には「失望」の感情を使用できます。

音声合成マークアップ言語(SSML)のリファレンス | Alexa Skills Kit

<amazon:emotion name="感情" intensity="感情の強さ">こんにちは。</amazon:emotion>

name=で感情を指定し、intensity=でその強さを表します。nameで指定できるのは以下の2つで、こちらは両方とも日本語対応しています!

  • excited
    • 興奮している感じで話します。
  • disappointed
    • 失望している感じで話します。

intensityは"high"/"medium"/"low"で指定し、"high"のほうがより強く表現されます。

では、以下のサンプルで試してみてください。より違いがわかりやすいようにintensityは"high"にしています。

<speak>
  最初は普通に話します。<break time="2s" />
  本日、福岡ペイペイドームで行われた、プロ野球、日本シリーズ第四戦は、4対1で福岡ソフトバンクホークスが東京読売ジャイアンツに勝利し、4年連続11度目の日本シリーズ制覇となりました。
  <break time="2s" />
  次はかなり興奮して話します。<break time="2s" />
  <amazon:emotion name="excited" intensity="high">
    本日、福岡ペイペイドームで行われた、プロ野球、日本シリーズ第四戦は、4対1で福岡ソフトバンクホークスが東京読売ジャイアンツに勝利し、4年連続11度目の日本シリーズ制覇となりました。
  </amazon:emotion>
  <break time="2s" />
  最後はかなりがっかりして話します。<break time="2s" />
  <amazon:emotion name="disappointed" intensity="high">
    本日、福岡ペイペイドームで行われた、プロ野球、日本シリーズ第四戦は、4対1で福岡ソフトバンクホークスが東京読売ジャイアンツに勝利し、4年連続11度目の日本シリーズ制覇となりました。
  </amazon:emotion>
</speak>

※サンプルに他意はないですのであしからず。我がカープなんてもう・・・

実際の発話はこんな感じです。

かなり変わりますね!ちょっと違いすぎて別人の声ぐらいに聞こえるぐらいなので、intensityはうまく調整したほうがいいかもしれませんね。

公式ブログの方にもサンプルがあるのでそちらも聞いてみてください。

まとめ

いかがでしょうか?SSMLだけで非常にかんたんに自然かつ感情豊かな表現ができるのでとても便利ですね!amazon:domainはコンテンツ全体の内容に合わせて、amazon:emotionalはコンテンツの結果(例えばクイズの場合の正解と不正解)に応じて、というような使い分けができるのではないかと思います。

もちろんVoiceflowでも使えますよ。VoiceflowのSSMLエディタでは対応していないので、Speak Block内に直接入力すればOKです!

f:id:kun432:20201126212141p:plain

ぜひぜひご活用ください!