Skip to content

Latest commit

 

History

History
139 lines (105 loc) · 8.33 KB

TIOBE_guidelines.md

File metadata and controls

139 lines (105 loc) · 8.33 KB
layout title permalink key tags lang author aside
article
TIOBE 评测规范
/guidelines
TIOBE_guidelines
TIOBE-Benchmark
zh-Hans
SpeechIO
toc
true

2020.05 更新版本

测试目标

客观评估并记录各家厂商的公共语音识别服务在不同领域的识别准确率。

测试对象

公共语音识别服务,目前包括(不限于):

简称 服务 网站
阿里 阿里云-智能语音 https://ai.aliyun.com/nls/asr
百度 百度智能云-语音识别 https://cloud.baidu.com/product/speech/asr
谷歌 Google Cloud Speech-To-Text API https://cloud.google.com/speech-to-text
讯飞 讯飞开放平台-语音听写 https://www.xfyun.cn/services/voicedictation
微软 微软Azure认知服务-语音识别 https://azure.microsoft.com/zh-cn/services/cognitive-services/speech-services/
创S 创业公司S 加入创业公司增加评测的覆盖广度
搜狗 知音平台-一句话识别 https://zhiyin.sogou.com/product/one_recognition
腾讯 腾讯云-语音识别 https://cloud.tencent.com/product/asr
依图 依图语音开放平台 https://speech.yitutech.com/ 短语音听写服务

比较各家提供的众多服务(包括实时在线、离线、长语音、短语音等分类),我们最后选择了各家共有的流式短语音识别服务。调用形式上:语音实时发送,且语音总长度不超过60s。

  • 优点:短语音识别,功能上更加靠近底层引擎,受语音检测、切分等外围模块影响较小;同时流式服务也屏蔽掉了一些基于大段语音的适应性建模技术。因而更直接反应核心算法的准确率。
  • 缺点:无法对大段的长语音进行整体效果测试。

测试指标

在语音识别领域,公认的准确率指标,有词准确率和句子准确率。

  • 字准确率:

Word Error Rate https://en.wikipedia.org/wiki/Word_error_rate

将识别结果与人工的标注结果进行比对,将识别错误归为3类,即:多词、少词、错词,最终的准确率可以直观的理解为“识别错误占总词数的百分比”。在中文领域,我们通常依照同样的计算方法,用“字”作为基本单元进行计算,即字准确率。

  • 句子准确率:

以句子为单位,一字不错的句子记为正确句,其余都记为错误句,句子准确率为正确句在测试集中的占比。但该指标缺点是随测试集句子长短而波动较大。

我们最终选用字准确率作为准确率指标。

  • 速度、延迟:

识别的速度与准确率,在一定区间存在相互制约的关系。耗费更多的计算资源总是可以换取一定的准确率提升。在这里,我们假设各家的公共识别服务已经选取了相对合适的操作点,即保证了对外服务的准确率,也兼顾了其背后的服务成本。同时,速度、延迟等指标还会受到服务外围工程实现、客户端网络条件、服务端负载等因素影响。

我们更侧重对准确率的评测,因此短期内不会在评测中加入速度、延迟等指标。

测试素材

我们选取不同领域的测试集语音来源,将尽最大程度满足以下两个原则:

  • 公开渠道
    • YouTube、优酷、央视、喜马拉雅FM 等等
  • 公众熟悉
    • 新闻联播、脱口秀大会、经济半小时、动物世界、天下足球、熊出没等各类素材

我们在引篇中提到,AI媒体报道和厂商PR中得到优越识别率的测试集经常存在信息不透明。我们相信遵循上述原则,配合量化的测试指标,可以帮助公众、以及业内外人士更具体准确的了解技术现状。

测试集标注

对于选取的语音测试素材:

  • 通过人工切分成单句,以满足短语音服务调用限制
  • 首轮人工精标
  • 多轮人工复审及矫正,以确保产出标注的高精度。

