すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:認識精度の向上

最終更新日:Sep 09, 2026

Model Studio の音声認識は、専門用語、製品名、その他のドメイン固有の語彙の認識精度を向上させるために、カスタムホットワードとコンテキスト強化という 2 つの方法を提供します。このトピックでは、それぞれのアプローチの範囲と使用方法について説明します。

重要ホットワードをサポートしているのはプライマリワークスペースのみです。サブワークスペースはサポートしていません。

概要

製品名、固有名詞、業界用語などのビジネス用語は、モデルの一般的なボキャブラリに含まれていないため、認識精度が低くなる場合があります。Model Studio の音声認識では、こうした用語の認識を改善するために、事前コンパイルホットワード、インスタントホットワード、コンテキスト強化という 3 つの方法を提供しています。

事前コンパイルホットワード、インスタントホットワード、コンテキスト強化の比較

カスタムホットワードには、事前コンパイルホットワードとインスタントホットワードの 2 つの形式があります。次の表では、適用されるモデルと API が異なる 3 つのアプローチを比較します。

ディメンション

事前コンパイルホットワード

インスタントホットワード

コンテキスト強化

仕組み

重み付けしたボキャブラリを事前に作成します。モデルはデコーディング中に、これらの単語の一致確率を高めます。

重み付けしたホットワードをリクエストにインラインで渡します。モデルはデコーディング中に、これらの一致確率を高めます。

会話履歴またはドメインテキストを渡します。モデルはこのコンテキストを使用して、認識結果を補正します。

対応モデル

対応モデルとリージョンをご参照ください。

対応モデルとリージョンをご参照ください。

対応モデルとリージョンをご参照ください。

使用するタイミング

ボキャブラリが既知で比較的安定しており、同じ単語リストをリクエスト間で再利用する必要がある場合 (例:製品名、医療用語)。

リクエスト間で再利用する必要がない、一時的なセッションレベルのホットワードが必要な場合 (例:人名、単一セッションでのみ使用するアドホックな用語)。

会話中にボキャブラリが動的に変化する場合、または固有名詞をモデルが理解するためにコンテキストが必要な場合 (例:議事録の参加者名、カスタマーサービスの会話におけるビジネス用語)。

設定方法

ホットワードリストを事前に作成し、呼び出し時にそのリスト ID を渡します。

リクエストで vocabulary のキーと値のペアを直接渡します。リストは不要です。

リクエストごとに会話履歴またはドメインテキストを渡します。非リアルタイム認識では input.messages を使用し、リアルタイム認識では input.context を使用します。

前提条件

プリコンパイル済みホットワード

事前にホットワードリストを作成し、そのリスト ID を取得して、認識時にその ID を渡します。このアプローチは、語彙が既知で比較的安定しており、製品名や医療用語など、複数のリクエストで同じ単語リストを再利用する必要があるシナリオに適しています。

重要インスタントホットワードは、Qwen-Audio-3.0-ASR-Flash-Streaming、Qwen-Audio-3.0-ASR-Flash-Filetrans、および Qwen-Audio-3.0-ASR-Flash モデルシリーズでのみサポートされています。これらのモデルでプリコンパイル済みホットワードとインスタントホットワードの両方を設定した場合、システムは 2 つのセットをマージします。マージされたセットに 2,000 個を超えるホットワードが含まれている場合、システムはランダムに 2,000 個を選択して使用します。

対応モデルとリージョン

シンガポール

以下のモデルを呼び出すには、シンガポールリージョンのAPI キーを使用します。

  • リアルタイム音声認識

    • Qwen-Audio-3.0-ASR-Flash-Streaming: qwen-audio-3.0-asr-flash-streaming
    • Fun-ASR-Realtime: fun-asr-realtime, fun-asr-realtime-2025-11-07
  • 非リアルタイム音声認識

    • Qwen-Audio-3.0-ASR-Flash-Filetrans: qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash: qwen-audio-3.0-asr-flash
    • Fun-ASR-Flash: fun-asr-flash-2026-06-15
    • Fun-ASR: fun-asr, fun-asr-2025-11-07, fun-asr-2025-08-25, fun-asr-mtl, fun-asr-mtl-2025-08-25

