مرحبا يا هبر. اسمي أليكسي راك ، أنا مطور مساعد صوت أليس في مكتب مينسك في ياندكس. حصلت على هذا المنصب من خلال الذهاب إلى هنا في نفس الفريق لمدة ثلاثة أشهر تدريب داخلي العام الماضي. سأخبرك عنها. إذا كنت ترغب في تجربتها بنفسك ، فإليك
رابط التدريب الداخلي لعام 2019 .

كيف حصلت على تسوية
أنا طالب في السنة الرابعة بجامعة BSU ، في عام 2018 تخرجت من كلية تحليل البيانات ، أعيش وأعيش في مينسك.
أولاً ، تلقيت ، مثل خريجي SHAD الآخرين ، رابطًا للتدريب الداخلي في عام 2018. في غضون أسبوع بعد إرسال الاستبيان ، كان من الضروري تخصيص وقت ، 6 ساعات متتالية ، لإكمال المسابقة عبر الإنترنت. احتوت على مهام حول نظرية الاحتمالات ، القدرة على الكود ، للوصول إلى خوارزميات. كان من الممكن كتابة الكود باللغة التي تعرف بها كيف. كتبت عدة مهام في لغة C ++ ، والعديد منها في Python ، لقد اخترت اللغة اعتمادًا على سهولة الاستخدام لمهمة معينة.
عندما ترسل قرارًا ، يصل الحكم على الفور ، وبعد ذلك يمكن حل المهمة مرة أخرى للحصول على إجابة أكثر دقة. استغرق الأمر ساعتين لإكمال جميع المهام ، ولم أحل بعض المشاكل في المحاولة الأولى.
بعد بضعة أيام ، اتصل بي المجندون وطالبوا بإجراء مقابلة وجهاً لوجه في مكتب مينسك. كان الأمر مع أليكسي كولسوف - رئيس فريق النماذج الصوتية والقياسات الحيوية ، حيث كان علي العمل. تتألف المقابلة من حل المشكلات على قطعة من الورق أو على لوحة والإجابة على أسئلة حول نظرية الاحتمالات والخوارزميات والتعلم الآلي. أعتقد أن خلفية برمجة Olympiad ستسمح لي بالتعامل مع المسابقة عبر الإنترنت ، حتى لو لم أدرس في SHAD ، ولكن في المقابلة ، كانت تجربة ShAD مفيدة لي حقًا.
بعد بضعة أيام ، عُقد الاجتماع الثاني ، حيث طُلب مني مهمتين أخريين بشأن معرفة الخوارزميات: الاحماء والأساسية. مع كل مهمة ، كانت مثل هذه: اقترحت حلاً ، وأجبت على العديد من الأسئلة حول هذا الحل ، ثم كتبت الكود على قطعة من الورق.
بعد بضعة أيام ، أُبلغت أنه تم قبولي للتدريب. كان من المفترض أن تستمر ثلاثة أشهر كاملة (نتيجة لذلك ، حدث ذلك). لم يعدوا بالتحول إلى منصب دائم ، لكنهم قالوا إن هذا الخيار ممكن.
الابتداء
في اليوم الأول ، بعد حل المشكلات التنظيمية وحصلت على كمبيوتر محمول ، ذهبت لتناول الغداء مع زملائي. تحدثنا ، ثم جمعت مستودعًا للفريق وتولينا المهمة الأولى - تجميع برنامج نصي بسيط من Python لبدء تشغيل برنامج تم الانتهاء منه بالفعل في عدة خيوط ، وبالتالي تسريع تنفيذه. في عملية إنشاء البرنامج النصي ، تعرفت على نظام مراجعة التعليمات البرمجية - عندما يتحقق لاعبون آخرون في الفريق من الكود. مع العلم أن أقرب زملائك سيتعاملون معه أولاً ، وفي المستقبل مع مطورين آخرين ، تحاول الكتابة بشكل أكثر وضوحًا. في برمجة olympiad ، كل شيء مختلف إلى حد ما: السرعة التي تتعامل بها مع البرنامج مهمة ، وعلى الأرجح لن تحتاج حتى إلى النظر إلى ما كتبته. من ناحية أخرى ، عندما اضطررت إلى مواجهة موقف ما قبل Yandex بأنه لا يزال يتعين علي قراءة الكود ، حاولت أيضًا أن أوضحه أكثر أو أقل.
خلال فترة التدريب الداخلي ، قمت بحل العديد من المشكلات المشابهة لهذا البرنامج النصي ، لكن قضيت وقتي الرئيسية في مشروع أكبر بكثير - وحدة فك ترميز جديدة لبرنامج نصاب أليس.
من أجل أجهزة وتطبيقات Yandex حيث يمكن استدعاء المساعد عن طريق الصوت ، كل شيء يعمل كما يتوقع المستخدم ، تحتاج إلى نصاب عالي الجودة - آلية لتنشيط الصوت. في أغلب الأحيان ، تحتوي عبارة التنشيط (التي تحتاج إلى نطقها لإطلاق Alice) على كلمة "Alice" نفسها.
يتضمن Spotter إعداد ميزات (ميزات للتعلم الآلي) ، وشبكة عصبية وجهاز فك التشفير.
فك السابقة
عملت النسخة السابقة من وحدة فك الترميز عن طريق معالجة متجهات الاحتمالات. هناك نموذج صوتي - شبكة عصبية ، والتي تُرجع في كل إطار (جزء من الكلام مدة 10-20 مللي ثانية) الاحتمال الواضح الآن. يمكن أن تتداخل الإطارات. احتوت وحدة فك الترميز على مصفوفة بها احتمالات لآخر 100 إطار تم "سماعها" بواسطة الجهاز. يتوافق صوت كل حرف مع متجه معين من الاحتمالات. في متجه الرسالة A ، عثرت الخوارزمية على العنصر ذي الاحتمال الأعلى ، وبعد ذلك نظرت إلى الجزء الأيمن فقط من المصفوفة بالنسبة إلى هذا العنصر. ثم تكررت العملية للحروف L و I و C و A - في كل مرة يتم فيها "قطع" المصفوفة بواسطة العنصر الموجود. أصوات A في بداية الكلمة ونهايتها مختلفة فعليًا - عادةً ما تسمى الثانية منها Shva ، تبدو مثل A و E و O في نفس الوقت.
إذا تبين أن الاحتمال النهائي أكبر من قيمة العتبة ، فاعتبرت الخوارزمية أن الكلمة تحدث بالفعل وتم تنشيط Alice للمستخدم.