在标注过程中,若出现标注员反复无法听清的句子,则丢弃该句语音。

服务调用

调用均遵循各家提供的demo调用示例。

  • 语音编码:
    • 所有测试音频一律以 Raw Wav (PCM) 非压缩形式送入客户端接口。
  • 声音检测模块(VAD):
    • 接入测试过程中我们发现相当多的服务强制vad开启,因此我们决定遵从这一惯例(理论上,关闭vad测得的数字更接近底层引擎)
  • 超时及重试:
    • 因客户端、服务端各种原因发生调用失败时,测试程序将以1s的间隔连续发起10次重试,以减小工程稳定性和网络抖动带来的识别率误差。
  • 空结果:
    • 若多次重试后仍无结果,或正常返回但识别结果为空,则在整个测试统计中丢掉该句。该措施相当于在测试集中丢弃极少量的个别句子,相比用空结果去参与识别率统计,更加合理,从而减少各家厂商的识别率波动。
  • 异常判断:
    • 当某服务的成功请求率总体低于95%时,我们会作废测试,择日重新进行测试,以免将非正常情况作为评估结果误报。

文本后处理

在比对人工标注和识别结果进行识别率统计时,我们会遇到文本形式不一致的问题。

我们发现各家服务的返回文本,对一些情况(比如 cctv/CCTV,25.8元/25点8元,百分之三/3%,19年/一九年) 有着不同的 ITN (Inverse Text Normalization) 策略。这种分歧会对具体的识别率产生小幅扰动,我们最终决定在统计识别率之前,对人工标注和所有的语音识别结果进行一次统一的文本处理,目前包括:

  • 非标准词:针对以下7类常见“非标准词”
    • 数值:
      • 这块黄金重达324.75克
      • 这块黄金重达三百二十四点七五克
    • 日期:
      • 她出生于86年8月18日,她弟弟出生于1995年3月1日
      • 她出生于八六年八月十八日 她弟弟出生于一九九五年三月一日
    • 数字:
      • 电影中梁朝伟扮演的陈永仁的编号27149
      • 电影中梁朝伟扮演的陈永仁的编号二七一四九
    • 分数:
      • 现场有7/12的观众投出了赞成票
      • 现场有十二分之七的观众投出了赞成票
    • 钱:
      • 随便来几个价格12块5,34.5元,20.1万
      • 随便来几个价格十二块五 三十四点五元 二十点一万
    • 百分比:
      • 明天有62%的概率降雨
      • 明天有百分之六十二的概率降雨
    • 电话号
      • 这是固话0421-33441122 这是手机+86 18544139121
      • 这是固话零四二一三三四四一一二二 这是手机八六一八五四四一三九一二一
  • 标点符号,过滤掉 https://github.com/tsroten/zhon 项目中罗列的常见中文标点,包括:
    • 非停顿标点:
'"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃《》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰〾〿–—‘’‛“”„‟…‧﹏'
  • 停顿标点:
'!?。。'
  • 英文大小写:文本中的英文一律统一为大写字母。

关于测试集

SpeechIO TIOBE Benchmark 项目积累的各领域语音识别测试集,我们后面是否会对公众彻底公开,还没有最终的结论。过早公布,有可能破坏语音评测的公平性;若不公布,也会存在测试集质量及有效性的质疑。现阶段,我们会在每次发布领域测试的时候,尽可能详细的描述测试集信息、来源、特性。在合适的时候,我们也乐于把测试集开放给行业内外的朋友。

后注

语音识别的测试,简单可以只落实到最后的一个识别率数字,但后面其实隐藏了各种各样的细节,这篇 Guideline 也是把我们测试中一些值得指出的细节进行罗列。我们会听取大家的有益建议,逐步改进。大家还想看到哪些厂商、哪些平台的测试?哪些领域?对测试过程中的哪些地方还有疑问?欢迎大家评论区和后台留言。本文档也会作为 TIOBE Benchmark Specification 定期更新。