(简体中文|Englisch|日本語)
SenseVoice ist ein Sprachgrundlagenmodell mit mehreren Sprachverständnisfunktionen, einschließlich automatischer Spracherkennung (ASR), Erkennung gesprochener Sprache (LID), Sprachemotionserkennung (SER) und Audioereigniserkennung (AED).
Modell-Zoo: Modellfernrohr, umarmendes Gesicht
Online-Demo: Modelscope-Demo, Huggingface Space
SenseVoice konzentriert sich auf die hochpräzise mehrsprachige Spracherkennung, Sprachemotionserkennung und Audioereigniserkennung.
Wir haben die Leistung der mehrsprachigen Spracherkennung zwischen SenseVoice und Whisper anhand von Open-Source-Benchmark-Datensätzen verglichen, darunter AISHELL-1, AISHELL-2, Wenetspeech, LibriSpeech und Common Voice. Im Hinblick auf die Erkennung von Chinesisch und Kantonesisch bietet das SenseVoice-Small-Modell Vorteile.
Aufgrund des derzeitigen Mangels an weit verbreiteten Benchmarks und Methoden zur Sprachemotionserkennung haben wir Auswertungen verschiedener Metriken auf mehreren Testsätzen durchgeführt und einen umfassenden Vergleich mit zahlreichen Ergebnissen aktueller Benchmarks durchgeführt. Die ausgewählten Testsätze umfassen Daten sowohl in Chinesisch als auch in Englisch und umfassen mehrere Stile wie Aufführungen, Filme und natürliche Gespräche. Ohne eine Feinabstimmung der Zieldaten konnte SenseVoice die Leistung der derzeit besten Sprachemotionserkennungsmodelle erreichen und übertreffen.
Darüber hinaus haben wir mehrere Open-Source-Modelle zur Sprachemotionserkennung anhand der Testsätze verglichen. Die Ergebnisse zeigen, dass das SenseVoice-Large-Modell bei fast allen Datensätzen die beste Leistung erzielte, während das SenseVoice-Small-Modell auch andere Open-Source-Modelle übertraf den Großteil der Datensätze.
Obwohl SenseVoice ausschließlich auf Sprachdaten trainiert wird, kann es dennoch als eigenständiges Ereigniserkennungsmodell fungieren. Wir haben seine Leistung anhand des Datensatzes zur Umweltschallklassifizierung ESC-50 mit den weit verbreiteten Branchenmodellen BEATS und PANN verglichen. Das SenseVoice-Modell erzielte bei diesen Aufgaben lobenswerte Ergebnisse. Aufgrund von Einschränkungen bei den Trainingsdaten und der Methodik weist die Ereignisklassifizierungsleistung jedoch einige Lücken im Vergleich zu spezialisierten AED-Modellen auf.
Das SenseVoice-Small-Modell nutzt eine nicht autoregressive End-to-End-Architektur, was zu einer extrem geringen Inferenzlatenz führt. Mit einer ähnlichen Anzahl von Parametern wie das Whisper-Small-Modell führt es mehr als fünfmal schneller als Whisper-Small und 15-mal schneller als Whisper-Large.
pip install -r requirements.txt
Unterstützt die Eingabe von Audio in jedem Format und jeder Dauer.
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
: Der Name des Modells oder der Pfad zum Modell auf der lokalen Festplatte.trust_remote_code
:True
, bedeutet dies, dass die Codeimplementierung des Modells von remote_code
geladen wird, was den genauen Speicherort des model
angibt (z. B. model.py
im aktuellen Verzeichnis). Es unterstützt absolute Pfade, relative Pfade und Netzwerk-URLs.False
, bedeutet dies, dass die Codeimplementierung des Modells die integrierte Version in FunASR ist. Zu diesem Zeitpunkt sind Änderungen an model.py
im aktuellen Verzeichnis nicht wirksam, da es sich bei der geladenen Version um die interne Version von FunASR handelt. Klicken Sie hier, um den Modellcode anzuzeigen.vad_model
: Dies zeigt die Aktivierung von VAD (Voice Activity Detection) an. Der Zweck von VAD besteht darin, lange Audiodaten in kürzere Clips aufzuteilen. In diesem Fall umfasst die Inferenzzeit sowohl den VAD- als auch den SenseVoice-Gesamtverbrauch und stellt die End-to-End-Latenz dar. Wenn Sie die Inferenzzeit des SenseVoice-Modells separat testen möchten, kann das VAD-Modell deaktiviert werden.vad_kwargs
: Gibt die Konfigurationen für das VAD-Modell an. max_single_segment_time
: bezeichnet die maximale Dauer für die Audiosegmentierung durch vad_model
, wobei die Einheit Millisekunden (ms) ist.use_itn
: Ob das Ausgabeergebnis Satzzeichen und inverse Textnormalisierung enthält.batch_size_s
: Gibt die Verwendung dynamischer Stapelverarbeitung an, bei der die Gesamtdauer der Audiodaten im Stapel in Sekunden (s) gemessen wird.merge_vad
: Ob kurze, vom VAD-Modell segmentierte Audiofragmente zusammengeführt werden sollen, wobei die zusammengeführte Länge merge_length_s
in Sekunden (s) beträgt.ban_emo_unk
: Ob die Ausgabe des emo_unk
-Tokens verboten werden soll. Wenn es sich bei allen Eingaben um kurze Audiodateien (<30 Sekunden) handelt und eine Batch-Inferenz zur Beschleunigung der Inferenzeffizienz erforderlich ist, kann das VAD-Modell entfernt und batch_size
entsprechend festgelegt werden.
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 ,
)
Weitere Informationen zur Verwendung finden Sie in den Dokumenten
Unterstützt die Eingabe von Audio in jedem Format mit einer Eingabedauer von maximal 30 Sekunden.
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 ])
Hinweis: Das ONNX-Modell wird in das ursprüngliche Modellverzeichnis exportiert.
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 ])
Hinweis: Das Libtorch-Modell wird in das ursprüngliche Modellverzeichnis exportiert.
export SENSEVOICE_DEVICE=cuda:0
fastapi run --port 50000
git clone https://github.com/alibaba/FunASR.git && cd FunASR
pip3 install -e ./
Datenbeispiele
{"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}
Vollständiger Verweis auf data/train_example.jsonl
Beschreibung:
key
: Eindeutige ID der Audiodateisource
: Pfad zur Audiodateisource_len
:Anzahl der Fbank-Frames der Audiodateitarget
: Transkriptiontarget_len
:Länge des Zielstext_language
:Sprach-ID der Audiodateiemo_target
:Emotionsbezeichnung der Audiodateievent_target
:Ereignisbezeichnung der Audiodateiwith_or_wo_itn
: Gibt an, ob Satzzeichen und inverse Textnormalisierung enthalten sind 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
Zu den Sprach-IDs gehören <|zh|>
、 <|en|>
、 <|yue|>
、 <|ja|>
und <|ko|>
.
BAC009S0764W0121 < | zh | >
BAC009S0916W0489 < | zh | >
asr_example_cn_en < | zh | >
ID0012W0014 < | en | >
train_emo.txt
Zu den Emotionsbezeichnungen gehören <|HAPPY|>
、 <|SAD|>
、 <|ANGRY|>
、 <|NEUTRAL|>
、 <|FEARFUL|>
、 <|DISGUSTED|>
und <|SURPRISED|>
.
BAC009S0764W0121 < | NEUTRAL | >
BAC009S0916W0489 < | NEUTRAL | >
asr_example_cn_en < | NEUTRAL | >
ID0012W0014 < | NEUTRAL | >
train_event.txt
Zu den Ereignisbezeichnungen gehören <|BGM|>
、 <|Speech|>
、 <|Applause|>
、 <|Laughter|>
、 <|Cry|>
、 <|Sneeze|>
、 <|Breath|>
und <|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 "
Wenn train_text_language.txt
, train_emo_target.txt
und train_event_target.txt
nicht vorhanden sind, werden Sprache, Emotion und Ereignisbezeichnung mithilfe des SenseVoice
Modells automatisch vorhergesagt.
# 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 '
Stellen Sie sicher, dass Sie train_tool in finetune.sh auf den absoluten Pfad von funasr/bin/train_ds.py
aus dem zuvor eingerichteten FunASR-Installationsverzeichnis ändern.
bash finetune.sh
python webui.py
Wenn Sie bei der Verwendung auf Probleme stoßen, können Sie Issues direkt auf der Github-Seite melden.
Sie können auch den folgenden DingTalk-Gruppen-QR-Code scannen, um der Community-Gruppe zur Kommunikation und Diskussion beizutreten.
FunASR |
---|