目录[-]

目录

  • 前言:如果公司接入了一个语音类型的AI大模型框架,如何进行测试?
  • 核心疑问分析
    • 语音从哪里来?
    • 怎么保证语音的质量?
  • 如何建立测试用例集?
    • 测试话术设计
    • 核心代码设计
  • 测试报告分析

 

————————————————

1、前言:如果公司接入了一个语音类型的AI大模型框架 ,如何进行测试?

 

公司接入了一个语音类型的AI大模型框架,我们可以借鉴现有的测试方法。

有一点可以确定:上文中提到的"翻译器"、"评估器"以及大部分的测试框架都可以直接引用,只需稍加修改,就可以直接达成测试效果。

————————————————

2、核心疑问分析

 

2.1 语音从哪里来?

测试语音数据的来源主要有以下几种方式:

  • 自建语音库:收集公司内部的历史语音数据。
  • 公开数据集:使用开源语音集,尤其是非中文的语音。
  • 合成语音:通过 TTS 工具生成测试语音,覆盖不同场景(本文采用这个方式
  • 众包采集:通过不同平台招募,不同人群录制特定场景的语音。
  • 生产环境脱敏:从生产环境获取经过脱敏处理的真实用户语音。

2.2 怎么保证语音的质量?

语音质量控制需要从多个维度判断:

  • 信噪比(SNR):确保背景噪音在可接受范围内,一般要求 SNR >20dB
  • 采样率:检查是否复核模型要求(通常 16kHz 或 8kHz)
  • 时长控制:语音片段不宜过长或果断,建议在 2-15 秒之间
  • 内容多样性:覆盖不同场景、口音、语速、情感等
  • 标注准确性:确保语音转写文本的准确率 >95%
  • 格式统一:统一音频格式(如 WAV、MP3)、声道数(单声道)

本文中采用的:Edge-TTS 合成语音,除了“内容多样性”之外,其余标准完全符合。它的优点如下:

  1. 免费易用:无需 API 密钥,纯代码可调用
  2. 语音质量高:微软神经语音技术,声音自然流畅,无背景噪音
  3. 多语言支持:支持40多种语言和方言,包括中文、英文、粤语等
  4. 多样化的声音:提供上百种不同风格的声音(男女声、童声、新闻播报、日常通话等不同风格)
  5. 可调节参数:支持调整语速、音调、音量,满足不同测试场景
  6. 标注准确率100%:生成的语音与输入文本完全一致,无需人工标注
  7. 跨平台:基于 WebSocket 协议,可在任何支持 HTTP 请求的环境中使用
  8. 输出格式灵活:可输出 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 优点分析:

  1. 中文日常对话识别准确率高
    • 1001:今天天气真不错 ——》0.93分
    • 1002:你吃饭了吗? ——》0.91分
    • 1023:长文本——》0.95分
    • 1030:情感表达——》0.90分

       优势:日常会话、长文本、情感语气的识别效果优秀,BLEU 分数普遍在 0.8 以上。

  1. 数字基础识别可控
    • 1004:299元 ——》二百九十九元(0.61分)
    • 1005:2024年3月15日——》识别为日期格式,二零二四年三月十五日(0.63分)

      优势:能够将数字转换成正确读法,长度比率控制得当。

  1. 专业术语处理能力
    • 1011:1.5cm的磨玻璃结节  ——》0.85分
    • 1011:患者CT  ——》专业术语保留,处理得当

       优势:医学属于识别准确,中英文处理得当。

  1. 绕口令
    • 1025:四是四,十是十  ——》0.89分
    • 1026:化肥会挥发  ——》0.90分

       优势:对语音相似度高的词语也能准确区分。

4.2 缺点分析:

  1. 英文识别能力极差(关键问题)
    • 1013:我正在学习Machine Learning和Deep Learning。
      • 识别为:我正在学习那是拉尼和迪拉尼
      • BLEU分数:0.2
      • 关键词得分:0
    • 1014:我的GitHub账号是github.com/username/project。
      • 识别为:我的贝卡账号是贝卡点抗斜杠优瑟连斜杠
      • BLEU分数:0.16
      • 关键词得分:0.5
    • 问题分析
      1. 完全无法识别英文单词,强行音译,导致语义完全不符合场景
      2. 网址、邮箱等特殊格式识别失败
      3. 英文缩写(CT除外)处理能力不足
  2. 数字读法不一致
    • 1003:我的手机号是138-1234-5678,微信同号。
      • 识别为:我的手机号是幺三八幺二三四五六七八微信同号
      • “1”读成“幺”(不规范,强制转换成了中文)
      • 连字符处理不当,目前看来,完全没有连字符-
    • 1006:我的银行卡号是6230 5800 0123 4567 890。
      • 识别为:我的银行卡号是六二三零五八零零零幺二三四五六七八百九十
      • 长数字串,读法混乱,尤其是最后面的890,读成了八百九十,词不达意
      • “1”读成“幺”
    • 问题分析:
      • 数字读法问题
      • 长字符串,切分错误
      • 银行卡号这类纯数字场景,识别效果差
  3. 标点符号全无
    • 1001:今天天气真不错我们去公园散步吧  ——》丢失句号
    • 1031:天啊不会吧这种事情怎么可能发生  ——》丢失感叹号、问号
    • 问题分析
      • 所有标点符号都没有
      • 影响语气表达和语义理解
      • 无法区分陈述句、疑问句等

4.3 综合评分分析

权重分配:

  1. 关键词匹配:30%
  2. BLEU分数:40%(最高权重,重视语义)
  3. 长度比率:12%
  4. 重复惩罚:8%

得分解释:

  1. 中文日常对话:0.85-0.95分(优秀
  2. 数字场景:0.60-0.70(一般:能看懂
  3. 英文场景:0.20-0.40(极差

4.4 改进方向

  1. 英文识别优化:
    • 建议常用英文词库(GitHub、Machine Learning 等常用专业词语)
  2. 数字读法统一:
    • 统一用“一”而不是“幺”
    • 电话号码、银行卡号码,专项优化
  3. 标点符号:
    • 保留标点符号
    • 在保留标点符号的同时,区分不同语调,添加不同符号
  4. 特殊格式支持:
    • 网址、邮箱等

 

 

 

暂时写到这里