کاربر می‌گوید «پرداخت را انجام نده»؛ ASR فقط یک واژه را اشتباه می‌شنود، NLU همان Intent پرداخت را انتخاب می‌کند و سرویس مالی پاسخ ۲۰۰ می‌دهد. اگر تیم فقط WER کلی، دقت Intent یا سلامت API را ببیند، همه‌چیز سبز است؛ اما محصول دقیقاً کار خطرناک را انجام داده است. تست رابط کاربری صوتی (VUI) یعنی بررسی زنجیرهٔ کامل از صدا و زمینه تا تصمیم، اقدام، بازخورد و امکان اصلاح—نه فقط امتحان‌کردن چند جمله با میکروفن.

در این راهنما یک روش عملی می‌سازیم: Decision/Risk → Conversation contract → Corpus/Slices → Layered Oracle → Audio/Environment matrix → End-to-end task → Safety/Accessibility/Privacy → Production evidence → Release/rollback. مثال اصلی، دستیار صوتی فارسی برای پرداخت یک بازارگاه ایرانی است؛ همهٔ نام‌ها، داده‌ها و آمار مثال ساختگی‌اند.

پاسخ کوتاه: تست VUI چیست؟

  • اول Test object را مشخص کنید: Wake word/VAD، ضبط صوت، ASR، NLU، Dialog manager، API، TTS یا تجربهٔ End-to-end.
  • Intent، Entity، Negation، Reference و اقدام مورد انتظار را در Conversation contract نسخه‌دار کنید.
  • Corpus را از Population/Use context بسازید؛ «تنوع لهجه» بدون تعریف، نمونه و رضایت Test coverage نیست.
  • ورودی Text را برای منطق NLU، صوت کنترل‌شده را برای ASR و جلسهٔ کاربر را برای Task/repair جدا نگه دارید.
  • WER را با task success، critical semantic error، false accept/reject، repair و latency کنار هم بخوانید.
  • مبلغ، مقصد، حذف، خرید و سایر اقدام‌های برگشت‌ناپذیر را با Read-back/confirmation و idempotency تست کنید.
  • No input، No match، ASR error، NLU ambiguity، dependency failure و user correction یک failure واحد نیستند.
  • فارسی معیار، گونه‌های گفتاریِ در Scope، اعداد، نیم‌فاصله، نام خاص، کد/شماره و code-switch را Slice کنید.
  • مسیر غیرصوتی، transcript قابل‌بررسی، کنترل زمان و خروج امن را جزئی از محصول بدانید.
  • صدا و transcript می‌توانند دادهٔ شخصی/حساس باشند؛ جمع‌آوری، دسترسی، نگهداری و حذف را تست کنید.

Intent جست‌وجو و کلیدواژه‌ها

Intent اصلی اطلاعاتی/اجرایی است: «رابط کاربری صوتی را چگونه تست کنیم؟» کلیدواژهٔ اصلی تست رابط کاربری صوتی است. عبارت‌های مکمل: تست VUI، Voice User Interface Testing، تست دستیار صوتی فارسی، تست ASR، تست تشخیص گفتار، تست NLU، تست Intent و Entity، تست مکالمه، Conversation Testing، ساخت Test Corpus صوتی، محاسبه WER، تست لهجه فارسی، تست نویز صدا، تست TTS، Voice UX Testing، تست Voice Bot بانکی، تست امنیت دستیار صوتی، تست دسترس‌پذیری VUI و اتوماسیون تست صوتی.

این صفحه مالک آزمودن زنجیرهٔ Voice→Meaning→Dialogue→Action است. مبانی تست سیستم‌های AI/ML، طراحی مطالعه در راهنمای تست کاربردپذیری، معیارهای پژوهش در راهنمای Task Success و SUS و معیارهای فنی تست دسترس‌پذیری را تکرار نمی‌کند؛ اینجا آن‌ها را برای Interaction صوتی به یک Evidence chain متصل می‌کنیم.

VUI، ASR و Voice recognition را یکی نگیرید

واژهسؤالنمونه خروجیخطای رایج
Speech recognition / ASRچه واژه‌هایی گفته شد؟Transcript + confidence/alternativesبرابر دانستن با فهم Intent
Speaker/Voice recognitionچه کسی صحبت می‌کند؟Identity/verification scoreنامیدن هر ASR به‌عنوان biometric
NLUمنظور و Entity چیست؟Intent، slots، confidenceاستنتاج قطعی از Transcript ناقص
Dialog managementState بعدی چیست؟Prompt/action/repair/exitنادیده‌گرفتن context و history
TTSپاسخ چگونه شنیده می‌شود؟Audio + prosody/pronunciationبرابر دانستن Text درست با Audio قابل‌فهم
VUI/VUXآیا کاربر با این زنجیره به هدف امن می‌رسد؟Task/repair/trust/evidenceتقلیل تجربه به WER

W3C WAI نیز Speech recognition—تشخیص واژه برای Dictation یا رابط گفتاری—را از Voice/Speaker recognition برای تشخیص شخص جدا می‌کند. این صفحهٔ آموزشی، Standard انطباق VUI نیست؛ فقط واژگان را دقیق‌تر می‌کند.

نقشهٔ زنجیره: Failure را در لایهٔ درست پیدا کنید

User goal / language / ability / environment
Wake word or push-to-talk / microphone permission
Capture / echo cancellation / VAD / endpointing
Audio transport / codec / resampling / network
ASR transcript / alternatives / timestamps
Normalization / digits / names / profanity policy
NLU intent / entities / negation / confidence
Dialog state / memory / prompt / repair / confirmation
Authentication / authorization / policy / risk gate
Business API / idempotency / timeout / reconciliation
Response generation / localization / redaction
TTS / pronunciation / prosody / barge-in
Speaker / display / transcript / alternate channel
Telemetry / feedback / retention / deletion / audit

یک «No match» می‌تواند از میکروفن بسته، clipping، VAD زودهنگام، شبکه، مدل ASR، normalizer عدد، NLU، state منقضی یا Intent خارج از Scope آمده باشد. اولین لایهٔ Fail و آخرین لایهٔ Pass را ثبت کنید. آزمون متن→NLU خطای صوت را حذف می‌کند؛ آزمون audio→ASR منطق کسب‌وکار را ثابت نمی‌کند؛ E2E بدون observability نیز Root cause نمی‌دهد.

Voice Test Contract را پیش از Corpus بنویسید

Decision / user task / harm / non-goal
Population and excluded/out-of-scope groups
Locale, language varieties and code-switch policy
Device, microphone, channel, codec and environment
Conversation version / prompts / grammar / state model
ASR/NLU/TTS/provider/model/config versions
Intent, entity, negation and ambiguity semantics
Critical values and irreversible action policy
Reference transcript / annotation guide / adjudication
Corpus source / consent / license / representativeness
Slice definitions / minimum evidence / missingness
Oracle per layer / metric formulas / thresholds
No-input / no-match / low-confidence / system-error repair
Authentication / confirmation / cancel / undo / timeout
Latency phase budgets / load / dependency behavior
Privacy classification / access / retention / deletion
Pass / Fail / Inconclusive / Environment-invalid
Owner / reviewer / expiry / rollback / monitoring

