مواد پر جائیں
HA_

← تمام تحریریں

· 4 منٹ کا مطالعہ

تقریر کو اس کے ماخذ پر درست کریں

اردو ٹرانسکرپٹس سے فضول متن صاف کرنے والے فلٹر نے حقیقی گفتگو کو بھی کیوں حذف کر دیا، اور غلط ٹرانسکرپشن کا حل اس میں کیوں ہے کہ وائس ایجنٹ کیسے سنتا ہے، نہ کہ اس میں کہ وہ بعد میں متن کے ساتھ کیا کرتا ہے۔

voice-aiarchitecture

مشینی ترجمہ۔ اصل تحریر پڑھیں

VoxRange ایسے AI ایجنٹس چلاتا ہے جو اردو میں، اور اردو اور انگریزی کے اس ملے جلے انداز میں حقیقی فون کالز کا جواب دیتے ہیں جو لوگ واقعی بولتے ہیں۔ میں اس کا لیڈ آرکیٹیکٹ ہوں۔ یہ تحریر اس پائپ لائن کے سننے والے حصے میں ہماری ایک غلطی کے بارے میں ہے، اور اس اصول کے بارے میں جو میں نے اس سے اخذ کیا۔

علامت

اردو کالز پر speech-to-text اردو ٹرانسکرپٹس کے بیچ میں لاطینی رسم الخط کا بے ربط متن پیدا کرتا رہا۔ کم بینڈوڈتھ والی فون آڈیو، ملی جلی زبانیں اور نام پہلے ہی ٹرانسکرپشن کو مشکل بناتے ہیں، اور ان ٹکڑوں نے اسے مزید بگاڑ دیا: ٹرانسکرپٹ میں جو کچھ لکھا ہو، ایجنٹ اسی کا جواب دیتا ہے۔

واضح قدم یہ تھا کہ آؤٹ پٹ کو صاف کیا جائے۔ اگر کوئی ایجنٹ اردو کے لیے سیٹ ہو اور کوئی ٹکڑا لاطینی رسم الخط میں واپس آئے، تو ایجنٹ کے دیکھنے سے پہلے اسے ہٹا دیا جائے۔

فلٹر کیوں غلط تھا

فلٹر نے اس معنی میں کام کیا کہ فضول متن غائب ہو گیا۔ لیکن حقیقی گفتگو بھی غائب ہو گئی۔

کال کرنے والے ایک ہی رسم الخط تک محدود نہیں رہتے۔ بہت سی اردو لاطینی حروف میں رومن اردو کے طور پر لکھی جاتی ہے، اور روزمرہ کی بہت سی گفتگو کسی ایک لفظ یا پورے جملے کے لیے انگریزی میں چلی جاتی ہے۔ ایک فرضی مثال: "mera appointment confirm kar dein" ایک عام درخواست ہے، اور اس کا ہر لفظ لاطینی حروف میں حقیقی گفتگو ہے۔ لاطینی رسم الخط کا متن ہٹانے والا اصول اس جملے اور شور میں فرق نہیں کر سکتا، کیونکہ جب تک وہ چلتا ہے، پرکھنے کے لیے صرف رسم الخط بچتا ہے، اور مسئلہ رسم الخط نہیں ہے۔

ہم نے فلٹر واپس لے لیا۔ ایک محدود فلٹر برقرار رہا: ایسے رسم الخط جو ان کالز پر حقیقی گفتگو ہو ہی نہیں سکتے، جیسے سیریلک یا CJK حروف، اب بھی ہٹا دیے جاتے ہیں، کیونکہ انہیں ہٹانے سے کوئی حقیقی نقصان نہیں ہوتا۔

فضول متن دراصل کہاں سے آتا ہے

