Skip to content

Latest commit

 

History

History
567 lines (462 loc) · 20.1 KB

README_CN.md

File metadata and controls

567 lines (462 loc) · 20.1 KB

中文  |   English  



MooER (摩耳): 基于8万小时训练数据的开源音频理解大模型

共同一作



🔥 更新

  • 2024/09/03: 我们开源了MooER的 训练和推理代码 ! 你可以参考这个教程 来训练你自己的音频理解大模型和不同的任务,也可以基于我们开源的80k小时的模型来微调。
  • 2024/08/27: 我们推出了使用8万小时数据训练的MooER-80K-v2,您可从下文的评测结果中找到其对应的识别效果。目前,该模型仅支持语音识别任务,支持语音翻译及多任务识别的模型随后将会推出。
  • 2024/08/09: 我们推出了基于Gradio的在线演示。该演示系统运行在摩尔线程S4000服务器上。
  • 2024/08/09: 我们开源了推理代码,并同时开放了多个基于5000小时数据训练的语音识别及语音翻译(中->英)模型。欢迎试用!
  • 2024/08/09: 我们在arXiv上发布了 MooER v0.1 的技术报告.

📖 介绍

在本工作中,我们推出了摩耳大模型(英文名:MooER)—— 一个由摩尔线程开发的、基于大语言模型(Large Language Model,LLM)的语音识别和语音翻译系统。通过摩耳框架,您可以基于大语言模型,以端到端的方式,将输入语音自动转录为文本(即语音识别),并将其翻译为其它语言(即语音翻译)。关于MooER的具体效果,您可以查阅下文中有关评测结果的部分。在我们公布的技术报告中,我们提供了更详细的实验结果,并分享了我们对模型配置、训练策略等方面的理解。

我们自豪地指出,我们开源摩耳大模型完全采用摩尔线程S4000 GPU开发。据我们所知,这是目前第一个完全使用国产GPU训练和推理的语音大模型。

Note

我们近期即将发布摩耳大模型的训练代码,并开源使用更大量数据训练的模型。敬请关注!



🥊 评测结果

此部分展示了我们使用的训练集和评测结果。更多其它信息,请参考我们的技术报告

训练数据

我们使用5000小时数据(我们称之为MT5K),用于训练我们的初版摩耳大模型。这些数据组成如下:

数据集 时长(小时)
aishell2 137
librispeech 131
multi_cn 100
wenetspeech 1361
in-house data 3274

需要注意的是,MT5K中使用的开源数据,是从完整开源数据集中随机选择的子集。由于我们内部收集的数据只有音频,没有对应文本,因此我们采用第三方提供的语音识别(ASR)服务,自动生成文本标签。

由于上述所有数据集均是针对语音识别任务设计的,因此没有可用的翻译标签(即对应的英文文本)。为了让模型具有翻译能力,我们采用第三方提供的机器翻译服务,自动生成翻译标签。为了尽可能简化数据采集流程,在整个数据处理过程中,我们没有使用任何数据过滤技术。

除了以上5000小时数据外,我们正在使用80000小时数据进行更大规模摩耳大模型的训练。

语音识别效果

语音识别效果采用词错误率(Word Error Rate,WER)或字错误率(Character Error Rate,CER)表示。

Language Testset Paraformer-large SenseVoice-small Qwen-audio Whisper-large-v3 SeamlessM4T-v2 MooER-5K MooER-80K MooER-80K-v2
Chinese aishell1 1.93 3.03 1.43 7.86 4.09 1.93 1.25 1.00
aishell2_ios 2.85 3.79 3.57 5.38 4.81 3.17 2.67 2.62
test_magicdata 3.66 3.81 5.31 8.36 9.69 3.48 2.52 2.17
test_thchs 3.99 5.17 4.86 9.06 7.14 4.11 3.14 3.00
fleurs cmn_dev 5.56 6.39 10.54 4.54 7.12 5.81 5.23 5.15
fleurs cmn_test 6.92 7.36 11.07 5.24 7.66 6.77 6.18 6.14
average 4.15 4.93 6.13 6.74 6.75 4.21 3.50 3.35
English librispeech test_clean 14.15 4.07 2.15 3.42 2.77 7.78 4.11 3.57
librispeech test_other 22.99 8.26 4.68 5.62 5.25 15.25 9.99 9.09
fleurs eng_dev 24.93 12.92 22.53 11.63 11.36 18.89 13.32 13.12
fleurs eng_test 26.81 13.41 22.51 12.57 11.82 20.41 14.97 14.74
gigaspeech dev 24.23 19.44 12.96 19.18 28.01 23.46 16.92 17.34
gigaspeech test 23.07 16.65 13.26 22.34 28.65 22.09 16.64 16.97
average 22.70 12.46 13.02 12.46 14.64 17.98 12.66 12.47

