Logo
返回博客
Fundamentals

发音评测 API 的工作原理:从音频到多维度打分

一段朗读音频提交后,发音评测 API 如何给出总分、准确度、流利度等多维评分?本文拆解 DolphinSOE 从音频采集、识别对齐到多维度打分的完整流程,并附真实返回示例。

发音评测 API 的工作原理:从音频到多维度打分
DolphinSOE 句子评测演示:朗读完成后即时显示总分与多维度发音评分句子评测演示:朗读完成后立即返回多维度评分

当你在语言学习 App 里念出一句「good morning」,屏幕几乎瞬间就给出了 98 分的发音评分,还顺手高亮了是哪个词、哪个音标拖了后腿——这背后到底发生了什么?

对开发者和技术决策者来说,弄清发音评测 API 的评分原理,也许比直接调通接口更重要:它决定了你能否向用户解释打出某个分数的原因,也决定了选型时该关注哪些指标。

这篇文章将 DolphinSOE 发音评测引擎 的完整流水线拆开,带你从一段音频开始,一路看到一组多维分数。

发音评测是什么?和语音识别有什么区别?

发音评测服务的本质,是把用户的一段语音输入,转换成一组可解释的发音评分输出。

它通常会完成四件事:

  1. 接收音频和参考文本
  2. 识别用户实际读了什么
  3. 将识别结果与目标文本逐词、逐音素对齐
  4. 输出评分结果

发音评测和语音识别,两者最大的区别在于目标不同:

对比维度语音识别发音评测
核心目标把用户说的话转成文字与参考文本相比,判断用户说得是否标准、完整、流畅,并给出评分
主要输入音频音频 + 参考文本
主要输出文本(语音识别结果)文本 + 评分 + 错误位置
评分结果多维度、细粒度评分
典型场景会议纪要、电话客服语言学习、口语考试
示例把一段语音转写成文本 "good morning"不仅识别出 "good morning",还会继续输出:总分是多少;"good" 和 "morning" 各自得分如何;哪个音节得分低;哪个音素发音偏差最大;是否有漏读、多读、错读

简单来说,语音识别关注「你说了什么」,而发音评测更关注「你说得怎么样」。如果你想进一步了解不同题型下的输入输出字段差异,可以参考题型文档

一次评测请求会经历哪些步骤?

发音评测 API 接收用户的朗读音频和参考文本,自动给出多维度的发音评分与纠错反馈。以英语句子评测为例,一次典型请求可以抽象成四个阶段:

  1. 采集(Capture):客户端以 16 kHz 采样率录制用户音频(如 mp3 / wav),连同参考文本一起提交给服务端。
  2. 识别与对齐(Recognition & Alignment):声学模型将波形转成文字,并与参考文本逐词、逐音素对齐。
  3. 多维度打分(Scoring):对齐结果进入评分和检错模块,分析判断错误类型,产出总分和各项维度分。
  4. 反馈(Feedback):结构化 JSON 返回客户端,客户端据此渲染分数、波形高亮与纠错提示。
发音评测流水线:音频与参考文本输入,经识别对齐与评分检错,输出结构化评分结果一次评测请求的处理流程

发音评测引擎在底层是如何实现的?

要理解分数从哪来,需要先看「识别」这一步的演进。

传统方案用 GMM-HMM 混合架构:先用高斯混合模型(GMM)当声学模型得到音素,再经发音词典把音素拼成单词,最后用语言模型修正成句子,然后拿识别句和目标句比对去算准确率和流畅度。这种级联结构每一步各管各的、各自优化,拼起来很难保证全局最优,而且错误会在模块之间一路累积。

而 DolphinSOE 引擎采用更先进的端到端深度学习路线:输入原始音频,输出评测结果,中间的神经网络自成一体,用单一目标函数统一优化。具体的声学模型是一个双头 LSTM(dual-head LSTM)

  • 特征提取:对音频做预加重、分帧、加窗、短时傅里叶变换(STFT)、mel 滤波、去均值,得到 fbank 特征。
  • 双头 LSTM 声学模型:多层 LSTM 以 fbank 特征为输入,其后接两个输出分支,采用多任务学习——一个分支预测文本,另一个分支预测音素。两条分支共享同一份 LSTM 表征,在一次前向计算中同时产出文本与音素对齐。文本分支通常借助 CTC 完成音频帧与字符序列的对齐,经束解码(beam search)得到候选词序列;音素分支则逐帧给出音素级对齐。
  • 解码与融合:文本分支的候选结合语言模型修正,输出完整识别结果 hypothesis;音素分支的结果直接用于音素级打分。二者同源、同步产出,这正是 API 能在一个返回里同时给出文本结果 hypothesis 和细粒度音素结果 phonemes 的原因。

对于开发者来说,这种架构的意义在于:不仅能拿到最终分数,还能获得更细粒度的结果,用于可视化和纠错反馈。

评测结果包含哪些维度?

评测结果是多维度的,覆盖音素、语调、流利度、断句、完整度等。但不同语种、不同题型的评测维度并不一样——这跟语言本身的特性以及题型的设计有关。以 DolphinSOE 的英文题型为例,最常被关注的几个维度是:

维度字段含义
总分overall / score综合得分
准确度accuracy每个单词发音与目标词的接近程度
流利度fluency根据停顿情况、语速等指标综合判定
完整度integrity是否读全、有无漏读多读
韵律rhythm韵律得分,根据重音、语调等指标综合判定

