Amazon Web Services ブログ

Amazon Connect と Amazon Lex のインテグレーション

私のお気に入りのサービス、Amazon ConnectAmazon Lex に機能強化が施されました。セルフサービスの Amazon Connect はクラウドベースのサポートセンターで、ビジネスがより良いカスタマーサービスを低コストで簡単に提供できるようにしています。Amazon Lex は、音声とテキストを使用して会話型インターフェイスを構築するためのサービスです。この 2 つのサービスを統合することで、Lex の自動音声認識 (ASR) と自然言語理解 (NLU) の性能を利用し、優れたセルフサービスエクスペリエンスを顧客に提供することができます。この統合を有効にするため、Lex チームが 8kHz の音声入力サポートを追加しました。これについては後ほど詳しくご説明します。この機能のメリットは?顧客によるリクエストの大半をボットが解決できれば、電話での待ち時間を削減し、ユーザーは時間を無駄にすることなく製品を使用することができます。

Connect または Amazon Lex の背景情報については、Jeff が過去に公開したブログ [1][2] をぜひお読みください。LEGO ファンの方は特にお楽しみいただけると思います。


では、この新しい統合の使用方法を見ていきましょう。Twitch チャンネルで構築したアプリケーションを使用して、このブログ用に内容を変更します。アプリケーションのコアでユーザーが Amazon Connect の番号を呼び出します。この番号はユーザーを Lex ボットに繋げ、AWS Lambda 関数を開始します。これは Lex のインテントをベースにしています。アプリケーションでできることは?

最良のコードエディタは何だと思いますか? 個人的には vim が好きです。コード編集を行うには最高のエディタです。私の同僚の Jeff は emacs を選んでいます。 これは素晴らしいオペレーティングシステム エディタです。もし、生まれつき指の関節が普通以上にあればの話しですが。そして同僚の Tara が選んだのは Visual Studio です。これも圧倒的に優れたエディタです。ということで、もっとも優れたエディタがどれか議論するのではなく、皆さんに投票してもらうのが良いのではないかと思います。バタフライに投票することもできますので、ご安心を。

投票に参加してみませんか?+1 614-569-4019 に電話し、あなたが最高のエディタだと思うものをお知らせください!皆さんの電話番号を保存したり、音声を録音することはありませんので、何回も vim に投票して下さって構いません。ライブで投票結果を見てみますか?  http://best-editor-ever.s3-website-us-east-1.amazonaws.com/.

さて、この仕掛けをどうやって構築したと思いますか?このブログでは各コンポーネントについて説明しますが、すでに LexLambda に触れているので、主に Amazon Connect コンポーネントについて焦点を当てることにします。ここでは、すでに皆さんが Connect インスタンスを実行中であることを前提とします。

Amazon Lex

まず Lex について説明します。まず、 VoteEditor という名前のボットを 2 つのインテントを使用して作成します。 VoteEditor に単一のスロットがあり editorConnectToAgent にはスロットがありません。editor スロットに様々なコードエディタ名を入れます (emacs は除去しておきましょうか)。

AWS Lambda

Lambda 関数も実にシンプルです。まず、Amazon DynamoDB テーブルを作成して投票結果を保存します。次に Lex (build_response) に応答するヘルパーメソッドを作成します – これでメッセージを Lex の分かりやすいレスポンス形式でラップできるようになります。後はフローロジックを特定するだけです。


def lambda_handler(event, context):
    if 'ConnectToAgent' == event['currentIntent']['name']:
        return build_response("Ok, connecting you to an agent.")
    elif 'VoteEditor' == event['currentIntent']['name']:
        editor = event['currentIntent']['slots']['editor']
        resp = ddb.update_item(
            Key={"name": editor.lower()},
            UpdateExpression="SET votes = :incr + if_not_exists(votes, :default)",
            ExpressionAttributeValues={":incr": 1, ":default": 0},
            ReturnValues="ALL_NEW"
        )
        msg = "Awesome, now {} has {} votes!".format(
            resp['Attributes']['name'],
            resp['Attributes']['votes'])
        return build_response(msg)

