(简体中文|English|日本語)
SenseVoice는 자동 음성 인식(ASR), 음성 언어 식별(LID), 음성 감정 인식(SER), 오디오 이벤트 감지(AED)를 포함한 다양한 음성 이해 기능을 갖춘 음성 기반 모델입니다.
모델 동물원: 모델스코프, 허깅페이스
온라인 데모: 모델스코프 데모, 허깅페이스 스페이스
SenseVoice는 고정밀 다국어 음성 인식, 음성 감정 인식 및 오디오 이벤트 감지에 중점을 둡니다.
AISHELL-1, AISHELL-2, Wenetspeech, LibriSpeech 및 Common Voice를 포함한 오픈 소스 벤치마크 데이터 세트에서 SenseVoice와 Whisper 간의 다국어 음성 인식 성능을 비교했습니다. 중국어와 광둥어 인식 측면에서 SenseVoice-Small 모델은 장점이 있습니다.
현재 널리 사용되는 음성 감정 인식 벤치마크 및 방법이 부족하기 때문에 여러 테스트 세트에서 다양한 측정 항목에 대한 평가를 수행하고 최근 벤치마크의 수많은 결과와 포괄적인 비교를 수행했습니다. 선택된 테스트 세트에는 중국어와 영어 데이터가 모두 포함되어 있으며 공연, 영화, 자연스러운 대화 등 다양한 스타일이 포함되어 있습니다. 대상 데이터를 미세 조정하지 않고도 SenseVoice는 현재 최고의 음성 감정 인식 모델의 성능을 달성하거나 능가할 수 있었습니다.
또한 테스트 세트에서 여러 오픈 소스 음성 감정 인식 모델을 비교한 결과 SenseVoice-Large 모델이 거의 모든 데이터 세트에서 최고의 성능을 달성한 반면 SenseVoice-Small 모델은 다른 오픈 소스 모델을 능가했습니다. 대부분의 데이터 세트.
SenseVoice는 음성 데이터에 대해서만 교육을 받았지만 여전히 독립 실행형 이벤트 감지 모델로 작동할 수 있습니다. 우리는 널리 사용되는 산업 모델인 BEATS 및 PANN과 환경음 분류 ESC-50 데이터 세트의 성능을 비교했습니다. SenseVoice 모델은 이러한 작업에서 훌륭한 결과를 얻었습니다. 그러나 훈련 데이터 및 방법론의 한계로 인해 이벤트 분류 성능은 전문 AED 모델에 비해 약간의 차이가 있습니다.
SenseVoice-Small 모델은 비자동회귀 엔드투엔드 아키텍처를 배포하므로 추론 대기 시간이 매우 짧습니다. Whisper-Small 모델과 유사한 수의 매개변수를 사용하여 Whisper-Small보다 5배 이상, Whisper-Large보다 15배 더 빠르게 추론합니다.
pip install -r requirements.txt
모든 형식과 기간의 오디오 입력을 지원합니다.
from funasr import AutoModel
from funasr . utils . postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
model = AutoModel (
model = model_dir ,
trust_remote_code = True ,
remote_code = "./model.py" ,
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" , # "zh", "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
: 모델 이름 또는 로컬 디스크에 있는 모델의 경로입니다.trust_remote_code
:True
인 경우 모델의 코드 구현이 model
코드의 정확한 위치를 지정하는 remote_code
에서 로드됨을 의미합니다(예: 현재 디렉터리의 model.py
). 절대 경로, 상대 경로 및 네트워크 URL을 지원합니다.False
인 경우 모델의 코드 구현이 FunASR 내의 통합 버전임을 나타냅니다. 이때 로드된 버전은 FunASR의 내부 버전이므로 현재 디렉터리의 model.py
에 대한 수정 사항은 적용되지 않습니다. 모델 코드를 보려면 여기를 클릭하세요.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
토큰의 출력을 금지할지 여부입니다. 모든 입력이 짧은 오디오(30초 미만)이고 추론 효율성을 높이기 위해 배치 추론이 필요한 경우 VAD 모델을 제거하고 이에 따라 batch_size
설정할 수 있습니다.
model = AutoModel ( model = model_dir , trust_remote_code = True , device = "cuda:0" )
res = model . generate (
input = f" { model . model_path } /example/en.mp3" ,
cache = {},
language = "zh" , # "zh", "en", "yue", "ja", "ko", "nospeech"
use_itn = False ,
batch_size = 64 ,
)
자세한 사용법은 문서를 참조하세요
입력 시간 제한이 30초 이하인 모든 형식의 오디오 입력을 지원합니다.
from model import SenseVoiceSmall
from funasr . utils . postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
m , kwargs = SenseVoiceSmall . from_pretrained ( model = model_dir , device = "cuda:0" )
m . eval ()
res = m . inference (
data_in = f" { kwargs [ 'model_path' ] } /example/en.mp3" ,
language = "auto" , # "zh", "en", "yue", "ja", "ko", "nospeech"
use_itn = False ,
ban_emo_unk = False ,
** kwargs ,
)
text = rich_transcription_postprocess ( res [ 0 ][ 0 ][ "text" ])
print ( text )
# pip3 install -U funasr funasr-onnx
from pathlib import Path
from funasr_onnx import SenseVoiceSmall
from funasr_onnx . utils . postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
model = SenseVoiceSmall ( model_dir , batch_size = 10 , quantize = True )
# inference
wav_or_scp = [ "{}/.cache/modelscope/hub/{}/example/en.mp3" . format ( Path . home (), model_dir )]
res = model ( wav_or_scp , language = "auto" , use_itn = True )
print ([ rich_transcription_postprocess ( i ) for i in res ])
참고: ONNX 모델은 원래 모델 디렉터리로 내보내집니다.
from pathlib import Path
from funasr_torch import SenseVoiceSmall
from funasr_torch . utils . postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
model = SenseVoiceSmall ( model_dir , batch_size = 10 , device = "cuda:0" )
wav_or_scp = [ "{}/.cache/modelscope/hub/{}/example/en.mp3" . format ( Path . home (), model_dir )]
res = model ( wav_or_scp , language = "auto" , use_itn = True )
print ([ rich_transcription_postprocess ( i ) for i in res ])
참고: Libtorch 모델은 원래 모델 디렉터리로 내보내집니다.
export SENSEVOICE_DEVICE=cuda:0
fastapi run --port 50000
git clone https://github.com/alibaba/FunASR.git && cd FunASR
pip3 install -e ./
데이터 예시
{"key": "YOU0000008470_S0000238_punc_itn", "text_language": "<|en|>", "emo_target": "<|NEUTRAL|>", "event_target": "<|Speech|>", "with_or_wo_itn": "<|withitn|>", "target": "Including legal due diligence, subscription agreement, negotiation.", "source": "/cpfs01/shared/Group-speech/beinian.lzr/data/industrial_data/english_all/audio/YOU0000008470_S0000238.wav", "target_len": 7, "source_len": 140}
{"key": "AUD0000001556_S0007580", "text_language": "<|en|>", "emo_target": "<|NEUTRAL|>", "event_target": "<|Speech|>", "with_or_wo_itn": "<|woitn|>", "target": "there is a tendency to identify the self or take interest in what one has got used to", "source": "/cpfs01/shared/Group-speech/beinian.lzr/data/industrial_data/english_all/audio/AUD0000001556_S0007580.wav", "target_len": 18, "source_len": 360}
data/train_example.jsonl
에 대한 전체 참조
설명:
key
: 오디오 파일 고유 IDsource
: 오디오 파일 경로source_len
: 오디오 파일의 fbank 프레임 수target
: 전사target_len
: 타겟의 길이text_language
:오디오 파일의 언어 IDemo_target
: 오디오 파일의 감정 라벨event_target
: 오디오 파일의 이벤트 라벨with_or_wo_itn
: 구두점 및 역 텍스트 정규화 포함 여부 train_text.txt
BAC009S0764W0121 甚至出现交易几乎停滞的情况
BAC009S0916W0489 湖北一公司以员工名义贷款数十员工负债千万
asr_example_cn_en 所有只要处理 data 不管你是做 machine learning 做 deep learning 做 data analytics 做 data science 也好 scientist 也好通通都要都做的基本功啊那 again 先先对有一些>也许对
ID0012W0014 he tried to think how it could be
train_wav.scp
BAC009S0764W0121 https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/BAC009S0764W0121.wav
BAC009S0916W0489 https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/BAC009S0916W0489.wav
asr_example_cn_en https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_cn_en.wav
ID0012W0014 https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_en.wav
train_text_language.txt
언어 ID에는 <|zh|>
、 <|en|>
、 <|yue|>
、 <|ja|>
및 <|ko|>
포함됩니다.
BAC009S0764W0121 < | zh | >
BAC009S0916W0489 < | zh | >
asr_example_cn_en < | zh | >
ID0012W0014 < | en | >
train_emo.txt
감정 레이블에는 <|HAPPY|>
、 <|SAD|>
、 <|ANGRY|>
、 <|NEUTRAL|>
、 <|FEARFUL|>
、 <|DISGUSTED|>
및 <|SURPRISED|>
가 포함됩니다.
BAC009S0764W0121 < | NEUTRAL | >
BAC009S0916W0489 < | NEUTRAL | >
asr_example_cn_en < | NEUTRAL | >
ID0012W0014 < | NEUTRAL | >
train_event.txt
이벤트 라벨에는 <|BGM|>
、 <|Speech|>
、 <|Applause|>
、 <|Laughter|>
、 <|Cry|>
、 <|Sneeze|>
、 <|Breath|>
및 <|Cough|>
.
BAC009S0764W0121 < | Speech | >
BAC009S0916W0489 < | Speech | >
asr_example_cn_en < | Speech | >
ID0012W0014 < | Speech | >
Command
# generate train.jsonl and val.jsonl from wav.scp, text.txt, text_language.txt, emo_target.txt, event_target.txt
sensevoice2jsonl
++scp_file_list= ' ["../../../data/list/train_wav.scp", "../../../data/list/train_text.txt", "../../../data/list/train_text_language.txt", "../../../data/list/train_emo.txt", "../../../data/list/train_event.txt"] '
++data_type_list= ' ["source", "target", "text_language", "emo_target", "event_target"] '
++jsonl_file_out= " ../../../data/list/train.jsonl "
train_text_language.txt
, train_emo_target.txt
및 train_event_target.txt
가 없는 경우 SenseVoice
모델을 사용하여 언어, 감정 및 이벤트 레이블이 자동으로 예측됩니다.
# generate train.jsonl and val.jsonl from wav.scp and text.txt
sensevoice2jsonl
++scp_file_list= ' ["../../../data/list/train_wav.scp", "../../../data/list/train_text.txt"] '
++data_type_list= ' ["source", "target"] '
++jsonl_file_out= " ../../../data/list/train.jsonl "
++model_dir= ' iic/SenseVoiceSmall '
Finetune.sh의 train_tool을 이전에 설정한 FunASR 설치 디렉터리의 funasr/bin/train_ds.py
절대 경로로 수정하세요.
bash finetune.sh
python webui.py
사용 중 문제가 발생하면 github 페이지에서 직접 문제를 제기할 수 있습니다.
다음 DingTalk 그룹 QR 코드를 스캔하여 커뮤니티 그룹에 가입하여 소통하고 토론할 수도 있습니다.
FunASR |
---|