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
- [Pegue sua chave API] (/api-reference/preparation/api-key) e defini-lo como uma variável de ambiente.
- [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:
- Reconhecimento de fala em tempo real.
- Qwen-Audio-3.1-ASR-Flash-Streaming: qwen-audio-3.1-asr-flash-streaming
- Qwen-Audio-3.0-ASR-Flash-Streaming: qwen-audio-3.0-asr-flash-streaming
- Fun-ASR-Realtime: fun-asr-realtime
- Reconhecimento de fala em tempo real:
- Qwen-Audio-3.1-ASR-Flash-Filetrans: qwen-audio-3.1-asr-flash-filetrans
- Qwen-Audio-3.0-ASR-Flash-Filetrans: qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-3.1-ASR-Flash: qwen-audio-3.1-asr-flash
- 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
-Começo rápido.
Fluxo de trabalho
Crie uma lista de palavras quentes primeiro, e depois refira sua identidade durante o reconhecimento de fala:
-
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.
- 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:
- Reconhecimento de fala em tempo real.
- Qwen-Audio-3.1-ASR-Flash-Streaming: qwen-audio-3.1-asr-flash-streaming
- Qwen-Audio-3.0-ASR-Flash-Streaming: qwen-audio-3.0-asr-flash-streaming
- Reconhecimento de fala em tempo real:
- Qwen-Audio-3.1-ASR-Flash-Filetrans: qwen-audio-3.1-asr-flash-filetrans
- Qwen-Audio-3.0-ASR-Flash-Filetrans: qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-3.1-ASR-Flash: qwen-audio-3.1-asr-flash
- Qwen-Audio-3.0-ASR-Flash: qwen-audio-3.0-asr-flash
-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:
-
Com caracteres não-ASCII: A contagem total de caracteres (a soma de caracteres não-ASCII, tais como caracteres chineses, kana japonês, hangul coreano, e letras cirílicos, além de quaisquer caracteres ASCII) não deve exceder 15.
Exemplos:
"厄洛替尼盐酸盐"7 caracteres"EGFR抑制剂"7 caracteres, onde EGFR conta como 4 caracteres ASCII)"こんにちは"(5 caracteres)"Фенибут Белфарм"(15 personagens, incluindo o espaço no meio)"Клофелин Белмедпрепараты"(24 caracteres) -- excede o limite
-
Após dividir os espaços, o número de segmentos não deve exceder 7.
Exemplos:
-
"Exothermic reaction"- 2 segmentos. -
"Human immunodeficiency virus type 1"- 5 segmentos. -
"The effect of temperature variations on enzyme activity in biochemical reactions"11 segmentos, ultrapassa o limite.
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
- Grupo por cenário**: Organize palavras quentes separadamente para diferentes cenários de negócios (por exemplo, um grupo para termos médicos e outro para nomes de produtos) para simplificar a manutenção e reutilização. Para palavras-chave pré-compiladas, crie uma lista de palavras-chave para cada cenário.
- Uma única lista de palavras quentes pode misturar palavras quentes em diferentes línguas, distinguidas pelo
langCampo. Quando você especificarlanguage_hintsdurante o reconhecimento, apenas palavras diretas nessa língua fazem efeito. - Limpe regularmente, apague as listas de palavras quentes que você não usa para liberar sua quota (até 10 por conta).
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:
- Reconhecimento de fala em tempo real.
- Qwen-Audio-3.1-ASR-Flash-Streaming: qwen-audio-3.1-asr-flash-streaming
- Qwen-Audio-3.0-ASR-Flash-Streaming: qwen-audio-3.0-asr-flash-streaming
- Fun-ASR-Realtime: fun-asr-realtime
- Reconhecimento de fala em tempo real:
- Qwen-Audio-3.1-ASR-Flash-Filetrans: qwen-audio-3.1-asr-flash-filetrans
- Qwen-Audio-3.0-ASR-Flash-Filetrans: qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-3.1-ASR-Flash: qwen-audio-3.1-asr-flash
- Qwen-Audio-3.0-ASR-Flash: qwen-audio-3.0-asr-flash
- Fun-ASR-Flash: fun-asr-flash-2026-06-15
-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:
- "Não-real-time reconhecimento de fala" "Passar mensagens de contexto em
input.messagesdo pedido HTTP, colocado antes da mensagem de áudio. -
- Reconhecimento de fala em tempo real: * Passe mensagens de contexto em
input.contextdo WebSocketrun-taskevento. Para atualizar o contexto enquanto a tarefa corre, envie umcontinue-taskevento. O SDK DashScope envolve este protocolo, para que você possa passar o contexto diretamente através de um parâmetro.
- Reconhecimento de fala em tempo real: * Passe mensagens de contexto em
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.
- O motor mantém no máximo as 5 últimas voltas de contexto. Quando você passa apenas termos de domínio ou uma lista de palavras, você geralmente precisa de apenas uma mensagem e não são afetados por este limite. Quando o limite é ultrapassado, as primeiras mensagens são ignoradas automaticamente sem um erro.
- ** Limite de comprimento de texto:** O comprimento total do texto por turno (o comprimento combinado do
textCampos de todosusereassistantmensagens na mesma volta) não deve exceder 400 caracteres (contados por personagem, onde cada personagem -- incluindo letras, caracteres chineses, dígitos, espaços, e pontuação -- conta como 1). Qualquer excesso é truncado do fim sem erro. Em um contexto multi-turno, cada turno é contado independentemente. - Contexto faz efeito principalmente através de correspondências de listas de palavras, então o
textO campo deve conter as palavras exatas a serem reconhecidas no áudio (por exemplo, Kubernetes ou Bulge Bracket). Passar apenas uma descrição semanticamente relacionada que não contém as palavras exatas tem efeito corretivo limitado.
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
- ** Gestão de palavras quentes pré-compiladas**: [HTTP] (/api-reference/speech-recognition/custom-hotwords/http-api), [Python SDK] (/api-reference/speech-recognition/custom-hotwords/python-sdk), [Java SDK] (/api-reference/speech-recognition/custom-hotwords/java-sdk)
- Reconhecimento de fala em tempo realQwen-ASR](/api-reference/speech-recognition/qwen-asr-realtime/websocket-api), Fun-ASR
- Reconhecimento de fala em tempo real:Qwen-ASR](/api-reference/speech-recognition/qwen-asr/dashscope), Fun-ASR
FAQ
Reconhecimento não melhora depois de definir palavras?
Verifique o seguinte em ordem:
- *Modelo de jogo (palavras quentes pré-compiladas) *
target_modelespecificado 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. - Assegure-se que o modelo pertence a uma família que suporta palavras quentes (veja as listas de modelos suportadas acima).
- 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.
- 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:
- -Reconhecimento de fala em tempo real.
vocabulary_idnos parâmetros de reconhecimento ou conexão WebSocket. - Tradução:
vocabulary_idnos parâmetros de solicitação de transcrição.
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:
- Qualidade do áudio**: igualar a taxa de amostragem com a exigência do modelo (16 kHz ou 8 kHz) e reduzir o ruído de fundo.
- Escolha o modelo certo, cenários diferentes exigem modelos diferentes. Para detalhes, veja o [Speech-to-text] (/developer-guides/speech/speech-to-text-models) guia de seleção.
- Especifique a linguagem, declare a linguagem áudio através da qual o som é usado.
language_hintspara melhorar a precisão em cenários de uma única linguagem.