概要
AmiVoice API は音声をテキストに変換する音声認識APIです。APIのエンドポイントに音声を送信すると、発話内容をテキストにした結果が得られます。会議の文字起こしや音声対話システムなどの音声対応アプリケーションを作成できます。
- AmiVoice APIの価格 - 費用、価格モデルを説明しています
- チュートリアル -
curl
を使ったステップバイステップでの利用方法を説明しています - 開発リソース: 利用ガイド、サンプルプログラム
- 対応している言語 - 言語の一覧、それぞれで対応している機能を説明しています
特徴
AmiVoice APIには以下の特徴があります。
- 音声データを受け取り、発話内容をテキストに変換して返します。
- ファイルと逐次結果を得られるストリーミングに対応しています。インタフェースの使い分けを参照してください。
- HTTP や WebSocket によるテキストベースのプロトコルを利用しているので、クライアント動作環境でTCP/IPが利用できるだけでよく、特殊なライブラリを組み込む必要がありません。
- HTTPS および WSS によって暗号化されているため、通信経路は安全です。
- 認識結果は、JSON 形式で返します。
- 送信された音声データから、人が発話している部分を推定して音声認識し、その音声認識の対象となった発話時間のみに費用がかかります。AmiVoice APIの価格を参照してください
- 音声認識の結果として、発話内容を推定したテキストだけではなく、発話の開始時間、終了時間、トークンごとの時間情報、信頼度などが得られます。
- 音声認識エンジン(言語モデル、音響モデルの組み合わせ)を複数提供しており、様々な言語、ドメインや利用シーンに最適なエンジンを選択できます。
- 単語登録することで認識しない単語を利用者が追加できます。
- 「えーっと」や「あのー」などの不要語を自動的に削除します。コールセンターで従業員の話し方の分析をするためなどの目的で敢えて不要語を残すこともできます。不要語の削除を参照してください。
- 句読点を自動的に挿入します。
- 話者ダイアライゼーション機能を有効にすると、複数の話者が話をしている音声に対して、どこからどこまでを誰が話しているのか推定した結果が得られます。
- 感情分析機能を有効にすると、感情分析も同時に行うことができます。
クライアントアプリケーションの役割
一般にAmiVoice APIを使って音声認識を行うクライアントアプリケーションは以下の実装が必要になります。
- 音声データを録音デバイスやネットワークから取得する
- 音声データを対応するフォーマットに変換する (対応している音声フォーマットの場合は不要です)
- 音声認識APIのエンドポイントに音声データを送信する (利用ガイドを参照してください)
- 音声認識結果を受け取る (音声認識の結果を参照してください)
- 音声認識結果を解釈し、利用する (例えば、キャプションとして画面に表示する、意図理解して音声ボットの応答を生成する、会議の議事録など要約処理の入力とする、など)
インタフェースの使い分け
AmiVoice APIは用途に応じて3つのインタフェースを提供しています。
以下ではそれぞれの違いや使い分けるための基準について説明します。
同期 HTTP インタフェース
実装が最も簡単な方法です。リクエストパラメータをつけて音声ファイルをHTTP POSTで送信すると、レスポンスに発話内容のテキストが得られます。音声ファイルのサイズが 16MB 以下の場合にのみ利用できます。
ユースケース
- 認識精度などの検証を行いたい場合
- アプリケーションへの組み込みを簡単に行いたい場合
- 短い発話を認識させたい場合
認識結果を逐次取得できませんが、認識させたい発話が数秒程度と十分に短く、結果のリアルタイム性もそれほど強く要求されない場合はプロダクションでも利用できます。
利点
音声といくつかのパラメータをHTTP POSTで送信するだけなので簡単に実装できます。また、curl、Postman、Visual Studio CodeのREST Clientなど、HTTPリクエストを送信できるツールがあればすぐに試すことができます。
注意点
- 音声ファイルが 16MB を超える場合はエラーになります。
- Chunked 形式で分割送信することもできます。ただし、結果はまとめて返します。
- 送信した音声データに複数の発話区間が含まれる場合でも、発話区間の時間情報を返しません。発話単位での結果が必要な場合には、非同期 HTTP インタフェースやWebSocket インタフェースを使ってください。
- 認識途中結果(音声認識結果が確定する前の仮説)は返しません。認識途中結果が必要な場合には、WebSocket インタフェースを使用してください。
リソース
- チュートリアルの短い音声ファイルの書き起こしにステップバイステップで実行する例を示しています。
- 利用ガイドの同期 HTTP インタフェースにリクエストの送信方法を説明しています。
- 仕様の詳細はAPIリファレンスの同期 HTTP インタフェースを参照してください。
非同期 HTTP インタフェース
音声認識のジョブとしてサーバ側で非同期的に音声認識処理が実行されます。ジョブが完了するまでポーリングし、ジョブが完了したら認識結果を得ることができます。
ユースケース
- 大きな音声ファイル(16MB より大きい場合)をテキストに変換したい場合
- 逐次レスポンスを受け取る必要がなく、少しでも精度を上げたい場合
例えば、コールセンターの通話録音ファイルや、会議の録音ファイルをまとめてテキスト化するようなバッチ処理を想定しています。
音声認識にかかる時間は、送信した音声の0.5〜1.5倍程度です。例えば、1時間の音声を送信した場合は、結果を得るまでに30〜90分程度の時間がかかります。このような場合、ひとつのHTTPセッションでリクエストと結果の取得を行うと、長時間セッションを維持する必要があり、途中でセッションが切れてしまった際に結果が得られない可能性があります。そのため、同期HTTPインタフェースでは、音声ファイルのサイズを16MB以下に制限しており、それよりも大きな音声ファイルは、非同期HTTPインタフェースを用いてリクエストと結果の取得を分けて行うことにしています。
利点
- 他のインタフェースよりも精度が良くなる可能性があります。注記
当社の様々なテストセットに対して、非同期 HTTP インタフェースは、他のインターフェースよりもエラー改善率が平均5%ポイント高い結果を出しています。 これは以下の理由によるものです。
- レスポンスをすぐに返す必要がないため、ある時点の音声の発話内容を推定するのに、多くの未来の情報を先読みしてから処理を行うことができる。
- 同期HTTPやWebSocketインタフェースを使って認識させるときよりも、計算リソースを多く利用できるように設定されている。
- トークン単位の時間情報だけでなく、発話単位での結果が得られます。音声ファイルに複数の発話区間が含まれる場合、発話の開始時刻、終了時刻を利用できます。
注意点
- ジョブを開始するまでに数十秒〜数分程度の遅延があるため、短い音声を認識させる場合には相対的に遅延時間の影響が大きくなります。また、短い音声に対しては上記の利点の精度改善の効果も小さくなります。
- 認識途中結果(音声認識結果が確定する前の仮説)は返しません。認識途中結果が必要な場合には、WebSocket インタフェースを使用してください。
リソース
- チュートリアルの長い音声ファイルの書き起こしにステップバイステップで実行する例を示しています。
- 利用ガイドの非同期 HTTP インタフェースにリクエストの送信方法を説明しています。
- 仕様の詳細はAPIリファレンスの非同期 HTTP インタフェースを参照してください。
WebSocket インタフェース
WebSocket 接続をすることで、双方向通信が可能になります。ストリーミング音源から音声をサーバに少しずつ送信し、音声認識結果を逐次取得できます。リアルタイム性が求められるアプリケーションに向いています。
ユースケース
- 音源が音声ストリームで逐次結果を取得して利用したい場合
- 音声認識の途中結果(音声認識結果が確定する前の仮説)を利用したい場合
- ユーザの話し終わりの検出の精度を高めたい場合
利点
- 音声認識結果を逐次取得できます。
- 認識途中結果(音声認識結果が確定する前の仮説)が得られます。音声認識結果は発話の終端を検出してから結果が確定するため、リアルタイムアプリケーションでは結果が得られるまでに時間がかかってしまいます。画面に途中結果を表示することでユーザへの素早いレスポンスを実現できます。
- 発話の終端の検出をAPI側で行うことができます。例えば、同期 HTTP インタフェースを使って対話アプリケーションを実装しようとすると、ユーザが話し終わったタイミングで録音を終了して音声ファイルを作成する必要があります。録音システムが終端検出機能を持っていない、または単純な音量に基づく実装しか持っていない場合には、背景ノイズが大きい場合やユーザの声が小さい場合などはうまく動作しないことがあります。WebSocketインタフェースの場合は、音声データを逐次送信するだけで、AmiVoice APIの深層学習モデルを使った発話の終端の検出を利用することができ、単純な音量による終端検出より良い精度で話し終わりを検出し結果を得ることができます。
- トークン単位の時間情報だけでなく、発話単位での結果が得られます。音声ファイルに複数の発話区間が含まれる場合、発話の開始時刻、終了時刻を利用できます。
注意点
- WebSocket接続した後、音声認識サーバとは独自のテキストベースのプロトコルで通信する必要があるため、実装が複雑になります。
リソース
- 利用ガイドのWebSocket インタフェースにリクエストの送信方法を説明しています。
- プロトコルの詳細を隠蔽して様々なプログラム言語から簡単に扱えるようにしたクライアントライブラリを提供しています。クライアントライブラリを参照してください。
- 仕様の詳細はAPIリファレンスのWebSocket インタフェースを参照してください。
注意点
結果の一貫性
AmiVoice APIでは、同じ音声を送信しても同じ結果が得られるとは限りません。これは音声認識エンジンが日々更新されていること、音声認識サーバの負荷状況により若干の計算量の調整を行っているためです。
もともと音声認識は統計情報を用いて確率的に結果を出力するため、様々な入力を受け付ける必要のあるアプリケーションでは一貫性を期待しすぎることはできません。音声認識の結果のテキストの表記には強く依存しないようにアプリケーションを構築してください。限られた語彙の音声コマンドを実装したい場合は、AmiVoice API Privateのルールグラマーの利用も検討してください。
APIレスポンスのレイテンシー
AmiVoice APIでは、負荷に応じて自動的に基盤システムを自動的にスケーリングします。そのため、レスポンス時間が一定であることを保証することはできません。そのため、APIレスポンスのレイテンシーを抑えたい場合は、AmiVoice API Privateの専用サーバでのスレッド動作モードを検討してください。
開発のためのリソース
まずはチュートリアルを参照してください。AmiVoice APIをアプリケーションに組み込むための詳細やコンセプトについては利用ガイドを参照してください。サンプルプログラムも提供しています。