همهٔ مقاله‌ها

· Casimiro Ferreira· 9 دقیقه مطالعه

اندازه‌گیری کیفیت گفتار بدون یک پانل شنیداری

  • speechonnxmetrics
  • TTS
  • ONNX
  • evaluation

یک مدل رفع‌نویز یک checkpoint تازه عرضه می‌کند. یک صدای TTS روی داده‌ی بیشتری دوباره آموزش می‌بیند. یک خط لولهٔ شبیه‌سازی صدا vocoder اش را تعویض می‌کند. در هر مورد، کسی باید پاسخ دهد: خروجی بهتر است یا بدتر از قبل؟ «به‌نظر من بهتر است» مقیاس‌پذیر نیست. همان لحظه‌ای که زبان، زبانی نیست که خودتان صحبت کنید، همان لحظه‌ای که به‌جای دو، بیست checkpoint برای مقایسه هست، یا همان لحظه‌ای که تغییر باید در هر commit بررسی شود نه یک‌بار با دست، از هم می‌پاشد.

پاسخ دقیق به «آیا بهتر به نظر می‌رسد» یک امتیاز میانگین نظر (MOS) است: صدا را جلوی یک پانل از شنوندگان بگذارید، از هر یک بخواهید آن را از ۱ تا ۵ رتبه‌بندی کند، و امتیازها را میانگین بگیرید. MOS سنجهٔ استاندارد کیفیت گفتار است دقیقاً چون پرسشی را می‌پرسد که اهمیت دارد — آیا یک انسان این را قابل‌قبول می‌یابد — به‌جای یک جایگزین برای آن. همچنین گران است. استخدام یک پانل، اجرای پیوستهٔ آن، و تکرارش برای هر زبان، هر شرایط ضبط و هر نسخهٔ مدلی که یک تیم کوچک عرضه می‌کند چیزی نیست که یک پانل شنیداری بتواند با آن همگام بماند.

speechonnxmetrics کتابخانه‌ای است برای تقریب زدنِ آن قضاوت بدون یک پانل، روی هر build. این کتابخانه سنجه‌هایش را در سه خانواده گروه‌بندی می‌کند، و انتخاب خانوادهٔ درست برای موقعیت بیش از هر عدد منفردی اهمیت دارد.

سه خانواده، سه پرسش

برآوردگرهای MOS بدون‌مرجع شبکه‌های عصبی‌ای هستند که آموزش دیده‌اند تا پیش‌بینی کنند یک پانل شنیداری چه می‌گفت، تنها از خودِ صدا. آن‌ها به هیچ اصل تمیزی نیاز ندارند — تنها به خروجی‌ای که می‌خواهید قضاوت کنید. این خانواده را وقتی به کار ببرید که هیچ حقیقت زمینیِ مقایسه‌ای وجود ندارد: امتیازدهی به خروجی یک سامانهٔ TTS، یا بررسیِ یک ضبط واقعیِ از پیش تخریب‌شده پس از رفع نویز.

سنجه‌های تهاجمی به یک مرجع تمیزِ مطابق نیاز دارند و فاصلهٔ میان آن و سیگنالِ تخریب‌شده را اندازه می‌گیرند. این خانواده را وقتی به کار ببرید که خودتان تخریب را ساخته‌اید و هنوز اصلِ تمیز را دارید: یک ضبط شناخته‌شده‌خوب را از میان یک codec، یک مدل بسط پهنای‌باند یا یک تبدیل‌کنندهٔ صدا عبور داده‌اید و می‌خواهید بدانید خروجی چقدر از مبدأ فاصله گرفته.

سنجه‌های متنیِ مبتنی بر ASR خروجی را با یک تشخیص‌دهندهٔ گفتار رونویسی می‌کنند و رونوشت را در برابر متن مورد انتظار diff می‌کنند. این چیزی را می‌گیرد که آن دو خانوادهٔ دیگر نمی‌توانند: صدایی که کاملاً طبیعی و تمیز به نظر می‌رسد اما واژه‌های اشتباه می‌گوید. یک پیش‌بینِ MOS بدون‌مرجع طبیعی‌بودن را رتبه‌بندی می‌کند، نه درستی را — یک بدتلفظیِ روان امتیاز خوبی می‌گیرد. یک سنجهٔ تهاجمی به یک موج‌شکل مرجع نیاز دارد، نه یک جملهٔ مرجع. تنها مقایسهٔ متن یک واژهٔ اشتباه را می‌گیرد.

این کتابخانه این‌ها را از طریق یک تابع نمایان می‌کند:

import speechonnxmetrics as s