یہ بے ربط ٹکڑے سننے والے مرحلے کی خرابی کی علامت تھے، اس لیے حل بھی وہیں ہونا چاہیے:

  • گفتگو کے اختتام کی نشاندہی۔ وائس ایکٹیویٹی ڈیٹیکشن یہ طے کرتی ہے کہ کال کرنے والے نے کب بولنا بند کیا۔ اگر یہ فیصلہ بہت جلد ہو جائے تو بولنے کی باری ٹکڑوں میں کٹ جاتی ہے، اور کسی لفظ کا ٹکڑا بالکل اسی قسم کی آڈیو ہے جسے speech ماڈل پُراعتماد بے معنی متن میں بدل دیتا ہے۔
  • زبان کا تعین۔ ماڈل کو یہ بتانا کہ کس زبان کی توقع رکھے، بجائے اس کے کہ وہ ہر چھوٹی کلپ پر اندازہ لگائے، اسے شور کے کسی جھٹکے پر کسی اور زبان کی طرف بھٹکنے سے روکتا ہے۔
  • ذخیرۂ الفاظ۔ نام، مقامات اور شعبے کے وہ الفاظ جو ماڈل نے کبھی نہیں دیکھے، قریب قریب مگر غلط اندازوں کی صورت میں واپس آتے ہیں۔ ماڈل کو وہ الفاظ فراہم کرنا جو وہ سنے گا، اندازوں کی مرمت سے سستا ہے۔

ان میں سے ہر ایک اس چیز کو بدلتا ہے جو ماڈل سنتا ہے یا جس کی توقع رکھتا ہے۔ ان میں سے کوئی بھی کال کرنے والے کی کہی ہوئی کسی بات کو ضائع نہیں کرتا۔

متعلقہ سبق: سیٹنگز کا بھٹک جانا

گفتگو کے اختتام کی نشاندہی ایک قدر پر منحصر ہے: یہ فیصلہ کرنے سے پہلے کہ کال کرنے والے نے بات ختم کر لی ہے، کتنی دیر خاموشی کا انتظار کیا جائے۔ ہم نے پہلے کال کے مسائل کے بعد اسے ٹیون کیا تھا۔ بعد کی ایک کال پر یہ دوبارہ ایک جارحانہ قدر پر تھی، اور ایجنٹ کال کرنے والوں کی بات جملے کے بیچ میں کاٹ رہا تھا۔ وہ ٹکڑوں میں بٹی باریاں جو شروع میں خراب ٹرانسکرپٹس پیدا کرتی تھیں، وہ بھی لوٹ آئی تھیں۔

یہ قدر صرف ایک سرور کے environment میں موجود تھی۔ کوڈ یا اس کی تاریخ میں ٹیون شدہ قدر کہیں محفوظ نہیں تھی، اس لیے اسے بدلنے سے روکنے والا کچھ نہیں تھا۔ ایسی ٹیوننگ کی قدر کی جگہ ورژن شدہ کنفیگریشن میں ہے، اسے پڑھنے والے کوڈ کے ساتھ، اس نوٹ کے ساتھ کہ اسے یہ قدر کیوں دی گئی ہے:

# voice-runtime config, versioned with the code
# How long to wait in silence before ending the caller's turn.
# Too short cuts callers off and fragments transcripts.
END_OF_SPEECH_SILENCE_MS: <tuned value>

اسی کال نے ایک دوسری بات بھی سکھائی۔ کسی باری پر خاموشی کا وقفہ کئی مراحل کا مجموعہ ہوتا ہے: گفتگو کے اختتام کا انتظار، ٹرانسکرپشن، retrieval، LLM، اور speech synthesis۔ ان میں سے کچھ کا وقت ناپا جا رہا تھا اور ایک کا نہیں۔ جب تک کسی باری کے ہر مرحلے کی پیمائش نہ ہو، آپ یہ فیصلہ نہیں کر سکتے کہ کسے بہتر بنانا ہے، کیونکہ جس مرحلے کی آپ پیمائش نہیں کر رہے، آخرکار اسی کے بارے میں آپ اندازے لگا رہے ہوں گے۔

یہی چیز بنانے والے کو میرا مشورہ

  1. جب کوئی ماڈل فضول متن پیدا کرے تو اسے ہٹانے کا اصول لکھنے سے پہلے وہ مرحلہ تلاش کریں جس کی وجہ سے ایسا ہوا۔ آؤٹ پٹ فلٹرز وجوہات نہیں دیکھ سکتے۔
  2. صفائی کے کسی بھی اصول پر بھروسہ کرنے سے پہلے اسے حقیقی، بے ترتیب گفتگو پر آزمائیں، جس میں زبانوں کا ملا جلا استعمال بھی شامل ہو۔
  3. ٹیوننگ کی قدروں کو صرف سرور کے environment میں نہیں، بلکہ وجہ کے ساتھ ورژن شدہ کنفیگریشن میں رکھیں۔
  4. کسی بھی مرحلے کو بہتر بنانے سے پہلے باری کے ہر مرحلے کی پیمائش کریں۔