MindNLP是一个基于MindSpore的自然语言处理(NLP)开源库。它提供了一系列常用的NLP方法,并支持解决各种自然语言处理任务的平台。MindNLP的设计目标是帮助研究人员和开发者更高效地构建和训练模型。

MindNLP的主要特点包括:

  1. 全面的数据处理:MindNLP包装了许多经典的NLP数据集,如Multi30k、SQuAD、CoNLL等,便于用户使用。
  2. 用户友好的NLP模型工具集:提供了多种可配置的神经网络组件,易于用户自定义模型,提高NLP任务建模的效率。
  3. 灵活易用的训练与推理引擎:简化了MindSpore中复杂的训练过程,提供了TrainerEvaluator接口,可以轻松地训练和评估模型。

MusicGen 是一个由 Meta(原 Facebook Research)开发的开源 AI 音乐生成模型。这个模型基于 Transformer 架构,能够高效地处理音频和文本数据。MusicGen 的主要功能包括:

  1. 文本提示音乐生成:可以根据文本提示生成新的音乐片段,这些提示可以选择性地与现有的旋律对齐。
  2. 高质量样本生成:通过使用高效的令牌交错模式和单阶段方法,MusicGen 能够生成高质量的音乐样本,无需复杂的级联模型。

MusicGen 的特点包括:

  • 单语言模型(LM):用于条件音乐生成,操作压缩的音乐令牌,消除了对多个模型的需求。
  • 高质量样本生成:在文本或旋律的指导下生成高质量的音乐样本。
  • 先进的模型架构:包括文本编码器、基于语言模型的解码器和音频编码器/解码器,用于多功能的音乐生成。
  • 灵活的生成模式:提供贪婪和采样生成模式,推荐采样以获得更好的结果。
  • 无条件生成:能够不依赖特定提示或输入生成音乐。
  • 广泛的训练数据集:在 20,000 小时的多样化许可音乐上训练,包括高质量的曲目和器乐。
  • 可定制的生成过程:允许用户修改生成参数,如指导尺度和最大长度。
from mindnlp.transformers import MusicgenForConditionalGeneration

model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")

生成音乐

MusicGen支持两种生成模式:贪心(greedy)和采样(sampling)。在实际执行过程中,采样模式得到的结果要显著优于贪心模式。因此我们默认启用采样模式,并且可以在调用MusicgenForConditionalGeneration.generate时设置do_sample=True来显式指定使用采样模式。

无提示生成

我们可以通过方法 MusicgenForConditionalGeneration.get_unconditional_inputs 获得网络的随机输入,然后使用 .generate 方法进行自回归生成,指定 do_sample=True 来启用采样模式:

%%time
unconditional_inputs = model.get_unconditional_inputs(num_samples=1)

audio_values = model.generate(**unconditional_inputs, do_sample=True, max_new_tokens=256)
//使用第三方库scipy将输出的音频保存为musicgen_out.wav 文件。

import scipy
​
sampling_rate = model.config.audio_encoder.sampling_rate
scipy.io.wavfile.write("musicgen_out.wav", rate=sampling_rate, data=audio_values[0, 0].asnumpy())
from IPython.display import Audio
# 要收听生成的音频样本,可以使用 Audio 在 notebook 进行播放
Audio(audio_values[0].asnumpy(), rate=sampling_rate)

文本提示生成

首先基于文本提示,通过AutoProcessor对输入进行预处理。然后将预处理后的输入传递给 .generate 方法以生成文本条件音频样本。同样,我们通过设置“do_sample=True”来启用采样模式。

其中,guidance_scale 用于无分类器指导(CFG),设置条件对数之间的权重(从文本提示中预测)和无条件对数(从无条件或空文本中预测)。guidance_scale越高表示生成的模型与输入的文本更加紧密。通过设置guidance_scale > 1来启用 CFG。为获得最佳效果,使用guidance_scale=3(默认值)生成文本提示音频。

%%time
from mindnlp.transformers import AutoProcessor

processor = AutoProcessor.from_pretrained("facebook/musicgen-small")

inputs = processor(
    text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
    padding=True,
    return_tensors="ms",
)

audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)
scipy.io.wavfile.write("musicgen_out_text.wav", rate=sampling_rate, data=audio_values[0, 0].asnumpy())

音频提示生成

AutoProcessor同样可以对用于音频预测的音频提示进行预处理。在以下示例中,我们首先加载音频文件,然后进行预处理,并将输入给到网络模型来进行音频生成。最后,我们将生成出来的音频文件保存为musicgen_out_audio.wav

%%time
from datasets import load_dataset

processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
dataset = load_dataset("sanchit-gandhi/gtzan", split="train", streaming=True)
sample = next(iter(dataset))["audio"]

# take the first half of the audio sample
sample["array"] = sample["array"][: len(sample["array"]) // 2]

inputs = processor(
    audio=sample["array"],
    sampling_rate=sample["sampling_rate"],
    text=["80s blues track with groovy saxophone"],
    padding=True,
    return_tensors="ms",
)

audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)
scipy.io.wavfile.write("musicgen_out_audio.wav", rate=sampling_rate, data=audio_values[0, 0].asnumpy())

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