【Amazon Polly】SSMLを活用すればスタンダードでもニューラルより自然な発音が作成できるのか、という試み

はじめに


Amazon Polly
には下記4つの音声エンジンタイプが存在しています。

  • 生成
    • 生成AIが自然で良い感じの音声を自動で作成してくれるタイプです。現在(2025年5月時点)はバージニアリージョンのみ対応しています。
  • ロングフォーム
    • プレゼンやニュースの読み上げ等、長時間のコンテンツに適したタイプです。こちらも現在はバージニアリージョンのみ対応です。
  • ニューラル
    • より自然な音声を生成できます。
  • スタンダード
    • 自然な音声を生成できます。標準かつ一番安価なタイプです。

Amazon Polly は特別なセットアップ等が必要なく、コンソール画面からテキストを入力することでいつでも使用することができます。

AmazonPollyのコンソール画面

読み上げたいテキストのみでもちろん使用できますが、別途 SSML タグを追加することで、読み上げに関する細かい指示を記載することができます。

SSML とは

正式名称を 音声合成マークアップ言語 といい、とても簡単にまとめると、音声読み上げ系の AI に発話や発声の細かい指示をするための言語です。

2025年5月現在 Amazon Polly では下記の SSML がサポートされています。
公式ドキュメントから引用させていただきました。

アクション SSML タグ ニューラル音声の利用可用性 ロングフォーム音声の利用可能性 生成音声の利用可能性
一時停止を追加する <break> 完全に利用可能 完全に利用可能 完全に利用可能
単語を強調する <emphasis> 利用不可 利用不可 利用不可
特定の単語に別の言語を指定する <lang> 完全に利用可能 完全に利用可能 完全に利用可能
テキストにカスタムタグを配置する <mark> 完全に利用可能 完全に利用可能 完全に利用可能
段落間に一時停止を追加する <p> 完全に利用可能 完全に利用可能 完全に利用可能
発音記号を使用する <phoneme> 完全に利用可能 完全に利用可能 利用不可
音量、話す速度、ピッチを制御する <prosody> 部分的に利用可能 部分的に利用可能 利用不可
合成音声の最大時間を設定する <prosody amazon:max-duration> 利用不可 利用不可 利用不可
文章間に一時停止を追加する <s> 完全に利用可能 完全に利用可能 完全に利用可能
特殊なタイプの単語の発声方法を制御する <say-as> 部分的に利用可能 完全に利用可能 完全に利用可能
SSML 拡張テキストを特定する <speak> 完全に利用可能 完全に利用可能 完全に利用可能
頭字語や略語を発音する <sub> 完全に利用可能 完全に利用可能 完全に利用可能
品詞を指定して発音を向上させる <w> 完全に利用可能 完全に利用可能 完全に利用可能
呼吸音を追加する <amazon:auto-breaths> 利用不可 利用不可 利用不可
ニュースキャスターの話し方 <amazon:domain name=news> ニューラル音声のみを選択 利用不可 利用不可
ダイナミックレンジ圧縮を追加する <amazon:effect name="drc"> 完全に利用可能 完全に利用可能 利用不可
柔らかく発声する <amazon:effect phonation="soft"> 利用不可 利用不可 利用不可
声質を制御する <amazon:effect vocal-tract-length> 利用不可 利用不可 利用不可
ウィスパー <amazon:effect name="whispered"> 利用不可 利用不可 利用不可

上記の表で「ニューラル」「ロングフォーム」「生成音声」すべてが利用不可のタグは「スタンダード」を選択した場合に利用することができます。

こちらの表を眺めていて「ニューラルよりスタンダードの方が対応しているSSMLが多いんだから、SSMLを活用して頑張ればニューラルの発声を上回れるのではないか…?」と思いついたのが、今回の記事の発端になります。

実際に SSML と格闘し、見事に惨敗した記録を下に書いていきますので、目を通していただけますと幸いです。

やってみよう

今回 Amazon Polly に読んでもらう文章は下記です。

なるべく感情が乗りそうな文章を作成しました。
まずは何も調整していない状態で「スタンダード」と「ニューラル」を聞き比べます。

スタンダード

ニューラル



いかがでしょうか。
ただテキストを入力しただけでは「ニューラル」の方が自然に聞こえますね。
では、ここから「スタンダード」に SSML タグを仕込みまして、どれだけ自然な音声に近づけることができるのかを試していきたいと思います。

できたもの

いきなり成果物ですが、以下の通りになりました。

音声がこちらです。



いかがでしょうか。
特定の単語を柔らかくしてみたり、すこし音量を変えてみたりと試行錯誤を繰り返し、この完成度からは想像ができないくらいの時間がかかっていますが、やはり「ニューラル」の方が自然に聞こえるかと思います。(正直全部同じに聞こえるかもしれませんが…

本当は「にのまえ」という珍しい苗字を読むためにはSSMLタグで指示をしてあげないといけないんだ、というお話を展開したかったのですが Amazon Polly が優秀すぎて「ニューラル」「スタンダード」どちらでも「一(にのまえ)」と入力するだけできちんと読んでくれました。AIってすごいですね…。

以上勢いで SSML を触ってみた結果、息継ぎを追加したい、声質をちょっとだけ柔らかくしたい、とにかくコスト安い方がよい等の要件がない限りは「ニュートラル」を選択しておくのが無難かなと思いました。

まとめ

まとめると、苦労して SSML を駆使しなくてもさらっと自然な発話を作成してくれるニュートラルはすごいな、というお話になりました。
生成音声が他リージョン&日本語に対応したら、その時はまた改めて検証記事を作成したいと思います。

最後まで目を通していただきありがとうございました。

おまけ

「AIにはAIをぶつけるんだよ!」ということで、Amazon Bedrock(Claude3 Haiku v1使用)に私が苦労をした SSML を記載してもらいました。使用したプロンプトです。

結果が下記です。

実際、こちらを Amazon Polly に読み込ませると自然かつ感情の乗った発声になっているのでしょうか。

結果はぜひ、ご自身の環境下にある Amazon Polly でお試しください!
そしてこれを機にぜひ Amazon Polly に触ってみてください。

投稿者プロフィール

omi
AWS の諸々について、初学者目線から書いていけたらいいなと思っています!