中国 (北京)

以下のモデルを呼び出すには、北京リージョンのAPI キーを使用します。

  • リアルタイム音声認識

    • Qwen-Audio-3.0-ASR-Flash-Streaming: qwen-audio-3.0-asr-flash-streaming
    • Fun-ASR-Realtime: fun-asr-realtime, fun-asr-realtime-2025-11-07, fun-asr-realtime-2025-09-15, fun-asr-flash-8k-realtime, fun-asr-flash-8k-realtime-2026-01-28
    • Paraformer: paraformer-realtime-v2, paraformer-realtime-8k-v2
  • 非リアルタイム音声認識

    • Qwen-Audio-3.0-ASR-Flash-Filetrans: qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash: qwen-audio-3.0-asr-flash
    • Fun-ASR-Flash: fun-asr-flash-2026-06-15
    • Fun-ASR: fun-asr, fun-asr-2025-11-07, fun-asr-2025-08-25, fun-asr-mtl, fun-asr-mtl-2025-08-25
    • Paraformer: paraformer-v2, paraformer-8k-v2

クイックスタート

ワークフロー

まずホットワードリストを作成し、次に音声認識時にその ID を参照します。

  1. ホットワードリストを作成します。

    create-hotword-list API を呼び出します。このリストが属する音声認識モデルを示すために、target_model (Java では targetModel) を指定する必要があります。

    すでにホットワードリストがある場合 (list-all-hotword-lists API で確認できます)、この手順はスキップしてください。

  2. 音声認識 API を呼び出し、ホットワードリスト ID を渡します。

    認識に使用するモデルは、リスト作成時に指定した target_model (Java では targetModel) と一致している必要があります。一致しない場合、ホットワードは適用されません。

サンプルコード

エンドツーエンドの例: ホットワードリストを作成し、音声認識を実行し、リストを削除します。

注記ホットワード管理 API と音声認識 API は、同じアカウントを使用する必要があります。そうでない場合、認識 API は対応するホットワードリストにアクセスできません。

import dashscope
from dashscope.audio.asr import *
import os

# API キーは北京リージョンとシンガポールリージョンで異なります。API キーの取得: https://www.alibabacloud.com/help/model-studio/get-api-key
# 環境変数が設定されていない場合は、次の行を置き換えてください: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

# 以下はシンガポールリージョンの設定です。呼び出し時には、"{WorkspaceId}" を実際のワークスペース ID に置き換えてください。設定はリージョンによって異なります。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# 以下はシンガポールリージョンの設定です。呼び出し時には、"{WorkspaceId}" を実際のワークスペース ID に置き換えてください。設定はリージョンによって異なります。
dashscope.base_websocket_api_url = 'wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference'
prefix = 'testpfx'
target_model = "qwen-audio-3.0-asr-flash-streaming"

my_vocabulary = [
    {"text": "Speech Lab", "weight": 4}
]

service = VocabularyService()
vocabulary_id = service.create_vocabulary(
      prefix=prefix,
      target_model=target_model,
      vocabulary=my_vocabulary)

try:
    if service.query_vocabulary(vocabulary_id)['status'] == 'OK':
        recognition = Recognition(model=target_model,
                              format='wav',
                              sample_rate=16000,
                              callback=None)
        result = recognition.call('{YOUR_AUDIO_FILE}', phrase_id=vocabulary_id)
        print(result.output)
finally:
    # 認識の成否にかかわらず、クォータを消費しないようにホットワードリストを削除します
    service.delete_vocabulary(vocabulary_id)