语音翻译效果 (中翻英)

语音翻译效果采用BLEU分数表示。

Testset Speech-LLaMA Whisper-large-v3 Qwen-audio Qwen2-audio SeamlessM4T-v2 MooER-5K MooER-5K-MTL
CoVoST1 zh2en - 13.5 13.5 - 25.3 - 30.2
CoVoST2 zh2en 12.3 12.2 15.7 24.4 22.2 23.4 25.2
CCMT2019 dev - 15.9 12.0 - 14.8 - 19.6

🏁 使用指南

🛠️ 环境搭建

目前,摩耳仅支持Linux系统。请确保您的系统已经安装了git and python。我们推荐使用 >=3.8 的Python版本。另外,我们强烈建议使用conda的虚拟环境来控制您的Python依赖库。

为了能够进行快速的大语言模型推理,您需要使用GPU。对于使用摩尔线程S3000/S4000的用户,请安装MUSA toolkit rc2.1.0。我们为S4000用户提供了Docker镜像。如果您使用其它品牌的GPU,请根据厂商提供的指南,自行安装相应的驱动程序及工具箱(例如CUDA等)。

请安装以下步骤设置您的软件环境:

git clone https://github.com/MooreThreads/MooER
cd MooER

# (可选) 创建虚拟环境
conda create -n mooer python=3.8
conda activate mooer

# 安装影响依赖项
apt update
apt install ffmpeg sox
pip install -r requirements.txt

我们为摩尔线程S4000用户提供了Docker镜像:

sudo docker run -it \
    --privileged \
    --name=torch_musa_release \
    --env MTHREADS_VISIBLE_DEVICES=all \
    -p 10010:10010 \
    --shm-size 80g \
    --ulimit memlock=-1 \
    mtspeech/mooer:v1.0-rc2.1.0-v1.1.0-qy2 \
    /bin/bash

# 如果您使用nvidia显卡,并且CUDA版本是11.7,您可以尝试使用该镜像:
sudo docker run -it \
    --privileged \
    --gpus all \
    -p 10010:10010 \
    --shm-size 80g \
    --ulimit memlock=-1 \
    mtspeech/mooer:v1.0-cuda11.7-cudnn8 \
    /bin/bash

💾 下载预训练模型

首先,从 ModelScopeHuggingFace 下载我们提供的预训练模型

# 使用ModelScope
git lfs clone https://modelscope.cn/models/MooreThreadsSpeech/MooER-MTL-5K

# 使用HuggingFace
git lfs clone https://huggingface.co/mtspeech/MooER-MTL-5K

将下载后的文件放置在 pretrained_models 文件夹中。

