リアルタイム音声認識サービスは、長時間続く音声データストリームを認識します。このサービスは、会議のスピーチやライブストリーミングなど、中断のない音声認識が必要なシナリオに適用されます。
機能
パルス符号変調( PCM )でエンコードされた 16 ビットモノラルオーディオファイルをサポートします。
8,000 Hz および 16,000 Hz の音声サンプリングレートをサポートします。
中間結果を返すかどうか、後処理中に句読点を追加するかどうか、および中国語の数字をアラビア数字に変換するかどうかを指定できます。
[Intelligent Speech Interaction コンソール] でプロジェクトを管理する際に、異なる言語の音声を認識するための言語モデルを選択できます。詳細については、「プロジェクトの管理」をご参照ください。
現在サポートされている言語と方言モデルは次のとおりです。
16K ASR (汎用): 中国語(北京語)、英語、広東語、日本語、韓国語、ロシア語、インドネシア語、ベトナム語、マレーシア語、タイ語、ヒンディー語、アラビア語、カザフ語、ドイツ語、スペイン語、フランス語。
8K ASR (電話回線): 中国語(北京語)、英語、広東語、インドネシア語、フィリピン語。
エンドポイント
アクセスタイプ | 説明 | URL |
インターネットからの外部アクセス | このエンドポイントを使用すると、インターネット経由で任意のホストからリアルタイム音声認識サービスにアクセスできます。デフォルトでは、インターネットアクセス URL は SDK に組み込まれています。 | wss://nls-gateway-ap-southeast-1.aliyuncs.com/ws/v1 |
インタラクションプロセス
サーバーは、すべての応答の応答ヘッダーに task_id パラメーターを追加して、認識タスクの ID を示します。このパラメーターの値を記録できます。エラーが発生した場合は、チケットを送信してタスク ID とエラーメッセージを報告できます。
1. クライアントの認証
サーバーとの WebSocket 接続を確立するには、クライアントは認証にトークンを使用する必要があります。トークンの取得方法の詳細については、「アクセストークンの取得」をご参照ください。
2. 認識の開始と確認
クライアントは、リアルタイム音声認識を開始するためのリクエストを送信します。サーバーは、リクエストが有効であることを確認します。クライアントがサービスリクエストを送信するには、リクエストパラメーターを設定する必要があります。リクエストパラメーターは、SDK の SpeechTranscriber オブジェクトの set メソッドを使用して設定できます。次の表に、リクエストパラメーターを示します。
パラメーター | タイプ | 必須 | 説明 |
appkey | String | はい | [Intelligent Speech Interaction コンソール] で作成したプロジェクトの appkey 。 |
format | String | いいえ | 音声コーディング形式。デフォルト値: PCM 。リアルタイム音声認識サービスは、非圧縮 PCM または WAV エンコードされた 16 ビットモノラルオーディオファイルをサポートします。 |
sample_rate | Integer | いいえ | 音声サンプリングレート。単位: Hz 。デフォルト値:16000。このパラメーターを設定した後、[Intelligent Speech Interaction コンソール] でプロジェクトの音声サンプリングレートに適用可能なモデルまたはシーンを指定する必要があります。 |
enable_intermediate_result | Boolean | いいえ | 中間結果を返すかどうかを指定します。デフォルト値: false 。 |
enable_punctuation_prediction | Boolean | いいえ | 後処理中に句読点を追加するかどうかを指定します。デフォルト値: false 。 |
enable_inverse_text_normalization | Boolean | いいえ | 後処理中に逆テキスト正規化( ITN )を有効にするかどうかを指定します。デフォルト値: false 。このパラメーターを true に設定すると、中国語の数字はアラビア数字に変換されます。 説明 ITN は単語には実装されていません。 |
customization_id | String | いいえ | カスタム言語モデルの ID 。 |
vocabulary_id | String | いいえ | カスタムホットワードの語彙 ID 。 |
max_sentence_silence | Integer | いいえ | 文の終わりを検出するためのしきい値。無音時間が指定されたしきい値を超えると、システムは文の終わりを決定します。単位:ミリ秒。有効値:200 ~ 2000。デフォルト値:800。 |
enable_words | Boolean | いいえ | 単語に関する情報を返すかどうかを指定します。デフォルト値: false 。 |
enable_ignore_sentence_timeout | Boolean | いいえ | リアルタイム音声認識における単一文の認識タイムアウトの問題を無視するかどうかを指定します。デフォルト値: false 。 |
disfluency | Boolean | いいえ | モダリティ粒子と反復的な音声を削除するために、非流暢性検出を有効にするかどうかを指定します。デフォルト値: false 。 |
vad_model | String | いいえ | サーバーが使用する音声区間検出( VAD )モデルの ID 。デフォルトでは、このパラメーターはリクエストに渡されません。 |
speech_noise_threshold | float | いいえ | オーディオストリームをノイズとして認識するためのしきい値。有効値:-1 ~ 1。パラメーター値については、次の情報を参照してください。
説明 このパラメーターは高度なパラメーターです。パラメーター値を調整する場合は注意してください。パラメーター値を調整した後、テストを実行してください。 |
3. 音声データの送信と認識
クライアントは、音声データをサーバーに周期的に送信し、サーバーから認識結果を継続的に受信します。
SentenceBegin メッセージは、サーバーが文の始まりを検出したことを示します。リアルタイム音声認識サービスは、VAD を使用して文の始まりと終わりを決定します。たとえば、サーバーは次の応答を返します。
{ "header": { "namespace": "SpeechTranscriber", "name": "SentenceBegin", "status": 20000000, "message_id": "a426f3d4618447519c9d85d1a0d1****", "task_id": "5ec521b5aa104e3abccf3d361822****", "status_text": "Gateway:SUCCESS:Success." }, "payload": { "index": 1, "time": 0 } }次の表に、header オブジェクトのパラメーターを示します。
パラメーター
タイプ
説明
namespace
String
メッセージの名前空間。
name
String
メッセージの名前。SentenceBegin メッセージは、サーバーが文の始まりを検出したことを示します。
status
Integer
状態コード。リクエストが成功したかどうかを示します。詳細については、このトピックの「サービス状態コード」セクションを参照してください。
status_text
String
状態メッセージ。
task_id
String
認識タスクのグローバル一意識別子( GUID )。トラブルシューティングを容易にするために、このパラメーターの値を記録します。
message_id
String
メッセージの ID 。
次の表に、payload オブジェクトの結果パラメーターを示します。
パラメーター
タイプ
説明
index
Integer
文のシーケンス番号。1 から始まります。
time
Integer
処理された音声データの期間。単位:ミリ秒。
TranscriptionResultChanged メッセージは、中間結果が取得されたことを示します。 enable_intermediate_result パラメーターが true に設定されている場合、サーバーは複数の TranscriptionResultChanged メッセージを送信して中間結果を返します。たとえば、サーバーは次の中間結果を返します。
{ "header": { "namespace": "SpeechTranscriber", "name": "TranscriptionResultChanged", "status": 20000000, "message_id": "dc21193fada84380a3b6137875ab****", "task_id": "5ec521b5aa104e3abccf3d361822****", "status_text": "Gateway:SUCCESS:Success." }, "payload": { "index": 1, "time": 1835, "result": "Sky in Beijing", "confidence": 1.0, "words": [{ "text": "Sky", "startTime": 630, "endTime": 930 }, { "text":"in", "startTime": 930, "endTime": 1110 }, { "text": "Beijing", "startTime": 1110, "endTime": 1140 }] } }TranscriptionResultChanged メッセージの header オブジェクトのパラメーターは、SentenceBegin メッセージの header オブジェクトのパラメーターと似ています。 name パラメーターの値は TranscriptionResultChanged で、中間結果が取得されたことを示します。
次の表に、payload オブジェクトの結果パラメーターを示します。
パラメーター
タイプ
説明
index
Integer
文のシーケンス番号。1 から始まります。
time
Integer
処理された音声データの期間。単位:ミリ秒。
result
String
文の認識結果。
words
List< Word >
文の単語情報。単語情報は、enable_words パラメーターが true に設定されている場合にのみ返されます。
confidence
Double
文の認識結果の信頼度。有効値:0.0 ~ 1.0。値が大きいほど、信頼度が高くなります。
SentenceEnd メッセージは、サーバーが文の終わりを検出し、文の認識結果を返したことを示します。たとえば、サーバーは次の応答を返します。
{ "header": { "namespace": "SpeechTranscriber", "name": "SentenceEnd", "status": 20000000, "message_id": "c3a9ae4b231649d5ae05d4af36fd****", "task_id": "5ec521b5aa104e3abccf3d361822****", "status_text": "Gateway:SUCCESS:Success." }, "payload": { "index": 1, "time": 1820, "begin_time": 0, "result": "Weather in Beijing", "confidence": 1.0, "words": [{ "text": "Weather", "startTime": 630, "endTime": 930 }, { "text":"in", "startTime": 930, "endTime": 1110 }, { "text": "Beijing", "startTime": 1110, "endTime": 1380 }] } }SentenceEnd メッセージの header オブジェクトのパラメーターは、SentenceBegin メッセージの header オブジェクトのパラメーターと似ています。 name パラメーターの値は SentenceEnd で、サーバーが文の終わりを検出したことを示します。
次の表に、payload オブジェクトの結果パラメーターを示します。
パラメーター
タイプ
説明
index
Integer
文のシーケンス番号。1 から始まります。
time
Integer
処理された音声データの期間。単位:ミリ秒。
begin_time
Integer
サーバーが文の SentenceBegin メッセージを返した時刻。単位:ミリ秒。
result
String
文の認識結果。
words
List< Word >
文の単語情報。単語情報は、enable_words パラメーターが true に設定されている場合にのみ返されます。
confidence
Double
文の認識結果の信頼度。有効値:0.0 ~ 1.0。値が大きいほど、信頼度が高くなります。
次の表に、words オブジェクトの結果パラメーターを示します。
パラメーター
タイプ
説明
text
String
単語のテキスト。
startTime
Integer
文における単語の開始時刻。単位:ミリ秒。
endTime
Integer
文における単語の終了時刻。単位:ミリ秒。
4. 認識タスクの完了
クライアントは、すべての音声データが送信されたことをサーバーに通知します。サーバーは認識タスクを完了し、タスクが完了したことをクライアントに通知します。
サービス状態コード
各応答には、サービス状態コードを示す status フィールドが含まれています。次の表に、一般的なエラーコード、ゲートウェイエラーコード、構成エラーコード、およびリアルタイム音声認識エラーコードを示します。
一般的なエラーコード
エラーコード | 説明 | 解決策 |
40000001 | クライアントの認証に失敗したために返されるエラーメッセージ。 | クライアントが使用しているトークンが正しいか、有効であるかを確認してください。 |
40000002 | リクエストが無効であるために返されるエラーメッセージ。 | クライアントから送信されたリクエストが要件を満たしているかどうかを確認してください。 |
403 | トークンの有効期限が切れているか、リクエストに無効なパラメーターが含まれているために返されるエラーメッセージ。 | クライアントが使用しているトークンが有効であるかを確認してください。次に、パラメーター値が有効であるかを確認してください。 |
40000004 | クライアントのアイドル状態がタイムアウトしたために返されるエラーメッセージ。 | クライアントが長時間(たとえば 10 秒)サーバーにデータを送信していないかどうかを確認してください。 |
40000005 | リクエスト数が上限を超えたために返されるエラーメッセージ。 | 同時接続数またはクエリ/秒( QPS )が上限を超えているかどうかを確認してください。同時接続数が上限を超えている場合は、[Intelligent Speech Interaction] を試用版から商用版にアップグレードすることをお勧めします。サービスを商用版にアップグレードした場合は、より高い同時実行性のためにより多くのリソースを購入することをお勧めします。 |
40000000 | クライアントエラーが発生したために返されるエラーメッセージ。これはデフォルトのクライアントエラーコードです。 | エラーメッセージに基づいてエラーを解決するか、チケットを送信してください。 |
41010120 | クライアントタイムアウトエラーが発生したために返されるエラーメッセージ。 | クライアントが少なくとも 10 秒連続してサーバーにデータを送信していないかどうかを確認してください。 |
50000000 | サーバーエラーが発生したために返されるエラーメッセージ。これはデフォルトのサーバーエラーコードです。 | エラーコードがたまに返される場合は、無視してください。エラーコードが複数回返される場合は、チケットを送信してください。 |
50000001 | 内部呼び出しエラーが発生したために返されるエラーメッセージ。 | エラーコードがたまに返される場合は、無視してください。エラーコードが複数回返される場合は、チケットを送信してください。 |
52010001 | 内部呼び出しエラーが発生したために返されるエラーメッセージ。 | エラーコードがたまに返される場合は、無視してください。エラーコードが複数回返される場合は、チケットを送信してください。 |
ゲートウェイエラーコード
エラーコード | 説明 | 解決策 |
40010001 | メソッドがサポートされていないために返されるエラーメッセージ。 | SDK を使用している場合は、チケットを送信してください。 |
40010002 | 命令がサポートされていないために返されるエラーメッセージ。 | SDK を使用している場合は、チケットを送信してください。 |
40010003 | 命令形式が無効であるために返されるエラーメッセージ。 | SDK を使用している場合は、チケットを送信してください。 |
40010004 | クライアントが予期せず切断されたために返されるエラーメッセージ。 | サーバーがリクエストされたタスクを完了する前に、クライアントが切断されているかどうかを確認してください。 |
40010005 | タスクが命令をサポートしていない状態にあるために返されるエラーメッセージ。 | 現在の状態のタスクで命令がサポートされているかどうかを確認してください。 |
構成エラーコード
エラーコード | 説明 | 解決策 |
40020105 | アプリケーションが存在しないために返されるエラーメッセージ。 | ルートを解決して、アプリケーションが存在するかどうかを確認してください。 |
40020106 | 指定された appkey とトークンが一致しないために返されるエラーメッセージ。 | アプリケーションの appkey が正しいか、トークンと同じ Alibaba Cloud アカウントに属しているかを確認してください。 |
40020503 | RAM ユーザー認証に失敗したために返されるエラーメッセージ。 | Alibaba Cloud アカウントを使用して、RAM ユーザーに pctowap open platform ( POP ) API へのアクセスを承認します。 |
リアルタイム音声認識エラーコード
エラーコード | 説明 | 解決策 |
41040201 | クライアントが 10 秒連続してサーバーにデータを送信しないために返されるエラーメッセージ。 | ネットワークを確認するか、送信する必要があるビジネスデータがないかを確認してください。 |
41040202 | クライアントがデータを高い伝送速度で送信し、サーバーのすべてのリソースを消費するために返されるエラーメッセージ。 | クライアントが適切な伝送速度(たとえば、1:1 のリアルタイムファクター)でデータを送信しているかどうかを確認してください。 |
41040203 | クライアントが無効な音声コーディング形式で音声データを送信するために返されるエラーメッセージ。 | 音声データの音声コーディング形式を SDK でサポートされている形式に変換してください。 |
41040204 | クライアントが正しい順序でメソッドを呼び出さないために返されるエラーメッセージ。 | クライアントが他のメソッドを呼び出す前に、クライアントが関連するメソッドを呼び出してリクエストを送信しているかどうかを確認してください。 |
41040205 | 指定された max_sentence_silence パラメーターが無効であるために返されるエラーメッセージ。 | max_sentence_silence パラメーターの値が 200 ~ 2000 の範囲内であるかどうかを確認してください。 |
41050008 | 指定された音声サンプリングレートが選択したモデルの音声サンプリングレートと一致しないために返されるエラーメッセージ。 | サービスコールに指定された音声サンプリングレートが、コンソールで作成されたプロジェクトの appkey にバインドされている自動音声認識( ASR )モデルの音声サンプリングレートと一致するかどうかを確認してください。 |
51040101 | サーバーで内部エラーが発生したために返されるエラーメッセージ。 | エラーメッセージに基づいてエラーを解決してください。 |
51040103 | リアルタイム音声認識サービスが利用できないために返されるエラーメッセージ。 | リアルタイム音声認識タスクの数が上限を超えているかどうかを確認してください。 |
51040104 | リアルタイム音声認識のリクエストがタイムアウトしたために返されるエラーメッセージ。 | リアルタイム音声認識サービスのログを確認してください。 |
51040105 | リアルタイム音声認識サービスの呼び出しに失敗したために返されるエラーメッセージ。 | リアルタイム音声認識サービスが有効になっているか、ポートが正しく動作しているかを確認してください。 |
51040106 | リアルタイム音声認識サービスの負荷分散に失敗し、クライアントがリアルタイム音声認識サービスの IP アドレスを取得できないために返されるエラーメッセージ。 | VPC 内のリアルタイム音声認識サーバーが正しく動作しているかどうかを確認してください。 |