QwenCloudBRASIL
Tradução de apoio para consulta. Código e identificadores técnicos preservados. Consultar referência original ↗

Melhore a precisão de reconhecimento.

Melhore a precisão de reconhecimento de fala usando palavras quentes personalizadas e aprimoramento de contexto.

Este tópico descreve o alcance e o uso de cada abordagem.

Só o espaço de trabalho primário suporta palavras quentes. Sub-espaços de trabalho não.

Visão geral

Alguns termos comerciais, como nomes de produtos, substantivos próprios, e jargão da indústria, estão ausentes do vocabulário geral de um modelo e, portanto, são reconhecidos menos precisamente. QwenCloud Reconhecimento de fala fornece três maneiras de melhorar o reconhecimento de tais termos: palavras quentes pré-compiladas, palavras quentes instantâneas, e aprimoramento do contexto.

Palavras quentes pré-compiladas vs. palavras quentes instantâneas vs. melhoria do contexto

Palavras personalizadas vêm em duas formas: palavras e palavras instantâneas. A tabela seguinte compara as três abordagens, que se aplicam a diferentes modelos e APIs:

Dimensão Palavras quentes pré-compiladas Palavras quentes instantâneas Melhoramento de contexto
Como funciona Criar um vocabulário ponderado com antecedência. O modelo aumenta a probabilidade de correspondência dessas palavras durante a decodificação. Passe palavras pesadas em linha com o pedido. O modelo aumenta a probabilidade de correspondência durante a decodificação. Passe o histórico de conversa ou texto de domínio. O modelo usa esse contexto para corrigir os resultados de reconhecimento.
Modelos apoiados. Veja. Modelos apoiados.- Lá embaixo. Veja. Modelos apoiados.- Lá embaixo. Veja. Modelos apoiados.- Lá embaixo.
Quando usar O vocabulário é conhecido e relativamente estável, e você precisa reutilizar a mesma lista de palavras entre pedidos (por exemplo, nomes de produtos ou termos médicos). Palavras temporárias de nível de sessão que não precisam ser reutilizadas através de pedidos (por exemplo, o nome de uma pessoa ou um termo ad hoc usado em uma única sessão). O vocabulário muda dinamicamente durante uma conversa, ou você precisa de contexto para ajudar o modelo a entender substantivos apropriados (por exemplo, participantes em minutos de reunião ou termos de negócios em conversas cliente-serviço).
Como configurar Crie uma lista de palavras com antecedência e passe a identificação da lista quando fizer uma ligação. Passo.vocabularyPares de valor chave diretamente no pedido. Nenhuma lista é necessária. Passe o histórico de conversa ou texto de domínio com cada pedido. Para reconhecimento não em tempo real, useinput.messagesPara reconhecimento em tempo real, useinput.context.

Pré-requisitos

  1. [Pegue sua chave API] (/api-reference/preparation/api-key) e defini-lo como uma variável de ambiente.
  2. [Instalar o DashScope SDK] (/api-reference/preparation/install-sdk).

Palavras quentes pré-compiladas

Crie uma lista de palavras com antecedência, obtenha sua lista de identificação, e passe essa identificação durante o reconhecimento. Esta abordagem se encaixa em cenários onde o vocabulário é conhecido e relativamente estável e você precisa reutilizar a mesma lista de palavras através de pedidos, como nomes de produtos ou termos médicos. Se precisar atualizar uma lista de palavras, espere pelo menos 5 minutos entre as atualizações. Caso contrário, as palavras atualizadas podem não fazer efeito.

Palavras instantâneas são apoiadas apenas pelo Qwen-Audio-3.x-ASR-Flash-Streaming, Qwen-Audio-3.x-ASR-Flash-Filetrans, e Qwen-Audio-3.x-ASR-Flash Série de modelos. Para estes modelos, se configurarmos palavras quentes pré-compiladas e instantâneas, o sistema mescla os dois conjuntos. Se o conjunto fundido contém mais de 2.000 palavras quentes, o sistema aleatoriamente seleciona 2.000 para usar.

Modelos apoiados (pré-compilados)