# No-reference: only the output needed, no ground truth exists
s.score("output.wav", ["utmos"])

# Intrusive: needs a clean reference, ref= is required
s.score("degraded.wav", ["stoi", "mcd", "si_sdr"], ref="clean.wav")

سنجه‌های متنی در ماژولی جداگانه زندگی می‌کنند، speechonnxmetrics.asr، چون آن‌ها رشته‌ها را مقایسه می‌کنند، نه صدا — s.score() تنها سنجه‌هایی را ارسال می‌کند که یک موج‌شکل می‌گیرند.

MOS بدون‌مرجع: خواندن اعداد

چهار برآوردگر MOS عرضه می‌شود، هر یک مقادیری روی یک مقیاس ۱ تا ۵ برمی‌گرداند که بالاتر بهتر است — همان مقیاسی که یک پانل انسانی به کار می‌برد:

سنجهابعادآموزش‌دیده رویاستفادهٔ تجاری
utmosیک امتیاز طبیعی‌بودنگفتار سنتزشده (VoiceMOS Challenge)بله
dnsmossig / bak / ovrl (کیفیت گفتار / نویز پس‌زمینه / کلی)ITU-T P.835بله
dnsmos_p808یک MOS شنیداریِ جمع‌سپاری‌شدهITU-T P.808بله
sigmos۷ بُعد (col، disc، loud، noise، reverb، sig، ovrl)ITU-T P.804بله
nisqamos به‌علاوهٔ تفکیک noi/dis/col/loudNISQA-v2خیر — CC BY-NC-SA 4.0

nisqa تنها سنجه در کل کتابخانه با وزن‌های غیرتجاری است. چهار سنجهٔ دیگر تحت مجوز MIT هستند. speechonnxmetrics این را برایتان فیلتر نمی‌کند؛ مجوز را اعلام می‌کند و انتخاب را به فراخوان می‌سپارد.

این هم آنچه صدای واقعی امتیاز می‌گیرد. اجرای fixture های بستهٔ خودِ کتابخانه — یک ضبط تمیز (source.wav) و یک بازسنتزِ neural-codec از همان کلیپ (facodec_aria.wav) — از میان UTMOS:

>>> s.score("source.wav", ["utmos"])
{'utmos': 4.41}
>>> s.score("facodec_aria.wav", ["utmos"])
{'utmos': 3.21}

ضبط تمیز نزدیک بالای مقیاس می‌نشیند، همان‌طور که باید — این گفتار واقعیِ انسانی است، نه سنتزشده. بازسنتزِ codec بیش از یک نمرهٔ کامل افت می‌کند. آن شکاف، بیش از هر یک از دو عدد به‌تنهایی، سیگنال سودمند است: به شما می‌گوید codec تخریبِ قابل‌شنیدنی وارد می‌کند، و عددی برای پیگیری در حین تنظیمِ codec به شما می‌دهد.

‏DNSMOS روی همان ضبط تمیز:

>>> s.score("source.wav", ["dnsmos"])
{'dnsmos.sig': 3.45, 'dnsmos.bak': 3.60, 'dnsmos.ovrl': 2.93}

سه عدد، نه یک، و از هم واگرا می‌شوند — ovrl به‌طور محسوسی زیر هر دوی sig و bak می‌نشیند. آن واگرایی آموزنده است نه یک باگ: ovrl رتبه‌بندیِ P.835 از تجربهٔ شنیداریِ کلی است، و گرایش دارد یک ضبط را سخت‌تر از آنچه هر امتیاز مؤلفه به‌تنهایی نشان می‌دهد جریمه کند، به‌ویژه برای یک ضبط واقعی به‌جای یک ضبط استودیویی. وقتی bak پایین است، به‌دنبال نویز پس‌زمینه بگردید. وقتی sig پایین است، به‌دنبال عیب‌های سطح-صدا بگردید — کلیپ‌شدن، افت‌ها، طنین رباتیک. بیش از یک پیش‌بین را برای همان کلیپ گزارش دهید: آن‌ها روی داده‌های متفاوتی آموزش دیده‌اند و به شیوه‌هایی آموزنده اختلاف نظر دارند، و شکاف گسترده میان دو پیش‌بین مستقل روی همان کلیپ نشانه‌ای است برای رفتن و گوش دادن.

سنجه‌های تهاجمی: خواندن اعداد

یازده سنجهٔ مرجع‌محور فاصله را از یک اصل تمیز اندازه می‌گیرند. آن‌هایی که ارزش دانستن نخست را دارند:

