(简体中文|영어)
FunASR은 음성 인식에 관한 학문적 연구와 산업적 응용 사이에 가교를 구축하기를 희망합니다. 산업용 음성 인식 모델의 훈련 및 미세 조정을 지원함으로써 연구자와 개발자는 음성 인식 모델의 연구 및 생산을 보다 편리하게 수행하고 음성 인식 생태계의 발전을 촉진할 수 있습니다. 재미를 위한 ASR!
하이라이트 | 뉴스 | 설치 | 빠른 시작 | 튜토리얼 | 런타임 | 모델동물원 | 연락하다
python>=3.8
torch>=1.13
torchaudio
pip3 install -U funasr
git clone https://github.com/alibaba/FunASR.git && cd FunASR
pip3 install -e ./
pip3 install -U modelscope huggingface_hub
FunASR은 산업 데이터에 대해 사전 훈련된 수많은 모델을 오픈 소스로 제공했습니다. 귀하는 모델 라이센스 계약에 따라 FunASR 모델을 자유롭게 사용, 복사, 수정 및 공유할 수 있습니다. 아래에는 대표적인 모델이 나열되어 있으며, 더 많은 모델은 Model Zoo를 참고하시기 바랍니다.
(참고: ⭐는 ModelScope 모델 동물원을 나타내고, ?는 Huggingface 모델 동물원을 나타내고, ?는 OpenAI 모델 동물원을 나타냅니다.)
모델명 | 작업 세부정보 | 훈련 데이터 | 매개변수 |
---|---|---|---|
감각음성작은 (⭐ ? ) | ASR, ITN, LID, SER 및 AED를 포함한 다중 음성 이해 기능, zh, yue, en, ja, ko와 같은 언어 지원 | 300000시간 | 234M |
파라포머-zh (⭐ ? ) | 음성 인식, 타임스탬프 포함, 비스트리밍 | 60000시간, 중국어 | 220M |
paraformer-zh-스트리밍 ( ⭐ ? ) | 음성 인식, 스트리밍 | 60000시간, 중국어 | 220M |
paraformer-ko ( ⭐ ? ) | 음성 인식, 타임스탬프 없음, 비스트리밍 | 50000시간, 영어 | 220M |
적합자-en ( ⭐ ? ) | 음성 인식, 비스트리밍 | 50000시간, 영어 | 220M |
ct-punc ( ⭐ ? ) | 구두점 복원 | 100M, 중국어 및 영어 | 290M |
fsmn-vad ( ⭐ ? ) | 음성 활동 감지 | 5000시간, 중국어 및 영어 | 0.4M |
fsmn-kws ( ⭐ ) | 키워드 스포팅, 스트리밍 | 5000시간, 중국어 | 0.7M |
파즈 ( ⭐ ? ) | 타임스탬프 예측 | 5000시간, 중국어 | 38M |
캠++ ( ⭐ ? ) | 화자 확인/분할 | 5000시간 | 720만 |
속삭임-대형-v3 (⭐ ? ) | 음성 인식, 타임스탬프 포함, 비스트리밍 | 다국어 | 1550M |
속삭임-대형-v3-터보 (⭐ ? ) | 음성 인식, 타임스탬프 포함, 비스트리밍 | 다국어 | 809M |
Qwen 오디오 (⭐ ? ) | 오디오 텍스트 다중 모달 모델(사전 학습) | 다국어 | 8B |
Qwen-오디오-채팅 (⭐ ? ) | 오디오-텍스트 다중 모드 모델(채팅) | 다국어 | 8B |
감정2vec+대형 (⭐ ? ) | 말의 감정 재결합 | 40000시간 | 3억 |
다음은 빠른 시작 튜토리얼입니다. 오디오 파일을 테스트합니다(북경어, 영어).
funasr ++model=paraformer-zh ++vad_model= " fsmn-vad " ++punc_model= " ct-punc " ++input=asr_example_zh.wav
참고: 단일 오디오 파일 인식 지원 및 Kaldi 스타일 wav.scp 형식의 파일 목록 지원: wav_id wav_pat
from funasr import AutoModel
from funasr . utils . postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
model = AutoModel (
model = model_dir ,
vad_model = "fsmn-vad" ,
vad_kwargs = { "max_single_segment_time" : 30000 },
device = "cuda:0" ,
)
# en
res = model . generate (
input = f" { model . model_path } /example/en.mp3" ,
cache = {},
language = "auto" , # "zn", "en", "yue", "ja", "ko", "nospeech"
use_itn = True ,
batch_size_s = 60 ,
merge_vad = True , #
merge_length_s = 15 ,
)
text = rich_transcription_postprocess ( res [ 0 ][ "text" ])
print ( text )
매개변수 설명:
model_dir
: 모델 이름 또는 로컬 디스크에 있는 모델의 경로입니다.vad_model
: VAD(음성 활동 감지)의 활성화를 나타냅니다. VAD의 목적은 긴 오디오를 짧은 클립으로 분할하는 것입니다. 이 경우 추론 시간에는 VAD 및 SenseVoice 총 소비가 모두 포함되며 종단 간 대기 시간을 나타냅니다. SenseVoice 모델의 추론 시간을 별도로 테스트하려는 경우 VAD 모델을 비활성화할 수 있습니다.vad_kwargs
: VAD 모델의 구성을 지정합니다. max_single_segment_time
: vad_model
에 의한 오디오 분할의 최대 기간을 나타내며 단위는 밀리초(ms)입니다.use_itn
: 출력 결과에 구두점 및 역 텍스트 정규화가 포함되는지 여부입니다.batch_size_s
: 배치의 총 오디오 지속 시간이 초(초) 단위로 측정되는 동적 배치 사용을 나타냅니다.merge_vad
: VAD 모델로 분할된 짧은 오디오 조각을 병합할지 여부(병합된 길이는 merge_length_s
)(초)입니다.ban_emo_unk
: emo_unk
토큰의 출력을 금지할지 여부입니다. 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-th
의 시작/끝 지점을 나타냅니다. 밀리초 단위로 측정되는 유효한 오디오 세그먼트입니다.
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 모델의 출력 형식은 다음 네 가지 시나리오 중 하나일 수 있습니다.
[[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 ++device=cpu
from funasr import AutoModel
model = AutoModel ( model = "paraformer" , device = "cpu" )
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은 서비스를 위해 사전 훈련되거나 추가로 미세 조정된 모델 배포를 지원합니다. 현재 다음 유형의 서비스 배포를 지원합니다.
자세한 내용은 서비스 배포 설명서를 참조하세요.
사용 중 문제가 발생하면 github 페이지에서 직접 문제를 제기할 수 있습니다.
다음 DingTalk 그룹을 스캔하여 커뮤니티 그룹에 가입하여 커뮤니케이션과 토론을 할 수도 있습니다.
딩톡 그룹 |
---|
기여자는 기여자 목록에서 찾을 수 있습니다.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. FunASR에는 다양한 타사 구성 요소와 다른 오픈 소스 라이선스에 따라 다른 저장소에서 수정된 일부 코드도 포함되어 있습니다. 사전 학습 모델 사용에는 모델 라이선스가 적용됩니다.
@inproceedings { gao2023funasr ,
author = { Zhifu Gao and Zerui Li and Jiaming Wang and Haoneng Luo and Xian Shi and Mengzhe Chen and Yabin Li and Lingyun Zuo and Zhihao Du and Zhangyu Xiao and Shiliang Zhang } ,
title = { FunASR: A Fundamental End-to-End Speech Recognition Toolkit } ,
year = { 2023 } ,
booktitle = { INTERSPEECH } ,
}
@inproceedings { An2023bat ,
author = { Keyu An and Xian Shi and Shiliang Zhang } ,
title = { BAT: Boundary aware transducer for memory-efficient and low-latency ASR } ,
year = { 2023 } ,
booktitle = { INTERSPEECH } ,
}
@inproceedings { gao22b_interspeech ,
author = { Zhifu Gao and ShiLiang Zhang and Ian McLoughlin and Zhijie Yan } ,
title = { Paraformer: Fast and Accurate Parallel Transformer for Non-autoregressive End-to-End Speech Recognition } ,
year = 2022 ,
booktitle = { Proc. Interspeech 2022 } ,
pages = { 2063--2067 } ,
doi = { 10.21437/Interspeech.2022-9996 }
}
@inproceedings { shi2023seaco ,
author = { Xian Shi and Yexin Yang and Zerui Li and Yanni Chen and Zhifu Gao and Shiliang Zhang } ,
title = { SeACo-Paraformer: A Non-Autoregressive ASR System with Flexible and Effective Hotword Customization Ability } ,
year = { 2023 } ,
booktitle = { ICASSP2024 }
}