Amazon Web Services ブログ

Amazon Transcribe と Amazon Athena を用いた複数話者の音声データ解析の自動化

この記事は “Automating the analysis of multi-speaker audio files using Amazon Transcribe and Amazon Athena” を翻訳したものです。

カスタマーサービスを向上させるために、多くの企業が顧客とコールセンター担当者の電話による会話を録音しています。通話録音は通常、音声ファイルとして保存され、顧客の感情分析、製品やサービスの問題、担当者の効果などの洞察を明らかにするために処理されます。これらの音声ファイルの正確な分析を行うには、誰がいつ何を話したかを明確に特定する必要があります。

しかしながら、平均的なカスタマーサービス担当者は 1 日に 30 ~ 50 件の電話を処理するため、膨大な量の音声ファイルを迅速に分析することは困難です。コールセンターの品質管理を向上させるためには、音声ファイルを大量に書き起こすための堅牢なシステムが必要です。同様に、法的な調査においても、勝訴するための潜在的な証拠や洞察を求めて、事件に関連する音声ファイルを効率的に分析する必要がある場合が多いです。また、ヘルスケア分野では、患者と医療従事者のオンラインでのやり取りを書き起こし、分析するためのこのソリューションへのニーズが高まっています。

Amazon Transcribe は、音声を簡単にテキストに変換できる自動音声認識 (ASR) サービスです。このサービスの重要な機能のひとつに speaker identification というものがあり、複数の話者の音声ファイルを書き起こす際に、各話者にラベルを付けるために使用することができます。Amazon Transcribe は、オーディオクリップ内の 2 ~ 10 人の話者を識別するように指定できます。最良の結果を得るには、音声入力に適切な数のスピーカーを定義してください。

マルチチャンネルの音声を記録することが多いコンタクトセンターでは、channel identification と呼ばれる機能を使用することも効果的です。この機能は、1 つのオーディオファイルから各チャンネルを分離し、各トラックを同時に書き起こすことができます。通常、エージェントと顧客は別々のチャンネルで録音され、1 つの音声ファイルに統合されます。Amazon Connect などのコンタクトセンター・アプリケーションでは、エージェントと顧客の会話を別々のチャンネルで録音します(例えば、2 チャンネルのステレオ録音の場合、エージェントの声は左チャンネル、顧客の声は右チャンネルで録音されます)。コンタクトセンターは 1 つの音声ファイルを Amazon Transcribe に送信します。Amazon Transcribe は 2 つのチャンネルを識別し、チャンネルラベルを含むマージされたトランスクリプトを作成します。

この記事では、Amazon Transcribe とビッグデータ用のサーバーレスクエリサービスである Amazon Athena を使用して、複数の話者の音声ファイルを分析するソリューションについて説明します。この 2 つのサービスを組み合わせることで、音声ファイルを可読性の高いテキストに加工し、標準クエリ言語 (SQL) を使用してデータを分析する、サーバーレスで利用した分だけ課金される従量課金なソリューションを簡単にセットアップすることができます。

ソリューション概要

次の図は、ソリューションのアーキテクチャ図になります。

本ソリューションは、以下のステップを含みます:

  1. Amazon Simple Storage Service (Amazon S3) のバケット AudioRawBucket に音声ファイルをアップロードします。
  2. Amazon S3 の PUT イベントは、AWS Lambda 関数 (LambdaFunction1) をトリガーします。
  3. LambdaFunction1 関数は、アップロードされたオーディオファイルに対して非同期の Amazon Transcribe API コールを呼び出します。
  4. LambdaFunction1 関数は、Amazon Simple Queue Service (Amazon SQS) にトランスクリプションジョブの情報を含むメッセージを書き込むこともできます。
  5. トランスクリプションジョブが実行され、ターゲット S3 バケットである AudioPrcsdBucket に JSON 形式の出力が書き込まれます。
  6. Amazon CloudWatch Events ルールにより、 2 分間隔で関数 (LambdaFunction2) が実行されるようトリガーされます。
  7. LambdaFunction2 関数は、トランスクリプションジョブの SQS キューを読み込み、ジョブの完了を確認し、JSON ファイルを CSV に変換し、音声テキストデータを Athena テーブルにロードします。
  8. 処理された音声ファイルの文字起こしは、AudioPrcsdBucket からアクセスすることができます。
  9. Amazon Athena でデータのクエリを行います。

