Paraformer 非リアルタイム音声認識 HTTP API のパラメーターと API の詳細。
重要Alibaba Cloud Model Studio は、中国 (北京) リージョン向けにワークスペース固有のドメインをリリースしました。この新しい専用ドメインは、推論リクエストに対して優れたパフォーマンスと高い安定性を提供します。 dashscope.aliyuncs.com から {WorkspaceId}.cn-beijing.maas.aliyuncs.com への移行を推奨します。
{WorkspaceId} を実際の ワークスペース ID に置き換えてください。既存のドメインは引き続き完全に機能します。
重要このドキュメントは 中国 (北京) リージョンにのみ適用されます。モデルを使用するには、中国 (北京) リージョンの API キー を使用する必要があります。
ユーザーガイド:非リアルタイム音声認識
このサービスは、タスク送信インターフェイスとタスククエリインターフェイスを提供します。通常、タスク送信インターフェイスを呼び出して認識タスクをアップロードし、タスクが完了するまでタスククエリインターフェイスを繰り返し呼び出します。
前提条件
サービスを有効化し、API キーを取得していること。コードの漏洩によるセキュリティリスクを防ぐため、コードにハードコーディングするのではなく、API キーを環境変数として設定してください。
注記サードパーティのアプリケーションやユーザーに一時的なアクセスを提供する必要がある場合、または機密データへのアクセスや削除などの高リスク操作を厳密に制御したい場合は、一時的な認証トークンの使用を推奨します。
長期的な API キーと比較して、一時的な認証トークンは有効期間が短く (60 秒)、セキュリティが高いため、一時的な呼び出しシナリオに適しており、API キー漏洩のリスクを効果的に低減します。
使用方法:コード内で、認証に元々使用していた API キーを、取得した一時的な認証トークンに置き換えます。
タスク送信インターフェイス
基本情報
| API エンドポイントの説明 | 音声認識タスクを送信します。 |
| URL | |
| リクエストメソッド | POST |
| リクエストヘッダー | |
| メッセージ本文 | 次のコードは、すべてのリクエストパラメーターを含むメッセージ本文を示しています。必要に応じて、オプションのフィールドを省略できます。 |
リクエストパラメーター
クリックしてリクエスト例を表示
タスク送信インターフェイスの cURL の例:
curl --location 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/asr/transcription' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--header "X-DashScope-Async: enable" \
--data '{"model":"paraformer-v2","input":{"file_urls":["{YOUR_AUDIO_URL}"]},"parameters":{"channel_id":[0]}}'
| パラメーター | タイプ | デフォルト値 | 必須 | 説明 |
|---|---|---|---|---|
model | string | はい | 音声・動画ファイルの文字起こしに使用される Paraformer モデルの名前。詳細については、「モデル」をご参照ください。 | |
file_urls | array[string] | はい | 音声・動画ファイルの文字起こし用の URL のリスト (HTTP/HTTPS)。1 回のリクエストでサポートされる URL は 1 つのみです。 重要URL にスペース、漢字、またはその他の特殊文字が含まれている場合は、使用前に URL エンコードしてください (たとえば、スペースを 音声ファイルが Object Storage Service (OSS) に保存されている場合、RESTful API は oss:// プレフィックスで始まる一時的な URL をサポートします。 重要
| |
vocabulary_id | string | いいえ | カスタム語彙 ID。言語構成を持つ v2+ モデルでサポートされています。この ID のホットワードは、現在の音声認識に適用されます。デフォルトでは無効になっています。使用方法については、「カスタムホットワード」をご参照ください。 | |
channel_id | array[integer] | [0] | いいえ | マルチトラックオーディオファイルで認識するオーディオトラックのインデックスを指定します。インデックスは 0 から始まります。たとえば、[0] は最初のトラックを認識することを意味し、[0, 1] は最初のトラックと 2 番目のトラックの両方を同時に認識することを意味します。このパラメーターを省略した場合、デフォルトでは最初のトラックのみが処理されます。 重要指定された各トラックは個別に課金されます。たとえば、1 つのファイルに対して [0, 1] をリクエストすると、2 回分の料金が発生します。 |
disfluency_removal_enabled | boolean | false | いいえ | フィラーワードをフィルタリングします。デフォルトでは無効になっています。 |
timestamp_alignment_enabled | boolean | false | いいえ | タイムスタンプアライメント機能を有効にします。デフォルトでは無効になっています。 |
special_word_filter | string | いいえ | 音声認識中に処理する禁止用語を指定し、異なる禁止用語に対して異なる処理方法を設定することをサポートします。 このパラメーターが提供されない場合、システムは組み込みの禁止用語フィルタリングロジックを使用し、認識結果で Alibaba Cloud Model Studio 禁止用語リスト に一致する単語は、同じ長さの このパラメーターが提供される場合、以下の禁止用語処理戦略を実装できます:
このパラメーターの値は、次の構造を持つ JSON 文字列である必要があります: JSON フィールドの説明:
| |
language_hints | array[string] | ["zh", "en"] | いいえ | 認識する音声の言語コードを指定します。 このパラメーターは paraformer-v2 モデルにのみ適用されます。 サポートされている言語コード:
|
diarization_enabled | boolean | false | いいえ | 話者ダイアライゼーションの自動化。デフォルトでは無効になっています。 モノラル音声にのみ適用されます。マルチチャンネル音声は話者ダイアライゼーションをサポートしていません。 この機能を有効にすると、認識結果に異なる話者を区別するための 注記話者ダイアライゼーションを有効にする場合、音声の長さが 2 時間を超えないようにすることを推奨します。超えると、認識が失敗したりタイムアウトしたりする可能性があります。
|
speaker_count | integer | いいえ | 話者数の参照値 (2 から 100 までの整数)。 diarization_enabled が true の場合に有効になります。 話者数はデフォルトで自動的に決定されます。このパラメーターを構成すると、アルゴリズムが指定された数を目標とするのに役立ちますが、正確な出力を保証するものではありません。 |
レスポンスパラメーター
クリックしてレスポンス例を表示
{
"output": {
"task_status": "PENDING",
"task_id": "c2e5d63b-96e1-4607-bb91-************"
},
"request_id": "77ae55ae-be17-97b8-9942--************"
}
パラメーター | 型 | 説明 |
|---|---|---|
audio_format | 文字列 | ソースファイルのオーディオフォーマットです。 |
channels | 配列[整数] | ソースファイルのオーディオトラックのインデックス情報です。モノラルオーディオの場合は [0]、デュアルトラックオーディオの場合は [0, 1] のように返されます。 |
original_sampling_rate | 整数 | ソースファイル内のオーディオのサンプリングレート (Hz) です。 |
original_duration | 整数 | ソースファイルの元のオーディオの長さ (ms) です。 |
channel_id | 整数 | 文字起こし結果のオーディオトラックのインデックスで、0 から始まります。 |
content_duration | 整数 | オーディオトラック内で音声として識別されたコンテンツの長さ (ms) です。 Paraformer 音声認識モデルサービスは、オーディオトラック内で音声として識別されたコンテンツのみを文字起こしおよび計測し、それに応じて課金します。非音声コンテンツは計測も課金もされません。通常、音声コンテンツの長さは元のオーディオの長さよりも短くなります。音声コンテンツが存在するかどうかの判断は AI モデルによって行われるため、実際の状況とは多少の乖離が生じる場合があります。 |
transcript | 文字列 | 段落レベルの音声文字起こし結果です。 |
sentences | 配列 | 文レベルの音声文字起こし結果です。 |
words | 配列 | 単語レベルの音声文字起こし結果です。 |
begin_time | 整数 | 開始タイムスタンプ (ms) です。 |
end_time | 整数 | 終了タイムスタンプ (ms) です。 |
text | 文字列 | 音声文字起こし結果です。 |
speaker_id | 整数 | 現在の話者のインデックスで、0 から始まります。異なる話者を区別するために使用されます。 このフィールドは、話者分離が有効化されている場合にのみ、認識結果に表示されます。 |
punctuation | 文字列 | 単語の後に予測された句読点です (存在する場合)。 |
タスククエリインターフェイス
基本情報
| API エンドポイントの説明 | 音声認識タスクのステータスと結果をクエリします。 |
| URL | |
| リクエストメソッド | GET |
| リクエストヘッダー | |
| メッセージ本文 | なし。 |
リクエストパラメーター
クリックしてリクエスト例を表示
curl --location 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id}' --header "Authorization: Bearer $DASHSCOPE_API_KEY"
パラメーター | タイプ | デフォルト値 | 必須 | 説明 |
|---|---|---|---|---|
task_id | string | - | はい | クエリに必要なタスク ID。タスク送信インターフェイスによって返されます。 |
レスポンスパラメーター
クリックしてレスポンス例を表示
タスクに複数のサブタスクが含まれている場合、いずれかのサブタスクが成功すると、タスク全体のステータスは SUCCEEDED とマークされます。各サブタスクの結果を判断するには、subtask_status フィールドを確認する必要があります。
正常な例
{
"request_id": "f9e1afad-94d3-997e-a83b-************",
"output": {
"task_id": "f86ec806-4d73-485f-a24f-************",
"task_status": "SUCCEEDED",
"submit_time": "2024-09-12 15:11:40.041",
"scheduled_time": "2024-09-12 15:11:40.071",
"end_time": "2024-09-12 15:11:40.903",
"results": [
{
"file_url": "{YOUR_AUDIO_URL}",
"transcription_url": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/pre/filetrans-16k/20240912/15%3A11/409a4b92-445b-4dd8-8c1d-f110954d82d8-1.json?Expires=1726211500&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
"subtask_status": "SUCCEEDED"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 1,
"FAILED": 0
}
},
"usage": {
"duration": 9
}
}
例外の例
code パラメーターはエラーコードを示し、message パラメーターはエラーメッセージを示します。これらの 2 つのフィールドは例外の場合にのみ表示されます。これらのフィールドを使用して、エラーコードを参照して問題をトラブルシューティングできます。
{
"task_id": "7bac899c-06ec-4a79-8875-xxxxxxxxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2024-12-16 16:30:59.170",
"scheduled_time": "2024-12-16 16:30:59.204",
"end_time": "2024-12-16 16:31:02.375",
"results": [
{
"file_url": "{YOUR_AUDIO_URL}",
"code": "InvalidFile.DownloadFailed",
"message": "The audio file cannot be downloaded.",
"subtask_status": "FAILED"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 0,
"FAILED": 1
}
}
パラメーター | タイプ | 説明 |
|---|---|---|
task_id | string | クエリされたタスクの ID。 |
task_status | string | クエリされたタスクのステータス。 複数のサブタスクを持つタスクの場合、いずれかのサブタスクが成功すると、task_status は |
subtask_status | string | サブタスクのステータス。 |
file_url | string | ファイル文字起こしタスクで処理されるファイルの URL。 |
transcription_url | string | 認識結果を取得するためのリンク (24 時間有効)。有効期限が切れると、タスクのクエリと結果のダウンロードは失敗します。 認識結果は JSON として保存されます。このリンクからダウンロードするか、HTTP リクエストを介して直接読み取ります。 JSON フィールドの詳細については、「認識結果の説明」をご参照ください。 |
認識結果の説明
認識結果は JSON ファイルとして保存されます。
クリックして認識結果の例を表示
{
"file_url":"{YOUR_AUDIO_URL}",
"properties":{
"audio_format":"pcm_s16le",
"channels":[
0
],
"original_sampling_rate":16000,
"original_duration_in_milliseconds":3834
},
"transcripts":[
{
"channel_id":0,
"content_duration_in_milliseconds":3720,
"text":"Hello world, this is the Alibaba speech laboratory.",
"sentences":[
{
"begin_time":100,
"end_time":3820,
"text":"Hello world, this is the Alibaba speech laboratory.",
"sentence_id":1,
"speaker_id":0, //このフィールドは、話者ダイアライゼーションの自動化が有効な場合にのみ表示されます
"words":[
{
"begin_time":100,
"end_time":596,
"text":"Hello ",
"punctuation":""
},
{
"begin_time":596,
"end_time":844,
"text":"world",
"punctuation":", "
}
// その他の内容はここで省略
]
}
]
}
]
}
主要なパラメーターは次のとおりです:
パラメーター | タイプ | 説明 |
|---|---|---|
audio_format | string | ソースファイルの音声フォーマット。 |
channels | array[integer] | ソースファイルのオーディオトラックのインデックス情報。モノラル音声の場合は [0]、デュアルトラック音声の場合は [0, 1] などを返します。 |
original_sampling_rate | integer | ソースファイル内の音声のサンプリングレート (Hz)。 |
original_duration | integer | ソースファイルの元の音声の長さ (ms)。 |
channel_id | integer | 文字起こし結果のオーディオトラックのインデックス。0 から始まります。 |
content_duration | integer | オーディオトラック内で音声として識別されたコンテンツの長さ (ms)。 Paraformer 音声認識モデルサービスは、オーディオトラック内で音声として識別されたコンテンツのみを文字起こしおよび測定し、それに応じて課金します。非音声コンテンツは測定も課金もされません。通常、音声コンテンツの長さは元の音声の長さよりも短くなります。音声コンテンツが存在するかどうかの判断は AI モデルによって行われるため、実際の状況とは多少のずれが生じる場合があります。 |
transcript | string | 段落レベルの音声文字起こし結果。 |
sentences | array | 文レベルの音声文字起こし結果。 |
words | array | 単語レベルの音声文字起こし結果。 |
begin_time | integer | 開始タイムスタンプ (ms)。 |
end_time | integer | 終了タイムスタンプ (ms)。 |
text | string | 音声文字起こし結果。 |
speaker_id | integer | 現在の話者のインデックス。0 から始まり、異なる話者を区別するために使用されます。 このフィールドは、話者ダイアライゼーションが有効な場合にのみ認識結果に表示されます。 |
punctuation | string | 単語の後に予測された句読点 (もしあれば)。 |
完全な例
組み込みの HTTP ライブラリを使用して、タスクの送信とクエリのリクエストを実装します。まず認識タスクを送信し、完了するまで繰り返しクエリします。
次のコードは Python での例です:
import requests
import json
import time
api_key = "your-dashscope-api-key" # これをご利用の API キーに置き換えてください。
file_urls = [
"{YOUR_AUDIO_URL}",
]
language_hints = ["zh", "en"]
# 文字起こしするファイル URL のリストでファイル文字起こしタスクを送信します。
def submit_task(apikey, file_urls) -> str:
headers = {
"Authorization": f"Bearer {apikey}",
"Content-Type": "application/json",
"X-DashScope-Async": "enable",
}
data = {
"model": "paraformer-v2",
"input": {"file_urls": file_urls},
"parameters": {
"channel_id": [0],
"language_hints": language_hints
},
}
# 録音ファイル文字起こしサービスの URL。
service_url = (
"https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/asr/transcription"
)
response = requests.post(
service_url, headers=headers, data=json.dumps(data)
)
# レスポンス内容を出力します。
if response.status_code == 200:
return response.json()["output"]["task_id"]
else:
print("task failed!")
print(response.json())
return None
# タスクが成功するまで、タスクステータスを再帰的にクエリします。
def wait_for_complete(task_id):
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
"X-DashScope-Async": "enable",
}
pending = True
while pending:
# タスクステータスクエリサービスの URL。
service_url = f"https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id}"
response = requests.get(
service_url, headers=headers
)
if response.status_code == 200:
status = response.json()['output']['task_status']
if status == 'SUCCEEDED':
print("task succeeded!")
pending = False
return response.json()['output']['results']
elif status == 'RUNNING' or status == 'PENDING':
pass
else:
print("task failed!")
pending = False
else:
print("query failed!")
pending = False
print(response.json())
time.sleep(0.1)
task_id = submit_task(apikey=api_key, file_urls=file_urls)
print("task_id: ", task_id)
result = wait_for_complete(task_id)
print("transcription result: ", result)
エラーコード
エラーが発生した場合は、「エラーコード」を参照してトラブルシューティングを行ってください。
問題が解決しない場合は、開発者コミュニティに参加して問題を報告し、さらなる調査のためにリクエスト ID を提供してください。
タスクに複数のサブタスクが含まれている場合、いずれかのサブタスクが成功すれば、タスク全体のステータスは SUCCEEDED とマークされます。各サブタスクの結果を判断するには、subtask_status フィールドを確認する必要があります。
エラーレスポンスの例:
{
"task_id": "7bac899c-06ec-4a79-8875-xxxxxxxxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2024-12-16 16:30:59.170",
"scheduled_time": "2024-12-16 16:30:59.204",
"end_time": "2024-12-16 16:31:02.375",
"results": [
{
"file_url": "{YOUR_AUDIO_URL}",
"code": "InvalidFile.DownloadFailed",
"message": "The audio file cannot be downloaded.",
"subtask_status": "FAILED"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 0,
"FAILED": 1
}
}
その他の例
その他の例については、GitHub リポジトリをご参照ください。
よくある質問
特徴
Q:Base64 エンコードされた音声をサポートしていますか?
いいえ。Base64 エンコードされた音声はサポートされていません。パブリックにアクセス可能な URL を介してアクセスできる音声のみがサポートされています。バイナリストリームやローカルファイルの直接認識はサポートされていません。
Q:音声ファイルをパブリックにアクセス可能な URL として提供するにはどうすればよいですか?
通常、以下の手順に従います (これは一般的なアプローチであり、詳細はストレージプロダクトによって異なります。音声を Alibaba Cloud OSS にアップロードすることを推奨します):
1. ストレージとホスティング方法を選択する
例:
-
Object Storage Service (推奨):
- クラウドプロバイダーのオブジェクトストレージサービス (例:Alibaba Cloud OSS) を使用して、音声ファイルをバケットにアップロードし、パブリックアクセスに設定します。
- 利点:高可用性、CDN アクセラレーションのサポート、簡単な管理。
-
Web サーバー:
- HTTP/HTTPS アクセスをサポートする Web サーバー (Nginx や Apache など) に音声ファイルを配置します。
- 利点:小規模なプロジェクトやローカルテストに適しています。
-
コンテンツデリバリーネットワーク (CDN):
- CDN に音声ファイルをホストし、CDN が提供する URL を介してアクセスします。
- 利点:ファイル配信の高速化、高同時実行シナリオに適しています。
2. 音声ファイルをアップロードする
選択したストレージ/ホスティング方法に基づいて音声ファイルをアップロードします。例:
-
Object Storage Service:
- クラウドプロバイダーのコンソールにログインし、バケットを作成します。
- 音声ファイルをアップロードし、ファイルの権限を「パブリック読み取り」に設定するか、一時的なアクセスリンクを生成します。
-
Web サーバー:
- サーバーの指定されたディレクトリ (例:
/var/www/html/audio/) に音声ファイルを配置します。 - ファイルが HTTP/HTTPS を介してアクセス可能であることを確認します。
- サーバーの指定されたディレクトリ (例:
3. パブリックにアクセス可能な URL を生成する
例:
-
Object Storage Service:
- アップロード後、システムは自動的にパブリックアクセス URL を生成します (通常は
https://<bucket-name>.<region>.aliyuncs.com/<file-name>の形式)。 - よりユーザーフレンドリなドメインが必要な場合は、カスタムドメインをバインドして HTTPS を有効にすることができます。
- アップロード後、システムは自動的にパブリックアクセス URL を生成します (通常は
-
Web サーバー:
- ファイルアクセス URL は通常、サーバーアドレスとファイルパスを組み合わせたものです (例:
https://your-domain.com/audio/file.mp3)。
- ファイルアクセス URL は通常、サーバーアドレスとファイルパスを組み合わせたものです (例:
-
CDN:
- CDN アクセラレーションを設定した後、CDN が提供する URL を使用します (例:
https://cdn.your-domain.com/audio/file.mp3)。
- CDN アクセラレーションを設定した後、CDN が提供する URL を使用します (例:
4. URL のアクセシビリティを確認する
パブリックネットワーク環境で、生成された URL がアクセス可能であることを確認します。例:
- ブラウザで URL を開き、音声ファイルが再生できるか確認します。
- ツール (例:
curlや Postman) を使用して、URL が正しい HTTP レスポンス (ステータスコード 200) を返すか確認します。
SDK を使用する場合、音声ファイルが Alibaba Cloud OSS に保存されている場合、oss:// プレフィックスを持つ一時的な URL はサポートされていません。
RESTful API を使用する場合、音声ファイルが Alibaba Cloud OSS に保存されている場合、oss:// プレフィックスを持つ一時的な URL はサポートされています:
- 一時的な URL は 48 時間有効で、有効期限が切れると使用できなくなります。本番環境では使用しないでください。
- アップロード認証情報を取得するための API は 100 QPS に制限されており、スケールアウトをサポートしていません。本番環境、高同時実行シナリオ、またはストレステストシナリオでは使用しないでください。
- 本番環境では、OSS などの安定したストレージサービスを使用して、ファイルの長期的な可用性を確保し、レート制限の問題を回避してください。
Q:認識結果を取得するのにどのくらい時間がかかりますか?
送信後、タスクはキューイング (PENDING) 状態になります。キュー時間はキューの長さとファイルの長さに依存し、正確に見積もることはできませんが、通常は数分以内に完了します。しばらくお待ちください。長い音声ファイルはより多くの処理時間を必要とします。
トラブルシューティング
エラーが発生した場合は、「エラーコード」の情報を参照してください。
Q:認識結果が音声再生と同期しない場合はどうすればよいですか?
timestamp_alignment_enabled リクエストパラメーターを true に設定します。これにより、認識結果が音声再生と同期します。
Q:タスクを送信した後に InvalidFile.DownloadFailed エラーが発生した場合はどうすればよいですか?
ファイル URL にスペース、漢字、またはその他の特殊文字が含まれていないか確認してください。ファイル名にスペースが含まれている場合 (例:「Meeting Recording Q1 2024.mp4」)、file_urls パラメーターに渡す前に、スペースを %20 に置き換えてファイル名を URL エンコードしてください。
Q:OSS 音声ファイルの一時的なパブリックアクセス URL にアクセスできない場合はどうすればよいですか?
ヘッダーで X-DashScope-OssResourceResolve を enable に設定します。
推奨されません。
Java SDK と Paraformer 非リアルタイム音声認識 Python SDK はヘッダーの構成をサポートしていません。
Q:継続的なポーリングの後も結果を取得できませんか?
これはレート制限が原因である可能性があります。しばらくお待ちください。容量拡張が必要な場合は、開発者コミュニティに参加して申請してください。
Q:なぜ認識結果がないのですか (音声を認識できません)?
- 音声が要件 (フォーマット、サンプリングレート) を満たしているか確認してください。
paraformer-v2モデルを使用している場合は、language_hintsの設定が正しいか確認してください。- 上記のいずれでも問題が解決しない場合は、特定の単語の認識を向上させるためにホットワードをカスタマイズできます。
その他の質問
その他の質問については、GitHub のよくある質問をご参照ください。