(简体中文|อังกฤษ|日本語)
SenseVoice เป็นโมเดลพื้นฐานคำพูดที่มีความสามารถในการเข้าใจคำพูดที่หลากหลาย ซึ่งรวมถึงการรู้จำเสียงพูดอัตโนมัติ (ASR) การระบุภาษาพูด (LID) การรู้จำอารมณ์คำพูด (SER) และการตรวจจับเหตุการณ์เสียง (AED)
สวนสัตว์จำลอง: โมเดลสโคป, ใบหน้ากอด
การสาธิตออนไลน์: การสาธิต modelscope พื้นที่กอดหน้า
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 ปรับใช้สถาปัตยกรรมแบบ end-to-end แบบไม่ถอยอัตโนมัติ ส่งผลให้มีเวลาแฝงในการอนุมานต่ำมาก ด้วยจำนวนพารามิเตอร์ที่ใกล้เคียงกับรุ่น 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
หมายความว่าการใช้งานโค้ดของโมเดลถูกโหลดจาก 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
: ID เฉพาะของไฟล์เสียง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|>
、 < <|Laughter|>
<|Applause|>
、 <|เสียงหัวเราะ|> 、 <|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
หากคุณพบปัญหาในการใช้งาน คุณสามารถแจ้งปัญหาได้โดยตรงที่หน้า GitHub
คุณยังสามารถสแกนรหัส QR ของกลุ่ม DingTalk ต่อไปนี้เพื่อเข้าร่วมกลุ่มชุมชนเพื่อการสื่อสารและการสนทนา
FunASR |
---|