目录[-]
目录
- 前言:如果公司接入了一个语音类型的AI大模型框架,如何进行测试?
- 核心疑问分析
- 语音从哪里来?
- 怎么保证语音的质量?
- 如何建立测试用例集?
- 测试话术设计
- 核心代码设计
- 测试报告分析
————————————————
1、前言:如果公司接入了一个语音类型的AI大模型框架 ,如何进行测试?
公司接入了一个语音类型的AI大模型框架,我们可以借鉴现有的测试方法。
有一点可以确定:上文中提到的"翻译器"、"评估器"以及大部分的测试框架都可以直接引用,只需稍加修改,就可以直接达成测试效果。
————————————————
2、核心疑问分析
2.1 语音从哪里来?
测试语音数据的来源主要有以下几种方式:
- 自建语音库:收集公司内部的历史语音数据。
- 公开数据集:使用开源语音集,尤其是非中文的语音。
- 合成语音:通过 TTS 工具生成测试语音,覆盖不同场景(本文采用这个方式)
- 众包采集:通过不同平台招募,不同人群录制特定场景的语音。
- 生产环境脱敏:从生产环境获取经过脱敏处理的真实用户语音。
2.2 怎么保证语音的质量?
语音质量控制需要从多个维度判断:
- 信噪比(SNR):确保背景噪音在可接受范围内,一般要求 SNR >20dB
- 采样率:检查是否复核模型要求(通常 16kHz 或 8kHz)
- 时长控制:语音片段不宜过长或果断,建议在 2-15 秒之间
- 内容多样性:覆盖不同场景、口音、语速、情感等
- 标注准确性:确保语音转写文本的准确率 >95%
- 格式统一:统一音频格式(如 WAV、MP3)、声道数(单声道)
本文中采用的:Edge-TTS 合成语音,除了“内容多样性”之外,其余标准完全符合。它的优点如下:
- 免费易用:无需 API 密钥,纯代码可调用
- 语音质量高:微软神经语音技术,声音自然流畅,无背景噪音
- 多语言支持:支持40多种语言和方言,包括中文、英文、粤语等
- 多样化的声音:提供上百种不同风格的声音(男女声、童声、新闻播报、日常通话等不同风格)
- 可调节参数:支持调整语速、音调、音量,满足不同测试场景
- 标注准确率100%:生成的语音与输入文本完全一致,无需人工标注
- 跨平台:基于 WebSocket 协议,可在任何支持 HTTP 请求的环境中使用
- 输出格式灵活:可输出 MP3 格式,也可转换为 WAV 等标准格式。
也就是说,通过 Edge-TTS 合成语音,满足我们的测试场景,在实际使用之前,我们需要设计合理的测试用例。
————————————————
3. 如何建立测试用例集?
3.1 测试话术设计
Edge-TTS 支持多种语音类型,先在本地创建一个 json 格式的文件:config.json,内容如下,我们目前只取用“温暖女声”
{
"max_file_size_mb": 5,
"warn_if_estimate_exceeds": true,
"voices": [
{
"name": "zh-CN-XiaoxiaoNeural",
"desc": "温暖女声(适合日常对话)"
}
],
"not_use":[
{
"name": "zh-CN-YunjianNeural",
"desc": "沉稳男声(适合新闻、旁白)"
},
{
"name": "zh-CN-XiaoyiNeural",
"desc": "活泼女声(适合故事、儿童)"
},
{
"name": "zh-CN-YunxiNeural",
"desc": "阳光男声(适合产品说明)"
},
{
"name": "zh-CN-XiaohanNeural",
"desc": "柔和女声(适合客服)"
},
{
"name": "zh-CN-XiaomoNeural",
"desc": "情感女声(适合情感表达)"
}
],
"delay_between_files": 1,
"output_dir": "output"
}
选择语音类型后,就是选择将什么样的文字,转换成语音,参考下面内容,保存为:text.txt
# 日常对话(短文本) 今天天气真不错,我们去公园散步吧。 你吃饭了吗?我刚吃完午饭。 # 数字相关(电话号码、金额、日期) 我的手机号是138-1234-5678,微信同号。
# 专业术语(技术、医疗、法律) 医生说我得了高血压,需要每天吃一片5mg的降压药。
# 中英文混合 请把这份PDF文件发送到support@example.com。
# 长文本 - 故事类 在很久很久以前,有一位美丽的白雪公主。她的继母王后非常嫉妒她的美貌,命令猎人去森林里杀掉白雪公主。好心的猎人放走了白雪公主,她在森林里发现了七个小矮人的房子。小矮人们回家后发现白雪公主,被她深深吸引,决定收留她。从此,白雪公主和小矮人们过着快乐的生活。我
3.2 核心代码设计
async def generate_one(self, text, voice_name, voice_desc, text_idx, voice_idx):
"""生成单个音频文件"""
# 生成文件名
voice_short = voice_name.split('-')[-1].replace('Neural', '')
filename = f"{voice_short}_{text_idx:03d}.mp3"
filepath = self.audio_dir / filename
# 基础记录
record = {
'编号': f"{voice_idx:02d}-{text_idx:03d}",
'原文本': text,
'音频路径': str(filepath),
'语音名称': voice_name,
'语音描述': voice_desc,
'生成状态': '处理中',
'文件大小(KB)': 0,
'错误信息': '',
'生成时间': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
}
# 文件已存在
if filepath.exists():
size_kb = filepath.stat().st_size / 1024
record.update({'文件大小(KB)': round(size_kb, 2), '生成状态': '已存在'})
self.records.append(record)
return
# 生成新文件
try:
tts = edge_tts.Communicate(text, voice_name)
await tts.save(str(filepath))
size_kb = filepath.stat().st_size / 1024
record.update({'文件大小(KB)': round(size_kb, 2), '生成状态': '成功'})
except Exception as e:
record.update({'生成状态': '失败', '错误信息': str(e)})
self.records.append(record)
接着,将音频文件的相关信息,报错为 excel 文档,以供后续的框架对比使用。生成的excel如图。
现在你应该看出来我要怎么做了,上文中,我们通过 AI翻译大模型,寻找到了如 keyword、bleu、repeation、length 等多个文字评价模型,我们要做的事情,就是将“原始文本”和“公司业务音生文—生成文本”进行一次比对,从而得出分数。
————————————————
4. 测试报告分析
4.1 优点分析:
- 中文日常对话识别准确率高
- 1001:今天天气真不错 ——》0.93分
- 1002:你吃饭了吗? ——》0.91分
- 1023:长文本——》0.95分
- 1030:情感表达——》0.90分
优势:日常会话、长文本、情感语气的识别效果优秀,BLEU 分数普遍在 0.8 以上。
- 数字基础识别可控
- 1004:299元 ——》二百九十九元(0.61分)
- 1005:2024年3月15日——》识别为日期格式,二零二四年三月十五日(0.63分)
优势:能够将数字转换成正确读法,长度比率控制得当。
- 专业术语处理能力
- 1011:1.5cm的磨玻璃结节 ——》0.85分
- 1011:患者CT ——》专业术语保留,处理得当
优势:医学属于识别准确,中英文处理得当。
- 绕口令
- 1025:四是四,十是十 ——》0.89分
- 1026:化肥会挥发 ——》0.90分
优势:对语音相似度高的词语也能准确区分。
4.2 缺点分析:
- 英文识别能力极差(关键问题)
- 1013:我正在学习Machine Learning和Deep Learning。
- 识别为:我正在学习那是拉尼和迪拉尼
- BLEU分数:0.2
- 关键词得分:0
- 1014:我的GitHub账号是github.com/username/project。
- 识别为:我的贝卡账号是贝卡点抗斜杠优瑟连斜杠
- BLEU分数:0.16
- 关键词得分:0.5
- 问题分析:
- 完全无法识别英文单词,强行音译,导致语义完全不符合场景
- 网址、邮箱等特殊格式识别失败
- 英文缩写(CT除外)处理能力不足
- 1013:我正在学习Machine Learning和Deep Learning。
- 数字读法不一致
- 1003:我的手机号是138-1234-5678,微信同号。
- 识别为:我的手机号是幺三八幺二三四五六七八微信同号
- “1”读成“幺”(不规范,强制转换成了中文)
- 连字符处理不当,目前看来,完全没有连字符-
- 1006:我的银行卡号是6230 5800 0123 4567 890。
- 识别为:我的银行卡号是六二三零五八零零零幺二三四五六七八百九十
- 长数字串,读法混乱,尤其是最后面的890,读成了八百九十,词不达意
- “1”读成“幺”
- 问题分析:
- 数字读法问题
- 长字符串,切分错误
- 银行卡号这类纯数字场景,识别效果差
- 1003:我的手机号是138-1234-5678,微信同号。
- 标点符号全无
- 1001:今天天气真不错我们去公园散步吧 ——》丢失句号
- 1031:天啊不会吧这种事情怎么可能发生 ——》丢失感叹号、问号
- 问题分析:
- 所有标点符号都没有
- 影响语气表达和语义理解
- 无法区分陈述句、疑问句等
4.3 综合评分分析
权重分配:
- 关键词匹配:30%
- BLEU分数:40%(最高权重,重视语义)
- 长度比率:12%
- 重复惩罚:8%
得分解释:
- 中文日常对话:0.85-0.95分(优秀)
- 数字场景:0.60-0.70(一般:能看懂)
- 英文场景:0.20-0.40(极差)
4.4 改进方向
- 英文识别优化:
- 建议常用英文词库(GitHub、Machine Learning 等常用专业词语)
- 数字读法统一:
- 统一用“一”而不是“幺”
- 电话号码、银行卡号码,专项优化
- 标点符号:
- 保留标点符号
- 在保留标点符号的同时,区分不同语调,添加不同符号
- 特殊格式支持:
- 网址、邮箱等
暂时写到这里