import com.alibaba.dashscope.audio.asr.recognition.Recognition;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionParam;
import com.alibaba.dashscope.audio.asr.vocabulary.Vocabulary;
import com.alibaba.dashscope.audio.asr.vocabulary.VocabularyService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Main {
    // API キーは北京リージョンとシンガポールリージョンで異なります。API キーの取得: https://www.alibabacloud.com/help/model-studio/get-api-key
    // 環境変数が設定されていない場合は、次の行を置き換えてください: public static String apiKey = "sk-xxx"
    public static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    public static void main(String[] args) throws NoApiKeyException, InputRequiredException {
        // 以下はシンガポールリージョンの設定です。呼び出し時には、"{WorkspaceId}" を実際のワークスペース ID に置き換えてください。設定はリージョンによって異なります。
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        // 以下はシンガポールリージョンの設定です。呼び出し時には、"{WorkspaceId}" を実際のワークスペース ID に置き換えてください。設定はリージョンによって異なります。
        Constants.baseWebsocketApiUrl = "wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference";

        String targetModel = "qwen-audio-3.0-asr-flash-streaming";

        JsonArray vocabularyJson = new JsonArray();
        List<Hotword> wordList = new ArrayList<>();
        wordList.add(new Hotword("Speech Lab", 4));

        for (Hotword word : wordList) {
            JsonObject jsonObject = new JsonObject();
            jsonObject.addProperty("text", word.text);
            jsonObject.addProperty("weight", word.weight);
            vocabularyJson.add(jsonObject);
        }

        VocabularyService service = new VocabularyService(apiKey);
        Vocabulary vocabulary = service.createVocabulary(targetModel, "testpfx", vocabularyJson);

        try {
            if ("OK".equals(service.queryVocabulary(vocabulary.getVocabularyId()).getStatus())) {
                Recognition recognizer = new Recognition();
                RecognitionParam param =
                        RecognitionParam.builder()
                                .model(targetModel)
                                .apiKey(apiKey)
                                .format("wav")
                                .sampleRate(16000)
                                .vocabularyId(vocabulary.getVocabularyId())
                                .build();

                try {
                    System.out.println("Recognition result: " + recognizer.call(param, new File("{YOUR_AUDIO_FILE}")));
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    // WebSocket 接続を閉じます
                    recognizer.getDuplexApi().close(1000, "bye");
                }
            }
        } finally {
            // 認識の成否にかかわらず、クォータを消費しないようにホットワードリストを削除します
            service.deleteVocabulary(vocabulary.getVocabularyId());
        }
        System.exit(0);
    }
}

class Hotword {
    String text;
    int weight;

    public Hotword(String text, int weight) {
        this.text = text;
        this.weight = weight;
    }
}

ホットワードの形式

ホットワードは JSON 配列として送信します。各要素は単一のホットワードとその属性を定義します。

: 映画のタイトルの認識精度を向上させる場合。

[
    {"text": "Warriors of the Rainbow: Seediq Bale", "weight": 4, "lang": "en"},
    {"text": "Seediq Bale", "weight": 4, "lang": "en"},
    {"text": "Goodbye Mr. Loser", "weight": 4, "lang": "en"},
    {"text": "Never Say Die", "weight": 4, "lang": "en"},
    {"text": "Confucius Family", "weight": 4, "lang": "en"},
    {"text": "Confucius' Family", "weight": 4, "lang": "en"}
]

フィールドの説明

フィールド

タイプ

必須

説明

text

string

はい

ホットワードのテキストです。任意の文字列ではなく、選択したモデルがサポートする言語の実際の単語である必要があります。長さの制限については、ホットワードテキストのルールをご参照ください。

weight

int

はい

ホットワードの重みです。有効な値: [1, 5]。推奨値: 4。重みが高いほど、モデルがその単語を出力する可能性が高くなります。Qwen-Audio-3.0-ASR-Flash-Streaming、Qwen-Audio-3.0-ASR-Flash-Filetrans、および Qwen-Audio-3.0-ASR-Flash モデルシリーズは、weight=50 (スーパーホットワード) もサポートしており、再現率を大幅に向上させます。スーパーホットワードは最大 50 個まで設定できます。調整のガイダンスについては、ホットワードの重みを調整するをご参照ください。

