20 سبتمبر
نظام توصيات للمدونات: تهيئة الشروط المسبقة (الجزء 1)، توم هوبمانز لـ نوف السعيدي يمكن القول أن الهدف الأساسي لعلم البيانات [...]

نظام توصيات للمدونات: تهيئة الشروط المسبقة (الجزء 1)، توم هوبمانز
لـ نوف السعيدي

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

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

111
مثال على نظام نيتفليكس للتوصيات

سنوضح خلال سلسلة مكونة من ثلاث تدوينات كيفية بناء محرك توصية لقرائنا على ” The Marketing Technologist (TMT)”. تحوي مدونة TMT حاليا أكثر من خمسين تدوينة تغطي مواضيع متنوعة من علوم البيانات إلى البرمجة باستخدام ReactJS. التصفح عبر هذا العدد من المنشورات مضيعة للوقت، خصوصا وأن عدد التدوينات في ازدياد. بالإضافة إلى ذلك يحتمل أن لا يكون القراء مهتمين إلا بعدد محدود من التدوينات التي تقع ضمن نطاق اهتمامهم. إذا نجح محرك التوصية في تحديد تلك المقالات التي تهم المستخدم، فبالتأكيد يمكن تصنيفه على أنه نوع الأنظمة التي تحقق أهداف علم البيانات أي خلق قيمة من البيانات الضخمة، وتجنب المعلومات الزائدة.

نوعان من أنظمة التوصيات

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

محركات التوصية المبنية على المحتوى مختلفة من حيث أنها تُبنى على خصائص المنتج. في حالتنا فالمنتجات هي منشورات مدونة TMT والخصائص هي الكلمات التي تتضمنها المنشورات. إذا وجد مستخدم يقرأ مقالا يحوي التراكيب الآتية: “تحليلات جوجل Google Analytics” و “برنامج إدارة الوسوم Tag Manager”، فمن المرجح أن هذا المستخدم سيكون مهتما بقراءة المقالات الأخرى التي تحوي التراكيب والكلمات نفسها. وعليه فمحرك التوصية المبني على المحتوى سيقترح عليه المقالات التي تحوي تلك الكلمات.

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

222
المنطق الأساسي لعمل كلا من المرشحات التشاركية والمرشحات المبنية على المحتوى (الأيقونات من فلات آيكون: www.flaticon.com)

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

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

الشروط المسبقة للترشيح التشاركي

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

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

333
مثال على تقرير مخصص على تحليلات جوجل يعرض سلوك القراءة على مستوى المستخدم

الشروط المسبقة للمرشح المبني على المحتوى

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

الخطوة 1: إنشاء قائمة بجميع مقالات TMT

في البايثون يمكن تحميل الشفرة المصدرية لصفحات الانترنت عبر مكتبة يورليب2 urllib2. باستخدام سطر الأوامر الآتي: urllib2.urlopen(“http://www.themarketingtechnologist.co”) وعليه يمكننا تحميل مصدر الصفحة الأمامية frontpage لمدونة TMT. تظهر الصفحة دائما العشر مقالات الأخيرة. يمكننا استخدام مكتبة BeautifulSoup بسهولة للبحث عبر نموذج كائنات المستند (دوم) DOM واستخراج جميع عناصر المقالات article ضمن الكلاس class=”post” وتخزينها في إطار البيانات “بانداز” Pandas dataframe. بالإضافة لذلك، يمكننا البحث داخل كل عنصر من العناصر عن اسم الكاتب ووسوم المقال، وذلك عبر البحث عن العنصر المقابل في نموذج كائنات المستند (دوم).

ولأنه لا يظهر في الصفحة الأمامية سوى العشر مقالات الأخيرة؛ فسنحتاج للتأكد من وجود منشورات أقدم عبر زر التدوينات الأقدم (Older posts > ) في نهاية الصفحة. مجددا بإمكاننا فعل ذلك عبر البحث عن عنصر دوم المناسب، على سبيل المثال عنصر a في class=”older-posts”. من رابط المنشورات القديمة، يمكن استخراج رابط الصفحة التالية باستخدام دالة get لاستخراج القيمة من الصفة href. نعيد العملية السابقة لكل صفحة من صفحات المدونة. في النهاية سيكون بحوزتنا إطار بيانات يحوي الأسماء، الوسوم، والكاتب لجميع المقالات بالإضافة إلى رابط محتوى المقال.

الخطوة 2: استعادة محتوى المقالات

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

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

لاحظ أنه لكون جميع أكواد جافا سكريبت تنفذ باستخدام سيلينيوم، هذا يعني أنه أيضا يتم تشغيل تحليلات جوجل. فمن الحكمة اتخاذ الإجراءات لمنع تلوث البيانات. يمكن فعل ذلك على سبيل المثال بإضافة عنوان الآي بي لقائمة الترشيح في تحليلات جوجل أو بتثبيت إضافة جوجل المسماة أوبت أوت Opt-out Addon لتحليلات جوجل. لاحظ أيضا أننا في الواقع لا نحتاج لاستعادة كل صفحة بصريا على متصفح فايرفوكس. يمكنك أيضا استخدام برنامج تشغيلي للتصفح بدون واجهة المستخدم الرسومية headless driver مثل PhantomJS والذي يستدعي صفحة الويب في الخلفية بدون تحميل البصريات.

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

اترك تعليقا