كيف نعلم Yandex للإجابة على الأسئلة وتوفير 20 ألف ساعة في اليوم للمستخدمين



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

لا يمكن لأحد أن يفاجئ أي شخص بإجابات واقعية (إعلامية) ، لكن قلة من الناس يعرفون كيف يتم تشكيلهم ، وكيف يختلفون ، وما حدث في هذا المجال مؤخرًا. اسمي أنطون إيفانوف. اليوم ، مع زميلي ميخائيل أجييفdminerسنخبر قصة الإجابات في البحث ونشارك بعض التفاصيل التي لم تتم مناقشتها من قبل. نأمل أن تكون مفيدة.

إن تاريخ الإنترنت هو تاريخ تبسيط البحث عن المعلومات. ذات مرة ، زار الناس كتالوجات عبر الإنترنت للعثور على إجابات حيث تم تجميع الروابط إلى المواقع حسب الموضوع. بمرور الوقت ، ظهرت محركات البحث ، وتعلمت كيفية البحث عن المواقع عن طريق الكلمات الرئيسية. حفز الطلب على البحث السريع عن المعلومات تطور التكنولوجيا: تطور البحث عن الكلمات تدريجيًا ليصبح بحثًا بالمعنى ، عندما يمكن العثور على الإجابة على صفحة بدون تقاطع مع الكلمات الرئيسية. ولكن حتى في هذه الحالة ، كان علي النقر على الروابط. لطالما حلم الناس بالمزيد.

الحقائق الأولى


من الصعب الآن أن نتذكر كيف بدأت إجابات ياندكس الواقعية. يمكننا القول أن الحل كان تنسيقًا خاصًا للساحر ، والذي يفترض استجابة نصية قصيرة دون تفاعل (على عكس الاستجابة للطلبات [ عنوان IP الخاص بي ] أو [ اللون المائي ]). كما تعلمون ، ليس من الصعب تنفيذ مثل هذا التنسيق. السؤال الرئيسي مختلف: من أين تحصل على الإجابات؟



بدأنا بأسهل طريقة تقنية. قام الأشخاص الخاصون (المقيمون) بتحليل الاستعلامات الأكثر شيوعًا ، واختروا تلك التي يمكنك العثور على إجابة قصيرة لها. المثال الكلاسيكي لمثل هذا الاستعلام هو [ عدد الكفوف التي تحتوي على ذبابة ].



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

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

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

مقتطف الحقائق


عندما تبحث عن شيء ما في بحث Yandex ، فإنك لا ترى فقط 10 روابط ، ولكن أيضًا عنوانًا ووصفًا ورمزًا وبيانات أخرى.

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

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

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

من الواضح أن الرد على جميع الطلبات بهذه الطريقة لا يستحق ذلك: معظم الطلبات لا تتطلب إجابة واقعية. لذلك ، نستخدم نموذجًا آخر لإسقاط الطلبات "غير الواقعية".

حقيقة مقتطف 2.0


كل ما تحدثنا عنه أعلاه يتعلق بالإجابات الواقعية "الكلاسيكية": قصيرة وشاملة ، كما هو الحال في الموسوعة. لطالما كان هذا الاتجاه هو الوحيد. لكن أبعد ، كلما رأينا أن الانقسام على أساس وجود إجابة شاملة ، من ناحية ، هش للغاية ، ومن ناحية أخرى - مبهمة للمستخدم: إنه يحتاج فقط إلى حل مشكلته بشكل أسرع. استغرق الأمر مني تجاوز الحقائق المعتادة. لذلك ظهر المشروع Fact Snippet 2.0.



لتبسيط الأمور ، فإن Fact Snippet 2.0 هي نفسها Snippet Fact ، ولكن دون الحاجة إلى إيجاد "إجابة شاملة". في الواقع ، كل شيء أكثر تعقيدًا إلى حد ما.

دعني أذكرك بأن Fact Snippet تعمل على مرحلتين. في المرحلة الأولى ، باستخدام نموذج سهل ، نقوم بتقييم "الطبيعة الواقعية" للطلب: هل يعني إجابة واقعية أم لا. إذا كانت الإجابة بنعم ، فنحن في المرحلة الثانية نبحث عن إجابة ، تظهر في نتائج البحث. بالنسبة إلى Fact Snippet 2.0 ، قمنا بتكييف كلتا الخطوتين للعثور على إجابات لمجموعة أكبر من الأسئلة. مثل هذه الإجابات لا تدعي أنها موسوعية في مجملها ، لكنها لا تزال مفيدة.

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