سنجهبازهجهتاندازه می‌گیرد
stoi / estoi۰ تا ۱بالاتر بهتر استوضوح عینیِ کوتاه‌مدت — چقدر از محتوا زنده می‌ماند، مستقل از اینکه چقدر طبیعی به‌نظر می‌رسد
si_sdr / sdr / snrdB، نامحدودبالاتر بهتر استنسبت سیگنال به اعوجاج / سیگنال به نویز
mcddB، نامحدودپایین‌تر بهتر استاعوجاج mel-cepstral — فاصلهٔ پوششِ طیفی، یک سنجهٔ کلاسیک کیفیت TTS/VC
log_f0_rmseنامحدودپایین‌تر بهتر استخطای منحنی زیروبمی
lsd / msddBپایین‌تر بهتر استفاصلهٔ log-spectral / mel-spectral

توجه کنید جهت‌ها برعکس می‌شوند: STOI و خانوادهٔ SDR وقتی کیفیت بهتر است بالا می‌روند؛ MCD، خطای زیروبمی و فاصلهٔ طیفی پایین می‌آیند. اشتباه گرفتن آن‌ها هنگام خواندن یک جدول خطایی آسان است.

امتیازدهی به همان بازسنتزِ codec در برابر مبدأ تمیزش:

>>> s.score("facodec_aria.wav", ["stoi", "mcd", "si_sdr"], ref="source.wav")
{'stoi': 0.662, 'mcd': 10.46, 'si_sdr': -26.94}

‏STOI برابر ۰٫۶۶ روی مقیاسی از ۰ تا ۱ که ۱٫۰ یک تطبیق کامل است می‌گوید وضوح ضربهٔ واقعی خورده — این به‌وضوح پایین‌تر از چیزی است که یک ضبط سبک‌پردازش‌شده امتیاز می‌گرفت. یک SI-SDR تقریباً منفی ۲۷ دسی‌بل این را تأیید می‌کند: SI-SDR هرگاه انرژیِ اعوجاج بر سیگنال بچربد منفی می‌شود، و یک عدد منفیِ بزرگ به معنای تغییر ساختاریِ سنگین است، نه صرفاً نویزِ افزوده. MCD برابر ۱۰٫۴۶ دسی‌بل بالاست؛ سامانه‌های TTS منتشرشده‌ای که به‌وضوح مصنوعی اما همچنان از نظر گوینده یکدست به‌نظر می‌رسند معمولاً در رقم‌های تک‌رقمی می‌نشینند، پس ۱۰+ نشانگر رانشِ چشمگیرِ پوششِ طیفی میان بازسنتز و اصل است.

سنجه‌های مبتنی بر ASR: خواندن اعداد

پنج سنجهٔ متنی از یک هم‌ترازیِ Levenshtein میان یک رونوشت مرجع و یک فرضیه (آنچه صدا واقعاً به آن رونویسی شده) می‌آیند:

سنجهبازهجهتمعنا
wer≥ ۰ (معمولاً ۰ تا ۱، می‌تواند از ۱ فراتر رود)پایین‌تر بهتر استنرخ خطای واژه: جایگزینی‌ها + حذف‌ها + درج‌ها، تقسیم بر شمار واژه‌های مرجع
cer۰ تا ۱پایین‌تر بهتر استهمان ایده در سطح نویسه — بخشنده‌تر نسبت به عدم‌تطابق‌های جزئیِ هجی/توکن‌سازی
mer۰ تا ۱پایین‌تر بهتر استنرخ خطای تطابق
wil۰ تا ۱پایین‌تر بهتر استاطلاعات واژگانیِ ازدست‌رفته
wip۰ تا ۱بالاتر بهتر استاطلاعات واژگانیِ حفظ‌شده (1 − wil)

یک مثال کارشده: مرجع “the quick brown fox jumps over the lazy dog” در برابر فرضیهٔ “the quick brown fox jumped over a lazy dog” (یک جایگزینی، “jumps” ← “jumped”، یک حذفِ “the”):

>>> from speechonnxmetrics import asr
>>> from speechonnxmetrics.asr import BASIC
>>> asr.wer(reference, hypothesis, normalizer=BASIC)
0.222
>>> asr.cer(reference, hypothesis, normalizer=BASIC)
0.116

یک WER برابر ۰٫۲۲ یعنی تقریباً یک واژه از هر پنج تا اشتباه است — محسوس، ارزشِ گوش‌دادن دارد. CER روی همان جفت پایین‌تر است چون امتیازدهیِ سطح-نویسه یک جایگزینیِ یک‌واژه‌ای را به‌عنوان مشتی ویرایشِ نویسه‌ای درون یک رشتهٔ نویسه‌ایِ بسیار طولانی‌تر می‌بیند، نه یک توکن کاملاً ازدست‌رفته؛ CER و WER به پرسش‌های متفاوتی پاسخ می‌دهند و مستقیماً با هم قابل‌مقایسه نیستند. WER بالاتر از تقریباً ۰٫۳ تا ۰٫۴ روی گفتار طبیعی معمولاً یعنی سامانهٔ ASR، یا صدایی که رونویسی می‌کند، مشکلی واقعی دارد، نه یک خطای گرد کردن.