أدى مثل هذا المخطط إلى حقيقة أن المساعد كان يعمل في بعض الأحيان بشكل تلقائي ليس فقط عندما قال الناس "أليس" ، ولكن أيضًا عندما سمع كلمات أخرى ، على سبيل المثال ، "ألكساندر". تتبع الأصوات في الجزء الأول من هذه الكلمة ("Alex") بنفس الترتيب وتتزامن بشكل أساسي مع الأصوات في كلمة "Alice". الفرق هو فقط في الحروف E و K ، ولكن E في صوته قريب جدًا من I ، ولم تأخذ الخوارزمية في الاعتبار وجود الحرف K.

من الناحية النظرية ، يمكنك البحث في الكلمة التي ألقيت ليس فقط عن كلمة "Alice" ، ولكن أيضًا كلمات متشابهة. لا يوجد الكثير منهم: "ألكساندر" ، "أليكسا" ، "اعتقل" ، "سلالم" ، "أريستارخوس". إذا اعتقدت الخوارزمية أن المستخدم الذي لديه احتمال كبير قال أحدهم ، فسيكون من الممكن حظر التنشيط ، بغض النظر عن نتيجة وحدة فك التشفير الرئيسية.
ومع ذلك ، يجب أن يعمل التنشيط الصوتي حتى بدون الإنترنت. لذلك ، وحدة فك الترميز هي آلية محلية. إنه يعمل بفضل شبكة عصبية تعمل في كل مرة مباشرةً على جهاز المستخدم (على سبيل المثال ، على الهاتف) ، دون الاتصال بخوادم Yandex. وبما أن كل شيء يحدث محليًا ، فإن أداء (نفس الهاتف مقارنةً بمركز البيانات بأكمله) يترك الكثير مما هو مرغوب فيه. لا يعني الاعتراف بكلمة "Alice" فقط تعقيد عمل هذه الشبكة العصبية الصغيرة وتجاوز حدود الأداء. سيبدأ التنشيط في العمل ببطء أكبر ، وسوف يستجيب المساعد بتأخير طويل.
وهناك حاجة إلى فك الرموز مختلفة اختلافا جوهريا. اقترح الزملاء أن أطبق فكرة نموذج Hidden Markov ، HMM: في بداية فترة التدريب ، تم وصفها جيدًا من قبل المجتمع ، وكذلك وجدت تطبيقًا في مساعد Alexa في Amazon.
جديد HMM فك
تقوم وحدة فك الترميز HMM بإنشاء رسم بياني يتكون من 6 رؤوس: واحد لكل صوت في كلمة "Alice" ، بالإضافة إلى واحد لكل الأصوات الأخرى - خطاب أو ضجيج آخر. يتم تقدير احتمالات التحولات بين القمم على عينة من الكلام المسجل والمشروح. لكل صوت يسمع ، يتم اعتبار 6 احتمالات: تتزامن مع كل من الأحرف الخمسة والرأس السادس (أي ، مع أي صوت آخر غير تلك الموجودة في كلمة "أليس"). إذا قال المستخدم "ألكساندر" ، فسوف تقع وحدة فك الترميز في K: احتمال أن يكون الصوت المنطوق ليس جزءًا من عبارة التنشيط كبيرًا جدًا ، ولن يعمل المساعد.

