我们是若何测试人工智能的(五)案例介绍:ASR 效果测试介绍_数据_文本
以是实在大家可以看出来,要网络这么多类别的语音素材,也是非常麻烦的。我们之前这里有个兄弟,为了网络到足够的数据,专门申请下来一笔经费在平台上发布悬赏 – 给定特定的文本,悬赏不同年事,性别,方言等条件下的人来朗读这些文本,把语音文件发送给这位兄弟来换取钱财。 以是高质量数据的本钱是不低的,记得我们前两个月有个项目, 项目上准备了 20W 的预算来采买数据。 这种数据比较难有取巧的办法,要不怎么说高质量数据是国内外模型最大的差距呢。
效果流程数据网络标注音频数据将音频输入 ASR 算法模块得到输出结果(一个文本)打算模型评估指标评测数据集构建这个我们上面说过,我们须要网络各种类别的数据,这部分事情十分重。不同的项目有不同的哀求, 比如我这里列一个可以从网络高***到的数据的样例:
***类数据: 覆盖 40 个综合***以及 31 个省市的 44 个紧张综合类***数据,每一类节目挑选一个***,每个***时终年夜约为 30-60 分钟。融媒体类数据:覆盖日报和电视台类输出的 app35 个,个中紧张包含了***超百万的 app,包含有(公民日报,大众日报,北京日报,湖北日报,广州日报,河北日报,工人日报,河南日报,光明日报,中国青年报,南方都邑报,新华社,南方周末,新民,羊城派,,荔枝***),这一类 app 每个挑选 100 个***素材,别的低***量的选择 20 个素材(紧张依据***量的比例来确定挑选的测试数据比例)体育类,综艺类,影视剧类等等。。。。要搞数据太难了, 好在我们团队有专门的数据组。数据标注规范紧张须要标注的内容有:文本转写,标点符号转写,说话人区间分离,无效数据区间标注。 这里还是只给一些规范上的样例:
转写内容与实际发音内容同等,转写的字精确率要达到 99%;但是,对付由于口音或者个人习气导致的音变,仍按照原内容转写。(比如把 “银行”,读成了 ying 2 hang2,按照 “银行” 转写;其余,对付多音字或实际生活中易稠浊的字,按照原内容转写:比如办公室的 “室”,有的人读 shi3 ,有的人读 shi4 ,请按照精确的字 “办公室” 转写即可)转写内容的完全性要与实际发音同等,不得删减;(如发音为:我是北北京人;“北” 字有重复征象,那转写的时候要写成:我是北,北京人。)转写碰着人名时,按照常用字词表示即可,没有特定的字词规定。如:李珊、李山、李姗等;碰着数字,按照数字的汉字写法 “一二三” 形式,而不是 “123” 阿拉伯数字形式;(如果有电报读法,如幺幺零等,按照电报读法进行转写;)碰着网络用语时,如实际发音是 “灰常”“孩纸”“童鞋”,也该当写成 “灰常”“孩纸”“童鞋”,不能写成 “非常”“孩子”“同学”。儿化音:原音频有儿化音,则转写中应带有 “儿”,以 “哪儿” 为例,如果读出了儿化,则转写为 “哪儿”;原音频无儿化音,则转写中不应带有 “儿” -仍旧以 “哪儿” 为例,如果发音人没读出儿化音,则转写为 “哪”;语气词: 音频中说话人清楚地讲出的语气词,如 “呃 啊 嗯 哦 唉” 等,要按照精确发音进行转写。英文:对付拼读格式(包括拼出的字母,首字母缩写词或者一些缩写),每一个被拼出的字母都应大写加空格。例如:M A R Y 而不是 mary 或者 MARY牌号、品牌、注册名等都应以其原有、专有的格式涌现, 例如: Hotmail dot com 而不是 hot mail dot com个别字词不愿定的,在故意义的情形下,只管即便用同音字代替。实在无法转写的,这句话切出无效。 -多人说话重叠部分,若能写出主说话人的内容,在这部分前后标记出/multi 标签。若无法转写主说话人的内容,这整句切出来无效标/unk 标签由于规范比较多, 我就列一些规范上的样例, 以是大家也看到了, 数据标注的事情量也很高, 还好可以申请标注组的人力。
模型评估指标的打算WER 字错率WER(Word Error Rate)指的是机器翻译或者语音识别系统中,系统输出的单词与原始单词之间缺点的比例。这个指标常日用于评估机器翻译或语音识别系统的性能。WER 的打算办法是将系统缺点翻译的单词数除以总的单词数。
打算公式: WER 字错率=识别文本相对标注文本的编辑间隔/标注文本总字数
代码示例:
import Levenshteintext1 = "我是谁,我是一种测试职员啊"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 Levenshteindef 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 库我们可以比较随意马虎的把效果的评测自动化起来, 当然条件是数据和标注都准备好~。 以是还是那句话,在人工智能领域中事情的人, 大部分韶光都是花在数据上。
本文系作者个人观点,不代表本站立场,转载请注明出处!