中文 | English
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
首先,从 ModelScope 或 HuggingFace 下载我们提供的预训练模型
# 使用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
我们推出了新的模型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个字。另外,我们还建议在识别前先通过ffmpeg
或sox
将音频转换为16kHz 16bit单声道WAV格式。
为了提供更好的使用体验,我们附带了一个基于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-LLM 和 wenet 调整而来。
我们也从许多其它的开源仓库中获得了灵感,比如 whisper 和 SeamlessM4T。
在此,我们想要感谢所有的论文作者和开源代码贡献者,感谢他们创新的想法和代码为我们提供的帮助。
如果您喜欢摩耳,或觉得摩耳对您有用,请为我们的仓库点🌟并引用我们的工作:
@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/