كيف يعرف المساعد الصوتي أنك انتهيت من الكلام؟
ماهو End of Turn في تطبيقات المحادثة الصوتية
من أكثر التجارب المزعجة عند الحديث مع نماذج الذكاء الإصطناعي الصوتية عندما تتحدث عن شئ ما مثل: كنت عايز اخد رائيك في موضوع مهم و… تقوم ببعض الهمهمة او السكوت الخفيف فتجد ان النموذج بدا في مقاطعتك قبل ان تنهي الجملة.
تحديد الأدوار في الحديث : ليست هل انتهي الشخص من إصدار الصوت بل هل انتهي من فكرته؟ أم انه سيتابع بعد لحظات؟
مثلاً، إذا قلت:
“أريد أن أحجز طاولة لأربعة أشخاص…”
فالمساعد يجب أن ينتظر.
أما إذا قلت:
“أريد أن أحجز طاولة لأربعة أشخاص الساعة الثامنة.”
فهنا من الطبيعي أن يبدأ بالرد.
الفرق بين الحالتين لا يعتمد على الكلمات فقط. الإنسان يفهم من نبرة الصوت، وطول التوقف، والتنفس، وطريقة إنهاء الجملة، هل المتحدث انتهى أم لا.
بدون ذلك تصبح المحادثة غير طبيعية وسرعان ما تتوقف عن التحدث.
كيفية بناء هذا النوع من النماذج ؟
هناك أكثر من طريقة منها :
الإعتماد علي الصمت فقط
هذه أبسط طريقة: إذا لم يوجد صوت لفترة محددة، يفترض النظام أن المستخدم انتهى.
هي سهلة، لكنها تسبب مقاطعات كثيرة، خصوصاً في الكلام الطبيعي.
أمثلة : Vad Models
نموذج يعتمد علي فهم النص
يعمل النماذج هنا علي التفريغ الصوتي للكلام ويسال هل انتهي المستخدم من السؤال أم لا؟
لو كانت الإجابة نعم انتهي يبدا النموذج الاخر في الرد اما لو كانت لا لما ينتهي والجملة ليست مكتملة ينتظر حتي تكتمل الجملة.
هذه الطريقة سريعة وأسهل ولكنها ليست دقيقة بالقدر الكافي بسبب غياب نبرة الصوت وطريقة الحديث والهمهه في الحديث. مثلا لو قلت : عايز حاجه سقعه. بصيغة أمر فلقدت انتهيت من الجملة.
اما لو قلت عايز حاجه سقعه ااااا . فمازلت سوف احدد نوع هذا المشروب.
أمثلة : BertBasd, Small llm models
نموذج يعتمد علي الصوت
هذا النوع هو الأكثر دقة والأكثر تكلفة من ناحية التدريب و تكلفة التشغيل. يعتمد علي المحتوي الصوت (الكلام) ونبرة الصوت وانخفاضها في نهاية الجملة و طول الكلمة الأخيرة والتنفس والإيقاع بين الكلمات.
أمثلة : نماذج LiveKit V1
نموذج LiveKit v1 لاكتشاف نهاية الكلام
بعد أن فهمنا أن الصمت وحده لا يكفي، وأن فهم النص وحده لا يكفي أيضاً، نصل إلى نوع أقوى من النماذج: نموذج يستمع إلى الصوت نفسه.
أحد الأمثلة على هذا النوع هو LiveKit Turn Detector v1.
هذا النموذج يحاول أن يجيب على سؤال واحد:
هل المستخدم انتهى من دوره في الحديث، أم أنه فقط توقف لحظة وسيكمل؟
الفرق المهم بينه وبين النموذج المعتمد على النص هو أنه لا ينتظر تحويل الكلام إلى نص كامل ثم يقرر.
بدلاً من ذلك، يأخذ الصوت مباشرة ويحاول فهم:
- ما الذي يقوله المستخدم؟
- كيف يقوله؟
- هل نبرة صوته تشير إلى نهاية؟
- هل التوقف طبيعي أم يبدو كأنه تفكير أو تردد؟
- هل الإيقاع في آخر الجملة يوحي بأنه سيكمل؟
مثلاً تخيل أن المستخدم قال:
عايز أطلب بيتزا كبيرة…
في هذه اللحظة، النص وحده لا يكفي.
قد يكون المستخدم انتهى فعلاً، وقد يكون سيكمل بعد قليل:
عايز أطلب بيتزا كبيرة… ومعاها بطاطس.
الكلمات التي وصلت للنظام متشابهة في الحالتين.
لكن الإنسان يستطيع غالباً معرفة الفرق من طريقة النطق.
إذا كانت نبرة الصوت نازلة في النهاية، والكلمة الأخيرة انتهت بهدوء، فقد يكون الشخص انتهى.
أما إذا كانت النبرة ما زالت مرتفعة، أو يوجد تردد، أو مدّ في آخر كلمة، أو توقف قصير بطريقة غير طبيعية، فغالباً الشخص ما زال يكمل فكرته.
كيف يعمل LiveKit v1؟
يمكن أن نتخيله كأنه يستخدم جزئين في نفس الوقت:
جزء يفهم معنى الكلام
هذا الجزء يحاول فهم محتوى ما قاله المستخدم.
مثلاً:
كنت عايز أسألك عن…
الجملة هنا واضحة أنها غير مكتملة، حتى قبل التفكير في نبرة الصوت.
جزء يسمع طريقة الكلام
هذا الجزء يهتم بالأشياء التي لا تظهر في النص، مثل:
- نبرة الصوت
- ارتفاع أو انخفاض طبقة الصوت
- الإيقاع بين الكلمات
- طول آخر كلمة
- طريقة التوقف
- هل النهاية تبدو حاسمة أم مفتوحة
بعد ذلك يتم دمج معلومات الجزئين، ويخرج النموذج باحتمال:
هل هذه نهاية حقيقية للدور؟
لماذا هذا أفضل من نموذج النص؟
لأن نموذج النص يفقد جزءاً مهماً من الكلام عندما يحوله إلى كتابة.
انظر إلى المثالين:
عايز حاجة ساقعة.
و:
عايز حاجة ساقعة… اااا…
قد يكون النص الذي وصل إلى النموذج في لحظة معينة قريباً جداً في الحالتين.
لكن الصوت مختلف.
في الجملة الأولى، الشخص قد يكون قالها بنبرة نهائية وانتهى.
في الثانية، الهمهمة وطريقة المد تعني أن الشخص يفكر وسيكمل، مثلاً:
عايز حاجة ساقعة… اااا… عصير مانجا.
هنا نموذج صوتي مثل LiveKit v1 لديه فرصة أفضل لفهم أن الوقت ليس مناسباً للرد.
هل LiveKit v1 يعمل وحده؟
لا، هو جزء من نظام أكبر للمحادثة الصوتية.
بشكل مبسط، النظام يعمل كالتالي:
- يصل صوت المستخدم.
- نموذج VAD يكتشف هل يوجد كلام أو صمت.
- عند بداية الصمت، يبدأ نظام تحديد نهاية الدور في التقييم.
- LiveKit v1 يقرر: هل المستخدم انتهى أم لا؟
- إذا كان المستخدم انتهى، يتم إرسال الكلام إلى نموذج الذكاء الاصطناعي ليبدأ الرد.
- إذا لم ينته، ينتظر النظام حتى يصل كلام جديد أو يتأكد أن الدور انتهى.
إذن VAD يقول:
لا يوجد صوت الآن.
أما LiveKit v1 فيحاول أن يقول:
صحيح، لكن هل هذا الصمت يعني أن المستخدم انتهى فعلاً؟
![[Pasted image 20260828214126.png]]
كيف يعمل LiveKit v1 ونماذج EOU الصوتية؟
يمكن تخيل النموذج على أنه يحتوي على جزأين يعملان بالتوازي:
- جزء يفهم ماذا قال المستخدم.
- جزء يفهم كيف قال المستخدم كلامه.
ثم يتم دمج معلومات الجزأين لإخراج احتمال أن المستخدم انتهى من دوره في الحديث.
الجزء الذي يفهم الكلام والمعنى
الصوت يدخل إلى النموذج عبر الخطوات التالية:
Audio Input
صوت المستخدم الخام.Audio Encoder
يحول الصوت إلى تمثيلات رقمية (Audio FeaturesأوEmbeddings) يمكن للنموذج التعامل معها.Audio-to-LLM Adapter
يجهز تمثيلات الصوت بالشكل المناسب ليدخل إلى النموذج اللغوي.LLM Backbone
نموذج لغوي يفهم معنى الكلام والسياق.
مثلاً: هل الجملة مكتملة؟ أم تبدو مفتوحة ويُتوقع أن يكمل المستخدم؟
يمكن استخدام نموذج لغوي صغير مثل Qwen أو أي LLM مناسب، لكن LiveKit لم تعلن اسم النموذج الذي تستخدمه داخلياً.
يمكن ايضا إستخدام نموذج مثل Qwen3-ASR حيث انه يوجد بداخله Audio Encoder ويتيح التعامل المباشر مع التمثيلات الداخلية للصوت الذي يخرجه لإنشاء نموج EOU بشكل سريع وابسط.
الجزء الذي يفهم خصائص الصوت
هذا الجزء لا يهتم فقط بمعنى الكلمات، بل بطريقة نطقها.
- Acoustic Audio Encoder
يستخرج خصائص صوتية مثل:- نبرة الصوت (
Pitch) - شدة الصوت (
Energy) - الإيقاع (
Rhythm) - طول الكلمة الأخيرة
- التردد والهمهمة
- شكل التوقف قبل الصمت
- نبرة الصوت (
- Recurrent Neural Network (RNN)
تتابع تغيّر هذه الخصائص مع الزمن.
هذا مهم لأن النموذج لا يريد معرفة شكل آخر لحظة من الصوت فقط، بل يريد فهم ما حدث خلال آخر جزء من الجملة:
بداية الجملة → الكلمات الأخيرة → تغير النبرة → بداية الصمت
دمج النتائج واتخاذ القرار
بعد ذلك يتم دمج مخرجات الجزأين:
Semantic Features
+
Acoustic Features
↓
Fusion Layer
↓
Binary Classifier
↓
P(EOT)
الناتج هو احتمال مثل:
P(EOT) = 0.91
أي أن النموذج يعتقد بنسبة عالية أن المستخدم انتهى من دوره.
أما إذا كانت النتيجة:
P(EOT) = 0.18
فالنظام يرجح أن المستخدم ما زال يفكر أو سيتابع كلامه.
وأفضل تعديل على رسمك هو تغيير كلمة `المدج` إلى **الدمج**، وتسميته:
```text
Fusion Layer
ثم:
Binary Classifier
↓
P(EOT)
Binary Classifier مناسب هنا لأنه يحسم بين احتمالين:
EOT = المستخدم انتهى
Hold = المستخدم لم ينته بعد
هذا يجعل الرسم مرتبطاً مباشرة بمشكلة المقاطعة: إذا كانت P(EOT) منخفضة، ينتظر المساعد؛ وإذا ارتفعت بعد توقف الصوت، يبدأ تجهيز الرد.
ما الفرق بين v1 و v1-mini؟
يوجد إصداران:
- LiveKit v1: النسخة الأكبر والأعلى دقة. تعمل عبر LiveKit Cloud.
- LiveKit v1-mini: نسخة أصغر وأخف، يمكن تشغيلها محلياً على CPU.
النسخة الصغيرة تستخدم نفس الفكرة العامة، لكن تم تقليل حجمها وتسريعها لتناسب التشغيل المحلي. لذلك هي مناسبة للتجارب أو الأنظمة التي لا تريد إرسال الصوت إلى خدمة سحابية.