lang

string

いいえ

ホットワードが適用される言語を制限する言語コードです。言語が不明な場合は省略できます。

注: language_hints は音声認識 API のパラメータ (ホットワード API のパラメータではありません) であり、音声言語を宣言します。設定すると、language_hints と一致する言語のホットワードのみが有効になり、他の言語のホットワードは無視されます。

インスタントホットワード

即時ホットワードは、認識リクエストで vocabulary キーバリューペアとして直接渡されます。 これらは本質的に、事前コンパイル済みホットワードで使用される単語リストと同じ、重み付けされたホットワードのセットです。 ただし、リクエストにインラインで渡されるため、事前に作成されたリストは必要ありません。 これは、一時的なセッションレベルのホットワードチューニングに適しています。

重要インスタントホットワードは、Qwen-Audio-3.0-ASR-Flash-Streaming、Qwen-Audio-3.0-ASR-Flash-Filetrans、および Qwen-Audio-3.0-ASR-Flash モデルシリーズでのみサポートされています。これらのモデルでプリコンパイル済みホットワードとインスタントホットワードの両方を設定した場合、システムは 2 つのセットをマージします。マージされたセットに 2,000 個を超えるホットワードが含まれている場合、システムはランダムに 2,000 個を選択して使用します。

サポート対象のモデルとリージョン

Singapore

以下のモデルを呼び出すには、Singapore リージョンの API キーを使用します。

  • リアルタイム音声認識

    • Qwen-Audio-3.0-ASR-Flash-Streaming:qwen-audio-3.0-asr-flash-streaming
  • 非リアルタイム音声認識

    • Qwen-Audio-3.0-ASR-Flash-Filetrans:qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash:qwen-audio-3.0-asr-flash

China (Beijing)

以下のモデルを呼び出すには、Beijing リージョンの API キーを使用します。

  • リアルタイム音声認識

    • Qwen-Audio-3.0-ASR-Flash-Streaming:qwen-audio-3.0-asr-flash-streaming
  • 非リアルタイム音声認識

    • Qwen-Audio-3.0-ASR-Flash-Filetrans:qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash:qwen-audio-3.0-asr-flash

クイックスタート

認識リクエストの parametersvocabulary を渡します。ホットワードリストは不要です。各 API の詳細な使用方法については、音声テキスト変換 の API リファレンスをご参照ください。

(非リアルタイム音声認識):

curl --location --request POST 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
     --header "Authorization: Bearer $DASHSCOPE_API_KEY" \
     --header "Content-Type: application/json" \
     --header "X-DashScope-SSE: disable" \
     --data '{
    "model": "qwen-audio-3.0-asr-flash",
    "input": {
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "input_audio",
                        "input_audio": {
                            "data": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav"
                        }
                    }
                ]
            }
        ]
    },
    "parameters": {
        "format": "wav",
        "sample_rate": "16000",
        "vocabulary": {"John": 5, "Jane": 5}
    }
}'

ホットワードの形式

インスタントホットワードは、JSON オブジェクト (キーと値のペア) として渡します。キーはホットワードテキスト (文字列)、値はホットワードの重み (整数) です。ホットワードテキストのルールについては、「ホットワードテキストのルール」をご参照ください。

{"Michael": 5, "Jennifer": 5, "Speech Lab": 50}

重みの範囲は [1, 5] または 50 です。[1, 5] の値は通常のホットワードを表し、値が大きいほど優先度が高くなります。50 はスーパーホットワードを表し、再現率を大幅に向上させます。スーパーホットワードは最大 50 個まで設定できます。重みの調整については、「ホットワードの重みの調整」をご参照ください。

ホットワードの調整とルール

以下のホットワードのテキストルールと調整のヒントは、事前コンパイル済みホットワードと即時ホットワードの両方に適用されます。