Os seguintes modelos suportam palavras-chave pré-compiladas:

-Começo rápido.

Fluxo de trabalho

Crie uma lista de palavras quentes primeiro, e depois refira sua identidade durante o reconhecimento de fala:

  1. Crie uma lista de palavras quentes.

    Chame a API da lista de palavras. Você deve especificar alvo_modelo (alvoModelo em Java) para indicar qual modelo de reconhecimento de fala a lista pertence.

Se você já tem uma lista de palavras quentes (que você pode verificar através da lista de todas as palavras quentes lista API), pular este passo.

  1. Ligue para a API de reconhecimento de fala e passe a lista de palavras.

O modelo usado para reconhecimento deve corresponder ao target_model (targetModel em Java) especificado quando a lista foi criada. Caso contrário, as palavras não fazem efeito.

Código de amostra.

Um exemplo de ponta a ponta: criar uma lista de palavras, executar reconhecimento de fala, e excluir a lista.

A API de gerenciamento de palavras e a API de reconhecimento de fala devem usar a mesma conta. Caso contrário, a API de reconhecimento não pode acessar a lista de palavras quentes correspondente.

Python

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

dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

dashscope.base_http_api_url = 'https://maas.qwencloudapi.com/api/v1'
dashscope.base_websocket_api_url = 'wss://maas.qwencloudapi.com/api-ws/v1/inference'
prefix = 'testpfx'
target_model = "qwen-audio-3.1-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:
  # Delete the hotword list regardless of whether recognition succeeds, to avoid consuming quota
  service.delete_vocabulary(vocabulary_id)
