(简体中文|الإنجليزية|日本語)
SenseVoice هو نموذج أساسي للكلام يتمتع بقدرات متعددة لفهم الكلام، بما في ذلك التعرف التلقائي على الكلام (ASR)، وتحديد اللغة المنطوقة (LID)، والتعرف على عواطف الكلام (SER)، واكتشاف الأحداث الصوتية (AED).
حديقة الحيوان النموذجية: نموذج النطاق، وجه معانق
العرض التوضيحي عبر الإنترنت: العرض التوضيحي لنطاق النماذج، ومساحة الوجه المعانقة
يركز SenseVoice على التعرف على الكلام متعدد اللغات عالي الدقة، والتعرف على عواطف الكلام، واكتشاف الأحداث الصوتية.
قمنا بمقارنة أداء التعرف على الكلام متعدد اللغات بين SenseVoice وWhisper على مجموعات البيانات المعيارية مفتوحة المصدر، بما في ذلك AISHELL-1 وAISHELL-2 وWenetspeech وLibriSpeech وCommon Voice. فيما يتعلق بالاعتراف الصيني والكانتوني، يتمتع نموذج SenseVoice-Small بمزايا.
نظرًا للنقص الحالي في المعايير والأساليب المستخدمة على نطاق واسع للتعرف على مشاعر الكلام، فقد أجرينا تقييمات عبر مقاييس مختلفة على مجموعات اختبار متعددة وأجرينا مقارنة شاملة مع العديد من النتائج من المعايير الحديثة. تشتمل مجموعات الاختبار المختارة على بيانات باللغتين الصينية والإنجليزية، وتتضمن أنماطًا متعددة مثل العروض والأفلام والمحادثات الطبيعية. وبدون ضبط البيانات المستهدفة، تمكنت SenseVoice من تحقيق وتجاوز أداء أفضل نماذج التعرف على عواطف الكلام الحالية.
علاوة على ذلك، قمنا بمقارنة العديد من نماذج التعرف على عواطف الكلام مفتوحة المصدر في مجموعات الاختبار، وتشير النتائج إلى أن نموذج SenseVoice-Large حقق أفضل أداء في جميع مجموعات البيانات تقريبًا، بينما تجاوز نموذج SenseVoice-Small أيضًا النماذج مفتوحة المصدر الأخرى على غالبية مجموعات البيانات.
على الرغم من تدريبه حصريًا على بيانات الكلام، لا يزال بإمكان SenseVoice العمل كنموذج مستقل للكشف عن الأحداث. قمنا بمقارنة أدائها في مجموعة بيانات تصنيف الصوت البيئي ESC-50 مع نماذج الصناعة المستخدمة على نطاق واسع BEATS وPANN. حقق نموذج SenseVoice نتائج جديرة بالثناء في هذه المهام. ومع ذلك، ونظرًا للقيود في بيانات ومنهجية التدريب، فإن أداء تصنيف الأحداث به بعض الفجوات مقارنة بنماذج AED المتخصصة.
ينشر نموذج SenseVoice-Small بنية شاملة غير انحدارية، مما يؤدي إلى زمن وصول استدلالي منخفض للغاية. مع عدد مماثل من المعلمات لنموذج Whisper-Small، فإنه يستنتج أسرع بأكثر من 5 مرات من Whisper-Small وأسرع 15 مرة من Whisper-Large.
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
، فهذا يعني أنه تم تحميل تنفيذ التعليمات البرمجية للنموذج من remote_code
، والذي يحدد الموقع الدقيق لرمز model
(على سبيل المثال، model.py
في الدليل الحالي). وهو يدعم المسارات المطلقة والمسارات النسبية وعناوين URL للشبكة.False
، فإنه يشير إلى أن تنفيذ التعليمات البرمجية للنموذج هو الإصدار المتكامل داخل FunASR. في الوقت الحالي، لن تكون التعديلات التي تم إجراؤها على model.py
في الدليل الحالي فعالة، حيث أن الإصدار الذي تم تحميله هو الإصدار الداخلي من FunASR. للحصول على رمز النموذج، انقر هنا للعرض.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
: معرف فريد للملف الصوتيsource
: المسار إلى الملف الصوتيsource_len
: عدد إطارات fbank للملف الصوتيtarget
: النسخtarget_len
: طول الهدفtext_language
: معرف اللغة للملف الصوتيemo_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
تتضمن معرفات اللغة <|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 '
تأكد من تعديل Train_tool في Finetune.sh إلى المسار المطلق لـ funasr/bin/train_ds.py
من دليل تثبيت FunASR الذي قمت بإعداده مسبقًا.
bash finetune.sh
python webui.py
إذا واجهت مشاكل في الاستخدام، يمكنك رفع المشكلات مباشرة على صفحة جيثب.
يمكنك أيضًا مسح رمز الاستجابة السريعة لمجموعة DingTalk التالي للانضمام إلى مجموعة المجتمع للتواصل والمناقشة.
FunASR |
---|