此外,在对齐完成之后,引擎会给参考文本里的每一个词打上一个 type 标签,标明它在用户这次发音里属于哪种情况。多读、漏读、错读,正是从这里被识别出来的:

type 取值含义解读
normal正常与目标一致,正常计分
insert多读目标里没有、用户多说的内容
repeat重复读同一内容被重复朗读
delete漏读目标里有、用户没读到的内容
replace错读读音与目标不一致(如把 "three" 读成 "tree")
oov集外词该词不在系统词库中,且无法自动预测读音,无法对该词评分

如果你在做产品设计,这些字段决定了你能否把「评分结果」真正转化为「可理解的学习反馈」。如果想看这些维度在用户界面上如何呈现,可以参考我们的体验页面

真实的返回示例

下面是一段真实的英文单词题型返回(参考文本为 "good morning"),已经过精简。可以清楚看到分数如何从总分一路下钻到音素:

{
  "overall": 98.86,
  "accuracy": 92.73,
  "refText": "good morning",
  "hypothesis": "good morning",
  "wordInfo": [
    {
      "refText": "good",
      "hypothesis": "good",
      "type": "normal",
      "score": 96.04,
      "accuracy": 97.71,
      "syllables": [
        {
          "syllable": "g_uh_d",
          "score": 97.71,
          "phonemes": [
            { "phoneme": "g", "score": 94.93, "startTime": 340, "endTime": 500 },
            { "phoneme": "uh", "score": 99.58, "startTime": 500, "endTime": 570 },
            { "phoneme": "d", "score": 99.54, "startTime": 570, "endTime": 640 }
          ]
        }
      ]
    },
    {
      "refText": "morning",
      "type": "normal",
      "score": 99.41,
      "accuracy": 99.29,
      "syllables": [
        {
          "syllable": "m_ao_r",
          "score": 99.26,
          "phonemes": [
            { "phoneme": "m", "score": 98.77, "startTime": 640, "endTime": 700 },
            { "phoneme": "ao", "score": 99.75, "startTime": 700, "endTime": 830 },
            { "phoneme": "ao", "score": 99.75, "startTime": 830, "endTime": 920 }
          ]
        },
        {
          "syllable": "n_ih_ng",
          "score": 99.30,
          "phonemes": [
            { "phoneme": "n", "score": 98.06, "startTime": 920, "endTime": 1010 },
            { "phoneme": "ih", "score": 99.99, "startTime": 1010, "endTime": 1140 },
            { "phoneme": "ng", "score": 99.86, "startTime": 1140, "endTime": 1420 }
          ]
        }
      ]
    }
  ]
}

注意这里的层级关系:overall / accuracy 在最外层 → 每个 wordInfo 有单词总分 scoreaccuracy → 再下钻到 syllables(音节)→ 最小单位音素 phonemes

评测返回的层级结构:从 overall 总分逐级下钻到 wordInfo 单词、syllables 音节、phonemes 音素返回结果的层级:总分 → 单词 → 音节 → 音素

这种「总分 → 单词 → 音节 → 音素」的层级,构成了 DolphinSOE 多级细粒度反馈的核心。

关于英文单词题型更详细的参数字段,请参考接口文档

评分范围和宽松度可以调整吗?

引擎提供一组可调参数,用于适配不同用户场景:

  • scale:分制(1–100),统一输出区间。
  • looseness:宽松度(0–9),数值越大越宽容。
  • ratio:调节系数(0.8–1.5),用来微调整体得分。
  • precision:打分精度。

比如练习场景可以把 looseness 调高,让用户更愿意开口说;严肃的考试场景则收紧,使评分更严格。

关于参数的配置可进一步参考接口文档;如果你希望结合具体场景讨论调优策略,也欢迎联系我们获取支持。

从开发者视角,一次调用到底发生了什么?

把上面的环节串联起来,一次典型的 API 调用是这样的:

  1. 客户端使用 SDK 录制音频,附带语种、题型、参考文本等题型参数。
  2. 服务端先做静音切除(VAD),再做特征提取(fbank)。
  3. 声学模型一次前向同时产出文本与音素对齐,语言模型对文本分支做修正。
  4. 评分模块产出各维度评分。
  5. 结构化 JSON 返回客户端,前端渲染分数与高亮显示结果。

如果你已经进入选型或 PoC 阶段,比较高效的方式通常是:先通过体验页面感受效果,再对照接口文档完成技术验证。

结语

两个关键点

选型与产品设计时,重点看两件事:主要评分维度是否覆盖你的场景,多级细粒度反馈能否支撑你要的学习体验。

发音评测 API 的「魔法」,本质是一条从音频到多维分数的智能流水线:采集 → 识别对齐(端到端深度学习)→ 多维度打分 → 反馈。

DolphinSOE 发音评测已经在日本市场稳定运行,目前日均调用量约 10 万次(100k calls/day),客户覆盖外语学习 App、学校、课外班等各类教育机构。这证明了 DolphinSOE 的服务能力已经过真实高并发、教学级场景的持续验证,稳定性和时延都足以支撑正式上线产品。

除了英语发音评测外,DolphinSOE 也提供日语发音评测产品,覆盖单词、句子、段落等基础题型,能够适配日语教育的学习与评测需求。

如果你希望进一步了解接入方式、返回格式和题型支持,请查阅接口文档;如需获取报价、方案建议或商务沟通,欢迎联系我们

亲自试试发音评测效果

在体验页面朗读一句话,看看总分、单词、音素层级的分数如何即时返回。

DolphinSOE 发音评测产品界面:朗读日语文本后展示总分与各维度得分发音评测产品界面示例

分享文章