Threshold عمومی برای WER، Intent confidence، silence timeout یا latency وجود ندارد. قرارداد باید Use case را بازتاب دهد: اشتباه در نام آهنگ با اشتباه در مبلغ یا دارو Risk یکسان ندارد. «فارسی» نیز Population نیست؛ کانال، منطقه، موقعیت، توانایی گفتاری، دستگاه و Task روی داده اثر دارند.

Risk first: پیش از Accuracy، Consequence را مدل کنید

Actionنمونه semantic errorاثرGuardrail قابل‌آزمون
اطلاعاتهوای شهر دیگرسردرگمینمایش/تکرار شهر + اصلاح
کنترل خانهخاموش‌کردن دستگاه اشتباهایمنی/هزینهScope، device name، state feedback، undo
پیامگیرندهٔ هم‌نامحریم خصوصیdisambiguation + recipient read-back
پرداختمبلغ/مقصد/نفی اشتباهزیان مالیstrong auth + amount/payee confirmation + idempotency
حذف/خریدIntent یا quantity اشتباهبرگشت‌ناپذیریreview، explicit confirm، cancel/undo
سلامت/خودرودستور/اطلاعات بحرانی اشتباهآسیب جسمیdomain authority، fail-safe، alternate channel؛ تست تخصصی

Risk score دلخواه را جای تحلیل نگذارید. سناریو، جمعیت متاثر، reversibility، detectability، authority و control را بنویسید. مسئول Product/Security/Legal/Domain باید Risk acceptance را انجام دهد؛ QA Evidence و Unknown را ارائه می‌کند.

Conversation State Model؛ فقط Happy path را ننویسید

IDLE → LISTENING → CAPTURED → INTERPRETED
INTERPRETED → NEEDS_SLOT → CONFIRM_CRITICAL → AUTHORIZED
AUTHORIZED → ACTION_PENDING → COMMITTED → REPORTED

Any listening state → NO_INPUT / BARGE_IN / CANCEL
Any interpretation state → NO_MATCH / AMBIGUOUS / CORRECTION
Any dependency state → TIMEOUT / RETRYABLE / UNKNOWN_COMMIT
Any user state → HELP / REPEAT / ALTERNATE_CHANNEL / EXIT

State، Event، Guard و Transitionهای معتبر/نامعتبر را با تکنیک تست انتقال حالت استخراج کنید. Context فقط «تبریز» در سؤال بعدی نیست؛ شامل user/session/device identity، زمان، slotهای تاییدشده، اقدام pending، retry و expiry نیز هست. Context یک کاربر یا session نباید به دیگری نشت کند.

Conversation Test Case چه فیلدهایی دارد؟

فیلدنمونهOracle
Pre-stateپرداخت draft، هنوز تایید نشدهstate snapshot
User utterance«نه، صد و بیست هزار تومن»audio + reference
Expected semanticsCORRECT_AMOUNT=1,200,000 IRRintent/entity/negation
Expected promptمبلغ canonical و گیرنده را بخواندmeaning + redaction
Forbidden actioncommit پیش از auth/confirmledger/command spy
Repairrepeat/edit/cancel/text pathreachable states
Evidenceartifact/model/state/trace IDscross-layer correlation
Privacyaudio retention off در synthetic CIstorage/access/delete logs

Expected prompt را word-for-word فقط وقتی Copy ثابت Contract است Assert کنید. برای variation مجاز، semantic requirements، prohibited claims، critical value، brevity و next-action clarity را بررسی کنید؛ snapshot دقیق متن ممکن است تغییر بی‌ضرر را شکننده کند.

Test Corpus را مثل محصول نسخه‌دار مدیریت کنید

Corpus ID / version / purpose / owner
Source: consented human, synthetic, replay, production-derived
License / consent scope / withdrawal / expiry
Audio hash / format / sample rate / channel / duration
Locale / language variety / code-switch / speech condition
Device / microphone / distance / environment / SNR method
Task / intent / entities / negation / criticality
Reference transcript / normalization / annotation version
Annotators / blind adjudication / disagreement
Split: development / validation / held-out / regression
Speaker/session separation and leakage controls
Slice labels / missing groups / prohibited inference
Expected layer outputs / tolerance / verdict
Encryption / access / retention / deletion evidence

یک فایل نمی‌تواند هم برای Prompt tuning، هم انتخاب threshold و هم ادعای Release بی‌طرفانه استفاده شود. Speaker و session را طوری Split کنید که صدای یک فرد میان Train و held-out نشت نکند. متن مصنوعی برای منطق و تغییرات ارزان مفید است، اما نمایندهٔ مکث، self-correction، clipping، اتاق و گفتار واقعی نیست.

Corpus فارسی: Slice را با Risk و جمعیت تعریف کنید

بُعدنمونهٔ فارسی/ایرانچیزی که ثبت شودهشدار
عدد/پول۱۲۰ هزار، صد و بیست، 120k، تومان/ریالspoken form + canonical IRRتبدیل واحد پنهان
نام خاصنام شخص، شهر، بانک، فروشگاهapproved lexicon/versionنام مشهور نمایندهٔ Tail نیست
گونهٔ گفتاریرسمی/محاوره‌ای و گونه‌های در Scopeself-described/context labelحدس هویت از صدا
Code-switch«سفارش Premium رو cancel کن»token/language policyیک زبان غالب کافی نیست
نفی/تصحیحنکن، نه اون، گفتم دویستsemantic critical labelWER کم اما harm زیاد
گفتارمکث، تکرار، stutter، سرعت/بلندی متفاوتconsented condition/contextبرچسب پزشکی بدون مجوز
تقویم/زمانامروز، پس‌فردا، نوروز، تاریخ شمسیUTC + Asia/Tehran + displayوابستگی به زمان اجرا
کانالموبایل، تماس، خودرو، اتاقcodec/device/noise/distanceلهجه را علت هر خطا ننامید

سن، جنسیت، قومیت، معلولیت، شهر یا لهجه را از روی صدا استنتاج نکنید. اگر تحلیل گروهی برای Harm/Reliability لازم است، Purpose، رضایت، تعریف self-report، حداقل نمونه، Unknown، دسترسی و non-use را با Privacy/Legal owner تصویب کنید. Slice کوچک را با رتبه‌بندی فرد یا ادعای جامعه تعمیم ندهید.

