Model Studio speech recognition menyediakan hotword kustom dan peningkatan konteks untuk meningkatkan akurasi pengenalan terhadap istilah spesifik domain, nama produk, dan kosakata khusus. Topik ini menjelaskan model, wilayah, serta penggunaan yang didukung untuk kedua pendekatan tersebut.
Fitur hotword hanya didukung di ruang kerja primary. Sub-ruang kerja tidak mendukung hotword.
Ikhtisar
Beberapa kosakata spesifik bisnis—seperti nama produk, nama diri, dan istilah industri—tidak termasuk dalam leksikon umum model dan sering kali dikenali secara salah. Model Studio speech recognition menyediakan hotword kustom dan peningkatan konteks untuk meningkatkan akurasi pengenalan terhadap istilah-istilah tersebut.
Hotword kustom vs. peningkatan konteks
Model Studio speech recognition menyediakan dua pendekatan untuk menangani istilah khusus. Masing-masing berlaku untuk model dan antarmuka yang berbeda:
|
Dimensi |
Hotword kustom |
Peningkatan konteks |
|
Cara kerja |
Menyediakan daftar kata berbobot. Model meningkatkan probabilitas kecocokan istilah yang terdaftar selama decoding. |
Meneruskan riwayat percakapan atau teks domain sebagai konteks. Model menggunakannya untuk mengoreksi hasil pengenalan. |
|
Model yang didukung |
Famili Fun-ASR dan Paraformer (real-time + non-real-time) |
fun-asr-flash-2026-06-15 (hanya non-real-time) |
|
Paling cocok untuk |
Istilah yang diketahui dan relatif stabil yang ingin Anda gunakan ulang di berbagai permintaan (seperti nama produk dan istilah medis) |
Istilah yang berubah secara dinamis per percakapan, atau nama diri yang dapat lebih baik dikenali oleh model dengan petunjuk kontekstual (seperti nama peserta rapat atau istilah domain dalam panggilan dukungan) |
|
Konfigurasi |
Buat daftar kosakata terlebih dahulu dan teruskan ID-nya saat pengenalan. |
Teruskan riwayat percakapan atau teks domain melalui |
Prasyarat
-
Dapatkan Kunci API dan konfigurasikan sebagai variabel lingkungan.
-
Jika memanggil melalui SDK DashScope, instal versi SDK terbaru.
Hotword kustom
Model dan wilayah yang didukung
Singapura
Untuk memanggil model berikut, pilih Kunci API dari wilayah Singapura:
Fun-ASR:
-
Speech recognition real-time: fun-asr-realtime, fun-asr-realtime-2025-11-07
-
Speech recognition non-real-time: fun-asr, fun-asr-2025-11-07, fun-asr-2025-08-25, fun-asr-mtl, fun-asr-mtl-2025-08-25
Tiongkok (Beijing)
Untuk memanggil model berikut, pilih Kunci API dari wilayah Beijing:
-
Fun-ASR:
-
Speech recognition real-time: 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
-
Speech recognition non-real-time: fun-asr, fun-asr-2025-11-07, fun-asr-2025-08-25, fun-asr-mtl, fun-asr-mtl-2025-08-25
-
-
Paraformer:
-
Speech recognition real-time: paraformer-realtime-v2, paraformer-realtime-8k-v2
-
Speech recognition non-real-time: paraformer-v2, paraformer-8k-v2
-
Panduan cepat
Cara kerja
Buat daftar kosakata terlebih dahulu, lalu rujuk ID-nya saat memanggil speech recognition:
-
Buat daftar kosakata.
Panggil API Create Vocabulary List. Tentukan target_model (targetModel dalam Java) untuk menunjukkan model speech recognition mana yang berlaku untuk daftar tersebut.
Lewati langkah ini jika daftar kosakata sudah ada. Gunakan API Query All Vocabulary Lists untuk memeriksa.
-
Panggil API speech recognition dengan ID daftar kosakata.
Model speech recognition harus sesuai dengan target_model (targetModel dalam Java) yang ditetapkan saat daftar dibuat; jika tidak, hotword tidak berlaku.
Kode contoh
Contoh end-to-end: buat daftar kosakata, panggil speech recognition, lalu hapus daftar tersebut. File audio contoh: asr_example.wav.
API manajemen hotword dan API speech recognition harus menggunakan akun yang sama. Jika tidak, API pengenalan tidak dapat mengakses daftar kosakata.
Python
import dashscope
from dashscope.audio.asr import *
import os
# Kunci API untuk wilayah Beijing dan Singapura berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')
# Konfigurasi berikut untuk wilayah Singapura. Ganti "{WorkspaceId}" dengan ID ruang kerja aktual Anda. Konfigurasi bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
# Konfigurasi berikut untuk wilayah Singapura. Ganti "{WorkspaceId}" dengan ID ruang kerja aktual Anda. Konfigurasi bervariasi berdasarkan wilayah.
dashscope.base_websocket_api_url = 'wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference'
prefix = 'testpfx'
target_model = "fun-asr-realtime"
my_vocabulary = [
{"text": "Speech Laboratory", "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,
vocabulary_id=vocabulary_id)
result = recognition.call('asr_example.wav')
print(result.output)
finally:
# Hapus daftar hotword terlepas dari keberhasilan pengenalan, untuk menghindari kuota terpakai
service.delete_vocabulary(vocabulary_id)
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 {
// Kunci API untuk wilayah Beijing dan Singapura berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
// Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan: public static String apiKey = "sk-xxx"
public static String apiKey = System.getenv("DASHSCOPE_API_KEY");
public static void main(String[] args) throws NoApiKeyException, InputRequiredException {
// Konfigurasi berikut untuk wilayah Singapura. Ganti "{WorkspaceId}" dengan ID ruang kerja aktual Anda. Konfigurasi bervariasi berdasarkan wilayah.
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
// Konfigurasi berikut untuk wilayah Singapura. Ganti "{WorkspaceId}" dengan ID ruang kerja aktual Anda. Konfigurasi bervariasi berdasarkan wilayah.
Constants.baseWebsocketApiUrl = "wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference";
String targetModel = "fun-asr-realtime";
JsonArray vocabularyJson = new JsonArray();
List<Hotword> wordList = new ArrayList<>();
wordList.add(new Hotword("Speech Laboratory", 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("Hasil pengenalan: " + recognizer.call(param, new File("asr_example.wav")));
} catch (Exception e) {
e.printStackTrace();
} finally {
// Tutup koneksi WebSocket
recognizer.getDuplexApi().close(1000, "bye");
}
}
} finally {
// Hapus daftar hotword terlepas dari keberhasilan pengenalan, untuk menghindari kuota terpakai
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;
}
}
Format hotword
Kirim hotword sebagai array JSON. Setiap elemen mendefinisikan satu hotword dan propertinya. Daftar kosakata (dirujuk sebagai vocabulary dalam API) mengelompokkan hotword ini untuk digunakan dengan model tertentu.
Contoh: Tingkatkan akurasi pengenalan judul film.
[
{"text": "Seediq Bale", "weight": 4, "lang": "en"},
{"text": "Goodbye Mr. Loser", "weight": 4, "lang": "en"},
{"text": "Confucius' Family", "weight": 4, "lang": "en"}
]
Deskripsi bidang:
|
Bidang |
Type |
Wajib |
Deskripsi |
|
text |
string |
Ya |
Teks hotword. Harus berupa kata atau frasa aktual, bukan kombinasi karakter sembarang. Bahasa harus didukung oleh model yang dipilih. Untuk batas panjang, lihat Aturan teks hotword. |
|
weight |
int |
Ya |
Bobot hotword. Nilai valid: [1, 5]. Direkomendasikan: 4. Bobot yang lebih tinggi membuat model lebih cenderung mengeluarkan istilah tersebut. Untuk panduan penyetelan, lihat Sesuaikan bobot hotword. |
|
lang |
string |
Tidak |
Kode bahasa yang membatasi hotword ke bahasa tertentu. Jika bahasa tidak diketahui, abaikan bidang ini. Catatan: |
Aturan teks hotword
Teks hotword harus berupa kata atau frasa aktual. Batas panjang sebagai berikut:
-
Berisi karakter non-ASCII: Jumlah total karakter — termasuk karakter non-ASCII (seperti Hanzi, kana Jepang, Hangul Korea, dan Cyrillic) dan karakter ASCII — tidak boleh melebihi 15.
Contoh:
-
✅
"厄洛替尼盐酸盐"(7 karakter) -
✅
"EGFR抑制剂"(7 karakter, di mana EGFR terdiri dari 4 karakter ASCII) -
✅
"こんにちは"(5 karakter) -
✅
"Фенибут Белфарм"(15 karakter, termasuk spasi) -
❌
"Клофелин Белмедпрепараты"(24 karakter)
-
-
Karakter ASCII murni: Jumlah segmen yang dipisahkan spasi tidak boleh melebihi 7.
Contoh:
-
✅
"Exothermic reaction"= 2 segmen -
✅
"Human immunodeficiency virus type 1"= 5 segmen -
❌
"The effect of temperature variations on enzyme activity in biochemical reactions"= 11 segmen
-
Optimalkan kinerja hotword
Sesuaikan bobot hotword
Bobot mengontrol seberapa kuat model mendukung hotword. Atur secara tepat untuk meningkatkan akurasi kata target tanpa menyebabkan pengenalan palsu.
|
Bobot |
Efek |
Paling cocok untuk |
|
1-2 |
Preferensi ringan |
Hotword yang bunyinya mirip dengan kata umum, di mana koreksi berlebihan harus dihindari |
|
3-4 |
Preferensi jelas (direkomendasikan) |
Titik awal terbaik untuk sebagian besar skenario |
|
5 |
Preferensi paksa |
Gunakan hanya ketika istilah tersebut sering muncul dalam audio dan tidak mungkin dikacaukan dengan kata lain. Catatan: Bobot yang terlalu tinggi dapat menyebabkan kata yang mirip secara fonetik salah dikenali sebagai hotword. |
Mulai dengan weight=4 dan sesuaikan secara bertahap berdasarkan hasil pengenalan.
Rancang daftar hotword
-
Kelompokkan berdasarkan skenario: Buat daftar kosakata terpisah untuk skenario bisnis berbeda (misalnya, satu untuk istilah medis dan lainnya untuk nama produk) untuk menyederhanakan pemeliharaan dan penggunaan ulang.
-
Gabungkan beberapa bahasa: Satu daftar kosakata dapat berisi istilah dalam berbagai bahasa. Gunakan bidang
languntuk membedakannya. Saatlanguage_hintsditentukan selama speech recognition, hanya hotword yang sesuai bahasa yang berlaku. -
Bersihkan secara berkala: Hapus daftar kosakata yang tidak digunakan untuk mengosongkan kuota. Setiap akun mendukung hingga 10 daftar.
Batasan dan penagihan
|
Batas |
Deskripsi |
|
Jumlah daftar kosakata |
10 per akun, dibagi lintas semua model. |
|
Hotword per daftar |
Hingga 500 hotword per daftar kosakata. |
|
Penagihan |
Gratis. |
Peningkatan konteks
Model dan wilayah yang didukung
Singapura
Untuk memanggil model berikut, pilih Kunci API dari wilayah Singapura:
Fun-ASR:
-
Speech recognition non-real-time: fun-asr-flash-2026-06-15
Tiongkok (Beijing)
Untuk memanggil model berikut, pilih Kunci API dari wilayah Beijing:
Fun-ASR:
-
Speech recognition non-real-time: fun-asr-flash-2026-06-15
Panduan cepat
Peningkatan konteks tidak memerlukan sumber daya yang dibuat sebelumnya. Cukup teruskan parameter konteks dalam permintaan speech recognition Anda:
-
Speech recognition non-real-time: Teruskan pesan konteks dalam
input.messagespermintaan HTTP, ditempatkan sebelum pesan audio.
Kasus penggunaan: Dengan meneruskan riwayat percakapan atau terminologi domain sebagai konteks, Anda dapat secara signifikan meningkatkan akurasi transkripsi untuk istilah khusus seperti nama, lokasi, dan terminologi produk. Fitur ini mendukung skenario berikut:
-
Peningkatan daftar kata: Teruskan daftar kata atau terminologi spesifik domain melalui
user(input_text) untuk membantu model mengenali kosakata khusus secara akurat. -
Konteks percakapan multi-turn: Dalam skenario interaksi suara yang menggabungkan ASR dengan model bahasa besar, teruskan hasil pengenalan sebelumnya (
user/input_text) dan tanggapan model (assistant/text) untuk meningkatkan akurasi pengenalan pada giliran saat ini.
-
Batas jumlah pesan: Mesin menyimpan hingga 5 giliran konteks terbaru. Peningkatan daftar kata biasanya hanya memerlukan 1 pesan dan tidak terpengaruh batas ini. Jika melebihi, pesan sebelumnya secara otomatis diabaikan tanpa mengembalikan error.
-
Batas panjang teks: Panjang total teks per giliran konteks (panjang gabungan semua bidang
userdanassistanttextdalam giliran yang sama) tidak boleh melebihi 400 karakter (dihitung per karakter, di mana setiap karakter dihitung sebagai 1, termasuk huruf, Hanzi, angka, spasi, dan tanda baca). Konten berlebih dipotong diam-diam dari akhir tanpa mengembalikan error. Dalam konteks multi-turn, setiap giliran dihitung secara independen. -
Mekanisme konteks: Konteks bekerja terutama melalui pencocokan kata. Bidang
textharus berisi kata persis yang akan dikenali dalam audio (seperti "Kubernetes" atau "Bulge Bracket"). Meneruskan hanya deskripsi terkait secara semantik tanpa kata target akan memiliki efek terbatas.
Speech recognition non-real-time
Teruskan konteks melalui input.messages. Gunakan peran user dengan tipe input_text untuk hasil speech recognition sebelumnya atau daftar kata spesifik domain. Gunakan peran assistant untuk tanggapan model sebelumnya (opsional). Tempatkan pesan konteks sebelum pesan audio. Untuk detail, lihat Panggilan sinkron DashScope (Fun-ASR-Flash).
Peningkatan daftar kata
Teruskan terminologi spesifik domain melalui user (input_text). Tidak diperlukan pesan assistant.
{
"model": "fun-asr-flash-2026-06-15",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "Kubernetes Istio Envoy service mesh sidecar proxy"
}
]
},
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "URL Audio atau Base64 dari audio saat ini untuk dikenali"
}
}
]
}
]
},
"parameters": {}
}
Konteks percakapan multi-turn
Teruskan hasil pengenalan sebelumnya (user / input_text) dan tanggapan model (assistant / text).
{
"model": "fun-asr-flash-2026-06-15",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "Hasil pengenalan ucapan pengguna sebelumnya"
}
]
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Konten tanggapan model sebelumnya"
}
]
},
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "URL Audio atau Base64 dari audio saat ini untuk dikenali"
}
}
]
}
]
},
"parameters": {}
}
Contoh efek
Format konten bidang text bersifat fleksibel—dapat berupa daftar kata, paragraf bahasa alami, atau kombinasi keduanya. Bidang ini memiliki toleransi tinggi terhadap teks yang tidak relevan.
Klip audio harus dikenali dengan benar sebagai: “Jargon di kalangan perbankan investasi, seberapa banyak yang Anda tahu? Pertama, sembilan bank investasi asing utama, Bulge Bracket, BB…”
|
Tanpa Peningkatan Konteks Tanpa peningkatan konteks, beberapa nama bank investasi dikenali secara salah. Misalnya, "Bird Rock" seharusnya "Bulge Bracket". Hasil pengenalan: "Jargon di kalangan perbankan investasi—seberapa banyak yang Anda ketahui? Pertama, sembilan bank investasi asing utama: Bird Rock, BB, ..." |
Dengan Peningkatan Konteks Dengan peningkatan konteks, nama-nama bank investasi dikenali secara benar. Hasil pengenalan: "Jargon di kalangan perbankan investasi—seberapa banyak yang Anda ketahui? Pertama, sembilan bank investasi asing utama, dikenal sebagai Bulge Bracket (BB)…" |
Pada contoh di atas, menambahkan daftar kata atau paragraf bahasa alami yang memuat istilah seperti "Bulge Bracket" ke dalam bidang text menghasilkan efek peningkatan tersebut.
Referensi API
FAQ
T: Mengapa hotword tidak meningkatkan akurasi pengenalan?
Periksa hal-hal berikut secara berurutan:
-
Ketidaksesuaian model:
target_modelyang ditentukan saat membuat daftar harus sesuai dengan model yang digunakan oleh API pengenalan ucapan. Ketidaksesuaian ini tidak menyebabkan error, dan pengenalan tetap mengembalikan hasil, tetapi hotword tidak berlaku. Jika hasilnya tidak memuat hotword yang diharapkan, periksa hal ini terlebih dahulu. -
Model tidak didukung: Model tersebut harus berasal dari family Fun-ASR atau Paraformer. Family lain tidak mendukung hotword. Memanggil API dengan model yang tidak didukung tidak menghasilkan error, tetapi hasilnya mungkin kosong atau tidak menunjukkan peningkatan akibat hotword. Jika menggunakan model seperti SenseVoice, periksa hal ini terlebih dahulu.
-
Bobot tidak tepat: Tingkatkan bobot dari 4 ke 5 dan amati hasilnya. Jika kata-kata yang mirip secara fonetis mulai salah dikenali sebagai hotword, turunkan kembali menjadi 4.
-
Status daftar hotword: Gunakan API Query untuk memastikan bahwa
statusbernilaiOK.
T: Apakah penggunaan hotword berbeda antara pengenalan Real-time dan berbasis file?
Daftar hotword dibuat dengan cara yang sama. Perbedaannya terletak pada metode pemanggilannya:
-
Pengenalan ucapan Real-time: Sertakan
vocabulary_iddalam parameter koneksi Recognition atau WebSocket. -
Pengenalan ucapan berbasis file: Sertakan
vocabulary_iddalam parameter permintaan Transcription.
Dalam kedua kasus tersebut, target_model harus sesuai dengan model pengenalan ucapan yang digunakan dalam pemanggilan API.
T: Bagaimana cara meningkatkan akurasi pengenalan selain menggunakan hotword?
Selain hotword dan peningkatan konteks, pertimbangkan hal-hal berikut:
-
Kualitas audio: Sesuaikan laju sampel dengan persyaratan model (16 kHz atau 8 kHz) dan kurangi kebisingan latar belakang.
-
Pilih model yang tepat: Skenario yang berbeda memerlukan model yang berbeda. Untuk detailnya, lihat panduan pemilihan model Speech-to-text.
-
Tentukan bahasa: Nyatakan bahasa audio melalui
language_hintsuntuk meningkatkan akurasi dalam skenario satu bahasa.