事前準備

開始するには、以下が必要です:

  • AWS へアクセスできる有効な AWS アカウント
  • AWS アカウントの us-east-1 リージョンの Athena データベース “default”
  • このブログでは、マルチスピーカーの音声ファイルに medical-diarization.wav を使用しています

最良の結果を得るため、以下を推奨しています:

  • WAV や FLAC などのロスレス形式を使用し、PCM 16 ビットでエンコードする
  • low-fidelity オーディオでは 8000 Hz、high-fidelity オーディオでは 16000 Hz のサンプルレートを使用する

ソリューションのデプロイ

以下で提供する AWS CloudFormation テンプレートを使用して、ソリューションのすべてのリソースを起動および構成することができます。

  1. Launch Stack をクリックします:

これにより、AWS CloudFormation コンソールの Create stack ウィザードに移動します。テンプレートは、デフォルトで us-east-1 (バージニア北部)リージョンで起動されます。

この記事で使用している CloudFormation テンプレートは us-east-1 リージョンでのみ動作するように設計されています。また、これらのテンプレートは、そのまま本番で使用することは想定されていません。

  1. テンプレートの指定ページで、CloudFormation テンプレートとして指定されている URL を維持し、次へを選択します。
  2. スタックの詳細の指定ページで、テンプレートに必要なパラメータを確認し、値を指定します。
    • EnvName には、Dev を入力します。

Dev は、テンプレートをデプロイするあなたの環境名です。AWS CloudFormation は、この値を Lambda や Amazon SQS などのサービスのリソースに使用します。

  1. テンプレートの詳細を指定したら、次へを選択します。
  2. スタックオプションの設定のページで、次へを再度選択します。
  3. レビューのページで、AWS CloudFormation によって IAM リソースがカスタム名で作成される場合があることを承認します にチェックを入れます。
  4. Create Stack (送信)を選択します。

デプロイが完了するまで、約5~10分かかります。スタックの起動が完了すると、作成されたリソースに関する情報を含む出力が返されます。

スタックの出力は、AWS マネジメントコンソール、または以下の AWS コマンドラインインターフェイス(AWS CLI)のコマンドを使用して表示することができます:

aws cloudformation describe-stacks --stack-name <stack-name> --region us-east-1 --query Stacks[0].Outputs

CloudFormation スタックによって作成されるリソース

  • AudioRawBucket – Amazon Transcribe の実行のため、Lambda 関数のPUT イベントに基づき生のオーディオファイルを保存します。
  • AudioPrcsdBucket – 処理された出力ファイルを保存します。
  • LambdaRole1 – S3 バケット、Amazon SQS、Amazon Transcribe、および CloudWatch に対し必要なアクセス権を持つ Lambda の実行ロール
  • LambdaFunction1 – Amazon Transcribe を実行して音声ファイルを処理し、JSON ファイルを作成し、Amazon SQS を更新するため、先に実行される関数です。
  • LambdaFunction2 – SQS キューを読み、JSON を CSV 形式に変換(集約) し、Athena テーブルにロードする後続の関数です。
  • TaskAudioQueue – 音声処理に関するすべてのリクエストを格納するための SQS キューです。
  • ScheduledRule – LambdaFunction2 を定期実行する CloudWatch スケジュールです。
  • AthenaNamedQuery – 処理された音声ファイルのトランスクリプションとオブジェクト情報を格納するための Athena テーブルの定義です。

音声テキストの Athena テーブルには、以下の定義があります:

  • audio_transcribe_job – 音声を書き出すためのジョブ
  • time_start – 会話の開始タイムスタンプ
  • speaker – 話者のタグ(例: spk_0、spk-1 など)
  • speaker_text – 話者の音声から得られたテキスト

ソリューションの検証