ホットワードのテキストルール

ホットワードは実在する単語である必要があります。以下の文字数制限が適用されます。

  • 非 ASCII 文字を含む場合: 合計文字数 (中国語の漢字、日本語のかな、韓国語のハングル、キリル文字などの非 ASCII 文字と、ASCII 文字の合計) は 15 を超えてはなりません。

    例:

    • "厄洛替尼盐酸盐" (7 文字)
    • "EGFR抑制剂" (7 文字、EGFR は 4 つの ASCII 文字としてカウントされます)
    • "こんにちは" (5 文字)
    • "Фенибут Белфарм" (15 文字、中間のスペースを含む)
    • "Клофелин Белмедпрепараты" (24 文字)
  • ASCII 文字のみの場合: スペースで分割した後のセグメント数は 7 を超えてはなりません。

    例:

    • "Exothermic reaction" → 2 セグメント
    • "Human immunodeficiency virus type 1" → 5 セグメント
    • "The effect of temperature variations on enzyme activity in biochemical reactions" → 11 セグメント

ホットワードの重みの調整

重みは、モデルがホットワードをどの程度優先するかを制御します。適切に設定することで、ターゲット単語の認識精度を向上させながら、誤認識を回避できます。

重み

効果

使用するタイミング

1–2

わずかな優先度

ホットワードが一般的な単語と似た発音であり、過剰修正を避ける必要がある場合。

3–4

明確な優先度 (推奨)

ほとんどのシナリオに最適な初期値です。

5

強制的な優先度

単語が音声に頻繁に出現し、他の単語と混同される可能性が低い場合。重みが高すぎると、似た発音の単語がホットワードとして誤認識される可能性があります。

weight=4 でテストを開始し、結果に基づいて調整します。

スーパーホットワード (weight=50): 事前コンパイル済みホットワードとインスタントホットワードの両方がスーパーホットワードをサポートしていますが、対応しているのは Qwen-Audio-3.0-ASR-Flash-Streaming、Qwen-Audio-3.0-ASR-Flash-Filetrans、および Qwen-Audio-3.0-ASR-Flash モデルシリーズのみです。 ウェイトを 50 に設定すると、再現率が大幅に向上します。 スーパーホットワードは最大 50 個まで設定できます。

設計に関する推奨事項

  • シナリオ別にグループ化: 異なるビジネスシナリオ (医療用語用のグループと製品名用のグループなど) ごとにホットワードを個別に整理し、メンテナンスと再利用を簡素化します。事前コンパイル済みホットワードの場合は、シナリオごとに個別のホットワードリストを作成します。
  • 言語の混在 (事前コンパイル済みホットワード): 単一のホットワードリストに異なる言語のホットワードを混在させることができ、lang フィールドで区別されます。認識時に language_hints を指定すると、その言語のホットワードのみが有効になります。
  • 定期的なクリーンアップ (事前コンパイル済みホットワード): 使用しなくなったホットワードリストを削除して、クォータ (アカウントごとに最大 10 個) を解放します。

ホットワードの制限と課金

制限

説明

ホットワードリスト数 (事前コンパイルホットワード)

ホットワードリストは、事前コンパイルホットワード向けに事前に作成する永続的な単語リストです (各リストは 1 つの vocabulary_id に対応します)。アカウントあたり最大 10 個のリストを作成できます。リストはすべてのモデルで共有されます。

ホットワードの最大数 (事前コンパイル / 即時ホットワード)

ホットワードの最大数は、認識に使用するモデルによって異なります:

  • Qwen-Audio-3.0-ASR-Flash-Streaming、Qwen-Audio-3.0-ASR-Flash-Filetrans、Qwen-Audio-3.0-ASR-Flash シリーズ:最大 2,000 個。

  • Fun-ASR-Realtime、Fun-ASR-Flash、Fun-ASR シリーズのメインバージョンモデル:最大 2,000 個。

  • Fun-ASR-Realtime、Fun-ASR-Flash、Fun-ASR シリーズのその他のモデル、および Paraformer シリーズ:最大 500 個。