إعادة صياغة الاستعلام


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



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

نأخذ جميع الطلبات التي توجد إجابات لها ، ونحولها إلى متجهات ونضعها في فهرس k-NN (بتعبير أدق ، في نسختها المحسنة من HNSWمما يتيح لك البحث بشكل أسرع). بعد ذلك ، نقوم ببناء ناقلات الاستعلام التي لا توجد إجابة لها عن طريق الصدفة المباشرة ، ونبحث عن أهم الاستعلامات N الأكثر مماثلة في k-NN.

بعد ذلك ، ننتقل إلى هذا الجزء العلوي ونجري من خلال مصنف katbust للثالث:

- طلب المستخدم ؛
- طلب من k-NN ؛
- استجابة لطلب k-NN.

إذا كان المدقق متحققًا ، يعتبر الطلب اسمًا مستعارًا للطلب من k-NN ، فيمكننا إرجاع الإجابة المعروفة بالفعل.

الجزء الإبداعي الرئيسي من هذا التصميم هو في كتابة العوامل للمصنف. جربنا هنا الكثير من الأفكار المختلفة. من بين أقوى العوامل:

- ناقلات الاستعلام.
- مسافات Levenshtein ؛
- كلمة بكلمة ؛
- العوامل القائمة على مجموعة متنوعة من السحرة لكل من الطلبات ؛
- المسافة بين كلمات الاستعلام.

بشكل منفصل ، سأتحدث عن خدعة باستخدام الشبكة العصبية BERT. لدينا قيود قوية جدًا على وقت البحث عن اسم مستعار: بضع مللي ثانية كحد أقصى. من المستحيل إجراء BERT في مثل هذا الوقت مع حمولة عدة آلاف من RPS على الموارد الحالية. لذلك ، باستخدام نموذج BERT الخاص بنا ، قمنا بتجميع الكثير (مئات الملايين) من التقديرات الاصطناعية ودربنا عليها شبكة عصبية أبسط DSSM ، والتي تعمل بسرعة كبيرة في وقت التشغيل. ونتيجة لذلك ، مع فقدان بعض الدقة ، تم الحصول على عامل قوي.

في الواقع ، يمكن للمرء تحديد القرب الدلالي للطلبات بطرق أخرى. على سبيل المثال ، إذا اختلف استعلامان عن بعضهما البعض في كلمة واحدة - تحقق من كيفية اختلاف نتائج البحث عن هذه الاستعلامات (انظر إلى عدد الارتباطات المتطابقة في الأعلى). إذا كررت هذا عدة ملايين من المرات وقمت بمتوسط ​​النتائج ، فستحصل على تقدير جيد جدًا لمدى تغير معنى الاستعلام إذا قمت بتغيير كلمة واحدة لأخرى فيه. بعد ذلك ، يمكنك إضافة جميع البيانات في بنية واحدة (على سبيل المثال ، trie) وحساب قياس قرب الاستعلامات من خلال مسافة Levenshtein المعممة. يمكنك توسيع هذا النهج والنظر ليس فقط في الكلمات ، ولكن أيضًا في أزواج من الكلمات (ولكن يتم الحصول على trie أكثر بكثير بسبب النمو الأسي للبيانات).

ماذا بعد


وفقًا لتقديراتنا ، وبفضل الإجابات الواقعية / الإعلامية ، فإننا نوفر للمستخدمين 20 ألف ساعة كل يوم ، لأنهم لا يضطرون إلى النظر في الروابط في نتائج البحث (وهذا لا يحسب الوقت الذي كانوا سيقضونه في العثور على الإجابة على المواقع). هذا أمر جيد ، ولكن هناك دائمًا مجال للنمو. على سبيل المثال ، نستخدم الآن النص الذي نعثر عليه على الإنترنت للحصول على إجابات ، ولكن لا يمكن دائمًا العثور على النص النهائي في مكان واحد أو في الشكل الصحيح. بمساعدة الشبكات العصبية ، يمكن حل هذه المشكلة: إنشاء استجابة بحيث تتوافق مع الطلب ولا تحتوي على غير ضروري. هذا هو مشروع البحث عن جراحة الأعصاب في البحث ، والذي آمل أن نتحدث عنه في المرة القادمة.

All Articles