Reference Transcript خودش یک Oracle نیاز دارد

  • قاعدهٔ نیم‌فاصله، علائم، filler، تکرار، واژهٔ بریده و noise marker را پیشاپیش بنویسید.
  • اعداد گفتاری را هم raw و هم canonical نگه دارید؛ تبدیل «تومن» به IRR را در Reference پنهان نکنید.
  • کلمهٔ نامفهوم را حدس نزنید؛ Unknown/inaudible و بازهٔ زمانی ثبت کنید.
  • نمونه‌های بحرانی/مبهم را مستقل annotate و disagreement را adjudicate کنید.
  • Reference version و ابزار/Normalizer را همراه score نگه دارید؛ با تغییر قاعده، baseline را بی‌سر‌و‌صدا بازنویسی نکنید.
  • Annotation agreement کیفیت حقیقت را تضمین نمی‌کند؛ دو annotator می‌توانند یک Context را یکسان بد بفهمند.

WER چیست و چه چیزی را اندازه نمی‌گیرد؟

Word Error Rate معمولاً از فاصلهٔ ویرایشی واژه‌ای نسبت به Reference محاسبه می‌شود: WER = (Substitutions + Deletions + Insertions) / Reference words. راهنمای رسمی Microsoft برای ارزیابی Speech WER را معیار رایج Accuracy معرفی و روش مقایسه با transcript مرجع را توضیح می‌دهد؛ این مستند سرویس Azure است، نه Threshold عمومی Release یا معیار عدالت/UX.

WER می‌بیندWER به‌تنهایی نمی‌بیند
تعداد editهای واژه نسبت به Referenceاهمیت معنایی «بده/نده» یا رقم
Aggregate روی Corpus تعریف‌شدهTask، اقدام واقعی و consequence
اثر Tokenization/NormalizationIntent/Entity/Dialog correctness
Insertion/Deletion/SubstitutionCalibration confidence و repair quality
Comparison در نسخه/دادهٔ ثابتPopulation واقعی، representativeness و drift
خطای TranscriptTTS، latency، auth، idempotency و accessibility

آزمایش قابل‌بازتولید: WER بهتر، تصمیم خطرناک‌تر

برای نشان‌دادن محدودیت KPI تک‌عددی، یک اسکریپت Node.js بدون وابستگی روی شش عبارت ساختگی اجرا شد. Referenceها مجموعاً ۳۷ واژه دارند. دو عبارت بحرانی مربوط به نفی پرداخت و مبلغ‌اند؛ چهار عبارت کم‌ریسک با «لطفاً» شروع می‌شوند. مدل‌ها واقعی نیستند و Hypothesisها عمداً توسط نویسنده ساخته شده‌اند.

{"model":"modelA","utterances":6,"referenceWords":37,"edits":2,"corpusWER":5.41,"exactTaskSuccess":4,"criticalTaskSuccess":0,"criticalTaskTotal":2,"failedIds":["PAY_NEGATION","PAY_AMOUNT"]}
{"model":"modelB","utterances":6,"referenceWords":37,"edits":4,"corpusWER":10.81,"exactTaskSuccess":2,"criticalTaskSuccess":2,"criticalTaskTotal":2,"failedIds":["WEATHER","LIGHT","ORDER","MUSIC"]}

تفسیر محدود خروجی

مدل A با دو edit، WER برابر ۵٫۴۱٪ و چهار Exact match دارد؛ اما هر دو مورد بحرانی را Fail می‌کند: «نده» را «بده» و «دویست» را «بیست» می‌کند. مدل B با حذف «لطفاً» در چهار عبارت، WER بدتر ۱۰٫۸۱٪ و فقط دو Exact match دارد؛ با این حال هر دو عبارت بحرانی را حفظ می‌کند. بنابراین روی این دادهٔ دست‌ساز، رتبه‌بندی بر اساس WER با رتبه‌بندی Critical task success متفاوت است.

چه چیزی ثابت نشده است

این آزمایش ASR، فایل صوتی، لهجه، Noise، confidence، latency، مدل واقعی یا کاربر ندارد. Corpus کوچک، غیرنماینده و کاملاً نویسنده‌ساخته است؛ وزن همهٔ editها در WER برابر و Exact task oracle نیز عمدی است. خروجی هیچ نرخ قابل‌انتظار، برتری Vendor، Threshold، significance، causality، Fairness یا ایمنی محصول واقعی را ثابت نمی‌کند و برای Benchmark، خرید سرویس یا Release gate مناسب نیست.

درس اجرایی برای Metric contract

WER را حذف نکنید؛ آن را کنار Semantic critical error، Intent/Entity/Negation، Task outcome، Slice، repair و harm بخوانید. Corpus/version/normalization/denominator را منتشر کنید و اختلاف دو مدل را با held-out audio و uncertainty مناسب بررسی کنید. Aggregate بهتر نباید Hard guardrail بحرانی را جبران کند.

Metric Contract: هر عدد سؤال خودش را دارد

Metricصورت/مخرج لازمSlice ضروریسوءاستفاده
WERedits / reference wordstask/audio/language/channelمعادل UX یا Safety
Semantic critical errorcritical wrong meanings / critical utterancesnegation/amount/payee/actionتعریف «critical» پس از دیدن نتیجه
Intent recalltrue matched intent / reference intent casesintent + out-of-scopeحذف No-matchها
Entity exact/tolerantcorrect entities / annotated entitiestype/value/rangeمخلوط‌کردن نام و مبلغ
False acceptforbidden accepted / negative attemptsauth/risk/contextگزارش فقط success
Task successtasks meeting criteria / eligible attemptsindependent/unassisted/repairedتعریف success با API ۲۰۰
Repair successrecovered tasks / repair-eligible failuresno-input/no-match/correction/systemتکرار Prompt به‌عنوان recovery
Latencydistribution per named phasenetwork/device/load/taskفقط میانگین end-to-end
Abandonmentended-before-outcome / eligible sessionsstate/reason/unknownنسبت‌دادن علت به مدل

هر Metric باید Name، decision، population، window، numerator، denominator، exclusions، source، formula، uncertainty، threshold rationale، owner، countermetric و non-use داشته باشد. Confidence score خروجی مدل الزاماً Probability درست‌بودن نیست؛ calibration را روی Slice و Context واقعی بسنجید و low-confidence policy را مستقل تست کنید.

Oracle ماتریسی: برای هر لایه چه چیزی را Assert کنیم؟

لایهOracle نمونهEvidenceچیزی که ثابت نمی‌شود
Capture/VADشروع/پایان/عدم clipping در tolerancewaveform/timestamps/configمعنای درست
ASRreference/alternatives/critical tokensaudio+transcript+model IDIntent/action
Normalizerspoken→canonical mappingraw/normalized/diffدرست‌بودن reference
NLUintent/entity/negation/OOSlabeled text+scoresASR/audio
Dialoguestate/guard/prompt/repairtrace+state snapshotbackend commit
Policy/Authallowed/denied/step-up/consentpolicy version+auditامنیت کل سامانه
API/Actioncontract/idempotency/state reconciliationrequest/response/ledger/outboxکاربر فهمیده است
TTStext/pronunciation/audibility/redactionsource text+audio+voice IDTask completion
E2Euser goal + harm guardrailscorrelated trace + user observationRoot cause بدون layer evidence

