ASR 是自动语音识别(Automatic Speech Recognition)的缩写,是一种将人的语音转换为文本的技术。这项技术涉及声学、语音学、语言学、数字信号处理理论、信息论、计算机科学等多个学科。ASR 系统的性能受到识别词汇表的大小和语音的复杂性、语音信号的质量、单个说话人或多个说话人以及硬件等因素的影响。
经过之前的介绍我们知道在评估模型的效果时,最重要的是收集到符合场景的测试数据。ASR 系统通常可以分为特定人和非特定人识别,以及小词汇量、中词汇量和大词汇量系统。根据语音的输入方式,可以分为孤立词、连接词和连续语音系统等。此外,还可以根据输入语音的发音方式(如朗读式和口语式)、方言背景(如普通话、方言背景普通话和方言语音识别系统)以及情感状态(如中性语音和情感语音识别系统)进行分类。 所以其实大家可以看出来,要收集这么多类别的语音素材,也是非常麻烦的。我们之前这里有个兄弟,为了收集到足够的数据,专门申请下来一笔经费在平台上发布悬赏 – 给定特定的文本,悬赏不同年龄,性别,方言等条件下的人来朗读这些文本,把语音文件发送给这位兄弟来换取钱财。 所以高质量数据的成本是不低的,记得我们前两个月有个项目, 项目上准备了 20W 的预算来采买数据。 这种数据比较难有取巧的方式,要不怎么说高质量数据是国内外模型最大的差距呢。
这个我们上面说过,我们需要收集各种类别的数据,这部分工作十分重。不同的项目有不同的要求, 比如我这里列一个可以从网络上下载到的数据的样例:
主要需要标注的内容有:文本转写,标点符号转写,说话人区间分离,无效数据区间标注。 这里还是只给一些规范上的样例:
因为规范比较多, 我就列一些规范上的样例, 所以大家也看到了, 数据标注的工作量也很高, 还好可以申请标注组的人力。
WER(Word Error Rate)指的是机器翻译或者语音识别系统中,系统输出的单词与原始单词之间错误的比例。这个指标通常用于评估机器翻译或语音识别系统的性能。WER 的计算方式是将系统错误翻译的单词数除以总的单词数。
计算公式: WER 字错率=识别文本相对标注文本的编辑距离/标注文本总字数
代码示例:
import Levenshtein
text1 = "我是谁,我是一种测试人员啊"
text2 = "我是谁,我是一个研发人员啊"
distance = Levenshtein.distance(text1, text2)
print(f"The Levenshtein distance between '{text1}' and '{text2}' is {distance}.")
wer = distance/len(text1)
print(f"The wer is {wer}.")
字正确率=识别正确的字数/标注文本总字数
插入率 = 插入操作的次数/标注文本总字数
删除率 = 删除操作的次数/标注文本总字数
替换率 = 替换操作的次数/标注文本总字数
代码示例:
import Levenshtein
def calculate_error_rates(ref, hyp):
# 计算Levenshtein距离和编辑操作
editops = Levenshtein.editops(ref, hyp)
# 计算插入率、删除率和替换率
insertions = 0
deletions = 0
substitutions = 0
for op in editops:
if op[0] == 'insert':
insertions += 1
elif op[0] == 'delete':
deletions += 1
elif op[0] == 'replace':
substitutions += 1
# 计算总字符数
total_chars = len(ref) + len(hyp)
# 计算插入率、删除率和替换率
insertion_rate = insertions / total_chars
deletion_rate = deletions / total_chars
substitution_rate = substitutions / total_chars
return insertion_rate, deletion_rate, substitution_rate
# 示例
ref = "我喜欢吃苹果"
hyp = "我欢吃橙子啊"
insertion_rate, deletion_rate, substitution_rate = calculate_error_rates(ref, hyp)
print(f"Insertion rate: {insertion_rate:.2%}")
print(f"Deletion rate: {deletion_rate:.2%}")
print(f"Substitution rate: {substitution_rate:.2%}")
可以看到通过 Levenshtein 库我们可以比较容易的把效果的评测自动化起来, 当然前提是数据和标注都准备好~。 所以还是那句话,在人工智能领域中工作的人, 大部分时间都是花在数据上。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。