后面有名词解释
git地址
https://github.com/alibaba-damo-academy/FunASR
https://github.com/modelscope/FunASR/blob/main/README_zh.md
使用教程
https://alibaba-damo-academy.github.io/FunASR/en/installation/installation_zh.html
三方分析
https://zhuanlan.zhihu.com/p/649935170
老文章了
FunASR希望在语音识别的学术研究和工业应用之间架起一座桥梁。通过发布工业级语音识别模型的训练和微调,研究人员和开发人员可以更方便地进行语音识别模型的研究和生产,并推动语音识别生态的发展。让语音识别更有趣!
FunASR是一个基础语音识别工具包,提供多种功能,包括语音识别(ASR)、语音端点检测(VAD)、标点恢复、语言模型、说话人验证、说话人分离和多人对话语音识别等。FunASR提供了便捷的脚本和教程,支持预训练好的模型的推理与微调。
我们在ModelScope与huggingface上发布了大量开源数据集或者海量工业数据训练的模型,可以通过我们的模型仓库了解模型的详细信息。代表性的Paraformer非自回归端到端语音识别模型具有高精度、高效率、便捷部署的优点,支持快速构建语音识别服务,详细信息可以阅读(服务部署文档)。
2024/07/04:SenseVoice 是一个基础语音理解模型,具备多种语音理解能力,涵盖了自动语音识别(ASR)、语言识别(LID)、情感识别(SER)以及音频事件检测(AED)。
2024/07/01:中文离线文件转写服务GPU版本 1.1发布,优化bladedisc模型兼容性问题;详细信息参阅(部署文档)
2024/06/27:中文离线文件转写服务GPU版本 1.0发布,支持动态batch,支持多路并发,在长音频测试集上单线RTF为0.0076,多线加速比为1200+(CPU为330+);详细信息参阅(部署文档)
2024/05/15:新增加情感识别模型,emotion2vec+large,emotion2vec+base,emotion2vec+seed,输出情感类别为:生气/angry,开心/happy,中立/neutral,难过/sad。
2024/05/15: 中文离线文件转写服务 4.5、英文离线文件转写服务 1.6、中文实时语音听写服务 1.10 发布,适配FunASR 1.0模型结构;详细信息参阅(部署文档)
2024/03/05:新增加Qwen-Audio与Qwen-Audio-Chat音频文本模态大模型,在多个音频领域测试榜单刷榜,中支持语音对话,详细用法见 示例。
2024/03/05:新增加Whisper-large-v3模型支持,多语言语音识别/翻译/语种识别,支持从 modelscope仓库下载,也支持从 openai仓库下载模型。
2024/03/05: 中文离线文件转写服务 4.4、英文离线文件转写服务 1.5、中文实时语音听写服务 1.9 发布,docker镜像支持arm64平台,升级modelscope版本;详细信息参阅(部署文档)
2024/01/30:funasr-1.0发布,更新说明文档
安装funasr之前,确保已经安装了下面依赖环境:
python>=3.8 torch>=1.13 torchaudio
pip安装
pip3 install -U funasr
或者从源代码安装
git clone https://github.com/alibaba/FunASR.git && cd FunASR pip3 install -e ./
如果需要使用工业预训练模型,安装modelscope与huggingface_hub(可选)
pip3 install -U modelscope huggingface huggingface_hub
FunASR开源了大量在工业数据上预训练模型,您可以在模型许可协议下自由使用、复制、修改和分享FunASR模型,下面列举代表性的模型,更多模型请参考 模型仓库。
(注:⭐ 表示ModelScope模型仓库,🤗 表示Huggingface模型仓库,🍀表示OpenAI模型仓库)
模型名字 | 任务详情 | 训练数据 | 参数量 |
---|---|---|---|
SenseVoiceSmall (⭐ 🤗 ) | 多种语音理解能力,涵盖了自动语音识别(ASR)、语言识别(LID)、情感识别(SER)以及音频事件检测(AED) | 400000小时,中文 | 330M |
paraformer-zh (⭐ 🤗 ) | 语音识别,带时间戳输出,非实时 | 60000小时,中文 | 220M |
paraformer-zh-streaming ( ⭐ 🤗 ) | 语音识别,实时 | 60000小时,中文 | 220M |
paraformer-en ( ⭐ 🤗 ) | 语音识别,非实时 | 50000小时,英文 | 220M |
conformer-en ( ⭐ 🤗 ) | 语音识别,非实时 | 50000小时,英文 | 220M |
ct-punc ( ⭐ 🤗 ) | 标点恢复 | 100M,中文与英文 | 290M |
fsmn-vad ( ⭐ 🤗 ) | 语音端点检测,实时 | 5000小时,中文与英文 | 0.4M |
fa-zh ( ⭐ 🤗 ) | 字级别时间戳预测 | 50000小时,中文 | 38M |
cam++ ( ⭐ 🤗 ) | 说话人确认/分割 | 5000小时 | 7.2M |
Whisper-large-v3 (⭐ 🍀 ) | 语音识别,带时间戳输出,非实时 | 多语言 | 1550 M |
Qwen-Audio (⭐ 🤗 ) | 音频文本多模态大模型(预训练) | 多语言 | 8B |
Qwen-Audio-Chat (⭐ 🤗 ) | 音频文本多模态大模型(chat版本) | 多语言 | 8B |
emotion2vec+large (⭐ 🤗 ) | 情感识别模型 | 40000小时,4种情感类别 | 300M |
funasr ++model=paraformer-zh ++vad_model="fsmn-vad" ++punc_model="ct-punc" ++input=asr_example_zh.wav
注:支持单条音频文件识别,也支持文件列表,列表为kaldi风格wav.scp:wav_id wav_path
from funasr import AutoModel # paraformer-zh is a multi-functional asr model # use vad, punc, spk or not as you need model = AutoModel(model="paraformer-zh",vad_model="fsmn-vad", punc_model="ct-punc", # spk_model="cam++") res = model.generate(input=f"{model.model_path}/example/asr_example.wav",batch_size_s=300,hotword='魔搭') print(res)
注:hub
:表示模型仓库,ms
为选择modelscope下载,hf
为选择huggingface下载。
from funasr import AutoModel chunk_size = [0, 10, 5] #[0, 10, 5] 600ms, [0, 8, 4] 480ms encoder_chunk_look_back = 4 #number of chunks to lookback for encoder self-attention decoder_chunk_look_back = 1 #number of encoder chunks to lookback for decoder cross-attention model = AutoModel(model="paraformer-zh-streaming") import soundfile import os wav_file = os.path.join(model.model_path, "example/asr_example.wav") speech, sample_rate = soundfile.read(wav_file) chunk_stride = chunk_size[1] * 960 # 600ms cache = {} total_chunk_num = int(len((speech)-1)/chunk_stride+1) for i in range(total_chunk_num): speech_chunk = speech[i*chunk_stride:(i+1)*chunk_stride] is_final = i == total_chunk_num - 1 res = model.generate(input=speech_chunk, cache=cache, is_final=is_final, chunk_size=chunk_size, encoder_chunk_look_back=encoder_chunk_look_back, decoder_chunk_look_back=decoder_chunk_look_back) print(res)
注:chunk_size
为流式延时配置,[0,10,5]
表示上屏实时出字粒度为10*60=600ms
,未来信息为5*60=300ms
。每次推理输入为600ms
(采样点数为16000*0.6=960
),输出为对应文字,最后一个语音片段输入需要设置is_final=True
来强制输出最后一个字。
更多例子
语音端点检测(非实时)
from funasr import AutoModel
model = AutoModel(model="fsmn-vad")
wav_file = f"{model.model_path}/example/vad_example.wav"
res = model.generate(input=wav_file)
print(res)
注:VAD模型输出格式为:[[beg1, end1], [beg2, end2], .., [begN, endN]],其中begN/endN表示第N个有效音频片段的起始点/结束点, 单位为毫秒。
语音端点检测(实时)
from funasr import AutoModel
chunk_size = 200 # ms
model = AutoModel(model="fsmn-vad")
import soundfile
wav_file = f"{model.model_path}/example/vad_example.wav"
speech, sample_rate = soundfile.read(wav_file)
chunk_stride = int(chunk_size * sample_rate / 1000)
cache = {}
total_chunk_num = int(len((speech)-1)/chunk_stride+1)
for i in range(total_chunk_num):
speech_chunk = speech[i*chunk_stride:(i+1)*chunk_stride]
is_final = i == total_chunk_num - 1
res = model.generate(input=speech_chunk, cache=cache, is_final=is_final, chunk_size=chunk_size)
if len(res[0]["value"]):
print(res)
注:流式VAD模型输出格式为4种情况:
[[beg1, end1], [beg2, end2], .., [begN, endN]]:同上离线VAD输出结果。
[[beg, -1]]:表示只检测到起始点。
[[-1, end]]:表示只检测到结束点。
[]:表示既没有检测到起始点,也没有检测到结束点 输出结果单位为毫秒,从起始点开始的绝对时间。
标点恢复
from funasr import AutoModel
model = AutoModel(model="ct-punc")
res = model.generate(input="那今天的会就到这里吧 happy new year 明年见")
print(res)
时间戳预测
from funasr import AutoModel
model = AutoModel(model="fa-zh")
wav_file = f"{model.model_path}/example/asr_example.wav"
text_file = f"{model.model_path}/example/text.txt"
res = model.generate(input=(wav_file, text_file), data_type=("sound", "text"))
print(res)
情感识别
from funasr import AutoModel
model = AutoModel(model="emotion2vec_plus_large")
wav_file = f"{model.model_path}/example/test.wav"
res = model.generate(wav_file, output_dir="./outputs", granularity="utterance", extract_embedding=False)
print(res)
funasr-export ++model=paraformer ++quantize=false
from funasr import AutoModel model = AutoModel(model="paraformer") res = model.export(quantize=False)
# pip3 install -U funasr-onnx from funasr_onnx import Paraformer model_dir = "damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch" model = Paraformer(model_dir, batch_size=1, quantize=True) wav_path = ['~/.cache/modelscope/hub/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/example/asr_example.wav'] result = model(wav_path) print(result)
更多例子请参考 样例
FunASR支持预训练或者进一步微调的模型进行服务部署。目前支持以下几种服务部署:
中文离线文件转写服务(CPU版本),已完成
中文流式语音识别服务(CPU版本),已完成
英文离线文件转写服务(CPU版本),已完成
中文离线文件转写服务(GPU版本),进行中
更多支持中
详细信息可以参阅(服务部署文档)。
瑞雪兆我心
已于 2024-03-30 10:18:30 修改
阅读量3k
收藏 22
点赞数 40
文章标签: 语音识别 人工智能
版权
FunASR(A Fundamental End-to-End Speech Recognition Toolkit)是一个基础的语音识别工具包,提供多种功能,包括语音识别(ASR)、语音端点检测(VAD)、标点恢复(PR)、语言模型(LM)、说话人分离等。项目源地址
1 语音识别(ASR)
参考语音交互:聊聊语音识别-ASR(万字长文)
语音识别技术(Automatic Speech Recognition, ASR)是一种将人的语音(声学信号)转换为文本信息的技术(微信的语音转文字就是语音识别的典型应用,把我们说的音频信息转换成文字内容)。
1.1 语料库
语料库(Corpus)就是包含拼音与汉字的对应(中文)和音标与单词的对应(英文)的词典(Dictionary),其目的是根据声学模型识别出来的音素(Phoneme),来找到对应的汉字或者单词,将声学模型(AM)和语言模型(LM)两者联系起来。
1.2 音频采集
音频采集是指人的声音信息需要使用麦克风阵列或其他音频设备采集和处理说话者的音频信息。
1.3 预处理
预处理是对采集到的音频信息进行预处理,包括降噪、去除回声、增强语音信号等操作,以提高音频质量和识别准确率。
1.4 特征参数提取
特征参数提取(Feature Parameter Extraction)是从预处理后的音频数据中提取特征,其目的是从原始语音信号中提取出有用的信息,以便后续的模型训练和匹配。具体提取哪些特征,这要看模型要识别哪些内容,一般来说只是语音转文字的话,主要是提取音素;但是想要识别语音中的情绪变化,可能就需要提取响度、音调等参数。
语音情绪识别一般会有两种方法:
分类算法:根据情绪的不同表示方式进行分类,常见的有难过、生气、害怕、高兴等。
回归算法:将情绪分为积极面和消极面两种。
参考音调、音色、响度、频率之间的互相影响
音调:人耳对声波频率的感觉(音调的单位为 “Mel”),与声波的频率有关。
音高:又称声强或音量,它表示的是声音能量的强弱程度,主要取决于声带的振动频率大小(声带振动频率由声带的薄厚决定,通常来说,男生的声带厚,振动频率慢,因此音高比较低;女生的声带薄,振动频率高,因此音高一般都比较高)。
音色:是由我们的调制区决定的,每个人口腔、咽腔的形状不同,会产生不同的共振,与谐波结构数量,强度,分布和相位关系有关。
音长和音强:是由个人习惯及场合所决定的,比如一些人喜欢低声慢慢说话,有些人喜欢大声节奏很快的说话等。参考语音的基础要素
最常用到的声学语音特征是梅尔倒谱系数(Mel-scaleFrequency Cepstral Coefficients, MFCC)。
1.3 声学模型(AM)
以特征提取模块提取的特征为输入,声学模型(Acoustic Model, AM)是把声音转成音素(有点像把声音转成拼音),将声学和发音学的知识进行融合,计算音频对应音素之间的概率。简单理解就是把从声音中提取出来的特征,通过声学模型,计算出相应的音素。
目前的主流算法是混合高斯模型+隐马尔可夫模型(GMM-HMM),也有基于深度学习的模型。
1.4 语言模型(LM)
语言模型(Language Model, LM)是在进行声学模型识别后,将语法和字词的知识进行融合,计算文字在这句话下出现的概率,做进一步的文本生成和校正,来提高识别准确率并修正可能的错误。一个自然语言的统计单位是句子,所以也可以看做句子的概率模型(简单理解就是给你几个字词,然后计算这几个字词组成一个句子的概率)。
1.5 模型训练
模型训练是通过深度学习神经网络技术对大量的语音数据进行学习,不断地优化和调整模型参数,从而得到一个能够自动提取特征的模型。
1.6 模型匹配
模式匹配是将提取出的特征参数与预先训练好的模型进行比对,通过欧氏距离、余弦相似度等技术计算出不同特征参数之间的相似度,从而找出最相似的模型,实现语音的识别。
1.7 后处理
后处理是对语音识别结果进行去除重复识别、修正拼写错误等,以提高识别结果的质量和可读性,并最终将识别后的文本信息输出,供后续的处理和应用使用,如文本分析、情感分析、自然语言理解等。
2 语音端点检测(VAD)
在开始语音识别之前,有时需要把首尾端的静音切除,降低对后续步骤造成干扰,这个切除静音的炒作一般称为 VAD。
语音端点检测(Voice Activity Detection, VAD)也称为语音激活检测,或者静音抑制,其目的是检测当前语音信号中是否包含话音信号存在,即对输入信号进行判断,将话音信号与各种背景噪声信号区分出来,分别对两种信号采用不同的处理方法(信号处理技术,一般指的是降噪)。
3 标点恢复(PR)
标点恢复(Punctuation Restoration, PR)是通过标点断句来方便用户阅读。
4 说话人分离技术
说话人分离(Speaker Recognition),也称为说话人识别或说话人标注,是指从音频中识别出不同的说话人身份的过程。首先,通过包含多个说话人的音频数据训练一个深度学习模型,来完成从音频输入中提取出不同说话人的特征(能够有效地描述说话人的声音特征,如音调、音色和语速等);接着,利用一种无监督学习的聚类算法来对提取出的声音特征进行分类;最终,实现不同说话人的分离。参考声源分离技术文档
5 语音识别实战
原文链接:https://blog.csdn.net/contributed_l/article/details/137164161