تقديم واحدة من أفضل الخارقة في التعلم الآلي: الخدعة هاشينج

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

بناء مصنف بسيط للبريد العشوائي

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

أنا أجني عشرة آلاف دولار في الأسبوع فقط تصفح الإنترنت! (بريد مؤذي)
هل أنت حر في اجتماع مطلع الأسبوع المقبل؟ (ليس بريدا موذيا)

إذا قمنا بمسح مجموعة البيانات ضوئيًا وبدأنا في بناء المفردات لدينا ، فقد ينتهي بنا الأمر إلى شيء من هذا القبيل:

أنا: 0
جعل: 1
العاشرة: 2
الف: 3
دولار: 4
لكل: 5
الأسبوع: 6
فقط: 7
تصفح: 8
ال: 9
الويب: 10
هي: 11
أنت: 12
مجانا: 13
ل: 14
15:
الجلسة: 16
في وقت مبكر: 17
التالي: 18

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

أنا أجني عشرة آلاف دولار في الأسبوع فقط تصفح الإنترنت! (بريد مؤذي)
-> [0 0 - - 0 - - - 0 - - 0 - - 0 - - - 0 -
هل أنت حر في اجتماع مطلع الأسبوع المقبل؟ (ليس بريدا موذيا)
-> [0 0 - - 0 - - - 0 - - 0 - - 0 - -

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

أنا أجني عشرة آلاف دولار في الأسبوع فقط تصفح الإنترنت! (بريد مؤذي)
-> [1 1 1 1 1 1 1 1 1 1 1 - - - 0 - - 0 - 0]
هل أنت حر في اجتماع مطلع الأسبوع المقبل؟ (ليس بريدا موذيا)
-> [0 0 - - 0 - 1 - - 0 - 1 1 1 1 1 1 1 1 1]

متجهات الميزة الناتجة هي تمثيلات الكلمات. تمثل عروض BOW عادةً معلومات حول علامات الترقيم وترتيب الكلمات ، ولكن بالنسبة للعديد من المشكلات ، هذه ليست مشكلة. تستخدم تمثيلات BOW الأكثر تطوراً أوزان TF-IDF و / أو غرام n بدلاً من عدد الكلمات الخام ، لكن الفكرة الأساسية هي نفسها.

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

القضية: تصفية التحايل

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

ii mayke هل أنت th0usands مجانا لحضور الأمواج في تصفح الويب webz في أوائل الأسبوع المقبل

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

ii mayke هل أنت th0usands مجانا لحضور الأمواج في تصفح الويب webz في أوائل الأسبوع المقبل
-> [0 0 - - 0 - 1 - - 0 - 1 1 1 1 1 1 1 1 1]

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

تقديم خدعة التجزئة

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

"جون دو" -> دالة التجزئة -> 34
"جين دو" -> دالة التجزئة -> 48

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

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

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

أنا أجني عشرة آلاف دولار في الأسبوع فقط تصفح الإنترنت! (بريد مؤذي)
-> [0 0 0 0 ... 0 0 0 0] (2 ^ 28 عنصر)
هل أنت حر في اجتماع مطلع الأسبوع المقبل؟ (ليس بريدا موذيا)
-> [0 0 0 0 ... 0 0 0 0] (2 ^ 28 عنصر)

بعد ذلك ، سنختار دالة التجزئة f التي تأكل قيم السلاسل والمخرجات في النطاق [0 ، 2 ⁸). بمعنى آخر ، نحن نحرص على ألا تؤدي دالة التجزئة الخاصة بنا إلى معالجة فهرس خارج أبعاد متجهات الميزات.

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

أنا أجني عشرة آلاف دولار في الأسبوع فقط تصفح الإنترنت! (بريد مؤذي)
-> [0 ... 0 1 1 1 - 1 1 - ... - 1 1 1 1 - 1 1 0] (2 ^ 28 عنصرًا)
هل أنت حر في اجتماع مطلع الأسبوع المقبل؟ (ليس بريدا موذيا)
-> [0 1 0 1 0 ... 0 1 0 ... 0 1 0 ... 0 1 1 - 1 1 - 1] (2 ^ 28 عنصر)

تُعرف هذه العملية باسم خدعة التجزئة.

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

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

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

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

بعض الأفكار النهائية

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