(简体中文|อังกฤษ)
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 | 300,000 ชั่วโมง | 234ม |
พาราฟอร์มเมอร์-zh ( ? ) | การรู้จำเสียงพูดพร้อมการประทับเวลาไม่ใช่การสตรีม | 60,000 ชั่วโมง ภาษาจีนกลาง | 220ม |
paraformer-zh-สตรีมมิ่ง ( ? ) | การรู้จำเสียง, การสตรีม | 60,000 ชั่วโมง ภาษาจีนกลาง | 220ม |
paraformer-th ( ? ) | การรู้จำเสียงพูด ไม่มีการประทับเวลา ไม่สตรีมมิ่ง | 50,000 ชั่วโมง ภาษาอังกฤษ | 220ม |
ผู้ประสานงาน-en ( ? ) | การรู้จำเสียงพูดไม่ใช่การสตรีม | 50,000 ชั่วโมง ภาษาอังกฤษ | 220ม |
ct-punc ( ? ) | การคืนค่าเครื่องหมายวรรคตอน | 100M จีนกลางและอังกฤษ | 290ม |
fsmn-vad ( ? ) | การตรวจจับกิจกรรมเสียง | 5,000 ชั่วโมง ภาษาจีนกลางและภาษาอังกฤษ | 0.4M |
fsmn-กิโลวัตต์ ( ) | การจำแนกคำหลักสตรีมมิ่ง | 5,000 ชั่วโมง ภาษาจีนกลาง | 0.7M |
ฟา-zh ( ? ) | การทำนายเวลา | 5,000 ชั่วโมง ภาษาจีนกลาง | 38ม |
ลูกเบี้ยว++ ( ? ) | การตรวจสอบวิทยากร / การถอดเสียง | 5,000 ชั่วโมง | 7.2ล้าน |
กระซิบขนาดใหญ่-v3 ( ? ) | การรู้จำเสียงพูดพร้อมการประทับเวลาไม่ใช่การสตรีม | พูดได้หลายภาษา | 1550 ม |
กระซิบ-ขนาดใหญ่-v3-turbo ( ? ) | การรู้จำเสียงพูดพร้อมการประทับเวลาไม่ใช่การสตรีม | พูดได้หลายภาษา | 809 ม |
Qwen-เสียง ( ? ) | แบบจำลองมัลติโมดัลเสียงและข้อความ (การฝึกล่วงหน้า) | พูดได้หลายภาษา | 8B |
Qwen-เสียง-แชท ( ? ) | โมเดลมัลติโมดัลเสียงและข้อความ (แชท) | พูดได้หลายภาษา | 8B |
Emotion2vec+ใหญ่ ( ? ) | การคืนดีของอารมณ์คำพูด | 40,000 ชั่วโมง | 300ม |
ด้านล่างนี้คือบทช่วยสอนเริ่มต้นอย่างรวดเร็ว ทดสอบไฟล์เสียง (จีนกลาง, อังกฤษ)
funasr ++model=paraformer-zh ++vad_model= " fsmn-vad " ++punc_model= " ct-punc " ++input=asr_example_zh.wav
หมายเหตุ: รองรับการจดจำไฟล์เสียงเดี่ยว รวมถึงรายการไฟล์ในรูปแบบ wav.scp สไตล์ Kaldi: 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
และข้อมูล lookahead คือ 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 รองรับการปรับใช้โมเดลที่ได้รับการฝึกอบรมล่วงหน้าหรือที่ได้รับการปรับแต่งเพิ่มเติมสำหรับการบริการ ปัจจุบันรองรับการปรับใช้บริการประเภทต่อไปนี้:
สำหรับข้อมูลโดยละเอียดเพิ่มเติม โปรดดูเอกสารประกอบการปรับใช้บริการ
หากคุณพบปัญหาในการใช้งาน คุณสามารถแจ้งปัญหาได้โดยตรงที่หน้า GitHub
คุณยังสามารถสแกนกลุ่ม DingTalk ต่อไปนี้เพื่อเข้าร่วมกลุ่มชุมชนเพื่อการสื่อสารและการสนทนา
กลุ่มติงทอล์ค |
---|
ผู้ร่วมให้ข้อมูลสามารถพบได้ในรายชื่อผู้ร่วมให้ข้อมูล
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT FunASR ยังมีส่วนประกอบของบุคคลที่สามและโค้ดบางส่วนที่แก้ไขจาก repos อื่น ๆ ภายใต้ใบอนุญาตโอเพ่นซอร์สอื่น ๆ การใช้แบบจำลองการฝึกล่วงหน้าขึ้นอยู่กับใบอนุญาตแบบจำลอง
@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 }
}