في المستقبل القريب ، ستكون هذه التغييرات متاحة لجميع مستخدمي مكتبة Alice و SpeechKit.
الانتهاء من التدريب والانتقال إلى وظيفة دائمة
من ثلاثة أشهر من التدريب ، استغرق الأمر مني شهرًا ونصفًا لكتابة وحدة فك ترميز HMM. في نهاية هذا الشهر ونصف الشهر ، أخبرني المدير أن الانتقال إلى منصب دائم وعقد دائم سيكون ممكنًا (على الرغم من أنني غير مضمون) إذا واصلت العمل بشكل منتج. في الوقت نفسه تقريبًا ، قضيت إجازة لمدة أسبوعين للذهاب إلى معسكر برمجة أوليمبياد. بعد العودة ، بدأت مهمة جديدة - تدريب المتتبعين على أجهزة مختلفة: Yandex.Phone ، كمبيوتر داخلي مع Yandex.Auto وغيرها.
بعد أسبوعين ، أي قبل شهر تقريبًا من انتهاء فترة التدريب ، أجريت أول مقابلة لي حول منصب دائم ، وبعد بضعة أيام - الثانية ، الأخيرة. تحدثت مع قادة الفرق ذات الصلة. في أول المقابلات ، سُئلت أسئلة نظرية: حول التعلم الآلي والشبكات العصبية والانحدار اللوجستي وطرق التحسين. بالإضافة إلى ذلك ، سألوا عن التنظيم ، أي عن تقليل درجة إعادة التدريب لخوارزمية معينة وعن الخوارزميات التي تطبق عليها طرق التنظيم. كانت المقابلة الثانية عملية: تحدثنا على سكايب مع زميل من موسكو ، وفي أثناء ذلك كتبت الرمز في محرر بسيط على الإنترنت.
بناءً على مبادرتي الخاصة ، لم أحصل على وظيفة بدوام كامل ، لكن في الحقيقة - لم أكمل دراستي في جامعة BSU بعد. في وضع ثابت ، أشارك أيضًا في التحديد التلقائي لقيم العتبة وغيرها من المعلمات الفائقة. في كل لحظة من الزمن ، يحصل النظام على احتمالية تحدث الكلمة الرئيسية "Alice". يقارن المصنف النهائي هذا الاحتمال بقيمة عتبة ، وإذا تم التغلب على العتبة ، يقوم بتنشيط Alice. في السابق ، تم تحديد الحد الأدنى من قبل المطورين ، وتتمثل المهمة الحالية في معرفة كيفية القيام بذلك تلقائيًا.
لذا وصلت إلى ياندكس ، احتفظت بمكاني في فريق أليس.