前两天,阿里发布了Qwen2-Audio ,一个大规模音频语言模型,能够接受各种音频信号输入,并针对语音指令执行音频分析或直接文本响应,鉴于一直在使用Qwen作为主力AI工具,所以对这个音频语言模型的期待值还是蛮高的,从github主页来看,模型在各个测试集上取得了不错的成绩,目前该项目已经开源
与复杂的分层标签相比,模型针对不同的数据和任务,利用自然语言提示简化了预训练过程,并进一步扩大了数据量。增强了 Qwen2-Audio 的指令跟踪能力,并实现了语音聊天和音频分析两种不同的音频交互模式。在语音聊天模式下,用户可以自由地与 Qwen2-Audio 进行语音交互,无需输入文本。在音频分析模式中,用户可以在交互过程中提供音频和文本指令以供分析。Qwen2-Audio 能够智能地理解音频内容,并根据语音指令做出适当的响应。例如,在一段同时包含声音、多人对话和语音命令的音频中,Qwen2-Audio 可以直接理解命令,并对音频做出解释和响应。此外,DPO 还优化了模型在事实性和遵守预期行为方面的表现。根据 AIR-Bench 的评估结果,Qwen2-Audio 在以音频为中心的指令执行能力测试中的表现优于 Gemini-1.5-pro 等以前的 SOTAs。Qwen2-Audio 已开源,旨在促进多模态语言社区的发展。
模型的大致训练步骤
Qwen2-Audio的训练过程可以分为以下几个关键阶段:预训练、监督微调(SFT)和直接偏好优化(DPO)。
• 预训练阶段:在这个阶段,Qwen2-Audio采用了自然语言提示来代替复杂的层级标签,这种方法有助于模型更好地理解和处理不同的数据和任务。这一阶段的目标是让模型能够在给定音频和之前的文本序列的情况下最大化下一个文本令牌的概率
• 监督微调(SFT):在监督微调阶段,Qwen2-Audio通过增加SFT数据的数量、质量和复杂性,进一步提高了模型与人类交互的对齐度,使模型能够平滑地处理语音和文本交互。
• 直接偏好优化(DPO):直接偏好优化阶段旨在改善模型的响应质量,特别是在事实性和遵循期望行为方面进行了优化。
模型在各种任务上测试的结果
Qwen2-Audio在多项音频相关任务上的测试结果表现出色
• 自动语音识别(ASR):在英文语音识别上,Qwen2-Audio在LibriSpeech的test-clean和test-other数据集上分别达到了1.6%和3.6%的词错误率(WER),优于之前的多任务学习模型。与Whisper-large-v3相比,在Fleurs中文子集上,Qwen2-Audio同样取得了更好的结果。值得注意的是,Qwen2-Audio在Common Voice 15数据集上并非零样本测试,而Whisper的结果是在零样本情况下获得的。然而,在Fleurs数据集上,两者都是在零样本条件下进行评估的。
• 语音到文本翻译(S2TT):在CoVoST2数据集上,Qwen2-Audio在所有七个翻译方向上的表现均超过了基线模型。
• 语音情感识别(SER)和声音分类(VSC):Qwen2-Audio在这两项任务上也显著超越了基线模型。
• 聊天能力评估:Qwen2-Audio在涵盖语音、声音、音乐和混合音频的聊天基准测试中的四个维度上都获得了高分,这些分数是由GPT-4自动评估得出,范围在0至10之间。即使没有进行特定任务的微调,Qwen2-Audio在这些任务上的表现仍然超越了竞争对手。
模型实测
目前整个模型都是开源的,可以通过modelscope和huggingface来获取模型,测试代码可以从git获取
(https://github.com/QwenLM/Qwen2-Audio?tab=readme-ov-file)
在构建项目运行环境的时候有一个点需要注意,就是整个模型在transformers发布版本中还没有,需要手动安装transformers库
pip install git+https://github.com/huggingface/transformers
在安装好环境,如果出现不支持BFloat16报错,可以将下面这段代码中torch_dtype=‘auto’修改成torch.float16
model = Qwen2AudioForConditionalGeneration.from_pretrained(
args.checkpoint_path,
torch_dtype=torch.float16,
device_map=device_map,
resume_download=True,
).eval()
不出意外的话,运行demo文件夹下的web_demo_audio.py就可以看到如下界面了:
到这,我们就可以正式开测了,首先我们试试模型对电影台词的一个识别度和区分度:
除了能将小马哥那段经典台词准确识别出来以外,其他的基本逻辑都没有啊,一部明显的中文台词给你整成外国电影了,当然这可以原谅,毕竟没有垂直训练过。
那么对人物的情绪的识别怎么样呢,还是小马哥的那段台词
可以看出,识别还是比较精准的,至少我只能听出愤怒和不甘心,但是模型听出来坚定,这个还是比较出乎意料的
下面我们进行一些比较简单的测试,识别一些比较基础的音频:
首先是一段猫叫的音频,能准确识别出来,还给出了拟声词咪咪叫,有点东西。
下面是一段鸟叫声,看看是否能识别出来:
依然没有被难住,回答还有形容词,清脆的鸟叫声,说明在最初数据标注的时候质量还是比较高的。
接下来我们测试一些自然界的风声和雨声
雨声准确的识别了出来
对于风的声音就识别不准了,识别成了汽车行驶的声音
下面来个混合声音,看看时候能识别出全部的声音
只识别出了部分的声音类型,没有完全识别出所有的声音。
总结
通过模型实测,可以看出模型在识别单一的简单的声音还是有比较高的准确度,一旦声音中混合多种不同的声音就很难分辨出来了,另外语音识别还是比较准确的,特别是在有背景音的情况下,能够一字不差的识别出来还是可以的。对于人物情感的识别也比较精准,总的来说还需要更进一步的优化,目前的状态还只能是一个简单的demo,离商用还有很大一段距离。