نتحدث غالبًا عن التقنيات والمكتبات التي نشأت وشكلت في ياندكس. في الواقع ، نحن على الأقل نطبق ونطور حلول الطرف الثالث.
اليوم سأخبر مجتمع هبر بأحد هذه الأمثلة. ستعرف لماذا علمنا شبكة BERT العصبية للعثور على الأخطاء المطبعية في عناوين الأخبار ، ولم تستخدم النموذج الجاهز ، ولماذا لا يمكنك أخذ وتشغيل BERT على عدة بطاقات فيديو ، وكيف استخدمنا الميزة الرئيسية لهذه التكنولوجيا - آلية الانتباه.

مهمة
Yandex.News هي خدمة تجمع الأخبار من المنشورات المتصلة بنا. هذه ليست فقط أخبار وسائل الإعلام الأكثر قراءةً واقتباسًا على الصفحة الرئيسية ، بل هي أيضًا أقسام
مواضيعية أو حتى اختيارات شخصية من جميع المنشورات. في أي حال ، فهذه هي الآلاف من المواقع وملايين العناوين ، والتي يجب على الماكينة تشكيلها كل بضع دقائق.
إنه الجهاز ، لأننا لا نتدخل أبدًا في صورة اليوم: لا نضيف أخبارًا هناك يدويًا ، ولا نحذفها من هناك (بغض النظر عن مدى رغبتنا في ذلك) ، فإننا لا نقوم بتحرير العناوين الرئيسية. حول هذا وقد تم بالفعل كسر العديد من النسخ. النهج الخوارزمي بالكامل له إيجابيات وسلبيات. شيء يمكننا تحسينه مع التكنولوجيا ، لا شيء. حتى إذا كانت هناك أخطاء إملائية أو أخطاء مطبعية في العناوين ، فنحن لا نصححها. لقد أضفنا favicons من المنشورات إلى العناوين الرئيسية بحيث يكون من الواضح من أين تأتي الأخبار. ساعد هذا جزئيًا ، لكننا لم نتعايش مع الأخطاء وبدأنا في البحث عن طريقة للتخلص منها دون إجراء تغييرات على النص.
إذا كان من المستحيل تصحيح الخطأ ، فيمكنك تدريب الجهاز للعثور على رؤوس لا تلائم الجزء العلوي بسبب الأخطاء. علاوة على ذلك ، تخصص ياندكس في التشكل الروسي منذ الوقت الذي لم يخترع فيه الاسم بعد. يبدو أننا نأخذ شبكة عصبية - وهذه النقطة في القبعة.
الأدوات
Yandex لديها تقنية
سبيلر للعثور على الأخطاء وإصلاحها. بفضل
مكتبة التعلم الآلي
CatBoost ، يمكن لـ Speller فك تشفير الكلمات غير
المعروفة ("الصفات" → "زملاء الدراسة") وأخذ السياق في الاعتبار عند البحث عن الأخطاء المطبعية ("الموسيقى المفقودة" → "تنزيل الموسيقى"). قد يبدو أن سبيلر مثالي لمهمتنا ، لكن لا.
لقد تمت بالفعل زيادة دقة speller (المعروفة داخليًا باسم الوصي على البحث) على مستوى البنية لحل مهمة مختلفة تمامًا: لمساعدة المستخدمين على استعادة نموذج الطلب الصحيح. في البحث ، ليس من المهم تحديد ما إذا كانت الحالة قد تم تحديدها بشكل صحيح ، أو تم كتابة حرف كبير أو فاصلة. هناك ، من الأهم بالنسبة إلى استعلام البحث "Haminguel" أن يخمن أن الشخص قد وضع في الاعتبار Hemingway.
الأخطاء في العناوين الرئيسية يرتكبها أشخاص يعرفون القراءة والكتابة نسبياً ولا يحتمل أن يكتبوا هاملويل. لكن الموافقة غير الصحيحة ("تأخرت الرحلة") ، والكلمات المفقودة ("الشاب جرب السيارة") ورسائل الأحرف الكبيرة ("رئيس البنك") أمر شائع. أخيرًا ، هناك جملة صحيحة رسميًا "سأصلح غوركي ستريت في بسكوف" ، وهو أمر لن يتمسك به الوصي العادي (حسناً ، ماذا لو كان هذا وعدًا من المؤلف؟) ، لكن من الواضح أن هذا عنوان أخبار مدلل. بالإضافة إلى ذلك ، لم تكن المهمة في الأخبار هي نفسها في البحث: ليس لتصحيح الأخطاء المطبعية والأخطاء ، ولكن للكشف عنها.
كان لدينا خيارات أخرى ، على سبيل المثال ، النماذج المستندة إلى DSSM (إذا كانت مثيرة للاهتمام ، تحدثنا لفترة وجيزة عن هذا النهج في
منشور حول
خوارزمية Palekh ) ، ولكن كان لها أيضًا قيود. على سبيل المثال ، لم يتم أخذ ترتيب الكلمات في الاعتبار تمامًا.
بشكل عام ، كانت الأدوات الجاهزة إما غير مناسبة لمهمتنا ، أو كانت محدودة. لذلك ، تحتاج إلى إنشاء نموذج خاص بك - لتدريب النموذج الخاص بك. وهذا سبب وجيه للعمل مع تقنية بيرت ، التي أصبحت متاحة للمطورين في عام 2018 وأظهرت نتائج رائعة.
تقديم بيرت
تكمن المشكلة الرئيسية لمشكلات معالجة اللغة الطبيعية الحديثة في إيجاد أمثلة كافية تم تمييزها بواسطة أشخاص لتدريب شبكة عصبية. إذا كنت بحاجة إلى نمو جيد ، فيجب أن تكون عينة التدريب كبيرة جدًا - ملايين ومليارات الأمثلة. في الوقت نفسه ، هناك العديد من المهام في البرمجة اللغوية العصبية وكلها مختلفة. يعد جمع البيانات بأحجام مماثلة لكل مهمة طويلًا ومكلفًا وغالبًا ما يكون مستحيلًا. حتى بالنسبة لأكبر الشركات في العالم.
ولكن هناك خيار للتغلب على هذه المشكلة - بمساعدة التدريب على مرحلتين. في البداية ، يتم تعليم الشبكة العصبية بنية لغوية لفترة طويلة ومكلفة على مجموعة ضخمة من المليارات من الكلمات (هذا تدريب سابق). ثم يتم ربط الشبكة بسرعة وبتكلفة منخفضة لمهمة محددة - على سبيل المثال ، لتقسيم المراجعات إلى جيدة وسيئة (وهذا هو صقل). ما يكفي من حوالي 10 آلاف الأمثلة ملحوظ في
Tolok .
تعتمد تقنية BERT (تمثيلات التشفير ثنائية الاتجاه من المحولات) على هذه الفكرة. الفكرة نفسها ليست جديدة وتم تطبيقها من قبل ، لكن هناك فرق كبير. Transformer هو بنية الشبكة العصبية التي تسمح لك بمراعاة السياق بأكمله في وقت واحد ، بما في ذلك الطرف الآخر من الجملة ودوران المشاركة في مكان ما في الوسط. وهذا هو اختلافها عن البنى العصرية السابقة ، والتي أخذت في الاعتبار السياق. على سبيل المثال ، تحتوي الشبكة العصبية لـ LSTM على طول سياق لعشرات الكلمات في أحسن الأحوال ، وهنا 200 كلمة.
على
GitHub ، تتوفر شفرة المصدر TensorFlow وحتى نموذج عالمي مُدرَّب مسبقًا بـ 102 لغة ، من الروسية إلى volapyuk. خذ ، على ما يبدو ، الحل خارج الصندوق - واحصل على النتيجة على الفور. لكن لا.
اتضح أن النموذج العالمي في النصوص الروسية أظهر جودة أقل بكثير من النموذج الإنجليزي ، محطمًا السجلات في النصوص الإنجليزية (والتي ، كما ترى ، منطقية). في النصوص الروسية ، خسرت أمام نماذجنا الداخلية على DSSM.
حسنًا ، يمكنك تعليم نفسك مسبقًا - لحسن الحظ ، لدى Yandex ما يكفي من النصوص والخبرة الروسية في التعلم الآلي. ولكن هناك فارق بسيط. يستغرق سنة للتعلم!
والحقيقة هي أن بيرت مصمم لمعالجات موتر جوجل (TPUs) ، وبالتالي فإنه من خارج الصندوق يمكنه العمل مع بطاقة فيديو واحدة فقط (GPU). ومن المستحيل موازاة جبهته مع أي
هورودود : نقل 400 ميجابايت من البيانات من بطاقة إلى أخرى في كل خطوة يعد مكلفًا للغاية ،
فالتوازي يصبح بلا فائدة. ما يجب القيام به
الأمثل
لقد بدأوا في البحث عن أي أفكار وحلول يمكن أن تزيد من سرعة الأمر. بادئ ذي بدء ، لاحظنا أن كل رقم في نموذجنا يشغل 32 بت من الذاكرة (التعويم القياسي للأرقام في الكمبيوتر). يبدو أنها صغيرة ، ولكن عندما يكون لديك 100 مليون أوزان ، فهذا أمر بالغ الأهمية. لم نكن بحاجة إلى مثل هذه الدقة في كل مكان ، لذلك قررنا تحويل الأرقام جزئيًا إلى تنسيق 16 بت (وهذا ما يسمى التدريب المختلط بدقة).
على طول الطريق ، بمساعدة العديد من الملفات والعكازات ، قمنا بجمع مجموعة XLA ، بالاعتماد على
التزام NVIDIA الخام الذي كان لا يزال وقتها. بفضل هذا ، تمكنت بطاقات NVIDIA Tesla V100 الخاصة بنا (خادم صغير يقف كشقة في منطقة غير مكلفة بموسكو) من الكشف بالكامل عن إمكاناتها بسبب حساب 16 بت في Tensor Cores.
كنا مهتمين فقط بالعناوين باللغة الروسية ، لكن النموذج متعدد اللغات ، الذي أخذناه كأساس ، تم تدريبه على مئات اللغات ، بما في ذلك volapuk المصطنعة. تم تخزين الكلمات من جميع اللغات المترجمة إلى مساحة ناقلات في النموذج. علاوة على ذلك ، لا يمكنك أخذها وإزالتها من هناك - اضطررت إلى التعرق لتقليل حجم القاموس.
وأكثر شيء واحد. إذا كنت عالماً وكان الكمبيوتر تحت الطاولة ، فيمكنك إعادة تكوين كل شيء هناك لكل مهمة محددة. ولكن في سحابة حوسبة حقيقية ، حيث يتم تكوين الآلاف من الآلات بالطريقة نفسها ، من الصعب للغاية على سبيل المثال إعادة بناء النواة لكل ميزة TensorFlow جديدة. لذلك ، لقد بذلنا الكثير من الجهد في جمع هذه الإصدارات من الحزم التي يمكن أن تفعلها جميع الشرائح الجديدة ، ولا تتطلب تحديثًا جذريًا وإعادة تكوين بطاقات الفيديو في السحابة.
بشكل عام ، ضغط كل العصائر أينما استطاعوا. وفعلنا ذلك. تحولت السنة إلى أسبوع.
تدريب
عادة ما يكون بناء مجموعة البيانات الصحيحة هو الجزء الأصعب من الوظيفة. أولاً ، لقد تعلمنا المصنف على ثلاثة ملايين عنوان مع علامات tolokers. يبدو أن هناك الكثير ، ولكن فقط 30 ألف منهم - مع الأخطاء المطبعية. أين يمكن الحصول على المزيد من الأمثلة؟
قررنا أن نرى أي عناوين وسائل الإعلام نفسها صحيحة. هناك أكثر من 2 مليون من هؤلاء في تاريخ Yandex.News. البنغو! على الرغم من أن الوقت لم يحن بعد.
اتضح أن وسائل الإعلام في كثير من الأحيان إعادة عناوين الصحف ليس بسبب أخطاء. ظهرت تفاصيل جديدة - واستبدل المحرر صيغة صحيحة بأخرى. لذلك ، اقتصرنا على التصحيحات مع وجود اختلاف بين النسخ التي تصل إلى ثلاثة أحرف (على الرغم من أنه لا يزال هناك بعض الضجيج هنا: "تم العثور على اثنين" - أصبح "وجدت ثلاثة"). لذلك سجلنا مليون خطأ مطبعي. لقد درسنا أولاً في هذا الاختيار الكبير بالضوضاء ، ثم على علامة صغيرة توضع عليها علامات دون ضوضاء.
جودة
في مثل هذه المهام ، من المعتاد قياس الدقة والاكتمال. في حالتنا ، الدقة هي نسبة الأحكام الصحيحة بين جميع الأحكام حول خطأ في الرأس. الاكتمال - نسبة رؤوس الأخطاء التي وقعناها بين جميع رؤوس الأخطاء. كل من هذا وآخر في العالم المثالي يجب أن يطمح إلى 100 ٪. ولكن في مهام التعلم الآلي ، تميل هذه المؤشرات إلى الصراع. أي أنه كلما قمنا بتحريف الدقة ، كلما انخفض اكتمالها. والعكس صحيح.
في نهجنا السابق القائم على DSSM ، حققنا بالفعل 95 ٪ من الدقة (أي 5 ٪ الأحكام الإيجابية كاذبة). هذا بالفعل مؤشر مرتفع إلى حد ما. لذلك ، قررنا الحفاظ على نفس مستوى الدقة ونرى كيف يتغير اكتمال النموذج الجديد. وقد قفزت من 21 إلى 78٪. وهو بالتأكيد نجاح.
هنا سيكون من الممكن وضع حد له ، لكنني أتذكر الوعد للحديث عن الاهتمام.
الشبكة العصبية مع القلم شعر طرف
من المقبول عمومًا أن الشبكة العصبية هي صندوق أسود. نحن نطعم شيئًا ما على المدخلات ونحصل على شيء ما في المخرجات. لماذا وكيف هو اللغز.
يهدف هذا القيد إلى التحايل على الشبكات العصبية المفسرة. بيرت هو واحد منهم. تفسيراتها تكمن في آلية الاهتمام. بمعنى تقريبي ، في كل طبقة من الشبكة العصبية نكرر نفس الأسلوب: ننظر إلى الكلمات المجاورة مع "اهتمام" مختلف ونأخذ في الاعتبار التفاعل معهم. على سبيل المثال ، عندما تعالج الشبكة العصبية الضمير "هو" ، فإنها "تنظر بعناية" إلى الاسم الذي يشير إليه "هو".
تُظهر الصورة أدناه بألوان مختلفة باللون الأحمر الكلمات التي "ينظر إليها" الرمز المميز ، والتي تجمع المعلومات حول العنوان بالكامل لطبقة المصنف النهائية. إذا كان هناك خطأ مطبعي في الكلمة - الانتباه يبرزها ، إذا كانت الكلمات غير متناسقة - فكل منهما (وربما يعتمد عليها).

في هذا المكان ، بالمناسبة ، يمكن للمرء أن يرى الإمكانات الكاملة للشبكات العصبية. في أي مرحلة من مراحل التدريب ، لا يعرف نموذجنا بالضبط أين يقع الخطأ المطبعي في المثال: فهو يعلم فقط أن العنوان بالكامل غير صحيح. وما زالت تتعلم أن "مدرسة تضم 1224 مكانًا" غير صحيحة في الكتابة بسبب وجود أرقام غير متسقة ، وتسلط الضوء بشكل خاص على الرقم 4.
لم نتوقف عند الأخطاء المطبعية وبدأنا في تطبيق نهج جديد ليس فقط للبحث عن الأخطاء ، ولكن أيضًا لتحديد الرؤوس القديمة. لكن هذه قصة مختلفة تمامًا ونأمل أن نعود إلى هبر في المستقبل القريب.
روابط مفيدة لأولئك الذين يريدون الخوض في الموضوع