Google Speech-to-Text API语音转文本语言识别异常问题咨询
Google Speech-to-Text API 问题求助
我们在使用Google Speech-to-Text API时遇到两个问题:
- 英文语音输入有时被错误识别并转录为阿拉伯语文本
- 相同输入在不同用户请求时返回不同结果
恳请针对以下要点提供指导:
- 如何确保语音始终被正确识别为对应的语言,尤其是英文语音?
- 有无方法减少或避免英文语音被误分类为阿拉伯语等其他语言?
- 相同的语音输入是否会因说话者语调、口音或其他语音特征产生不同转录结果?
我们的目标是确保转录内容准确、一致地反映用户的口语语言。
代码片段
converter: function (req, res) { return new Promise( function (resolve, reject) { const grpc = require("@grpc/grpc-js"); const speech = require('@google-cloud/speech').v1p1beta1; const client = new speech.SpeechClient({ projectId: config.api.PROECT_ID, credentials:req.body.oauthJSON, grpc: grpc}); let file = req.fileNoExtension; const filename = "./audio/" + file + ".flac"; let languageCode = req.body.lang_code ? req.body.lang_code : config.api.LANGUAGE_CODE; let alternativeLanguageCodes = req.body.alternative_language_codes && Array.isArray(req.body.alternative_language_codes) ? req.body.alternative_language_codes : config.api.ALTERNATIVE_LANGUAGE_CODES; const config1 = { encoding: config.api.ENCODING, sampleRateHertz: 16000, languageCode: languageCode, alternativeLanguageCodes: alternativeLanguageCodes, }; const audio = { content: fs.readFileSync(filename).toString('base64'), }; const request = { config: config1, audio: audio, }; client .recognize(request) .then(data => { var temp = './audio/'; findRemoveSync(temp, { filename: file, extensions: config.api.AUDIO_FORMATS }, function (err, body) { console.log("body", JSON.stringify(body)) }); if (req.options && req.options.filename) { let n = './audio/' + req.options.filename; fs.unlink(n, function (err) { if (err) { console.log(err); } }) } const response = data[0]; let responseDataObj = {}; responseDataObj.audio_link = req.body.attachment; responseDataObj.totalBilledTime; responseDataObj.convertedText = []; if (response.results && response.results.length > 0) { responseDataObj.totalBilledTime = response.totalBilledTime; response.results.forEach(result => { const alternative = result.alternatives[0]; let dbOut = {}; dbOut.text = alternative.transcript; dbOut.confidence = alternative.confidence; responseDataObj.convertedText.push(dbOut); resolve(responseDataObj); }); } else { req.speechStatus = 'false'; console.info('Unable to process the file ', req.speechStatus) return res.json({ status: 400, info: 'Unable to process the file' }); } }) .catch(err => { req.speechStatus = 'false'; var temp = './audio/'; findRemoveSync(temp, { filename: file, extensions: config.api.AUDIO_FORMATS }, function (err, body) { console.log("body", JSON.stringify(body)) }); if (req.options && req.options.filename) { let n = './audio/' + req.options.filename; fs.unlink(n, function (err) { if (err) { //console.log(err); } }) } return res.json({ status: 400, info: 'Unable to process the audio file' }); }); });
当前配置
{"encoding":"FLAC","sampleRateHertz":16000,"languageCode":"en-GB","alternativeLanguageCodes":["ar-AE","de-DE","th-TH"]}
问题解答
1. 确保语音正确识别为对应语言的方法
- 严格指定主语言并精简备选语言:当前配置的
alternativeLanguageCodes包含阿拉伯语,是英文被误识别的核心诱因之一。如果业务以处理英文为主,直接移除备选语言列表,或仅保留与英文相近的语种(如en-US),避免API在识别存疑时切换到其他语言。 - 使用精确语言代码:保持
en-GB这类具体的区域语言代码,不要用模糊的en,让API聚焦目标语言模型。 - 启用语音适配:通过添加短语集或自定义类,告知API业务场景中的高频英文词汇,提升识别精准度。示例:
const config1 = { // 原有配置... speechContexts: [{ phrases: ["业务专属词汇", "常用术语"], boost: 20 // 提升这些短语的识别权重 }] };
2. 减少英文误分类为阿拉伯语的措施
- 移除阿拉伯语备选项:若业务无需处理阿拉伯语,直接从
alternativeLanguageCodes中删除ar-AE,从根源消除误识别的可能。 - 设置置信度阈值:处理返回结果时,仅保留
confidence值高于0.8(可根据业务调整)的转录内容,若置信度不足,返回提示让用户重新输入,避免错误结果被使用。 - 优化音频质量:确保音频为清晰单声道、无背景噪音,采样率和编码严格匹配配置(当前FLAC+16000Hz为标准配置,可继续保持),模糊音频会大幅增加识别歧义。
3. 相同语音输入出现不同结果的原因
是的,相同语音输入可能因以下因素产生不同转录结果:
- 语调与口音差异:即使内容相同,不同的语调、口音(如英式/美式英语差异、非母语者口音)会让识别模型做出不同判断。
- 音频质量波动:两次请求的音频若存在细微差异(如背景噪音、录音设备不同),会影响识别结果。
- API模型迭代:Google语音模型会持续更新,不同时间点的识别结果可能因模型版本不同而有差异。
- 备选语言干扰:当前配置的备选语言会让API在识别不确定时返回不同语种结果,这也是你遇到的问题之一。
内容的提问来源于stack exchange,提问作者Anjaly Kiron
相关产品推荐
相关产品推荐

