(简体中文|英語)
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 |
パラフォーマ-zh-ストリーミング ( ⭐ ? ) | 音声認識、ストリーミング | 60000時間、中国語 | 220M |
パラフォーマー ( ⭐ ? ) | 音声認識、タイムスタンプなし、非ストリーミング | 50000時間、英語 | 220M |
配座異性体 ( ⭐ ? ) | 音声認識、非ストリーミング | 50000時間、英語 | 220M |
ct-punc ( ⭐ ? ) | 句読点の復元 | 100M、中国語、英語 | 290M |
fsmn-vad ( ⭐ ? ) | 音声アクティビティの検出 | 5000時間、中国語と英語 | 0.4M |
fsmn-kws ( ⭐ ) | キーワードスポッティング、ストリーミング | 5000時間、中国語 | 0.7M |
ファジ ( ⭐ ? ) | タイムスタンプ予測 | 5000時間、中国語 | 38M |
カム++ ( ⭐ ? ) | 話者の検証/ダイアライゼーション | 5000時間 | 7.2M |
ウィスパーラージ v3 (⭐?) | 音声認識、タイムスタンプ付き、非ストリーミング | 多言語 | 1550メートル |
ウィスパーラージv3ターボ (⭐?) | 音声認識、タイムスタンプ付き、非ストリーミング | 多言語 | 809M |
Qwen-オーディオ (⭐?) | オーディオテキストのマルチモーダル モデル (事前トレーニング) | 多言語 | 8B |
Qwen-オーディオチャット (⭐?) | 音声とテキストのマルチモーダル モデル (チャット) | 多言語 | 8B |
感情2vec+大 (⭐?) | 音声感情認識 | 40000時間 | 300M |
以下はクイックスタートチュートリアルです。音声ファイルをテストします (中国語、英語)。
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 (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
トークンの出力を禁止するかどうか。 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 モデルの出力形式は、次の 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 ++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 }
}