コードを理解できているか確認します。つまり、まだ存在しないエディタに票が入ったら、エディタに 1 票を追加するようにします。そうでなければ、そのエディタの票数を「1」増やします。エージェントのリクエストを受けたら、フローを終了してフレンドリーなメッセージを返します。どうです、簡単でしょう。後は投票結果を見るため、Lex ボットに Lambda 関数を使うように指示するだけです。次に進む前に、Lex コンソールですべて問題なく作用しているか確認することができます。

Amazon Connect

問い合わせフローで Lex ボットを使用する前に、Amazon Connect インスタンスにアクセスできるか確認します。そうするには、Amazon Connect サービスコンソールに行き、インスタンスを選択してから「問い合わせフロー」にアクセスします。ボットの追加先となる Lex のセクションが表示されます。

Amazon Connect のインスタンスが Lex ボットを呼び出せることが分かったところで、Lex ボットを含む新しい問い合わせフローを作成します。[Interact] カテゴリから [Get customer input] ウィジェットを介してフローにボットを追加します。

ウィジェットを起動すると、電話の数値キーから入力を許可するための [DTMF] タブ、または音声入力とその情報を Lex サービスに渡す [Amazon Lex] タブが表示されます。[Lex] タブを使用していくつかの事項を設定します。

様々なオプションがありますが、要するに使用したいボットを追加したり (ボットのバージョンも同様)、ボットで使用したいインテントや、ボットを紹介する小さなプロンプトを追加します (場合によっては顧客にコメントを入力するように促すなど)。

最終的にコンタクトフローは次のようになります。

実際には Lex ボットを介して多数のトランザクションをユーザーが実行できるようにする場合もあるでしょう。次に、エラーまたは ConnectToAgent のインテントで、ユーザーが実際のスタッフと対話ができるキューにユーザーを追加します。ユーザーの情報を収集し保存して、エージェントが利用できるように多機能のインターフェイスを追加します。これにより、エージェントは必要な情報をすべて把握した上でユーザーとの会話をすぐに始めることができます。

では次に Lex がサポートする 8kHz オーディオサポートの使用によるメリットについて説明します。Lex は、もともと電話から 8 kHz 入力以上の高音質でサンプルされた音声入力のみサポートしていました。現代のデジタル通信アプリケーションは、通常最低でも 16 kHz でサンプルされたオーディオ信号を使用しています。この忠実度が高いレコーディングでは「ess」(/s/) や「eff」(/f/) といった音の違いを聞き分けることができます。少なくても、そのようにオーディオ専門家は説明しています。それに比べ、電話は大幅に質の低いレコーディングを使用しています。人間と人間の耳というのは、低質の録音でも音声が何を言っているのか前後関係から把握するのに長けています (証拠は「NASA アポロのレコーディング (NASA apollo recordings)」をご覧ください)。ですから、電話のデジタルシステムは大方デフォルトで 8kHz サンプリングをセットアップに使用しています。帯域幅と忠実度において具合の良いトレードオフだと思います。電話の声がいつもと違うように聞こえるのは、そのためです。サンプリングレートの基本的な問題に加えて、携帯電話によるコールデータでは通話中に聞こえないという問題がよくあります (もしもし、聞こえますか? といった具合に)。多種多様の何千種類ものデバイスと何百社というメーカー、そして数えきれないほどの様々なソフトウェア実装があります。そこで、認識にまつわる問題はどうやって解決したらいいと思いますか?

Lex チームは、この問題への対処方法は音声入力に使用する一連のモデルを拡張し、8kHz モデルを含むことだと判断しました。8 kHz のテレフォニーオーディオサンプリングレートのサポートにより、音声認識の精度やサポートセンターとのやり取りの忠実度を高めることができます。これは、数多くのお客様が Amazon Connect をもっと利用できるようにと対応しているチームの素晴らしい努力の結果と言えるでしょう。

最後になりますが、Amazon Connect は外部開発者として使用できる PostContent エンドポイントと同じものを使うため、Amazon Connect を使用していないユーザーでも Lex で 8kHz を使用することが可能です。

以上となりますが、お楽しみいただけましたか? 詳細はいつも通り「ドキュメント (docs)」や「API リファレンス (API Reference)」をご参照ください。

Randall