```

Java

```java
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 {
  public static String apiKey = System.getenv("DASHSCOPE_API_KEY");

  public static void main(String[] args) throws NoApiKeyException, InputRequiredException {
    Constants.baseHttpApiUrl = "https://maas.qwencloudapi.com/api/v1";
    Constants.baseWebsocketApiUrl = "wss://maas.qwencloudapi.com/api-ws/v1/inference";

    String targetModel = "qwen-audio-3.1-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 {
          recognizer.getDuplexApi().close(1000, "bye");
        }
      }
    } finally {
      // Delete the hotword list regardless of whether recognition succeeds, to avoid consuming quota
      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;
  }
}
```

Formato de palavras quentes

Submeta palavras quentes como uma matriz JSON, onde cada elemento define uma única palavra quente e seus atributos.

Exemplo: melhorar a precisão de reconhecimento dos títulos de filmes.

[
  {"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"}
]

Descrições de campo:

Campo Tipo Obrigatório Descrição
texto string Sim O texto de texto. Deve ser uma palavra real, em vez de uma cadeia arbitrária de caracteres, e sua linguagem deve estar dentro do alcance suportado pelo modelo selecionado. Para limites de comprimento, veja Regras de texto de palavras quentes.
peso int Sim O peso da palavra quente. Valores válidos: [1, 5]. Recomendado: 4. Um peso maior faz o modelo mais provável de produzir a palavra. O Qwen-Audio-3.x-ASR-Flash-Streaming, Qwen-Audio-3.x-ASR-Flash-Filetrans, e Qwen-Audio-3.x-ASR-Flash Série de modelos também suportamweight=50( super palavras quentes), o que melhora muito a memória. Você pode ter no máximo 50 palavras super quentes. Para ajustar a orientação, veja Ajuste os pesos das palavras quentes..
Lang. string Não O código de linguagem que limita a linguagem que a palavra quente se aplica. Você pode omitir quando a linguagem é desconhecida. Nota:language_hintsé um parâmetro da API de reconhecimento de fala (não da API de palavra quente) e declara a linguagem de áudio. Uma vez definido, apenas palavras quentes cuja linguagem combinalanguage_hints Fazer efeito, palavras quentes em outras línguas são ignoradas.

Palavras quentes instantâneas

Palavras instantâneas são passadas como vocabulary Os pares de valor-chave diretamente no pedido de reconhecimento. São essencialmente um conjunto de palavras pesadas ponderadas, o mesmo que a lista de palavras usadas por palavras quentes pré-compiladas, exceto que são passadas em linha com o pedido e não requerem nenhuma lista pré-criada. Isso combina com afinação temporária de palavras quentes.

Palavras instantâneas são apoiadas apenas pelo Qwen-Audio-3.x-ASR-Flash-Streaming, Qwen-Audio-3.x-ASR-Flash-Filetrans, e Qwen-Audio-3.x-ASR-Flash Série de modelos. Para estes modelos, se configurarmos palavras quentes pré-compiladas e instantâneas, o sistema mescla os dois conjuntos. Se o conjunto fundido contém mais de 2.000 palavras quentes, o sistema aleatoriamente seleciona 2.000 para usar.

Modelos apoiados (instante)

Os seguintes modelos suportam palavras instantâneas:

-Começo rápido.

Passo. vocabulary na parameters do pedido de reconhecimento. Não é necessária nenhuma lista de palavras. Para uso detalhado de cada API, veja a referência da API em Speech-to-text.

Exemplos de reconhecimento de fala em tempo real:

curl --location --request POST 'https://maas.qwencloudapi.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.1-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}
  }
}'

Formato de palavras quentes

Passe palavras quentes instantâneas como um objeto JSON (par de valor chave): a chave é o texto de palavras quentes (stringE o valor é o peso da palavra quente.integer). Para regras de texto de palavras quentes, veja [Regras de texto de palavras quentes] (#hotword-text-rules).

Exemplo:

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

O peso varia mais de [1, 5] ou 50: valores em [1, 5] definir palavras quentes regulares, onde um valor maior significa uma preferência mais forte; 50 define uma palavra quente super, que melhora muito a memória. Você pode ter no máximo 50 palavras super quentes. Para ajuste de peso, veja [Ajustar pesos de palavras quentes] (#adjust-hotword-weights).

Afinação de palavras e regras

As seguintes regras de texto e dicas de sintonia se aplicam tanto a palavras quentes pré-compiladas quanto instantâneas.

Regras de texto de palavras quentes

Uma palavra quente deve ser uma palavra real. Os seguintes limites de comprimento se aplicam:

Ajuste os pesos das palavras quentes.

O peso controla o quão forte o modelo prefere uma palavra quente. Ajustando-o adequadamente melhora a precisão de reconhecimento das palavras-alvo, evitando o mal-conhecimento.

Peso Efeito Quando usar
1-2 Ligeira preferência A palavra quente soa semelhante a uma palavra comum, e você precisa evitar a correção excessiva.
3-4 Preferência clara (recomendada) O melhor valor inicial para a maioria dos cenários.
5 Preferência forçada A palavra aparece frequentemente no áudio e é improvável que seja confundida com outras palavras. Um peso muito alto pode fazer palavras similares serem mal reconhecidas como a palavra quente.

Comecem a testar em weight=4 e ajustar com base nos resultados.

Super palavras quentes (weight=50 Ambas as palavras quentes pré-compiladas e instantâneas suportam palavras quentes super, mas apenas as palavras quentes Qwen-Audio-3.x-ASR-Flash-Streaming, Qwen-Audio-3.x-ASR-Flash-Filetrans, e Qwen-Audio-3.x-ASR-Flash Série modelo sim. Um peso de 50 melhora muito a memória. Você pode ter no máximo 50 palavras super quentes.

Recomendações de design

Limites de palavras quentes e faturamento

Limite Descrição
Número de listas de palavras quentes (palavras quentes pré-compiladas) Uma lista de palavras quentes é uma lista de palavras persistente criada com antecedência para palavras quentes pré-compiladas (cada lista corresponde a um vocabulário_id). Você pode ter até 10 listas por conta, compartilhadas em todos os modelos.
Número máximo de palavras quentes (pré-compiladas / palavras quentes instantâneas) O número máximo de palavras-chave depende do modelo usado para reconhecimento: Qwen-Audio-3.x-ASR-Flash-Streaming, Qwen-Audio-3.x-ASR-Flash-Filetrans, e Qwen-Audio-3.x-ASR-Flash Série: até 2.000. Modelos de versão principal do Fun-ASR-Realtime, Fun-ASR-Flash, e Fun-ASR Série: até 2.000. Outros modelos na Fun-ASR-Realtime, Fun-ASR-Flash, e Fun-ASR Série, e a série Paraformer: até 500. Para palavras quentes pré-compiladas, a contagem é por lista de palavras quentes. Para palavras diretas instantâneas, a contagem é por pedido.
Número de palavras quentes super (pré-compiladas / palavras quentes instantâneas) Você pode ter até 50 palavras super quentes (peso 50).
Contagem Palavras quentes pré-compiladas e instantâneas são grátis.

Melhoramento de contexto

Modelos apoiados (contexto)

Os seguintes modelos suportam o aprimoramento do contexto:

-Começo rápido.

O aprimoramento de contexto não requer recursos pré-criados. Passe os parâmetros de contexto diretamente no pedido de reconhecimento:

Use casos: Passar o histórico de conversa ou termos de domínio como contexto melhora significativamente a precisão de transcrição de substantivos adequados, como nomes de pessoas, nomes de lugares e termos de produto. O contexto pode ser um histórico de conversas multi-turnos (resultados de reconhecimento e respostas de modelos de turnos anteriores) ou simplesmente um conjunto de termos de domínio ou uma lista de palavras.

Non-real-time speech recognition

 Passe o contexto através `input.messages`. O `user` O papel com o `input_text` O tipo passa o resultado do reconhecimento de turnos anteriores ou uma lista de palavras relacionadas com o domínio, e o `assistant` O papel passa as respostas do modelo de turnos anteriores (opcional).  Coloque mensagens de contexto antes da mensagem de áudio. Para detalhes, veja [Reconhecimento de fala em tempo real (Qwen-Audio-3.x-ASR-Flash/Fun-ASR-Flash)](/api-reference/speech-recognition/fun-asr-recording/restful-api).

 Passe os resultados de reconhecimento de turnos anteriores.`user`/`input_text`) e o modelo responde (`assistant`/`text`). Para passar apenas termos de domínio ou uma lista de palavras, omitir o histórico de conversação (o `assistant` - Mensagens.

```json
{
  "model": "qwen-audio-3.1-asr-flash",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "input_text",
            "text": "Recognition result of the user's speech in the previous turn"
          }
        ]
      },
      {
        "role": "assistant",
        "content": [
          {
            "type": "text",
            "text": "Response content of the large model in the previous turn"
          }
        ]
      },
      {
        "role": "user",
        "content": [
          {
            "type": "input_audio",
            "input_audio": {
              "data": "URL or Base64 of the audio to be recognized in the current turn"
            }
          }
        ]
      }
    ]
  },
  "parameters": {}
}
```

Real-time speech recognition

 Reconhecimento de fala em tempo real passa o contexto através `input.context`E o áudio é enviado como quadros binários do WebSocket. Para atualizar o contexto enquanto a tarefa corre, envie um `continue-task`  evento. Para parâmetros SDK DashScope e amostras de código, veja o [Python SDK] (/api-reference/speech-recognition/fun-asr-realtime/python-sdk(0,25.23) e o [Java SDK] (/api-reference/speech-recognition/fun-asr-realtime/java-sdk) (≥ 2.22.23).

 Passe os resultados de reconhecimento de turnos anteriores.`user`/`input_text`) e o modelo responde (`assistant`/`text`). Para passar apenas termos de domínio ou uma lista de palavras, omitir o histórico de conversação (o `assistant` - Mensagens.

WebSocket

    ```json
    {
      "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.1-asr-flash-streaming",
        "parameters": {
          "format": "pcm",
          "sample_rate": 16000
        },
        "input": {
          "context": [
            {
              "role": "user",
              "content": [
                {
                  "type": "input_text",
                  "text": "Recognition result of the user's speech in the previous turn"
                }
              ]
            },
            {
              "role": "assistant",
              "content": [
                {
                  "type": "text",
                  "text": "Response content of the large model in the previous turn"
                }
              ]
            }
          ]
        }
      }
    }
    ```

Python SDK

    ```python
    from dashscope.audio.asr import Recognition
    recognition = Recognition(
      model='qwen-audio-3.1-asr-flash-streaming',
      format='wav',
      sample_rate=16000,
      callback=None)
    context = {
      "context": [
        {
          "role": "user",
          "content": [
            {
              "type": "input_text",
              "text": "Recognition result of the user's speech in the previous turn"
            }
          ]
        },
        {
          "role": "assistant",
          "content": [
            {
              "type": "text",
              "text": "Response content of the large model in the previous turn"
            }
          ]
        }
      ]
    }
    result = recognition.call('audio.wav', raw_input=context)
    print(result.output)
    ```

Java SDK

    ```java
    Map<String, Object> userContent = new HashMap<>();
    userContent.put("type", "input_text");
    userContent.put("text", "Recognition result of the user's speech in the previous turn");
    Map<String, Object> assistantContent = new HashMap<>();
    assistantContent.put("type", "text");
    assistantContent.put("text", "Response content of the large model in the previous turn");
    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.1-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");
    ```

Exemplo

O text O campo do contexto aceita um formato flexível, uma lista de palavras, um parágrafo de linguagem natural, ou uma mistura de ambos, e é altamente tolerante com texto irrelevante.

O resultado correto para um clipe de áudio deve ser "Quantos termos de jargão de investimento no mundo bancário, você sabe? Primeiro, os nove maiores bancos de investimento estrangeiros, Bulge Bracket, BB...

Sem o realce do contexto Com o aprimoramento do contexto
Sem o aumento de contexto, alguns nomes de bancos de investimento são reconhecidos incorretamente. Por exemplo, "Pedra do Pássaro" deve ser "Bulge Bracket". Resultado do reconhecimento: "...os nove maiores bancos de investimento estrangeiros... Com o aprimoramento do contexto, os nomes dos bancos de investimento são reconhecidos corretamente. Resultado do reconhecimento: "...os nove maiores bancos de investimento estrangeiros...

Para conseguir esse aprimoramento, adicione uma lista de palavras ou parágrafos de linguagem natural que inclua termos especializados como "Bulge Bracket" para o text campo do contexto.

Referência da API

FAQ

Reconhecimento não melhora depois de definir palavras?

Verifique o seguinte em ordem:

  1. *Modelo de jogo (palavras quentes pré-compiladas) * target_model especificado quando você criou a lista de palavras quentes deve corresponder ao modelo usado pela API de reconhecimento de fala. Quando os dois não combinam, a API não retorna um erro e o reconhecimento ainda retorna resultados, mas as palavras não fazem efeito. Quando os resultados não chegarem, verifique isso primeiro.
  2. Assegure-se que o modelo pertence a uma família que suporta palavras quentes (veja as listas de modelos suportadas acima).
  3. Levante o peso de 4 para 5 e observe o efeito. Se palavras semelhantes são mal reconhecidas como a palavra quente, reverta para 4.
  4. Hotword list status (palavras quentes pré-compiladas): Use a API de consulta para confirmar que status É OK.

Palavras de fogo pré-compiladas são usadas da mesma forma em tempo real e não em tempo real?

Eles são criados da mesma forma, mas chamados de outra forma:

Em ambos os casos, o target_model Deve corresponder ao modelo de reconhecimento de fala que você realmente chama. Palavras instantâneas não requerem lista e não target_model Apenas passe vocabulary Pares de valor-chave nos parâmetros de solicitação. Pelo... Qwen-Audio-3.x-ASR-Flash-Streaming, Qwen-Audio-3.x-ASR-Flash-Filetrans, e Qwen-Audio-3.x-ASR-Flash Série de modelos, que suportam palavras instantâneas, o sistema se funde com palavras pré-compiladas e instantâneas quando ambas são configuradas. Se o conjunto fundido contém mais de 2.000 palavras quentes, o sistema aleatoriamente seleciona 2.000 para usar.

Além de palavras quentes e aprimoramento de contexto, que outras maneiras podem melhorar a precisão de reconhecimento?

Você também pode otimizar das seguintes maneiras: