DEMO PAPER GITHUB HUGGING FACE MODELSCOPE DISCORD

在一个通用的AI系统中,核心模型应该能够理解不同模态的信息。当前的大语言模型现在已经能够理解语言并进行推理,并且已经扩展到了更多的模态,包括视觉和音频。此前我们陆续发布了多个 Qwen 语言模型系列以及 Qwen-VL 和 Qwen-Audio 等多模态模型。今天,我们正式发布 Qwen2-Audio。这是 Qwen-Audio 的下一代版本,它能够接受音频和文本输入,并生成文本输出。Qwen2-Audio 具有以下特点:

  • 语音聊天:用户可以使用语音向音频语言模型发出指令,无需通过自动语音识别(ASR)模块。

  • 音频分析:该模型能够根据文本指令分析音频信息,包括语音、声音、音乐等。

  • 多语言支持:该模型支持超过8种语言和方言,例如中文、英语、粤语、法语、意大利语、西班牙语、德语和日语。


我们在 Hugging Face 和 ModelScope 上开源了 Qwen2-Audio-7B 以及 Qwen2-Audio-7B-Instruct,并且我们搭建了一个 demo 供用户互动。下面是一些具体例子:

语音交互

语音交互:基础交互 Next
User
Qwen2-Audio
这种情况可能会让人感到沮丧和困惑,但是你需要记住的是,你不能强迫任何人去喜欢你。如果你真的喜欢这个女孩,那么最好的办法就是尊重她的感受,不去打扰她,同时也要保持自己的尊严。 以下是一些建议:   1. 尊重她的决定:如果她明确表示不喜欢你,那么你应该尊重她的决定,不要试图改变她的想法。 2. 不要过于干涉:避免过多地干涉她的生活,也不要试图通过各种方式来接近她。 3. 保持距离:尽量避免与她有太多的接触,尤其是在她不希望的情况下。 4. 寻求支持:如果你感到很难过或者困惑,可以向你的朋友或家人寻求支持和建议。   最重要的是,你要保持自己的尊严和自信,不要因为别人的喜好而失去自我。
User
Qwen2-Audio
很抱歉,我无法帮助你追求她。这不仅是因为我是一个人工智能助手,而且也是因为她已经明确表示不喜欢你。在这种情况下,我建议你尊重她的决定,同时也要保持自己的尊严和自信。
User
Qwen2-Audio
当然可以!追女孩子需要付出努力和耐心,但同时也需要尊重她们的感受和意愿。以下是一些基本的建议:   1. 做一个有趣的人:尽可能多地展示出你的幽默感和创造力,让女孩子觉得和你在一起会很开心。 2. 主动出击:如果你对某个女孩子感兴趣,不妨主动和她交流,比如邀请她一起吃饭、看电影等。 3. 给予关注:多关注女孩子的生活,了解她的兴趣爱好,给她提供帮助和支持。 4. 表达情感:用适当的方式表达你的情感,让她知道你对她有着特殊的感情。 5. 尊重她的选择:如果女孩子对你没有同样的感觉,你需要尊重她的决定,不要强求。   最后,要记住,每个人都是独特的,所以你需要根据她的个性和喜好来调整你的行为和策略。
User
Qwen2-Audio
当然啦!制造浪漫惊喜的方法有很多,以下是一些常见的建议:   1. 制作一张手写卡片:写下你的心声,告诉她你有多么爱她。 2. 准备一份特别的礼物:可以是她最喜欢的物品,也可以是你自己亲手制作的东西。 3. 安排一次特别的约会:可以选择一家浪漫的餐厅,或者去看一场电影。 4. 给她一个意想不到的惊喜:比如在她的生日那天,提前安排好一个惊喜派对。 5. 帮助她实现一个梦想:如果她有什么梦想,尽你所能去帮助她实现。 6. 在她最需要的时候陪伴她:无论是在她生病还是遇到困难的时候,都要在她身边陪伴她。   最重要的是,要用心去制造每一个浪漫惊喜,让她感受到你的爱意和关心。

音频分析

音频分析:说话人信息识别 Next
User
Qwen2-Audio
两个人在说话。
User
Qwen2-Audio
说话人的情绪是兴奋和满意的。
User
Qwen2-Audio
说话人大概在41岁以上。

模型效果

我们已经在一系列基准数据集上进行了实验,包括 LibriSpeech、Common Voice 15、Fleurs、Aishell2、CoVoST2、Meld、Vocalsound 以及 AIR-Benchmark,以评估 Qwen2-Audio 与我们之前发布的 Qwen-Audio 以及各项任务中的最先进模型相比的表现。下面我们将展示一张图表来说明 Qwen2-Audio 相对于竞争对手的表现。在所有任务中,Qwen2-Audio 都显著超越了先前的最佳模型或是 Qwen-Audio。