برای Contractهای backend از راهنمای تست API استفاده کنید؛ VUI نباید منطق مالی یا Idempotency را دوباره تعریف کند. Stub برای خطایابی سریع مفید است، اما Fidelity سرویس واقعی، شبکه و Provider را اثبات نمی‌کند.

ماتریس صوت و محیط را Combinatorial بسازید

عاملسطوح نمونهروش کنترل
Device/miclow/mid phone، headset، car micمدل/OS/permission/gain
Distance/orientationنزدیک، دور، off-axisفاصله/زاویه/اتاق
Noiseسکوت، خیابان، خودرو، تلویزیون، چندگویندهsource/license/mix method
Signal qualityclean، clipping، packet loss، narrowbandcodec/sample rate/SNR method
Speechآرام/تند، مکث، self-correction، overlappedconsented labels
Languageرسمی/محاوره‌ای، code-switch، digits/namesScope/versioned lexicon
Networkstable، latency، loss، offlineprofile/replay/timestamps
Outputspeaker، Bluetooth، screen transcriptroute/volume/interruptions

تمام ضرب دکارتی معمولاً پرهزینه و بی‌معناست. بر اساس Risk، فراوانی و Interaction، ترکیب‌های نماینده را انتخاب کنید و موارد بحرانی را عمیق‌تر بپوشانید. SNR نیز بدون تعریف signal/noise segment و ابزار قابل‌مقایسه نیست. افزودن Noise مصنوعی به یک Clip تمیز، Lombard effect، reverberation واقعی یا رفتار کاربر در محیط شلوغ را بازسازی نمی‌کند.

ASR را با Audio واقعی و Counterfactual تست کنید

  • Clean anchor: یک نمونهٔ کنترل برای تشخیص regression پایه.
  • Critical token: نفی، رقم، واحد، نام گیرنده، جهت و action verb.
  • Minimal pair: «بده/نده»، «بیست/دویست» یا نام‌های نزدیک؛ بدون ادعای پوشش زبان.
  • Equivalent replay: codec/sample rate/channelهای مجاز با حفظ provenance.
  • Truncation/endpoint: ابتدا یا انتهای واژهٔ بحرانی بریده شود.
  • Interruption: notification، تماس، Bluetooth route change یا app background.
  • Out-of-scope: زبان/درخواست/کیفیت خارج از Contract باید امن Reject یا Redirect شود.
  • Metamorphic: تغییر Noise یا gain در محدوده‌ای که انتظار Relation تعریف شده، نه الزام Transcript یکسان عمومی.

Vendor confidence، alternatives و timestamp را Evidence خام نگه دارید، اما Threshold را با held-out data و cost خطا انتخاب کنید. Retryهای یک Clip روی یک سرویس لزوماً مستقل نیستند. قواعد Trial، Replay و verdict آماری برای سامانه‌های غیرقطعی در راهنمای تست سیستم‌های غیرقطعی آمده‌اند.

NLU: Intent، Entity، Negation و Out-of-scope

Test familyنمونهExpected
Paraphrase«پرداخت کن» / «صورت‌حساب رو تسویه کن»Intent در Context تعریف‌شده
Entity boundary«بانک شهر» در برابر شهر=تهرانType/value صحیح یا ambiguity
Negation«انجام نده» / «نمی‌خوام لغوش کنی»Scope صحیح negation
Correction«صد هزار—نه، صد و ده هزار»آخرین اصلاح معتبر + confirmation
Context«همون قبلی» بعد از چند Referentdisambiguate، نه حدس
Near-intent«موجودی» در برابر «گردش حساب»intent درست/clarification
OOS/adversarialدرخواست نامجاز یا Prompt-like contentpolicy-safe refusal/route
Empty/fillerمکث، «اِمم»، fragmentno-input/repair policy

NLU را ابتدا با Text مرجع تست کنید تا خطای مدل را از ASR جدا کنید، سپس Transcript واقعی و E2E را اضافه کنید. Intent accuracy کلی بدون confusion matrix، OOS، Slice و cost خطای asymmetric گمراه‌کننده است. Entity exact match برای شماره/مبلغ ممکن است لازم باشد؛ برای نام یا آدرس شاید normalized/tolerant oracle با Review لازم شود.

No Input، No Match و System error سه Repair متفاوت‌اند

Failureسیستم چه می‌داند؟Repair مفیدضدالگو
No inputپاسخ قابل‌استفاده دریافت نشدهrepeat/restate/options/exitسرزنش کاربر
No matchورودی هست، تفسیر کافی نیستcontextual clarification/examplesتکرار عین Prompt
Ambiguousچند interpretation معتبرسؤال تمایزبخش کوتاهانتخاب تصادفی
Low confidencescore پایین طبق مدلconfirm/alternate input طبق calibrationscore=truth
System errorدرک شد، dependency شکستشفافیت، status، next step، safe retry«نفهمیدم» دروغین
Unknown commitنتیجهٔ action نامعلومreconcile قبل از retryاجرای دوباره
User correctionکاربر تفسیر را رد کردهedit state + re-confirmحفظ slot قبلی

راهنمای Conversation Design گوگل دربارهٔ Error handling No Input، No Match و System error را جدا و Repair را context-specific توصیف می‌کند. اعداد تکرار و الگوی خروج آن برای محصول/پلتفرم خودش نوشته شده‌اند و Threshold جهانی نیستند؛ تیم باید بر اساس خطر، هزینه، کانال و پژوهش کاربر قرارداد خودش را بسازد.

Confirmation باید Semantic و Risk-based باشد

  • Implicit confirmation فقط برای اطلاعات کم‌خطر و قابل‌اصلاح: «هوای شیراز را بررسی می‌کنم».
  • Explicit confirmation برای مبلغ، مقصد، حذف، خرید و actionهای حساس: مقدار و گیرنده را شفاف بخواند.
  • Selective confirmation وقتی فقط یک Entity مشکوک/بحرانی است؛ بازخوانی همه‌چیز Cognitive load می‌سازد.
  • Confidence-triggered confirmation فقط اگر Score در Slice واقعی calibrated است و guardrail مستقل دارید.
  • Authentication با confirmation یکی نیست؛ «بله» هویت یا مجوز را اثبات نمی‌کند.
  • Prompt تایید نباید پاسخ را القا یا ارزش بحرانی را مبهم/سریع تلفظ کند.
  • Cancel، edit و repeat باید قبل از commit و در صورت امکان پس از آن قابل‌دسترسی باشند.

Confirmation بیشتر همیشه بهتر نیست؛ fatigue می‌تواند کاربر را به «بله» عادت دهد. نرخ confirmation، correction after confirmation، false accept، abandonment و task time را همراه Harm بسنجید. برای اقدام غیرقابل‌برگشت، UI مکمل یا عامل انسانی ممکن است لازم باشد.

Latency را به فازهای قابل‌اقدام بشکنید

T0 user speech starts
T1 endpoint detected / capture closed
T2 upload accepted
T3 first/final ASR result
T4 NLU/dialog decision
T5 dependency request/response
T6 response text ready
T7 first audio byte / playback starts
T8 playback ends / action feedback visible

