❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!
微信公众号|搜一搜:蚝油菜花
🚀 快速阅读
- Spirit LM 是由 Meta AI 团队开发的多模态语言模型,能够无缝集成语音和文本数据。
- 该模型基于预训练的文本语言模型,通过在文本和语音单元上的持续训练扩展到语音模态。
- Spirit LM 具有跨模态语言生成、语义和表达能力、少量样本学习等功能,可应用于语音助手、自动语音识别、文本到语音等多种场景。
正文(附运行示例)
Spirit LM 是什么
Spirit LM 是由 Meta AI 团队推出的一种多模态语言模型,能无缝地混合文本和语音数据。Spirit LM 基于一个预训练的文本语言模型,用持续在文本和语音单元上的训练扩展到语音模态。模型有两个版本:基础版(BASE)和表达版(EXPRESSIVE)。基础版用语音语义单元,除表达版除语义单元外,还用音高和风格单元模拟语音的表达性。Spirit LM 在训练时将语音和文本序列连接为单一的标记集,基于词级交错方法。能生成具有文本模型语义能力的文本,和生成具有语音模型表达能力的语音,Spirit LM 能在少量样本的情况下跨模态学习新任务,如自动语音识别(ASR)、文本到语音(TTS)和语音分类。
Spirit LM 的主要功能
- 跨模态语言生成:Spirit LM 能生成文本和语音,实现无缝切换。
- 语义和表达能力:结合文本模型的语义能力和语音模型的表达能力。
- 少量样本学习:基于少量样本快速学习新任务,如 ASR、TTS 和语音分类。
- 情感保持:表达版(EXPRESSIVE)能理解和生成具有特定情感的语音和文本。
- 多模态理解:理解和生成跨模态内容,例如将文本转换为语音或反之。
Spirit LM 的技术原理
- 预训练和扩展:基于预训练的文本语言模型,用持续在文本和语音单元上的训练来展模型的语音处理能力。
- 交错训练:用词级交错方法,将语音和文本序列连接为单一的标记集进行训练,实现语音和文本之间的对齐。
- 双模态标记: - 基础版(BASE):用语音语义单元(如 HuBERT 标记)。- 表达版(EXPRESSIVE):除语义单元外,结合音高(F0)和风格单元捕捉语音的表达性。
- 编码和解码: - 编码器:将语音转换为标记,用 HuBERT 等模型进行语音编码。- 解码器:将标记还原为原始模态(文本或语音)。
- 数据集和训练: - 用大规模的文本数据集和语音数据集。- 基于对齐的语音+文本数据集进行交错训练。
如何运行 Spirit LM
安装设置
首先,您需要设置环境。可以使用 Conda 或 Pip 来安装所需的依赖项。
- Conda
conda env create -f env.yml
pip install -e '.[eval]'
- Pip
pip install -e requirements.txt
pip install -e '.[eval]'
- 开发环境(可选) 如果您想要运行测试,可以使用以下命令安装开发依赖项。
pip install -e '.[dev]'
检查点设置
检查点设置详情请参阅checkpoints/README.md。
快速开始
快速开始的指南主要包括语音标记化、Spirit LM 生成和 STSP 评估。由于这段篇幅太长,下面就直接演示如何加载预训练模型进行推理,其他的内容请参阅官方文档:
- 语音标记化:有关语音标记化的详细信息,请参阅spiritlm/speech_tokenizer/README.md。
- Spirit LM 生成:有关 Spirit LM 模型使用的详细信息,请参阅spiritlm/model/README.md。
- STSP 评估:有关 STSP 评估的详细信息,请参阅spiritlm/eval/README.md。
模型加载
要加载 Spirit LM 模型,您可以使用以下代码示例。
from spiritlm.model.spiritlm_model import Spiritlm
# 加载基础版7B模型
spirit_lm = Spiritlm("spirit-lm-base-7b")# 加载表达版7B模型
spirit_lm = Spiritlm("spirit-lm-expressive-7b")
生成示例
以下是一些使用 Spirit LM 模型进行文本和语音生成的示例。
- 生成文本
from spiritlm.model.spiritlm_model import OutputModality, GenerationInput, ContentType
from transformers import GenerationConfig
# 生成文本
spirit_lm.generate(
output_modality=OutputModality.TEXT,
interleaved_inputs=[
GenerationInput(
content="The largest country in the world is",
content_type=ContentType.TEXT,)],
generation_config=GenerationConfig(
temperature=0.9,
top_p=0.95,
max_new_tokens=50,
do_sample=True,),)
- 生成语音
# 生成语音
spirit_lm.generate(
output_modality=OutputModality.SPEECH,
interleaved_inputs=[
GenerationInput(
content="examples/audio/7143-88743-0029.flac",
content_type=ContentType.SPEECH,)],
generation_config=GenerationConfig(
temperature=0.9,
top_p=0.95,
max_new_tokens=200,
do_sample=True,),)
任意生成
# 任意生成
spirit_lm.generate(
output_modality=OutputModality.ARBITRARY,
interleaved_inputs=[
GenerationInput(
content="examples/audio/7143-88743-0029.flac",
content_type=ContentType.SPEECH,)],
generation_config=GenerationConfig(
temperature=0.9,
top_p=0.95,
max_new_tokens=200,
do_sample=True,),)
更多示例可以在examples/speech_generation/spirit_model.ipynb中找到。
资源
- 项目官网:speechbot.github.io/spiritlm
- GitHub 仓库:https://github.com/facebookresearch/spiritlm
- arXiv 技术论文:https://arxiv.org/pdf/2402.05755
❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!
微信公众号|搜一搜:蚝油菜花
版权归原作者 蚝油菜花 所有, 如有侵权,请联系我们删除。