(简体中文|英語|日本語)
SenseVoice は、自動音声認識 (ASR)、音声言語識別 (LID)、音声感情認識 (SER)、音声イベント検出 (AED) など、複数の音声理解機能を備えた音声基盤モデルです。
模型動物園: モデルスコープ、ハグフェイス
オンライン デモ: モデルスコープ デモ、ハグフェイス スペース
SenseVoice は、高精度の多言語音声認識、音声感情認識、音声イベント検出に重点を置いています。
AISHELL-1、AISHELL-2、Wenetspeech、LibriSpeech、Common Voice などのオープンソース ベンチマーク データセットで、SenseVoice と Whisper の多言語音声認識のパフォーマンスを比較しました。中国語と広東語の認識に関しては、SenseVoice-Small モデルに利点があります。
現在、音声感情認識に広く使用されているベンチマークと手法が不足しているため、複数のテスト セットでさまざまな指標にわたる評価を実施し、最近のベンチマークの多数の結果と包括的な比較を実行しました。選択されたテスト セットには中国語と英語の両方のデータが含まれており、パフォーマンス、映画、自然な会話などの複数のスタイルが含まれています。 SenseVoice は、ターゲット データを微調整することなく、現在最高の音声感情認識モデルのパフォーマンスを達成し、それを超えることができました。
さらに、複数のオープンソースの音声感情認識モデルをテスト セットで比較しました。その結果、SenseVoice-Large モデルがほぼすべてのデータセットで最高のパフォーマンスを達成し、SenseVoice-Small モデルも他のオープンソース モデルを上回りました。データセットの大部分。
SenseVoice は音声データのみでトレーニングされていますが、スタンドアロンのイベント検出モデルとして機能することができます。環境音分類 ESC-50 データセットのパフォーマンスを、広く使用されているインダストリ モデル BEATS および PANN と比較しました。 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
コードの正確な場所 (たとえば、現在のディレクトリ内のmodel.py
) を指定するremote_code
からロードされることを意味します。絶対パス、相対パス、およびネットワーク URL をサポートします。False
の場合、モデルのコード実装が FunASR 内の統合バージョンであることを示します。現時点では、ロードされるバージョンは FunASR からの内部バージョンであるため、現在のディレクトリにあるmodel.py
に加えられた変更は有効になりません。モデルコードについては、ここをクリックしてご覧ください。vad_model
: VAD (Voice Activity Detection) の有効化を示します。 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|>
含まれます。 <|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 コードをスキャンして、コミュニケーションやディスカッションのためにコミュニティ グループに参加することもできます。
楽しいASR |
---|