Report distributions: p50 / p90 / p95 / p99 + errors + sample count
Slice by task, device, channel, network, provider, cache and load

«چند صد میلی‌ثانیه بیشتر گفتگو را خراب می‌کند» قانون عمومی نیست. Endpointing سریع ممکن است آخر واژه را ببرد؛ صبر طولانی نیز Turn-taking را کند می‌کند. Time budget را با Task و کاربر بسنجید و میانگین را جای Tail نگذارید. Streaming partial transcript، barge-in و TTS playback نیز perceived latency را تغییر می‌دهند.

TTS و خروجی صوتی: Text درست کافی نیست

  • تلفظ نام ایرانی، واژهٔ انگلیسی، acronym، عدد، تاریخ و مبلغ را با Lexicon/version آزمایش کنید.
  • ریال/تومان را صریح و Canonical value را در Evidence نگه دارید؛ «یک و دویست» مبهم است.
  • Prosody، سرعت، مکث و emphasis روی مقدار/گزینهٔ بحرانی را با کاربر ارزیابی کنید.
  • Text و Audio باید Secret، token، شماره کامل یا دادهٔ شخصی را در مکان عمومی افشا نکنند.
  • Barge-in نباید action commitشده را بدون وضعیت روشن رها کند.
  • Route change، Bluetooth disconnect، mute/volume و concurrent audio را تست کنید.
  • TTS fallback و Vendor switch باید Voice/locale/pronunciation regression داشته باشد.

دسترس‌پذیری: Voice-only راه‌حل همگانی نیست

Speech input برای بعضی کاربران ضروری است و برای بعضی دیگر—از جمله فرد ناشنوا، دارای گفتار atypical، در محیط پرصدا یا فاقد حریم مکانی—مانع است. W3C Natural Language Interface Accessibility User Requirements نیازهایی مانند روش‌های چندگانهٔ ورودی/خروجی، transcript، زمان کافی، help، correction، confirmation پیش از اقدام برگشت‌ناپذیر و راه جایگزین را گردآوری می‌کند. NAUR یک W3C Note و مجموعهٔ نیازهای کاربر است، نه Baseline انطباق یا جایگزین WCAG/پژوهش با افراد دارای معلولیت.

User need/contextFeature/OracleTest
نمی‌تواند صحبت کندtext/keyboard/switch pathهمان Task بدون Voice
نمی‌تواند Audio را بشنودsynchronized transcript/visual statuscomplete task silent
گفتار atypicalcorrection/training/alternate inputconsented representative study
حافظه/پردازش شناختیrepeat، pace، short choices، historycomprehension/error recovery
Blind/low visionspoken state + nonvisual controlsscreen reader/voice path
محیط عمومیprivacy-safe output + text switchno sensitive spoken disclosure
زمان/حرکت محدودadjustable timeout/no forced speedslow interaction and pause

با Keyboard/Screen reader و مسیرهای غیرصوتی نیز آزمون کنید و از افراد دارای نیازهای واقعی با رضایت و جبران منصفانه بازخورد بگیرید. VUI مکمل دسترس‌پذیری است، نه اثبات خودکار آن.

حریم خصوصی و دادهٔ صوتی را Test object کنید

Purpose / lawful-applicability owner / notice
Capture indicator / wake or push-to-talk / bystander handling
Raw audio / transcript / features / embeddings classification
ASR/TTS/provider/subprocessor/data-region flow
Consent or other approved basis / withdrawal / alternate path
Training/evaluation/analytics use boundaries
Minimization / redaction / encryption / access / export
Retention per artifact / legal hold / backup / deletion SLA
User access/correction/deletion evidence
Incident / breach / vendor exit / model-training opt-out
Prohibited inference and prohibited individual evaluation

NIST Privacy Framework یک ابزار داوطلبانه برای مدیریت ریسک حریم خصوصی سازمان است؛ قانون ایران یا پاسخ آماده برای Audio retention نیست. همچنین ضبط صدا لزوماً همان Biometric template نیست، ولی می‌تواند دادهٔ شخصی باشد و اگر برای شناسایی فنی Speaker پردازش شود، حساسیت و الزامات بیشتری پیدا می‌کند. Applicability، رضایت/مبنای پردازش و انتقال برون‌مرزی را مسئول حقوقی/حریم خصوصی تعیین کند.

  • چراغ/نشانهٔ Capture را در wake، timeout، background و crash تست کنید.
  • Mic permission denied/revoked، OS privacy toggle و browser/app lifecycle را پوشش دهید.
  • صدا/Transcript را از log، APM، analytics، prompt، Ticket و screenshot نشت ندهید.
  • Delete را در primary store، cache، search index، backup policy و Vendor path با Evidence کنترل کنید.
  • Test Corpus واقعی را برای آموزش مدل دوباره استفاده نکنید مگر Scope/رضایت/مجوز آن روشن باشد.
  • صدای همراه، کودک یا رهگذر را به‌عنوان «داده رایگان Production» جمع نکنید.
  • دادهٔ مصنوعی را برچسب بزنید؛ Synthetic به معنی private، unbiased یا representative نیست.

امنیت VUI: صدا مجوز اجرای فرمان نیست

Threat/FailureآزمونControl
Replay/recorded commandفایل/بلندگوی نزدیک در Scope مجازauth/context/risk gate؛ نه ادعای liveness عمومی
TV/other speaker activationbystander/media audiowake/push-to-talk/confirmation
Unauthorized usersame device/different sessionauthorization independent of ASR
Prompt/content injectionuntrusted content read aloudseparate data/instruction/policy
PII disclosurelocked/public moderedaction + alternate channel
Transcript/log tamperingtrace integrity/accesssigned/audited events where needed
Dependency spoof/timeoutfault injectionauthenticated API + reconcile
Model/provider changeunsigned/unapproved versionpin/allowlist/rollback

Speaker recognition یا «صدای آشنا» را به‌تنهایی عامل قوی برای پرداخت فرض نکنید. Threat model، authentication، authorization، rate limit، secret management و audit باید مستقل از Voice UX طراحی شوند. فایل صوتی مخرب را فقط در محیط و تجهیزات مجاز پخش کنید؛ تست فیزیکی/رادیویی خارج از Scope ممکن است به افراد و دستگاه‌های اطراف اثر بگذارد.

سناریوی ایرانی: دستیار صوتی پرداخت بازارگاه

یک بازارگاه خیالی به کاربر اجازه می‌دهد بگوید: «فاکتور سفارش ۷۲۱ رو با کیف پول پرداخت کن». سامانه باید مبلغ نمایش‌داده‌شده به تومان را به مقدار canonical ریال متصل کند، order و payment attempt را جدا بشناسد و قبل از commit، مبلغ/گیرنده را با احراز هویت مناسب تایید کند. این مثال توصیهٔ حقوقی/بانکی، طراحی Production یا ادعای پشتیبانی PSP نیست.