事前コンパイルホットワードの場合はホットワードリストごとの数、即時ホットワードの場合はリクエストごとの数です。

スーパーホットワード数 (事前コンパイル / 即時ホットワード)

スーパーホットワード (重み 50) は最大 50 個まで設定できます。

課金

事前コンパイルホットワードと即時ホットワードはいずれも無料です。

コンテキスト強化

サポート対象のモデルとリージョン

Singapore

以下のモデルを呼び出すには、Singapore リージョンのAPI キーを使用します。

  • リアルタイム音声認識:
    • Qwen-Audio-3.0-ASR-Flash-Streaming: qwen-audio-3.0-asr-flash-streaming
    • Fun-ASR-Realtime: fun-asr-realtime, fun-asr-realtime-2025-11-07
  • 非リアルタイム音声認識:
    • Qwen-Audio-3.0-ASR-Flash-Filetrans: qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash: qwen-audio-3.0-asr-flash
    • Fun-ASR-Flash: fun-asr-flash-2026-06-15

China (Beijing)

以下のモデルを呼び出すには、Beijing リージョンのAPI キーを使用します。

  • リアルタイム音声認識:
    • Qwen-Audio-3.0-ASR-Flash-Streaming: qwen-audio-3.0-asr-flash-streaming
    • Fun-ASR-Realtime: fun-asr-realtime, fun-asr-realtime-2025-11-07
  • 非リアルタイム音声認識:
    • Qwen-Audio-3.0-ASR-Flash-Filetrans: qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash: qwen-audio-3.0-asr-flash
    • Fun-ASR-Flash: fun-asr-flash-2026-06-15

クイックスタート

コンテキスト強化では、事前に作成されたリソースは不要です。認識リクエストでコンテキスト パラメーターを直接渡します。

  • 非リアルタイム音声認識: HTTP リクエストの input.messages でコンテキストメッセージを渡します。音声メッセージの前に配置します。
  • リアルタイム音声認識: WebSocket の run-task イベントの input.context でコンテキストメッセージを渡します。タスクの実行中にコンテキストを更新するには、continue-task イベントを送信します。DashScope SDK はこのプロトコルをラップしており、対応するパラメーターを使用してコンテキストを渡すことができます。

ユースケース: 会話履歴やドメイン用語をコンテキストとして渡すことで、人名、地名、製品名などの固有名詞の文字起こし精度が大幅に向上します。コンテキストは、マルチターン会話履歴 (前のターンの認識結果とモデルの応答) または単にドメイン用語や単語リストのセットとして使用できます。

重要

  • メッセージ数の制限: エンジンは最大 5 ターンの最新のコンテキストのみを保持します。ドメイン用語や単語リストのみを渡す場合は、通常 1 つのメッセージのみが必要であり、この制限の影響を受けません。制限を超えた場合、最も古いメッセージはエラーなしで自動的に無視されます。
  • テキスト長の制限: 1 ターンあたりの合計テキスト長 (同じターン内のすべての user メッセージと assistant メッセージの text フィールドの合計長) は、400 文字を超えてはなりません (文字単位でカウントし、英字、漢字、数字、スペース、句読点を含む各文字を 1 としてカウントします)。超過分はエラーなしで末尾から切り捨てられます。マルチターンコンテキストでは、各ターンを個別にカウントします。
  • コンテキストの動作: コンテキストは主に単語リストのマッチングによって効果を発揮するため、text フィールドには音声認識の対象となる正確な単語 (例:「Kubernetes」や「Bulge Bracket」) を含める必要があります。正確な単語を含まない意味的に関連する説明のみを渡しても、修正効果は限定的です。

非リアルタイム音声認識

