كيف بدأنا في إنشاء بطاقات المنتجات تلقائيًا

صورة

في مقالتي الأخيرة ، تحدثت عن كيفية تعلمنا مطابقة المنتجات تلقائيًا مع أسماء المنتجات ، أي لفهم ، على سبيل المثال ،
سماعة A4Tech بلودي G501 اسود
و
A4 G501 ، أسود (أحمر) {سماعات رأس مزودة بميكروفون ، 2.2 م}

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

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

من أين بدأنا


كانت الحالة الأولية قبل عام على النحو التالي: كتالوج يضم 120 ألف سلعة ، منها 70 ألفًا في المخزون. بعد إطلاق المقارنة التلقائية وإنشاء البضائع (كما كانت المقالة الأخيرة حول) ، نما الكتالوج بسرعة إلى مليون مع عدد قليل من السلع ، منها 600-650 ألف في المخزون. ولكن لم يكن هناك سوى 350 ألف وظيفة متاحة لمشتريات التجزئة ، لأن الباقي لم يكن لديه خصائص. اعتمادًا على الفئة ، حتى يظهر المنتج للبيع ، يجب ملء نسبة معينة من الخصائص. في بعض الفئات ، يجب أن تكون هناك صورة. من بين 350 ألف سلعة معروضة ، 120 ألف ليس لديها صور. سأوضح أن السلع الموجودة في المخزون ولكن لا تباع في البيع بالتجزئة يمكن بيعها بالجملة ، فمن المعتاد إرسال ملفات excel مع الأسماء والأسعار هناك. لكن بوابة b2b مع البطاقات هي بلا شك ميزة إضافية.يمكن أيضًا وضعها على أجهزة التجميع ، حيث توجد بالفعل معلومات أكثر تفصيلاً حول المنتج.

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

يصبح حوالي 6 ٪ من الكتالوج عفا عليه الزمن في الشهر ، أي لبيع 500 ألف منتج على الموقع ، تحتاج إلى إنشاء 30 ألف بطاقة في الشهر فقط للحفاظ على الكمية عند نفس المستوى.

قررنا التعامل مع المشكلة بأكبر قدر ممكن من المنهجية وأتمتة عملية إنشاء بطاقات المنتجات قدر الإمكان.

من أين نحصل على البيانات


السؤال الأول الذي يطرح نفسه هو مكان الحصول على بيانات المصدر ، ومقدار ما يمكننا الحصول عليه. لدينا مصدران رئيسيان:

  • ملفات البائع وواجهات برمجة التطبيقات
  • البيانات التي وجدناها على الإنترنت

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

كيف نملأ بطاقة المنتج بالصور


هذا هو الجزء الأبسط والأكثر وضوحًا. لدينا بالفعل آلية لمطابقة المنتجات بالاسم ، وهي تعمل بسرعة وبدقة. في هذه الحالة ، نحن مهتمون بالردود الإيجابية الكاذبة ، والتي تبلغ حوالي 0.1٪. لا تؤثر السلبية الكاذبة عمليًا على النتيجة ، لأنه لا يوجد فرق كبير ، فنحن نعمل في النهاية مع 10 أو 11 مصدرًا. تعمل المقارنة بسرعة 5-6 آلاف منتج في الثانية ، ويتم مطابقة جميع منتجاتنا البالغ عددها 15 مليونًا بأي كتالوج في أقل من ساعة. سيكون من الممكن إنهاء هذا الأمر ، لأنه بعد المقارنة نعرف جميع صور البضائع. ولكن في الممارسة العملية ، يتم نسخها على مواقع مختلفة في مجموعات مختلفة ، وسيكون من الصواب اختيار الأفضل في الجودة من مجموعة من الصور المماثلة ، وترك الباقي كخيارات في حالة التحرير اليدوي اللاحق لبطاقة المنتج.

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

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

نقسم الصور إلى مجموعات على النحو التالي:

  1. تشكل الصورة الأولى من المجموعة المجموعة الأولى
  2. تتم مقارنة كل صورة تالية بالصورة الأولى من كل مجموعة
  3. إذا كان أعلى معامل تشابه أكبر من قيمة العتبة ، أضف الصورة إلى الكتلة الموجودة
  4. وإلا نقوم بإنشاء مجموعة جديدة من صورة واحدة

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

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

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