Voice Payment Contract — fictional
Order ID: ORD-721
Payment Attempt ID: PAY-721-03
Idempotency Key: voice:ORD-721:PAY-721-03
Displayed amount: ۱۲۰٬۰۰۰ تومان
Canonical amount: 1,200,000 IRR
User utterance raw: «فاکتور هفتصد و بیست و یک رو پرداخت کن»
Expected intent: PAY_ORDER
Expected entity: order_id=721
Critical entities: amount, merchant/payee, order, negation
Pre-commit: read-back + approved step-up authentication
Commit oracle: Payment + Order + Ledger + Outbox
Unknown commit: reconcile before any retry
Callback: duplicate, late and out-of-order safe
Privacy: synthetic audio; no PAN/CVV2/OTP/token/real phone
Time evidence: UTC instant + Asia/Tehran + Jalali display version

مسیر Happy و Confirmation

ASR باید Order ID را حفظ کند؛ NLU آن را به Intent پرداخت نگاشت کند؛ Backend مبلغ canonical را از منبع معتبر بخواند، نه از گفتار کاربر؛ Prompt بگوید «پرداخت ۱۲۰ هزار تومان برای سفارش ۷۲۱؟» و کاربر امکان تایید، اصلاح یا لغو داشته باشد. «بله» فقط در همان State و زمان معتبر مصرف شود. مبلغ در log با IRR و واحد نمایش صریح بماند.

Faultها و Oracle مالی

Faultانتظار VUIOracle مستقل
«نکن» به «بکن»هیچ commit؛ correction/confirmzero new payment attempt
Order هم‌نام/ناموجودdisambiguate یا Rejectorder ownership/state
Timeout قبل از commitretry امن/شفافPSP/Ledger no-commit
Timeout بعد از commitوضعیت نامعلوم؛ نه پرداخت دوبارهreconciliation/idempotency
User retryهمان نتیجه/وضعیتیک اثر مالی
Callback تکراری/دیرstate درست و پیام غیرمتناقضOrder/Ledger/Outbox
Auth منقضیstep-up یا خروج امنauthorization audit
TTS در مکان عمومیعدم افشای دادهٔ حساسapproved redaction policy

فارسی، رقم و زمان

«یک و دویست»، «صد و بیست تومن»، رقم‌های فارسی/عربی/لاتین، جداکنندهٔ هزارگان، «هفتصد و بیست و یک» و نام فروشنده باید Normalization صریح داشته باشند. IRR منبع canonical است و تومان فقط واحد نمایش مشتق‌شده و برچسب‌دار. timestamp پردازش با UTC و Asia/Tehran ثبت و تاریخ شمسی فقط Presentation است؛ «امروز» باید به Instant و منطقهٔ زمانی Resolve شود.

اتوماسیون تست VUI را به Laneهای پایدار تقسیم کنید

Laneورودیهدفسرعت/Fidelity
L0 Pure logicstructured intent/entity/statebusiness/policy/stateبسیار سریع/بدون Voice
L1 Text→NLUreference/paraphrase textintent/entity/OOSسریع/بدون ASR
L2 Audio→ASRversioned clipstranscript/critical tokensمیانی/provider-dependent
L3 Audio→Dialogue stubclips + fake backendrepair/state/promptقابل‌کنترل/Backend مصنوعی
L4 E2E sandboxaudio/device/networkaction/idempotency/TTSکند/Fidelity بیشتر
L5 Human studyrepresentative tasks/usersdiscoverability/repair/comprehensionدوره‌ای/نه CI
L6 Production observationconsented/minimized telemetrydrift/unknown harmواقعی/محدودیت attribution

منطق کاندید، هزینه و نگهداری را با راهنمای اتوماسیون تست بسنجید. Audio E2E را برای هر Paraphrase در هر Pull Request اجرا نکنید؛ لایهٔ ارزان‌تر را مالک feedback سریع کنید و مجموعهٔ نمایندهٔ پرریسک را در Sandbox/Device lane ببرید. تست کاربر را نمی‌توان به Playback تقلیل داد، اما این به معنی «اتوماسیون VUI ناممکن است» نیست.

ابزار را بر اساس Interface و Evidence انتخاب کنید

نیازقابلیت ابزارProof of ConceptExit risk
Corpus runneraudio/text batch + deterministic manifestsheld-out slice/reportفرمت بسته/Export
Conversation simulatorstate/events/stubs/faultsrepair/unknown commitplatform semantics
Device labmic/speaker/OS/route controlrepresentative matrixhardware/remote access
Annotationaudio spans/version/adjudicationPersian normalizationPII/access/vendor use
Metric pipelineWER/semantic/slice/uncertaintyrecompute from raw refsopaque aggregate
Observabilitycross-layer trace/redactionfirst-fail localizationsecret/audio retention
Provider emulatorquota/timeout/error/versiondocumented fidelityfalse confidence

فهرست Vendor «پیشرو» سریع منقضی می‌شود. ابزار را با supported locale، API/contract، reproducibility، data terms، region/access از ایران، قیمت ارزی، quota، export، self-host option و owner عملیاتی انتخاب کنید. Demo موفق روی انگلیسی یا صدای توسعه‌دهنده، Proof فارسی Production نیست.

تست کاربردپذیری مکالمه: Task، نه شخصیت خیالی

کاربر با «شخصیت» تست نمی‌شود؛ با Task، Context و محدودیت واقعی تعامل می‌کند. Persona و Tone ابزار طراحی‌اند، نه Oracle موفقیت. مطالعه باید بسنجد کاربر چه می‌خواهد، چه می‌گوید، پاسخ را چگونه می‌فهمد، خطا را چگونه تشخیص/اصلاح می‌کند و آیا مسیر جایگزین را پیدا می‌کند.

Voice Usability Session
Research question / task / risk / success criteria
Participant criteria / exclusions / recruitment / compensation
Device / room / noise / privacy / recording consent
Starting context without teaching exact command
Independent task success / assisted / repaired / abandoned
First utterance / turns / no-match / correction / help
Critical misunderstanding / confirmation comprehension
Time with phase/context—not speed as universal quality
Observed behavior versus participant interpretation
Post-task question / accessibility needs / alternate path
Facilitator interventions / technical failures / missing data
Debrief / withdrawal / redaction / retention / reporting limits

Discoverability را با دادن فهرست Commands پیش از Task نسنجید؛ Help/onboarding را جدا بررسی کنید. Completion با کمک Moderator را independent success گزارش نکنید. CSAT/SUS/SEQ در Scope خود مفیدند، اما تجربهٔ یک Turn، کل محصول یا Safety را ثابت نمی‌کنند.

Production telemetry بدون شنود بی‌مرز

SignalکاربردCountermetric/محدودیت
No-input/no-match by stateمحل frictiondevice/network/intent mix
Correction/repair pathrecoverabilitysilent abandonment
Critical confirmation rejectpotential misinterpretationuser changed mind
Unknown commit/reconcilefinancial safetybackend attribution
Latency distributiontail/provider drifttask/channel mix
Fallback/alternate channelaccess/escapenot automatically failure
Feedback/correction samplenew failure hypothesesselection/label/privacy bias
Model/config/version shiftchange correlationnot causal proof

