You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Speech-to-Text API语音转文本语言识别异常问题咨询

Google Speech-to-Text API 问题求助

我们在使用Google Speech-to-Text API时遇到两个问题:

  • 英文语音输入有时被错误识别并转录为阿拉伯语文本
  • 相同输入在不同用户请求时返回不同结果

恳请针对以下要点提供指导:

  1. 如何确保语音始终被正确识别为对应的语言,尤其是英文语音?
  2. 有无方法减少或避免英文语音被误分类为阿拉伯语等其他语言?
  3. 相同的语音输入是否会因说话者语调、口音或其他语音特征产生不同转录结果?

我们的目标是确保转录内容准确、一致地反映用户的口语语言。

代码片段

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:00:12