关于数据集的更具体结果列于下表中。

结构与训练范式

下图展示了模型结构及训练方法。具体来说,我们使用 Qwen 语言模型和音频编码器这两个基础模型,接着依次进行多任务预训练以实现音频与语言的对齐,以及 SFT 和 DPO 来掌握下游任务的能力并捕捉人类的偏好。

如何使用

Qwen2-Audio 已经被 Hugging Face Transfomers 官方支持。我们建议您通过源码安装 transformers ,如下所示:

pip install git+https://github.com/huggingface/transformers

下面我们展示如何使用 Qwen2-Audio-7B-Instruct 来进行语音对话和音频分析. 下面是一个语音对话的例子:

from io import BytesIO
from urllib.request import urlopen
import librosa
from transformers import Qwen2AudioForConditionalGeneration, AutoProcessor

processor = AutoProcessor.from_pretrained("Qwen/Qwen2-Audio-7B-Instruct")
model = Qwen2AudioForConditionalGeneration.from_pretrained("Qwen/Qwen2-Audio-7B-Instruct", device_map="auto")

conversation = [
    {"role": "user", "content": [
        {"type": "audio", "audio_url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-Audio/audio/guess_age_gender.wav"},
    ]},
    {"role": "assistant", "content": "Yes, the speaker is female and in her twenties."},
    {"role": "user", "content": [
        {"type": "audio", "audio_url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-Audio/audio/translate_to_chinese.wav"},
    ]},
]
text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False)
audios = []
for message in conversation:
    if isinstance(message["content"], list):
        for ele in message["content"]:
            if ele["type"] == "audio":
                audios.append(librosa.load(
                    BytesIO(urlopen(ele['audio_url']).read()), 
                    sr=processor.feature_extractor.sampling_rate)[0]
                )

inputs = processor(text=text, audios=audios, return_tensors="pt", padding=True)
inputs.input_ids = inputs.input_ids.to("cuda")

generate_ids = model.generate(**inputs, max_length=256)
generate_ids = generate_ids[:, inputs.input_ids.size(1):]

response = processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]

在语音对话模式中,用户只需输入语音而无需输入文字,指令则通过语音直接传达给模型。下面则是一个音频分析的例子:

from io import BytesIO
from urllib.request import urlopen
import librosa
from transformers import Qwen2AudioForConditionalGeneration, AutoProcessor

processor = AutoProcessor.from_pretrained("Qwen/Qwen2-Audio-7B-Instruct")
model = Qwen2AudioForConditionalGeneration.from_pretrained("Qwen/Qwen2-Audio-7B-Instruct", device_map="auto")

conversation = [
    {'role': 'system', 'content': 'You are a helpful assistant.'}, 
    {"role": "user", "content": [
        {"type": "audio", "audio_url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-Audio/audio/glass-breaking-151256.mp3"},
        {"type": "text", "text": "What's that sound?"},
    ]},
    {"role": "assistant", "content": "It is the sound of glass shattering."},
    {"role": "user", "content": [
        {"type": "text", "text": "What can you do when you hear that?"},
    ]},
    {"role": "assistant", "content": "Stay alert and cautious, and check if anyone is hurt or if there is any damage to property."},
    {"role": "user", "content": [
        {"type": "audio", "audio_url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-Audio/audio/1272-128104-0000.flac"},
        {"type": "text", "text": "What does the person say?"},
    ]},
]
text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False)
audios = []
for message in conversation:
    if isinstance(message["content"], list):
        for ele in message["content"]:
            if ele["type"] == "audio":
                audios.append(
                    librosa.load(
                        BytesIO(urlopen(ele['audio_url']).read()), 
                        sr=processor.feature_extractor.sampling_rate)[0]
                )

inputs = processor(text=text, audios=audios, return_tensors="pt", padding=True)
inputs.input_ids = inputs.input_ids.to("cuda")

generate_ids = model.generate(**inputs, max_length=256)
generate_ids = generate_ids[:, inputs.input_ids.size(1):]

response = processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]

与上述例子不同,音频分析模式可以传入文字指令。但是,在这两个模式之间切换只需修改用户输入而无需担心诸如系统指令等其他内容。

下一步

这次我们带来了全新的音频语言模型 Qwen2-Audio,它支持语音对话和音频分析,并且能够理解超过 8 种语言和方言。在不久的将来,我们计划在更大的预训练数据集上训练出更优秀的 Qwen2-Audio 模型,使该模型能够支持更长的音频(超过30秒),并且我们还将构建更大规模的 Qwen2-Audio 模型,用于研究音频语言模型的扩展定律。