智能语音模型的实践探索:Qwen2-Audio的推理与微调技巧全解析


引言

在人工智能领域,语音技术的发展一直是研究的热点之一。随着深度学习技术的不断进步,AI语音模型在语音识别、语音合成、语音翻译等多个方面取得了显著的成果。近期,阿里通义千问团队推出的Qwen2-Audio模型,以其开源的特性和强大的功能,引起了业界的广泛关注。本文将对Qwen2-Audio模型进行详细的介绍和分析,旨在为读者提供一个全面的认识。

一、Qwen2-Audio简介

Qwen2-Audio是由阿里通义千问团队推出的一款开源AI语音模型,它不仅支持直接语音输入,还能进行多语言文本输出。该模型具备语音聊天和音频分析的功能,支持超过8种语言,包括中文、英语、粤语、法语等。Qwen2-Audio在多个基准数据集上的表现超越了先前的模型,显示出其卓越的性能。
在这里插入图片描述

二、功能特点

Qwen2-Audio的主要功能特点包括:

  • 语音聊天:用户可以直接用语音与模型交流,无需通过自动语音识别(ASR)转换。
  • 音频分析:能够根据文本指令分析音频内容,识别语音、声音和音乐等。
  • 多语言支持:支持中文、英语、粤语、法语等多种语言和方言。
  • 易于集成:代码已集成到Hugging Face的transformers库,方便开发者使用和推理。
  • 可微调性:支持通过ms-swift框架进行模型微调,以适应不同应用需求。

三、技术原理

Qwen2-Audio的技术原理涵盖了以下几个方面:

  • 多模态输入处理:模型能接收并处理音频和文本两种模态的输入。
  • 预训练与微调:在大量多模态数据上进行预训练,学习语言和音频的联合表示,并通过微调提高特定应用场景下的性能。
  • 注意力机制:使用注意力机制加强音频和文本之间的关联。
  • 条件文本生成:根据给定的音频和文本条件生成响应文本。
  • 编码器-解码器架构:采用编码器-解码器架构,处理输入并生成输出文本。
  • Transformer架构:作为transformers库的一部分,采用Transformer架构处理序列数据。
  • 优化算法:使用优化算法调整模型参数,提高预测准确性。
    在这里插入图片描述

四、模型评测

通义千问团队在一系列基准数据集,如 LibriSpeech、Common Voice 15、Fleurs、Aishell2、CoVoST2、Meld、Vocalsound 以及 AIR-Benchmark 上展开了实验,旨在评估 Qwen2-Audio 相较于通义千问团队先前发布的 Qwen-Audio 以及各项任务中的顶尖模型的表现。接下来,通义千问团队将会展示一张图表,用以阐释 Qwen2-Audio 相对于竞争对手的绩效。在所有任务里,Qwen2-Audio 均显著优于先前的最优模型或者 Qwen-Audio 。
在这里插入图片描述

五、应用场景

Qwen2-Audio的应用场景是多样化的,它以其卓越的语音处理能力,为不同领域带来了革命性的变革。以下是Qwen2-Audio的一些关键应用领域,它们展示了该模型如何融入并增强我们的日常生活和专业工作:

1、智能助手
Qwen2-Audio不仅仅是一个工具,更是一个随时待命的智能伙伴。作为虚拟助手,它能够通过自然语言处理与用户进行流畅的语音交互,无论是回答问题、提供信息还是执行命令,它都能以一种人性化的方式满足用户的需求。

2、语言翻译
在全球化的今天,语言障碍常常限制了人们的交流。Qwen2-Audio通过实时语音翻译功能,打破了这一限制。它能够即时将一种语言转换为另一种语言,极大地促进了不同文化和语言背景的人们之间的沟通与理解。

3、客服中心
客户服务是企业与消费者沟通的重要桥梁。Qwen2-Audio在自动化客户服务方面的应用,使得处理咨询和解决问题变得更加高效。它能够快速响应客户的需求,提供个性化的服务,同时减轻客服人员的工作压力。

4、音频内容分析
在信息爆炸的时代,音频内容分析成为了一种重要的信息处理手段。Qwen2-Audio能够深入分析音频数据,进行情感分析、关键词提取或语音识别,帮助企业和研究人员从大量音频资料中提取有价值的信息,为决策提供支持。

Qwen2-Audio的这些应用场景只是冰山一角。随着技术的不断进步,我们可以预见,它将在更多领域展现出其独特的价值,为人们的生活和工作带来更多的便捷和创新。

六、模型体验

Qwen2-Audio提供了丰富的体验方式,包括在线Demo体验和小程序体验,用户可以通过这些方式直观地感受模型的功能和性能。
体验链接https://huggingface.co/spaces/Qwen/Qwen2-Audio-Instruct-Demo
在这里插入图片描述

七、模型推理

Qwen2-Audio的代码已集成到Hugging Face的transformers库中,提供了详细的推理教程,包括语音聊天和音频分析的推理示例,方便开发者快速上手。

1、安装依赖

要开始使用Qwen2-Audio模型进行推理,首先需要确保安装了transformers库,这是进行模型推理的基础。通过以下命令,您可以轻松地安装或更新到最新版本:

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