Raw audio را «برای شاید بعداً» نگه ندارید. تا حد امکان event/semantic telemetry کمینه و pseudonymous بسازید؛ purpose، notice، opt-out/alternate route، access، retention و deletion را اجرا و تست کنید. Sampling باید Missingness و opt-out bias را آشکار کند. Conversation transcript را برای ارزیابی فرد، احساس، قومیت، سلامت، استخدام یا تبلیغ هدفمند استفاده نکنید مگر اختیار و مبنای صریح جداگانه‌ای وجود داشته باشد.

Drift و تغییر Provider را با Shadow Evidence کنترل کنید

  • Model/provider/config/prompt/lexicon/normalizer/corpus version را همراه هر نتیجه ثبت کنید.
  • Frozen regression anchors را از fresh representative sample جدا نگه دارید.
  • تغییر Corpus mix را از تغییر مدل تفکیک کنید؛ Aggregate shift ممکن است فقط mix shift باشد.
  • Challenger را روی data مجاز به‌صورت Shadow مقایسه کنید؛ output آن نباید action واقعی بسازد.
  • Critical guardrail و Slice regression را پیش از average improvement بررسی کنید.
  • Rollback artifact، routing، cache و schema compatibility را تمرین کنید.
  • تغییر Vendor terms، data region، retention و supported locale را Technical drift بدانید.
  • Threshold را بعد از دیدن Holdout فقط برای Pass کردن تغییر ندهید؛ decision trail نگه دارید.

Voice Failure Packet برای بازتولید و تصمیم

Task / expected outcome / harm / actual action
First failing layer / last passing layer
Conversation, policy and backend contract versions
Audio source/hash/access pointer—not unsafe attachment
Device/OS/mic/channel/codec/sample rate/network/environment
Reference/raw/normalized transcript + annotation version
ASR model/config/alternatives/confidence/timestamps
NLU intent/entities/negation/OOS + scores/version
Dialog state before/after + prompt/repair/confirmation
Auth/policy decision + API/idempotency/trace/job IDs
TTS source text/voice/version + output route
Order/payment/ledger/outbox/reconciliation evidence
Retry history preserving first attempt
Privacy/redaction/consent/retention classification
Minimal synthetic reproduction / unknowns / next discriminator
Owner / severity rationale / rollback / correction / expiry

فایل صدای واقعی کاربر را بدون دسترسی و ضرورت به Ticket عمومی نچسبانید. اگر امکان دارد minimal synthetic clip بسازید و Hash/محل امن اصل را ثبت کنید. Transcript تنها جای Audio را برای clipping/noise نمی‌گیرد و Audio تنها state/backend effect را نشان نمی‌دهد.

AI مولد در VUI: پاسخ آزاد، Oracle را سخت‌تر می‌کند

اگر پاسخ از LLM تولید می‌شود، علاوه بر زنجیرهٔ Voice باید grounding، tool call، instruction/data separation، hallucination، refusal، policy، prompt injection، output variability و versioning را آزمود. Transcript اشتباه می‌تواند Prompt را عوض کند و پاسخ درست‌نمای مدل را به Action خطرناک وصل کند. راهنمای پایه در مقالهٔ AI/ML مالک این حوزه است؛ VUI اینجا فقط boundary صوت/گفتگو/ابزار را اضافه می‌کند.

  • LLM نباید مبلغ/گیرندهٔ ناموجود را پر کند یا confirmation را دور بزند.
  • Tool call فقط از schema/policy/auth معتبر، نه از prose تولیدشده، عبور کند.
  • Response variation را با semantic/property/safety Oracle بسنجید، نه snapshot متن واحد.
  • Prompt، model، provider، temperature/tool schema/knowledge snapshot نسخه‌دار باشند.
  • صدای کاربر، Transcript، Secret و business data را به Provider بی‌مجوز نفرستید.
  • تولید صدای شخص یا تقلید Voice نیازمند Authority/consent و Threat model جداست.
  • Human-like persona نباید هویت انسانی، قطعیت یا capability کاذب القا کند.

Release Gate چندلایه و Rollback

GateEvidenceHard stop نمونهAuthority
Contractscope/risk/population/layerscritical action نامشخصProduct/Domain
Datacorpus/provenance/slices/holdoutبدون رضایت/مجوزData/Privacy
ModelWER+semantic+slice+calibrationcritical regressionML/QA
Conversationstate/repair/confirmation/helpمسیر cancel/alternate غایبDesign/Product
Actionauth/idempotency/reconcileduplicate/unknown commit unsafeSecurity/Service
Accessibilitymultimodal/user evidenceTask ضروری voice-only خارج از تصمیمAccessibility/Product
Operationstelemetry/alert/runbook/rollbackmodel/version ناشناختهOperations

همهٔ Gateها عدد یکسان یا Score ترکیبی نمی‌خواهند. یک WER خوب نمی‌تواند فقدان مجوز داده یا idempotency را جبران کند. Rollback ممکن است Model، Lexicon، Prompt، Feature flag، Provider routing یا خود قابلیت Voice action را برگرداند؛ مسیر Text/Manual fallback و وضعیت actionهای pending را حفظ کنید.

محدودیت‌های عملی ایران

  • پشتیبانی واقعی fa-IR، واژهٔ محاوره‌ای، نام ایرانی و رقم/پول را با Corpus خودتان بسنجید؛ برچسب «Persian supported» کافی نیست.
  • تحریم، region، VPN، account suspension، پرداخت ارزی، quota و API latency را در Vendor risk و exit plan وارد کنید.
  • Audio/Transcript را بدون بررسی data residency، subprocessor، training use، retention و deletion به Cloud نفرستید.
  • Offline/on-device یا Provider دوم را تنها پس از مقایسهٔ privacy، fidelity، footprint، update و support انتخاب کنید.
  • شبکهٔ موبایل، تماس narrowband، deviceهای رایج و Bluetooth خودرو را بر اساس Population واقعی اولویت دهید.
  • تقویم شمسی، Asia/Tehran، نوروز/تعطیلات، ریال/تومان و رقم‌های فارسی/عربی/لاتین را Version کنید.
  • Dialect/قومیت/سلامت را از Voice حدس نزنید و کارکنان را با Accent/WER فردی رتبه‌بندی نکنید.
  • برای حوزهٔ مالی/سلامت/خودرو، مقررات و مسئول تخصصی محلی را جای مقاله یا Vendor doc بنشانید.

برنامهٔ ۳۰روزهٔ Pilot

بازهکارخروجی
روز ۱–۵Task/Risk/Population/stack mapVoice Test Contract
روز ۶–۱۰state/intent/entity/repair modelConversation suite + oracles
روز ۱۱–۱۵consented/synthetic Corpus + annotationversioned splits/slices
روز ۱۶–۲۰text/ASR/audio/fault laneslayer baseline + Failure Pack
روز ۲۱–۲۵representative usability/accessibility taskstask/repair/comprehension evidence
روز ۲۶–۳۰shadow/sandbox gate + runbookAdopt/Adapt/Defer/Stop + expiry

