音频质量评估工具搭建
- Sunny
- 0
国际电信联盟电信标准分局(ITU-T)与美国电子和电气工程师协会(IEEE)定义了用MOS分来定量描述音频质量的标准。
基于此,微软在自己的GitHub主页上开源了评估音频质量的开源项目P.808。下面针对这个开源项目和电信联盟的相关标准来详细讲述主观测试客观化的相关标准和原理。
ITU-T与MOS分
首先,ITU-T在定义MOS分的时候是没有限定方法的,只是把音频的音质分为1-5分5个档次。对于每个音频而言,都有一个确定的分数能落在这个范围内,这个分数就是MOS分,它代表的是音频音质的量化评级。
在实际场景里,我们多采用人工听音的方式来判定音质的级别,尽管方法各有不同,但从一定程度上,主观听音测试是可以反映大致音质级别的。
但是这一方式也有着很严重的问题,参与听音的每个人的双耳听力是不同的,对于音质好坏的评判标准也有一定的差异,同时,有的人会对特定频段的声音(如12k以上高频或200以下低频)产生不适,也因此对听音的结果有一定的影响。
而现在对于众听音结果的处理方式大多是通过求取平均数的方式,我们知道,数据的平均值受异常点(偏离样本中心的特别大或特别小的值)的影响是很大的。因此这一方式缺乏科学性。
P.808开源项目
项目地址
这个项目的地址是https://github.com/microsoft/P.808,微软将其资源包都放在了里面,只需要clone下来就好。
结构
这个项目包含docs
、src
、p835_reference_conditions
三个文件夹。
docs中主要存放的是一些说明文件,包含不同类型的听音测试方式,及其配置方法。
src中存放的是静态网页(html)源码,具体这些源码是怎么用的稍后会讲到。
p835_reference_conditions中存放的是音频资源文件,包含一些golden sample和一些bad sample,以及它们已经确定了的评分。
搭建准备
账号配置
要运行该项目,你需要准备好一个可以在亚马逊众包平台上发布任务的账号,然后按照这里配置并获取好AWS访问密钥。
然后用上面准备好的账号和配置文件mturk.cfg替换更新默认配置。
本地配置
- 打开命令行或终端
- 在命令行中进入src文件夹
- 输入
pip install requirement.txt
安装脚本运行所需的依赖
Blob配置
将常规文件上传至服务器,这里所指的常规文件就是p835_reference_conditions中存放的资源文件。整个P808工具在运行时就是通过上传至服务器的资源,生成随机音频的问卷,由亚马逊平台向众包参与者发放。
切记这里的文件树结构要与p835_reference_conditions下的保持一致,因为脚本中的资源文件里路径是按照这个文件树的方式写入的,如果擅自更改,可能导致资源引用错误。
准备ACR测试
ACR测试称为绝对级别评分测试,此项测试采用的全部资源文件都为ITU-T Sup23数据集的示例。
- 先将待测语音片段上传至服务器中
- 在
rating_clips.csv
中添加上所有引用的语音资源文件与待测语音段url链接,参考src/test_inputs/rating_clips.csv
- 在后续的分析中,文件名将称为唯一的keys,并显示在结果中
- 将训练片段上传至服务器中,并创建一个
train_clips.csv
文件,该文件有一格包含所有train_clips
文件的url,参考src/inputs/train_clips.csv
- Notes:训练集作用是描述测试参与者的感知水平,应包含代表数据集的文件,涵盖测试预期从最差质量到最好质量的范围,应包含至少5个文件剪辑片段
- 将黄金标准片段(golden sample clips)上传至服务器中,并创建一个
gold_clips.csv
文件,该文件包含一个名为gold_clips
,其中列出了所有资源文件的url以及没个片段的预期评分gold_clips_ans
- Notes:黄金片段在每个问卷会话中起到质量控制的作用,我们期望每个测试参与者的评分都能如同标定一样明确和准确,以至于要求他们都给出了
gold_clips_ans
评分的结果,在这个将结果中我们容许有+/-1的偏差。因此建议使用包含非常好的片段和非常差的片段(use clips with excellent <answer 5> or very bad <answer 1> quality)
- Notes:黄金片段在每个问卷会话中起到质量控制的作用,我们期望每个测试参与者的评分都能如同标定一样明确和准确,以至于要求他们都给出了
- 创建一个测试陷阱集
- 配置
create_trapping_stiimuli.py
文件。有关信息请查看文件夹中的conf-trapping.md
- 删除
trapping clips/source
目录下的所有文件 - 将数据集中的一些片段添加到
trapping clips/source
目录中- 涵盖演讲者的平均分布情况(包含音频质量最好的剪辑片段)
- 涵盖整个质量范围的数据集(一些好的,中等和差的质量)
- 运行
create_trppinng_stimuli.py
- 陷阱剪辑储存在
trapping clips/output
目录中,剪辑片段列表和answer可以在trapping clips\source\output_report.csv
下找到,我们可以trapping_clips指向这些文件的url替换文件名以创建trapping_clips.csv
- 配置
- 将捕获的剪辑上传到云服务器中,并创建一个
trapping_clips.csv
文件,该文件在名为的列中包含所有URL,trapping_clips
并在名为的列中包含每个剪辑的预期结果trapping_ans
- 配置
master_script.py
以及cfg
文件 - 再次检查脚本配置,并且应该创建一个以项目名为名的文件夹在当前文件夹下,其中包含:
YOUR_PROJECT_NAME_acr.html
:用于 Amazon Mechanical Turk (AMT)的定制化界面的html文件YOUR_PROJECT_NAME_publish_batch.csv
:在AMT中批量发布期间要使用的动态内容列表YOUR_PROJECT_NAME_acr_result_parser.cfg
:result_parser.py
脚本要使用的定制配置文件
- 通过脚本入口创建ACR自定义项目
cd src
python master_script.py ^
--project YOUR_PROJECT_NAME ^
--method acr ^
--cfg your_configuration_file.cfg ^
--clips rating_clips.csv ^
--training_clips training_clips.csv ^
--gold_clips gold_clips.csv ^
--trapping_clips trapping_clips trapping_clips trapping_clips trapping.clips CSV
当准备好上述所有的步骤,就可以进行下一步,运行测试了。
运行测试
- 使用之前创建好的AWS Access Key更新常规配置文件(以下称为mturk.cfg)(请参阅mturk.cfg作为示例)
- 为测试创建一个新项目
- 转到“创建”>“新建项目”>“测量链接”>“创建项目”
- 在“ 1 –输入属性”中填写重要信息:
- 设定调查
- 每个响应的奖励:建议每小时支付比目标国家/地区的最低工资高的工资。
- 受访者人数:这是要为每个剪辑收集的投票数。
- 每个工人分配的时间:1小时
- 工人要求
- 添加其他标准:HIT批准率(%)大于98
- 添加另一个标准:批准的HIT数量大于500
- 位置:要求工作人员必须讲所研究语言的母语
- 设定调查
- 保存并转到“ 2 –设计版面”:
- 点击来源
- 复制并粘贴
YOUR_PROJECT_NAME_acr.html
此处的内容。 - 点击Source,然后点击Save
接下来,我们应该使用现有项目创建一个新批处理。可以使用AMT网站或API来完成。使用API可以应用“分配检查策略”。但是,当使用API创建HIT时,它们将不会在网站上显示(站立时间为2019年12月)。因此,如果通过API创建任务,则所有操作(例如下载结果,批准/拒绝分配等)都应使用API来完成
通过API与脚本创建项目
- 使用
hit_layout_id
,[hit_type]
和[create_hit
]更新create_hit.cfg
配置文件。 - 使用以下命令创建批处理
cd src
python mturk_utils.py ^
--cfg mturk.cfg ^
--create_hit create_hit.cfg ^
--create_hit_input YOUR_PROJECT_NAME_publish_batch.csv
该脚本将创建一个包含创建的HIT的HITIds
,HITTypeIds
,HITGroupIds
的csv文件(call it Batch_123_456.csv
)。下载结果需要此文件
- 稍后,下载结果
cd src
python mturk_utils.py ^
--cfg mturk.cfg ^
--answers Batch_123_456.csv
以上步骤完成后,您就可以继续分析结果了,这里不赘述分析结果的具体操作,详细参考docs/results.md