input.messages を通じてコンテキストを渡します。input_text タイプの user ロールは、前のターンの認識結果またはドメイン関連の単語リストを渡し、assistant ロールは前のターンのモデルの応答を渡します (オプション)。コンテキストメッセージは音声メッセージの前に配置します。詳細については、「非リアルタイム音声認識 (Qwen-Audio-3.0-ASR-Flash/Fun-ASR-Flash)」をご参照ください。

前のターンからの認識結果 (user / input_text) とモデルの応答 (assistant / text) を渡します。ドメイン用語や単語リストのみを渡すには、会話履歴 (assistant メッセージ) を省略します。

{
    "model": "qwen-audio-3.0-asr-flash",
    "input": {
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "input_text",
                        "text": "前のターンのユーザー発話の認識結果"
                    }
                ]
            },
            {
                "role": "assistant",
                "content": [
                    {
                        "type": "text",
                        "text": "前のターンの大規模モデルの応答内容"
                    }
                ]
            },
            {
                "role": "user",
                "content": [
                    {
                        "type": "input_audio",
                        "input_audio": {
                            "data": "現在のターンで認識対象となる音声のURLまたはBase64"
                        }
                    }
                ]
            }
        ]
    },
    "parameters": {}
}

リアルタイム音声認識

リアルタイム音声認識では、input.context を通じてコンテキストを渡し、音声は WebSocket バイナリフレームとして送信されます。タスクの実行中にコンテキストを更新するには、continue-task イベントを送信します。WebSocket イベントのフォーマットについては、「クライアントイベント」をご参照ください。DashScope SDK のパラメーターについては、「Python SDK (≥ 1.25.23)」および「Java SDK (≥ 2.22.23)」をご参照ください。

マルチターン会話コンテキスト

前のターンの認識結果 (user / input_text) とモデルの応答 (assistant / text) を渡します。ドメイン用語または単語リストのみを渡すには、会話履歴 (assistant メッセージ) を省略します。

{
    "header": {
        "action": "run-task",
        "task_id": "2bf83b9a-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "streaming": "duplex"
    },
    "payload": {
        "task_group": "audio",
        "task": "asr",
        "function": "recognition",
        "model": "qwen-audio-3.0-asr-flash-streaming",
        "parameters": {
            "format": "pcm",
            "sample_rate": 16000
        },
        "input": {
            "context": [
                {
                    "role": "user",
                    "content": [
                        {
                            "type": "input_text",
                            "text": "前のターンのユーザー発話の認識結果"
                        }
                    ]
                },
                {
                    "role": "assistant",
                    "content": [
                        {
                            "type": "text",
                            "text": "前のターンの大規模モデルの応答内容"
                        }
                    ]
                }
            ]
        }
    }
}
from dashscope.audio.asr import Recognition

recognition = Recognition(
    model='qwen-audio-3.0-asr-flash-streaming',
    format='wav',
    sample_rate=16000,
    callback=None)

context = {
    "context": [
        {
            "role": "user",
            "content": [
                {
                    "type": "input_text",
                    "text": "前のターンのユーザー発話の認識結果"
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "type": "text",
                    "text": "前のターンの大規模モデルの応答内容"
                }
            ]
        }
    ]
}

result = recognition.call('audio.wav', raw_input=context)
print(result.output)
Map<String, Object> userContent = new HashMap<>();
userContent.put("type", "input_text");
userContent.put("text", "前のターンのユーザー発話の認識結果");

Map<String, Object> assistantContent = new HashMap<>();
assistantContent.put("type", "text");
assistantContent.put("text", "前のターンの大規模モデルの応答内容");

Map<String, Object> userMessage = new HashMap<>();
userMessage.put("role", "user");
userMessage.put("content", Arrays.asList(userContent));

Map<String, Object> assistantMessage = new HashMap<>();
assistantMessage.put("role", "assistant");
assistantMessage.put("content", Arrays.asList(assistantContent));

Map<String, Object> input = new HashMap<>();
input.put("context", Arrays.asList(userMessage, assistantMessage));