كيف نملأ بطاقة المنتج بالخصائص


مع الخصائص ، تكون الأشياء أكثر تعقيدًا قليلاً من الصور. في مصادر مختلفة ، قد يتم استدعاء نفس الخاصية بشكل مختلف ، ويمكن التعبير عنها بوحدات مختلفة ، وقد لا تحتوي على مراسلات صريحة (على سبيل المثال ، HDMI: نعم والواجهات: HDMI ، USB).

بدأنا بتحديد الخصائص وتوصلنا إلى الأنواع التالية:

  • حسننا، لا
  • رقم + وحدة
  • خيار واحد
  • متعدد الخيارات
  • خط

علاوة على ذلك ، سأستخدم مصطلحي " البعد " و " وحدة القياس " ، ولهما معان مختلفة.

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

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

  1. نقارن السلع بالسلع من مصادر بالاسم (لدينا عملية معقدة ، يتم وصفها بالتفصيل في مقال سابق )
  2. تشكيل قائمة بتعريفات الملكية المراد ملؤها
  3. نقوم بتشكيل قائمة خصائص من جميع المنتجات ذات الصلة
  4. نربط مع كل تعريف من البند 2 قائمة بالقيم من البند 3
  5. تحويل القائمة إلى قيمة واحدة

دعونا ننظر في النقطتين الأخيرتين بمزيد من التفصيل كمثال. لنفترض أن لدينا تعريف خاصية مثل هذا:
الاسم: "الطاقة"
النوع: الرقم (6 ، 0)
الوحدة: واط
وقائمة القيم هذه (في الواقع ، إنها أكبر بكثير):
الطول (مم): 220
الطول: 0.22 م
الطاقة (كيلوواط): 1.8
الطاقة: 1.8 كيلو واط
الطاقة المقدرة: 1800 واط
الطاقة: 2 كيلوواط
الطاقة: 1800
بادئ ذي بدء ، نحن بحاجة إلى فهم القيم التي تستحق النظر من حيث المبدأ. تبدو النسخة العاملة ولكن ليست النهائية مثل هذا:

  • ( )
  • ( )
  • .

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

بعد هذه العملية ، سيكون لدينا مجموعة القيم التالية:
الطاقة (كيلوواط): 1.8
الطاقة: 1.8 كيلو واط
الطاقة المقدرة: 1800 واط
الطاقة: 2 كيلوواط
الطاقة: 1800
نحن نعلم أنه يجب تخفيض هذه المجموعة إلى عدد من بعد معين. لكل نوع ، لدينا خوارزمية مستقلة. في حالة العدد ووحدة القياس ، نقوم بما يلي:

لكل قيمة ، نحاول تحديد وحدة القياس. إذا فشل هذا ، أو لم يتطابق بعده مع بُعد الخاصية ، فتجاهل هذه القيمة في المستقبل. سيكون لدينا مجموعة القيم التالية:
الطاقة (كيلوواط): 1.8
الطاقة: 1.8 كيلو واط
الطاقة المقدرة: 1800 واط
الطاقة: 2 كيلو واط
نحن نحاول تحويل كل من القيم إلى رقم وتقديم وحدة القياس المطلوبة. نحاول هنا أن نأخذ في الاعتبار جميع التنسيقات الممكنة: بفاصلة ونقطة لفصل الأجزاء الصحيحة والكسرية ، مع الفواصل والمسافات لفصل الآلاف ، والاختصارات مثل الآلاف وما إلى ذلك. اتضح ما يلي:
1800 واط
1800 واط
1800 واط
2000 واط
يجب تخفيض هذه المجموعة إلى قيمة واحدة. في حالة وجود قيمة واحدة في المجموعة ، استخدمها. إذا كانت القيم أكثر من واحدة وتتطابق ، فهذا أفضل. إذا كانت القيم أكثر من واحدة ولا تتطابق ، فإننا نأخذ القيم الأكثر شيوعًا. إذا لم يكن الأمر كذلك ، فلا تملأ العقار تلقائيًا.

كان هذا مثالًا لخاصية من نوع رقمي ، لأنواع أخرى تختلف الخطوات الأخيرة وتأخذ في الاعتبار ميزاتها.

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

كيف نختبر المشروع


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

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

النتائج


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

All Articles