以下で、ソリューションが機能することを検証することができます。

  1. AWS CloudFormation リソースが作成されたことを確認します (コンソールまたは AWS CLI を使用した手順については、前のセクションを参照してください) 。
  2. サンプルの音声ファイルを S3 バケット AudioRawBucket にアップロードします。

トランスクリプション処理は非同期なので、ジョブが完了するまでに数分かかることがあります。Amazon Transcribe コンソールや CloudWatch コンソールでジョブの状態を確認することができます。

トランスクリプションジョブが完了し、Athena テーブル transcribe_data が作成されたら、Athena クエリーを実行してトランスクリプション出力を確認することができます。次の select 文を参照してください:

select * from "default"."transcribe_data" order by 1,2

上記の select 文の出力は、次の表のとおりです。

audio_transcribe_job time_start speaker speaker_text
medical-diarization.wav 0:00:01 spk_0 Hey, Jane. So what brings you into my office today?
medical-diarization.wav 0:00:03 spk_1 Hey, Dr Michaels. Good to see you. I’m just coming in from a routine checkup.
medical-diarization.wav 0:00:07 spk_0 All right, let’s see, I last saw you. About what, Like a year ago. And at that time, I think you were having some minor headaches. I don’t recall prescribing anything, and we said we’d maintain some observations unless things were getting worse.
medical-diarization.wav 0:00:20 spk_1 That’s right. Actually, the headaches have gone away. I think getting more sleep with super helpful. I’ve also been more careful about my water intake throughout my work day.
medical-diarization.wav 0:00:29 spk_0 Yeah, I’m not surprised at all. Sleep deprivation and chronic dehydration or to common contributors to potential headaches. Rest is definitely vital when you become dehydrated. Also, your brain tissue loses water, causing your brain to shrink and, you know, kind of pull away from the skull. And this contributor, the pain receptors around the brain, giving you the sensation of a headache. So how much water are you roughly taking in each day
medical-diarization.wav 0:00:52 spk_1 of? I’ve become obsessed with drinking enough water. I have one of those fancy water bottles that have graduated markers on the side. I’ve also been logging my water intake pretty regularly on average. Drink about three litres a day.
medical-diarization.wav 0:01:06 spk_0 That’s excellent. Before I start the routine physical exam is there anything else you like me to know? Anything you like to share? What else has been bothering you?

クリーンアップ

追加料金の発生を避けるため、ソリューションの利用が終了したら、以下の手順を完了し、リソースをクリーンアップしてください:

  1. Athena テーブル transcribe_data を default データベースから削除する。
  2. AudioRawBucketAudioPrcsdBucket のバケットから作成した prefix とオブジェクトを削除します。
  3. CloudFormation スタックを削除し、追加リソースを削除します。

まとめ

この記事では、Amazon S3、Amazon Transcribe、Amazon SQS、Lambda、Athena を使用した音声ファイルの書き出しを行うソリューションについて解説し、実装サンプルを利用して複数の話者の音声ファイルを処理および分析する手順を検証しました。

ソリューションをさらに拡張して、センチメント分析を実行し、顧客体験を向上させることもできます。詳細については、Amazon Comprehend を使用したカスタマーレビューからのセンチメントの検出を参照してください。ライブコールとポストコール分析の詳細については、AWS, AWS Contact Center Intelligence ソリューションを発表を参照してください。


著者について

Mahendar Gajula

Mahendar Gajula は、AWS のビッグデータコンサルタントです。ビッグデータ、データウェアハウス、AI/ML プロジェクトを中心に、AWS のお客様のクラウドジャーニーに携わっています。余暇はテニスと家族との時間を楽しんでいます。

 

Rajarao Vijjapu

Rajarao Vijjapu は、AWS のデータアーキテクトです。AWS のお客様やパートナーと連携し、ビッグデータ、アナリティクス、AI/ML、セキュリティプロジェクトに関するガイダンスや技術支援を提供し、AWS を利用する際のソリューションの価値向上を支援しています。

 

 

翻訳は Solutions Architect 片山洋平、窪田寛之が担当しました。原文はこちらです。