RecognitionParam param = RecognitionParam.builder()
        .model("qwen-audio-3.0-asr-flash-streaming")
        .format("wav")
        .sampleRate(16000)
        .input(input)
        .build();

Recognition recognizer = new Recognition();
System.out.println(recognizer.call(param, new File("audio.wav")));
recognizer.getDuplexApi().close(1000, "bye");

コンテキストの text フィールドは、単語リスト、自然言語の段落、またはその両方の混在など、柔軟なフォーマットに対応しており、無関係なテキストに対する許容性も高いです。

ある音声クリップの正しい認識結果は「How many of the insider jargon terms in the investment banking world do you know? First, the nine major foreign investment banks—Bulge Bracket, BB ...」です。

コンテキスト強化なし

コンテキスト強化がない場合、一部の投資銀行名が誤って認識されます。たとえば、「Bird Rock」は「Bulge Bracket」であるべきです。

認識結果:「How many of the insider jargon terms in the investment banking world do you know? First, the nine major foreign investment banks—Bird Rock, BB ...」

コンテキスト強化あり

コンテキスト強化がある場合、投資銀行名が正しく認識されます。

認識結果:「How many of the insider jargon terms in the investment banking world do you know? First, the nine major foreign investment banks—Bulge Bracket, BB ...」

この強化を実現するには、コンテキストの text フィールドに「Bulge Bracket」などの専門用語を含む単語リストまたは自然言語の段落を追加します。

API リファレンス

よくある質問

Q:ホットワードを設定しても認識精度が向上しないのはなぜですか?

次の点を順にご確認ください:

  1. モデルの一致 (事前コンパイル済みホットワード):ホットワードリストを作成する際に指定した target_model は、音声認識 API で使用されるモデルと一致する必要があります。両者が一致しない場合、API はエラーを返さず、認識は引き続き結果を返しますが、ホットワードは有効になりません。結果に期待されるホットワードが含まれていない場合は、まずこの点を確認してください。
  2. モデルのサポート
  3. 重み:重みを 4 から 5 に上げて効果を確認してください。似た発音の単語がホットワードとして誤認識される場合は、4 に戻してください。
  4. ホットワードリストのステータス (事前コンパイル済みホットワード):クエリ API を使用して、statusOK であることを確認してください。

Q:事前コンパイル済みホットワードは、リアルタイム音声認識と非リアルタイム音声認識で同じように使用されますか?

作成方法は同じですが、呼び出し方が異なります:

  • リアルタイム音声認識:認識または WebSocket 接続パラメーターで vocabulary_id を渡します。
  • 音声ファイルの文字起こし:文字起こしリクエストパラメーターで vocabulary_id を渡します。

どちらの場合も、target_model は実際に呼び出す音声認識モデルと一致する必要があります。即時ホットワードはリストも target_model も不要で、リクエストパラメーターで vocabulary のキーと値のペアを渡すだけです。即時ホットワードをサポートする Qwen-Audio-3.0-ASR-Flash-Streaming、Qwen-Audio-3.0-ASR-Flash-Filetrans、および Qwen-Audio-3.0-ASR-Flash モデルシリーズでは、両方が設定されている場合、システムは事前コンパイル済みホットワードと即時ホットワードをマージします。マージされたセットに 2,000 を超えるホットワードが含まれている場合、システムはランダムに 2,000 を選択して使用します。

Q:ホットワードとコンテキスト強化以外に、認識精度を向上させる方法はありますか?

次の方法で最適化することもできます:

  • 音声品質:サンプリングレートをモデルの要件 (16 kHz または 8 kHz) に合わせ、バックグラウンドノイズを低減してください。
  • 適切なモデルの選択:シナリオによって適したモデルは異なります。詳細については、「音声テキスト変換」の選択ガイドをご参照ください。
  • 言語の指定:単一言語のシナリオで精度を向上させるには、language_hints を介して音声言語を宣言してください。