(简体中文|الإنجليزية)
تأمل 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)
اسم النموذج | تفاصيل المهمة | بيانات التدريب | حدود |
---|---|---|---|
SenseVoiceSmall (⭐ ؟ ) | قدرات متعددة لفهم الكلام، بما في ذلك ASR وITN وLID وSER وAED، ودعم لغات مثل zh وyue وen وja وko | 300000 ساعة | 234 م |
Paraformer-zh (⭐ ؟ ) | التعرف على الكلام، مع الطوابع الزمنية، غير المتدفقة | 60000 ساعة، الماندرين | 220 م |
paraformer-zh-تدفق ( ⭐ ؟ ) | التعرف على الكلام، والتدفق | 60000 ساعة، الماندرين | 220 م |
بارافورمر-أون ( ⭐ ؟ ) | التعرف على الكلام، بدون طوابع زمنية، غير متدفق | 50000 ساعة انجليزي | 220 م |
المطابق أون ( ⭐ ؟ ) | التعرف على الكلام، غير المتدفقة | 50000 ساعة انجليزي | 220 م |
ct-punc ( ⭐ ؟ ) | استعادة علامات الترقيم | 100M، الماندرين والإنجليزية | 290 م |
fsmn-vad ( ⭐ ؟ ) | كشف النشاط الصوتي | 5000 ساعة، الماندرين والإنجليزية | 0.4 م |
fsmn-kws ( ⭐ ) | اكتشاف الكلمات الرئيسية والتدفق | 5000 ساعة، الماندرين | 0.7 م |
fa-zh ( ⭐ ؟ ) | التنبؤ بالطابع الزمني | 5000 ساعة، الماندرين | 38 م |
cam++ ( ⭐ ؟ ) | التحقق من المتحدث/يومياته | 5000 ساعة | 7.2 م |
الهمس-كبير-v3 (⭐ ؟ ) | التعرف على الكلام، مع الطوابع الزمنية، غير المتدفقة | متعدد اللغات | 1550 م |
الهمس-كبير-v3-توربو (⭐ ؟ ) | التعرف على الكلام، مع الطوابع الزمنية، غير المتدفقة | متعدد اللغات | 809 م |
كوين الصوت (⭐ ؟ ) | نماذج الوسائط المتعددة للنص الصوتي (التدريب المسبق) | متعدد اللغات | 8 ب |
كوين-الدردشة الصوتية (⭐ ؟ ) | نماذج الوسائط المتعددة الصوتية والنصية (الدردشة) | متعدد اللغات | 8 ب |
العاطفة2vec+كبير (⭐ ؟ ) | إعادة توافق مشاعر الكلام | 40000 ساعة | 300 م |
يوجد أدناه برنامج تعليمي للبدء السريع. اختبار الملفات الصوتية (الماندرين، الإنجليزية).
funasr ++model=paraformer-zh ++vad_model= " fsmn-vad " ++punc_model= " ct-punc " ++input=asr_example_zh.wav
ملاحظات: دعم التعرف على ملف صوتي واحد، بالإضافة إلى قائمة الملفات بتنسيق 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 نشر النماذج المدربة مسبقًا أو المضبوطة بشكل أكبر للخدمة. وهو يدعم حاليًا الأنواع التالية من نشر الخدمة:
للحصول على معلومات أكثر تفصيلاً، الرجاء الرجوع إلى وثائق نشر الخدمة.
إذا واجهت مشاكل في الاستخدام، يمكنك رفع المشكلات مباشرة على صفحة جيثب.
يمكنك أيضًا مسح مجموعة 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 }
}