2、语音聊天推理

在语音聊天模式下,Qwen2-Audio模型允许用户以语音形式与模型进行自然交流,无需任何文字输入。以下是一个语音聊天推理的示例代码,展示了如何实现这一过程:

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")

# 准备对话内容和音频URL 
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]
# 输出模型的响应
print(response)

3、音频分析推理

音频分析推理允许用户上传音频文件并提出相关问题,模型将分析音频内容并给出相应的回答。以下是一个音频分析推理的示例代码:

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]
# 输出模型的响应
print(response)

八、模型微调

Qwen2-Audio模型的微调是通过ms-swift框架实现的,这一过程可以针对特定的应用场景对模型进行定制化训练。为了简化微调流程,我们提供了详尽的教程和代码示例,确保开发者能够轻松上手。

swift开源地址https://github.com/modelscope/ms-swift

1、数据集准备

在微调多模态大型模型时,自定义数据集是关键。官方提供了aishell1-zh-mini数据集作为示例,该数据集可在ModelScope平台上找到。
https://modelscope.cn/datasets/speech_asr/speech_asr_aishell1_trainsets

自定义数据集支持json和jsonl样式。以下提供了两种自定义数据集格式:
格式1:

[
    {"conversations": [
        {"from": "user", "value": "<audio>audio_path</audio>11111"},
        {"from": "assistant", "value": "22222"}
    ]},
    {"conversations": [
        {"from": "user", "value": "<audio>audio_path</audio><audio>audio_path2</audio><audio>audio_path3</audio>aaaaa"},
        {"from": "assistant", "value": "bbbbb"},
        {"from": "user", "value": "<audio>audio_path</audio>ccccc"},
        {"from": "assistant", "value": "ddddd"}
    ]},
    {"conversations": [
        {"from": "user", "value": "AAAAA"},
        {"from": "assistant", "value": "BBBBB"},
        {"from": "user", "value": "CCCCC"},
        {"from": "assistant", "value": "DDDDD"}
    ]}
]

格式2:

{"query": "<audio>55555", "response": "66666", "audios": ["audio_path"]}
{"query": "<audio><audio>eeeee", "response": "fffff", "history": [], "audios": ["audio_path1", "audio_path2"]}
{"query": "EEEEE", "response": "FFFFF", "history": [["query1", "response1"], ["query2", "response2"]]}

2、安装依赖

在开始微调之前,需要在开始微调之前,确保已安装所有必要的依赖项。以下是安装命令:

# 安装ms-swift
pip install git+https://github.com/modelscope/swift.git#egg=ms-swift[llm]
# 安装最新的transformers
pip install git+https://github.com/huggingface/transformers.git
pip install librosa

3、模型微调

微调过程可以通过以下Python代码片段启动:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'

from swift.llm import sft_main, SftArguments, ModelType, DatasetName
# 如果是本地路径需要指定model_id_or_path
sft_main(SftArguments(model_type=ModelType.qwen2_audio_7b_instruct,
                      model_id_or_path=None,
                      dataset=[DatasetName.aishell1_zh_mini]))

如果要使用自定义数据集,按以下方式进行指定:

# val_dataset可选,如果不指定,则会从dataset中切出一部分数据集作为验证集
    --dataset train.jsonl \
    --val_dataset val.jsonl \

4、微调后推理

微调完成后,可以在验证集上进行推理,以评估模型性能:

CUDA_VISIBLE_DEVICES=0 swift infer \
  --ckpt_dir output/qwen2-audio-7b-instruct/vx-xxx/checkpoint-xxx \
  --load_dataset_config true

# 如果使用了LoRA,合并LoRA权重后的推理
CUDA_VISIBLE_DEVICES=0 swift infer \
  --ckpt_dir output/qwen2-audio-7b-instruct/vx-xxx/checkpoint-xxx \
  --load_dataset_config true --merge_lora true

通过上述步骤,开发者可以对Qwen2-Audio模型进行有效的微调,以适应各种特定的应用需求,进而提升模型在目标任务上的性能和准确性。

结语

Qwen2-Audio,这一款开源的AI语音模型,以其卓越的性能和用户友好的设计,不仅为语音技术的进步注入了新的活力,更为整个行业的创新和发展开辟了无限可能。它的强大功能和易用性,让语音交互变得更加自然、流畅,极大地丰富了人机交流的深度和广度。

随着技术的持续演进,以及开源社区的不懈努力和智慧贡献,Qwen2-Audio正逐渐成为语音技术领域的一个重要里程碑。我们坚信,它将不仅仅是一个技术产品,更是推动行业发展、促进技术交流、激发创新思维的重要力量。

项目地址

在这里插入图片描述

🎯🔖更多专栏系列文章:AI大模型提示工程完全指南AI大模型探索之路(零基础入门)AI大模型预训练微调进阶AI大模型开源精选实践AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,加入技术交流群,开启编程探索之旅。
💘精心准备📚500本编程经典书籍、💎AI专业教程,以及高效AI工具。等你加入,与我们一同成长,共铸辉煌未来。
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值