Pilot را با یک Task محدود و قابل‌برگشت شروع کنید. اگر action مالی است، ابتدا فقط inquiry یا draft بسازید و commit را فعال نکنید. معیار موفقیت «Demo حرف زد» نیست؛ Evidence کافی برای تصمیم، Unknownهای ثبت‌شده، guardrail، owner و امکان Stop است.

۲۰ ضدالگوی تست رابط کاربری صوتی

  • برابر دانستن VUI با ASR یا NLU.
  • آزمون فقط با صدای توسعه‌دهندگان.
  • «لهجه‌های مختلف» بدون Population و Consent.
  • حدس قومیت، جنسیت، سن یا سلامت از صدا.
  • Corpus مشترک برای tuning و ادعای Release.
  • Reference transcript بدون راهنمای Normalization.
  • WER کلی به‌عنوان Quality/Safety/UX.
  • Intent accuracy بدون OOS/confusion/cost.
  • Confidence به‌عنوان Probability حقیقت.
  • فایل Noise مصنوعی به‌عنوان دنیای واقعی.
  • تکرار Clipها به‌عنوان نمونه‌های مستقل.
  • No input، No match و System error با یک Prompt.
  • Confirmation برای همه یا برای هیچ‌چیز.
  • Voice confirmation به‌عنوان Authentication.
  • Retry پرداخت پیش از Reconciliation.
  • API ۲۰۰ به‌عنوان Task success.
  • Voice-only به‌عنوان دسترس‌پذیری خودکار.
  • ضبط Production برای «مصرف آینده».
  • ابزار/Vendor محبوب بدون PoC فارسی و Exit.
  • رتبه‌بندی کارمند یا گروه با WER/Accent.

چک‌لیست ۲۰‌نقطه‌ای Release

  1. Task، Decision، Harm و non-goal مشخص‌اند.
  2. Population/Context/Excluded scope نسخه‌دار است.
  3. زنجیرهٔ Capture تا Action و owner هر لایه معلوم است.
  4. Conversation state/transition/expiry ثبت شده‌اند.
  5. Intent/Entity/Negation/OOS semantics صریح‌اند.
  6. Critical value/action و confirmation policy تعریف شده‌اند.
  7. Corpus source/consent/license/retention روشن است.
  8. Reference/normalization/annotation/adjudication نسخه‌دار است.
  9. Train/dev/held-out/regression و speaker leakage کنترل شده‌اند.
  10. Device/audio/noise/network matrix بر Risk بنا شده است.
  11. Text، ASR، dialogue، E2E و user lanes جدا هستند.
  12. WER کنار semantic/task/slice/repair metric خوانده می‌شود.
  13. Uncertainty، missingness و Inconclusive حفظ می‌شوند.
  14. No input/match/ambiguity/system/unknown commit repair دارند.
  15. Auth، authorization، idempotency و reconciliation مستقل‌اند.
  16. TTS/مبلغ/نام/Secret/route/barge-in تست شده‌اند.
  17. مسیر multimodal/alternate/cancel/undo قابل‌استفاده است.
  18. Privacy، access، vendor flow و deletion Evidence دارند.
  19. Production drift/alert/runbook/rollback تمرین شده‌اند.
  20. Decision، authority، dissent، expiry و بازبینی ثبت شده‌اند.

جمع‌بندی: Voice را از صدا تا اثر واقعی تست کنید

رابط صوتی یک «هم‌صحبت» جادویی یا یک مدل ASR تنها نیست؛ سامانه‌ای چندلایه است که صدا، زبان، state، سیاست، سرویس، خروجی و انسان را به هم وصل می‌کند. خطای یک واژه می‌تواند بی‌اثر یا بحرانی باشد و WER پایین می‌تواند Action غلط را پنهان کند.

از یک Task واقعی شروع کنید: Contract و Risk را بنویسید، Corpus فارسیِ مجاز و Sliceهای معنی‌دار بسازید، Oracle هر لایه را جدا کنید، Repair و مسیر غیرصوتی را با کاربر بیازمایید و اثر backend را با idempotency/reconciliation ثابت کنید. سپس Metricها را با محدودیتشان گزارش دهید و فقط با Evidence قابل‌بازبینی Release کنید.

پرسش‌های متداول دربارهٔ تست VUI

تفاوت تست VUI با تست ASR چیست؟

تست ASR بررسی می‌کند Audio چگونه به Transcript تبدیل می‌شود. تست VUI زنجیرهٔ کامل Capture، ASR، NLU، context/dialog، policy/auth، API/action، TTS، repair، accessibility و نتیجهٔ Task را می‌سنجد. ASR درست می‌تواند به NLU یا action غلط برسد؛ ASR دارای edit کوچک نیز ممکن است هنوز Task کم‌خطر را درست انجام دهد.

آیا WER مهم‌ترین معیار رابط صوتی است؟

خیر؛ «مهم‌ترین» معیار عمومی وجود ندارد. WER خطای واژه نسبت به Reference را می‌سنجد و برای مقایسهٔ ASR روی Corpus ثابت مفید است، اما اهمیت معنایی، Task، Harm، repair یا Action را وزن نمی‌کند. آن را کنار critical semantic error، Intent/Entity، Task success، Slice، latency و guardrail بخوانید.

آیا تست رابط صوتی را می‌توان کاملاً خودکار کرد؟

بخش‌های زیادی—منطق، Text→NLU، Corpus replay، Contract، fault injection و sandbox E2E—قابل‌اتوماسیون‌اند. اما discoverability، comprehension، repair، context واقعی، دسترس‌پذیری و رفتار محیطی به مطالعهٔ نماینده نیاز دارند. نسبت ثابت دستی/خودکار وجود ندارد؛ Risk، Fidelity، تکرارپذیری، هزینه و تصمیم تعیین می‌کنند.

برای تست لهجه‌های فارسی چه Corpusی لازم است؟

عدد جهانی برای Clip یا Speaker وجود ندارد. از Population، Task، کانال، خطر و Variation در Scope شروع کنید؛ consent/source/license، self-described labels، device/noise، speaker-disjoint split، held-out data، Reference/adjudication و missing groups را ثبت کنید. Sample کوچک را به کل لهجه یا جمعیت تعمیم ندهید.

برای پرداخت صوتی چه تست‌هایی حیاتی‌اند؟

نفی، مبلغ/واحد، گیرنده و Order را critical کنید؛ read-back و confirmation را از authentication جدا نگه دارید؛ authorization، timeout قبل/بعد commit، user retry، idempotency، duplicate/late callback، Ledger/Outbox/Reconciliation، cancel/undo، redaction و مسیر جایگزین را تست کنید. Voice به‌تنهایی مجوز انتقال پول نیست.

دیدگاهتان را بنویسید