speechonnxmetrics هرگز متن را از طرف شما نرمال‌سازی نمی‌کند — یک مقایسهٔ خام حالت حروف و نشانه‌گذاری را به‌عنوان خطا می‌شمارد، که به‌ندرت چیزی است که وقتی تلفظ را امتیازدهی می‌کنید نه قالب‌بندیِ دقیق رونویسی، می‌خواهید. یک نرمال‌ساز را صراحتاً پاس دهید: BASIC حالت حروف را کوچک می‌کند و فاصله‌های سفید را جمع می‌کند، STRICT همچنین اختصارها را باز می‌کند و نشانه‌های نگارشی، نشانه‌گذاری و واژه‌های پرکننده را حذف می‌کند.

مهم‌ترین هشدار

هر عددِ MOS بدون‌مرجع در این کتابخانه یک پیش‌بینی از یک مدل است، نه اندازه‌گیریِ یک واقعیت. UTMOS، DNSMOS، SIGMOS و NISQA هر یک روی یک مجموعهٔ خاص از داده‌ی آزمون شنیداری، در زبان‌ها و شرایط ضبط خاص آموزش دیده‌اند. یک پیش‌بین که عمدتاً روی ضبط‌های استودیوییِ انگلیسی آموزش دیده می‌تواند زبانی را که هرگز در آموزش ندیده، لهجه‌ای را که پانل آموزشی‌اش هرگز رتبه‌بندی نکرده، یا شرایط ضبطی — صدای تلفن، یک اتاق پرنویز، یک میکروفون کم‌منبع — بیرون از توزیع آموزشی‌اش را غلط قضاوت کند. مدل دروغ نمی‌گوید؛ برون‌یابی می‌کند، و برون‌یابی از ورودی‌های ناآشنا جایی است که پیش‌بین‌های عصبی کمترین قابلیت‌اعتماد را دارند.

با یک MOS پیش‌بینی‌شده به‌عنوان شواهد رفتار کنید، نه به‌عنوان حقیقت زمینی. برای آنچه در آن خوب است قابل‌اعتماد است: گیر انداختن پس‌رفت‌های بزرگ، رتبه‌بندیِ چند نامزد در برابر هم، و پرچم‌گذاریِ اجرایی که نیاز به گوش‌دادنِ واقعیِ یک انسان دارد. جایگزینی برای یک پانل شنیداریِ واقعی نیست وقتی تصمیمی پرمخاطره است، و نباید حرف آخر دربارهٔ زبان یا شرایطی باشد که خودِ مدل زیربنایی برای قضاوت آن آموزش ندیده. گزارش چند پیش‌بین با هم، و رفتار با اختلاف‌نظر میانشان به‌عنوان محرکی برای گوش‌دادن به‌جای نویزی برای میانگین‌گیری، تدبیر عملی است.

چرا این چیزی است که یک مقایسه را قابل‌استفاده می‌کند

هیچ‌کدام از این‌ها به‌تنهایی سودمند نیست. سودمند می‌شود همان لحظه‌ای که چند موتور باید روی همان پایه مقایسه شوند — کدام موتور TTS، کدام موتور STT، کدام مدل بهبود به‌عنوان پیش‌فرض. کتابخانه‌های گفتاریِ خالصِ ONNX که speechonnxmetrics برای ارزیابیِ آن‌ها ساخته شد — TTS، ASR، رفع‌نویز، شبیه‌سازی صدا — مقایسه‌های به‌ازای-هر-موتور تولیدشده دقیقاً با سنجه‌های بالا را منتشر می‌کنند: MOS بدون‌مرجع برای سامانه‌های بدون حقیقت زمینی، سنجه‌های تهاجمی جایی که یک مرجع تمیز وجود دارد، WER/CER هرجا درستیِ رونوشت زیر سؤال است. این چیزی است که «این موتور را انتخاب کردیم» را به عددی تبدیل می‌کند که کس دیگری می‌تواند بررسی کند.

اگر پروژهٔ شما به ارزیابیِ یک زبان، یک موتور یا یک شرایط ضبط به این شیوه نیاز دارد و هنوز پوشش داده نشده، با ما تماس بگیرید یا به خدمات ما نگاه کنید.