Logo
Logo
CTRLK

共有コンポーネント

音声認識を構成する

NTT CPaaS Speech Recognitionは、Interactive Voice Response(IVR (自動音声応答))を使用して通信しているエンドユーザーの音声をキャプチャします。NTT CPaaSプラットフォームは、音声入力を保存し、事前定義された単語やフレーズと照合することができます。次に、事前設定に応じて、さらに IVR (自動音声応答) アクションを実行します。これにより、エンドユーザーは、キーパッドの数字をタップするだけで済むことに限定されないことを考えると、より柔軟になります。

AVAILABILITY

音声認識は API 経由でのみ使用できます。NTT CPaaS Web インターフェイスでは利用できません。

IVR (自動音声応答) シナリオを作成してエンドユーザーの音声入力をキャプチャする場合は (IVR (自動音声応答) アクションを使用)、必ず次の手順に従ってください。

  1. [キャプチャー]アクションを使って音声認識をセットアップする手順の中で最も重要なステップの1つは、エンドユーザーが話すと予想される言語を選択することです。
  2. その後、一致させる必要のあるいくつかのキー フレーズと、timeoutsilence timeout などの追加の使用可能なパラメーターを設定できます。
  3. また、キーフレーズを一致させるのではなく、エンドユーザーが話すあらゆることをキャプチャーし、追加のIVRアクションを使ってその入力をテキストとしてお使いのプラットフォームにAPI経由で送信することもできます。

サポートされている言語の一覧については、サポートされている音声言語を確認するを参照してください。

IVR (自動音声応答) シナリオを事前設定し、音声認識を使用する方法の詳細については、 API ドキュメントを確認してください。

ベストプラクティス

ここでは、音声認識をより効果的に活用するためのヒントとコツをいくつか紹介します。

ヒント 1 - ユースケースを知る

音声認識を効率的に使用するには、いくつかの要因を考慮する必要があります:

  1. 常に特定のユースケースについて考え、エンドユーザーのニーズに合わせて調整するよう努力してください。
  2. IVRでサポートされている言語の最も適したバリエーションを使用するようにします。
  3. 電話と通話の品質に違いがある可能性があると想定します。到達が困難な特定の地域のエンドユーザーにリーチする方法について計画を立てます。
  4. 周囲の騒音が予想されます。エンドユーザーが通りを歩いているとき、混雑した場所、またはラッシュアワーに携帯電話を使用している可能性があることを想定してください。
  5. 短くて簡潔な質問を準備します。どのような返信が来ることを期待していますか?複雑な用語は使用しないでください。エンドユーザーが理解できるように、簡単な言葉を使用します。
  6. 音声認識の持続時間にご注意ください。5秒、10秒、または20秒以内の返信を期待するのは妥当でしょうか?

ヒント 2 - timeoutmaxSilence を慎重に調整する

最も重要なことの1つは、エンドユーザーが質問に返信するのに必要な時間を考慮することです。

たとえば、次のユースケースを考えてみましょう。

json
1 
2 {
3 "capture": "myVar",
4 "timeout": 10,
5 "speechOptions": {
6 "language": "en-US",
7 "keyPhrases": ["info", "update"]
8 }
9 }

この例では、IVRオプションが10秒に設定されています。この10秒間に次のフレーズ ("info" または "update") をキャプチャーする必要があります。次に、テストと調整を行います。10秒で十分か、それとも長すぎるかを確認します。これは、単語の長さ、エンドユーザーの音声パターン、反応時間などの複数の要因によって変わってきます。

もちろん、エンドユーザーが次のアクションに進むのに長時間待たなければならなかったり、キーワードを言うのに十分な時間がないことに腹を立てたりすることは望ましくありません。

maxSilence (以下を参照) を使用すると、どうなるでしょう?

json
1 
2 {
3 "capture": "myVar",
4 "timeout": 10,
5 "speechOptions": {
6 "language": "en-US",
7 "maxSilence": 3,
8 "keyPhrases": ["info", "update"]
9 }
10 }

この例では、エンドユーザーに10秒、そして3秒のmaxSilenceオプションが設定されています。これは何を意味するかというと、IVRが3秒間の無音を検出するとキャプチャーを停止する、ということです。

但し、エンドユーザーが1秒以内にキーワードを言った場合、IVRは次のアクションに進む前に2秒待つ必要があります。

エンドユーザーが考えるのをやめて、3秒以上一時停止した場合はどうなりますか?この場合、IVR (自動音声応答)は入力をキャプチャしません。