cp MooER-MTL-5K/* pretrained_models

然后,下载 Qwen2-7B-Instruct

# 使用ModelScope
git lfs clone https://modelscope.cn/models/qwen/qwen2-7b-instruct

# 使用HuggingFace
git lfs clone https://huggingface.co/Qwen/Qwen2-7B-Instruct

将下载后的文件放在 pretrained_models/Qwen2-7B-Instruct 文件夹中。

最后,请确保您下载的文件按照下面的文件结构放置。我们同时提供了每个文件的MD5码,请确保MD5码正确。模型文件损坏或安放位置不正确会导致运行出错。

./pretrained_models/
|-- paraformer_encoder
|   |-- am.mvn                           # dc1dbdeeb8961f012161cfce31eaacaf
|   `-- paraformer-encoder.pth           # 2ef398e80f9f3e87860df0451e82caa9
|-- asr
|   |-- adapter_project.pt               # 2462122fb1655c97d3396f8de238c7ed
|   `-- lora_weights
|       |-- README.md
|       |-- adapter_config.json          # 8a76aab1f830be138db491fe361661e6
|       `-- adapter_model.bin            # 0fe7a36de164ebe1fc27500bc06c8811
|-- ast
|   |-- adapter_project.pt               # 65c05305382af0b28964ac3d65121667
|   `-- lora_weights
|       |-- README.md
|       |-- adapter_config.json          # 8a76aab1f830be138db491fe361661e6
|       `-- adapter_model.bin            # 12c51badbe57298070f51902abf94cd4
|-- asr_ast_mtl
|   |-- adapter_project.pt               # 83195d39d299f3b39d1d7ddebce02ef6
|   `-- lora_weights
|       |-- README.md
|       |-- adapter_config.json          # 8a76aab1f830be138db491fe361661e6
|       `-- adapter_model.bin            # a0f730e6ddd3231322b008e2339ed579
|-- Qwen2-7B-Instruct
|   |-- model-00001-of-00004.safetensors # d29bf5c5f667257e9098e3ff4eec4a02
|   |-- model-00002-of-00004.safetensors # 75d33ab77aba9e9bd856f3674facbd17
|   |-- model-00003-of-00004.safetensors # bc941028b7343428a9eb0514eee580a3
|   |-- model-00004-of-00004.safetensors # 07eddec240f1d81a91ca13eb51eb7af3
|   |-- model.safetensors.index.json
|   |-- config.json                      # 8d67a66d57d35dc7a907f73303486f4e
|   |-- configuration.json               # 040f5895a7c8ae7cf58c622e3fcc1ba5
|   |-- generation_config.json           # 5949a57de5fd3148ac75a187c8daec7e
|   |-- merges.txt                       # e78882c2e224a75fa8180ec610bae243
|   |-- tokenizer.json                   # 1c74fd33061313fafc6e2561d1ac3164
|   |-- tokenizer_config.json            # 5c05592e1adbcf63503fadfe429fb4cc
|   |-- vocab.json                       # 613b8e4a622c4a2c90e9e1245fc540d6
|   |-- LICENSE
|   `-- README.md
|-- README.md
`-- configuration.json

2024/08/27更新

我们推出了新的模型MooER-80K-v2。您可以下载新的模型文件,并更换pretrained_models下的相关文件。

# use modelscope
git lfs clone https://modelscope.cn/models/MooreThreadsSpeech/MooER-MTL-80K

# use huggingface
git lfs clone https://huggingface.co/mtspeech/MooER-MTL-80K

新模型文件对应的MD5码为:

./pretrained_models/
`-- asr
    |-- adapter_project.pt               # af9022e2853f9785cab49017a18de82c
    `-- lora_weights
        |-- README.md
        |-- adapter_config.json          # ad3e3bfe9447b808b9cc16233ffacaaf
        `-- adapter_model.bin            # 3c22b9895859b01efe49b017e8ed6ec7

🏋️ 训练

** 我们开源了MooER的 训练和推理代码! 你可以参考这个教程 来训练你自己的音频理解大模型和不同的任务,也可以基于我们开源的80k小时的模型来微调。**

🚀 推理

您可以使用下面的推理示例来尝试摩耳大模型的效果。

# 设置环境变量
export PYTHONIOENCODING=UTF-8
export LC_ALL=C
export PYTHONPATH=$PWD/src:$PYTHONPATH

# 执行推理脚本
python inference.py

以上命令会调用一个多任务摩耳大模型,同时输出语音识别和语音翻译的结果。如果运行成功,您将在终端看到结果。

您还可以通过以下方式,指定您自己的音频文件路径或更改不同的模型配置:

# 使用您自己的音频文件
python inference.py --wav_path /path/to/your_audio_file

# 该脚本支持SCP文件。在SCP文件中,每一行的格式为: "uttid wav_path":
# test1 my_test_audio1.wav
# test2 my_test_audio2.wav
# ...
python inference.py --wav_scp /path/to/your_wav_scp

# 指定语音识别模型,仅输出识别结果
python inference.py --task asr \
    --cmvn_path pretrained_models/paraformer_encoder/am.mvn \
    --encoder_path pretrained_models/paraformer_encoder/paraformer-encoder.pth \
    --llm_path pretrained_models/Qwen2-7B-Instruct \
    --adapter_path pretrained_models/asr/adapter_project.pt \
    --lora_dir pretrained_models/asr/lora_weights \
    --wav_path /path/to/your_audio_file

# 指定语音翻译模型,仅输出中翻英结果
python inference.py --task ast \
    --cmvn_path pretrained_models/paraformer_encoder/am.mvn \
    --encoder_path pretrained_models/paraformer_encoder/paraformer-encoder.pth \
    --llm_path pretrained_models/Qwen2-7B-Instruct \
    --adapter_path pretrained_models/ast/adapter_project.pt \
    --lora_dir pretrained_models/ast/lora_weights \
    --wav_path /path/to/your_audio_file

# 注意:当您使用多任务模型时,您需要指`--task ast`
# 输出所有可用选项
python inference.py -h

我们建议一次性识别的音频长度不要超过30秒,同时音频中包含的文字数量应少于500个字。另外,我们还建议在识别前先通过ffmpegsox将音频转换为16kHz 16bit单声道WAV格式。

🎨 Gradio 演示

为了提供更好的使用体验,我们附带了一个基于Gradio的演示程序。您可以通过运行以下命令来使用:

# 设置环境变量
export PYTHONPATH=$PWD/src:$PYTHONPATH

# 运行多模态模型
python demo/app.py

# 仅运行语音识别模型
python demo/app.py \
  --task asr \
  --adapter_path pretrained_models/asr/adapter_project.pt \
  --lora_dir pretrained_models/asr/lora_weights

# 仅运行语音翻译模型
python demo/app.py \
  --task ast \
  --adapter_path pretrained_models/ast/adapter_project.pt \
  --lora_dir pretrained_models/ast/lora_weights

您还可以根据需要指定--server_port, --share, --server_name等启动参数。

由于缺少HTTPS证书,您仅能使用HTTP访问演示网页。此时,现代浏览器会阻止您对麦克风的访问。为了绕过该问题,您需要手动进行设置。如果您使用的是Chrome浏览器,请在导航栏输入 chrome://flags/#unsafely-treat-insecure-origin-as-secure,在打开的页面中,将您想要访问的目标地址添加到白名单中。其它浏览器的设置方法请您自行查询相关解决方案。

使用该演示程序时,使用流式模型可以更快地获取识别、翻译结果。但请注意,流式模型会限制解码的beam大小为1,这可能会略微影响识别、翻译效果。

🤔 不知道如何运行Gradio?

💻 没有可用的机器?

⌛ 不想花时间安装相关环境?

☕ 点击这里可以体验 我们提供的在线演示,该演示运行在摩尔线程S4000服务器上!

📝 开源计划

  • 发布技术报告
  • 开源推理代码及5000小时数据预训练模型
  • 80,000小时数据预训练的语音识别模型
  • 开源训练代码
  • 80,000小时数据预训练的语音翻译及多任务模型
  • 基于大语言模型的音色保持语音翻译模型

开源许可

摩耳的开源许可请参考该文件.

🙏🏻 致谢

我们从 FunASR 中借鉴了语音编码器。

我们使用的大语言模型相关代码借鉴自 Qwen2

我们的训练及推理代码是根据 SLAM-LLMwenet 调整而来。

我们也从许多其它的开源仓库中获得了灵感,比如 whisperSeamlessM4T

在此,我们想要感谢所有的论文作者和开源代码贡献者,感谢他们创新的想法和代码为我们提供的帮助。

💖 引用

如果您喜欢摩耳,或觉得摩耳对您有用,请为我们的仓库点🌟并引用我们的工作:

@article{liang2024mooer,
  title   = {MooER: LLM-based Speech Recognition and Translation Models from Moore Threads},
  author  = {Zhenlin Liang, Junhao Xu, Yi Liu, Yichao Hu, Jian Li, Yajun Zheng, Meng Cai, Hua Wang},
  journal = {arXiv preprint arXiv:2408.05101},
  year    = {2024}
}

📧 联系方式

如果您遇到了任何问题,请随时创建issue。

摩尔线程官方网站:https://www.mthreads.com/