明らかに、すべての人に有効な一般的なアドバイスを提供することは難しいですが、提案は次のとおりです。

  • 可能であれば、簡単な質問をし、簡潔でシンプルな回答をユーザーに提案します。
  • 様々なtimeoutmaxSilenceのバリエーションを試し、エンドユーザーに提供する前に音声キャプチャーの動作テストをしておきます。

ヒント 3 - 簡単なキー フレーズを使用する

keyPhrases は、キャプチャーされた音声と指定されたテキストを照合し、その照合結果に基づいてIVRシナリオを分岐させます。

json
1 
2 {
3 "capture": "myVar",
4 "timeout": 5,
5 "speechOptions": {
6 "language": "en-US",
7 "maxSilence": 3,
8 "keyPhrases": ["yes, I want more info", "no, I do not want more info", "I am not sure"]
9 }
10 },
11 {
12 "if": "${myVar == 'yes, I want more info'}",
13 "then": [
14 {
15 "say": "Ok. I will send you more details"
16 }
17 ],
18 "else": []
19 }

ここで注意が必要です。エンドユーザーが常に正確なキーフレーズを言うことを期待することはできません。

エンド ユーザーが、定義したキーフレーズ (「はい、詳細情報が必要です」) ではなく、「はい、詳細情報を提供します」と言ったとします。キーフレーズが一致しないため、IF 式はトリガーされません。

キーフレーズが長ければ長いほど、エンドユーザーがその特定のキーワードを正しく一致させる確率は低くなります。

json
1 
2 {
3 "capture": "myVar",
4 "timeout": 5,
5 "speechOptions": {
6 "language": "en-US",
7 "maxSilence": 3,
8 "keyPhrases": ["more info", "exit", "maybe"]
9 }
10 },
11 {
12 "if": "${myVar == 'more info'}",
13 "then": [
14 {
15 "say": "Ok. I will send you more details"
16 }
17 ],
18 "else": []
19 }

上記の例にいくつかの調整が加えられています。これで、キーフレーズが一致する確率が高くなりました。

キーフレーズは、エンドユーザーが話す内容を制限しません。エンドユーザーは、単なるキーフレーズよりも多くのことを言うことができます。但し、キーフレーズは、IVRシナリオを正しく照合して分岐するためのキーです。 例えば、エンドユーザーが 「はい、より詳細な情報が欲しい」または「はい、より詳細な情報をください」と言ったとします。どちらの場合も、myVar は より詳細な情報であるため、キーフレーズが一致します。

完全にキャプチャされた音声に興味がある場合は、myVar_Full変数を使用してみてください(「myVar」は単なる例であり、好きなように名前を付けることができます)。

最後に、両方の例をさらに短いフレーズに縮めることができます:

json
1 
2 {
3 "capture": "myVar",
4 "timeout": 5,
5 "speechOptions": {
6 "language": "en-US",
7 "maxSilence": 3,
8 "keyPhrases": ["yes", "no", "maybe"]
9 }
10 },
11 {
12 "if": "${myVar == 'yes'}",
13 "then": [
14 {
15 "say": "Ok. I will send you more details"
16 }
17 ],
18 "else": []
19 }

キーフレーズの照合は常に、完全にキャプチャーされた音声テキストと指定されたキーフレーズとを比較する形で行われます。

このヒントの最後の例:

json
1 
2 {
3 "say": "Do you want discount?"
4 },
5 {
6 "capture": "myVar",
7 "timeout": 5,
8 "speechOptions": {
9 "language": "en-US",
10 "maxSilence": 3,
11 "keyPhrases": ["discount"]
12 }
13 },
14 {
15 "if": "${myVar == 'discount'}",
16 "then": [
17 {
18 "say": "Ok. I will send you more details"
19 }
20 ],
21 "else": []
22 }

キーフレーズに特定の単語をどのように選択するかに注意してください。キーフレーズを「割引」に設定したとします。

あるエンドユーザーが「いいえ、割引は要しません」と言い、別のエンドユーザーが「はい、割引が欲しい」と言います。問題がわかりますか?

どちらの場合も、キーフレーズが一致し、両方のエンドユーザーが割引に関する詳細を受け取ります。混乱を防ぐために、常に短く、明確で、シンプルなキーフレーズを使用し、考えられるすべてのユースケースについて考えてください。

ヒント4 - 音声信号(ビープ音)後にキャプチャが開始される

エンドユーザーに、音信号 (ビープ音) を聞いた後に話し始める必要があることを知らせます。

json
1 
2 {
3 "say": "If you want more info, say: info. If you want to reach our agent, say: agent"
4 },
5 {
6 "capture": "myVar",
7 "timeout": 5,
8 "speechOptions": {
9 "language": "en-US",
10 "maxSilence": 3,
11 "keyPhrases": ["info", "agent"]
12 }
13 },
14 {
15 "if": "${myVar == 'info'}",
16 "then": [
17 {
18 "say": "Ok. I will send you more details"
19 }
20 ],
21 "else": []
22 }

最初のオーディオメッセージが完全に再生し終わる前にエンドユーザーが「info」と発声した場合、音声はキャプチャーされません。このような状況が発生する場合は、エンドユーザーに対し、音信号が鳴り終わってから話し始めるようお伝えください。

json
1 
2 {
3 "say": "If you want more info, after the beep signal say: info. If you want to reach our agent, after the beep signal say: agent"
4 },
5 {
6 "capture": "myVar",
7 "timeout": 5,
8 "speechOptions": {
9 "language": "en-US",
10 "maxSilence": 3,
11 "keyPhrases": ["info", "agent"]
12 }
13 },
14 {
15 "if": "${myVar == 'info'}",
16 "then": [
17 {
18 "say": "Ok. I will send you more details"
19 }
20 ],
21 "else": []
22 }

ヒント 5 - DTMF フェールオーバーの提供

たとえば、エンド ユーザーがアクセントが重い場合、発話困難、信号強度が低い場合、またはエコーがある場合など、音声入力のキャプチャが難しい場合があります。このような場合は、フェールオーバー オプションとして DTMF を使用します。

これは即ち、音声入力の形式で、または電話のキーパッドで事前定義された数字を押すことで応答できることを意味します。

json
1 
2 {
3 "say": "Say discount or press 1 to get discount. Say exit or press 0 to exit."
4 },
5 {
6 "capture": "myVar",
7 "timeout": 5,
8 "speechOptions": {
9 "language": "en-US",
10 "model": "DEFAULT",
11 "keyPhrases": ["discount", "exit"]
12 },
13 "dtmfOptions": {
14 "maxInputLength": 1
15 }
16 },
17 {
18 "if": "${myVar == 'discount' || myVar == '1'}",
19 "then": [
20 {
21 "say": "You will get discount"
22 }
23 ],
24 "else": [
25 {
26 "say": "Goodbye"
27 }
28 ]
29 }

この例では、エンドユーザーが言葉を発する代わりに 1 または 0 をタップできることを示しています。

DTMF フェールオーバーがある場合は、音声認識よりも優先されます。たとえば、エンドユーザーが何かを言って 1 をタップすると、音声の代わりにmyVarが録音されます。

ただし、エンドユーザーがキーフレーズとして「割引」と表示され、キーパッドで何もタップしない場合は、通常どおりmyVarmyVar_Fullがキャプチャされます。

ヒント 6 - DTMF のキャプチャに maxInputLength を使用する

電話機のキーパッドの数字を押してDTMFフェールオーバーを使用する場合、IVRキャプチャーを停止するタイミングを決定する必要があります。

この点を示すために少し変更された前の例を再検討してください。

json
1 
2 {
3 "capture": "myVar",
4 "timeout": 5,
5 "speechOptions": {
6 "language": "en-US",
7 "model": "DEFAULT",
8 "keyPhrases": ["discount", "exit"]
9 },
10 "dtmfOptions": {}
11 }

maxInputLength がないため、IVR (自動音声応答) は何桁押されるかを知らないため、'タイムアウト'の有効期限が切れるのを待ちます。

この例では、IVRは5秒間待機して、押されたすべての数字をキャプチャーします。maxInputLength を使用すれば、IVRは指定された桁数のキャプチャーを終え次第、キャプチャーを停止してシナリオを続行できるようになります。

maxInputLength が 1 の場合、IVRは最初の桁が押されるとすぐにシナリオを続行できます。なお、この場合でもtimeout は尊重されますので、エンドユーザーには5秒以内に何かを言ったり数字を押したりする時間が与えられます。

json
1 
2 {
3 "capture": "myVar",
4 "timeout": 5,
5 "speechOptions": {
6 "language": "en-US",
7 "model": "DEFAULT",
8 "keyPhrases": ["discount", "exit"]
9 },
10 "dtmfOptions": {
11 "maxInputLength": 1
12 }
13 }