تخيَّل أنك تقف في مكتبة عملاقة تحوي ملايين الكتب، ثم يأتيك شخص حاملا صفحةً واحدة ويسألك: “هل هذه الصفحة مسروقة من أحد هذه الكتب؟” كم ستستغرق من الوقت لإجابته؟ سنوات؟ عقود؟ أو قرون ربما؟
على سبيل المثال، لو أردنا أن نفحص -حوسبيا وتقنيا- إذا ما كان منشور في فيسبوك مسروقا من منشور آخر، فإننا أمام مقارنة شبه مستحيلة! فكما هو مُقدَّر: عدد المنشورات اليومية في فيسبوك يزيد عن 350 مليون منشورا، فلو أردنا مقارنة كل منشور جديد مع ذلك العدد الضخم فإن هذا يٌترجَم رياضيا إلى: 1.75 × 10¹⁸ مقارنة يوميا!
الرقم ذا فلكي، ولتقريب معناه، افترض أن كل مقارنة سوف تستغرق ميكروثانية واحدة فقط (جزء من المليون من الثانية) إذن فإننا نحتاج 57 مليون سنة لإتمام مقارنة يوم واحد فقط!!
ولكن ماذا لو علمتم أن فيسبوك وX وغوغل يفعلون أمرا شبيها اليوم؟ وكل السر يكمن في خوازمية MinHash
أليس لكل إنسان بصمة إصبع فريدة؟ فلنجعل لكل نص من النصوص بصمةً رقمية، بحيث نميز النص المسروق من الأصلي من خلال مطابقة البصمات، ولتقريب الصورة: تصور حقيبتين مليئتين بالكرات الملونة:
الحقيبة الأولى: 3 كرات حمراء، 2 زرقاء، 5 خضراء الحقيبة الثانية: 2 كرات حمراء، 2 زرقاء، 6 خضراء
لقياس التشابه بينهما، نقول: ما نسبة الكرات المشتركة إلى مجموع كل الكرات الفريدة؟ وذا بالضبط ما يعبر عنه تشابه جاكارد Jaccard Similarity: J(A,B) = |A ∩ B| / |A ∪ B| هنا يبدأ السحر، فبدلا من عد كل الكرات، أعطِ لكل لون رقما عشوائيا، ثم اختر أصغر رقم من كل حقيبة، ماذا تجد؟ لا بد أنك واجدٌ احتمالَ أن يكون أصغر رقم متطابقا في الحقيبتين يساوي بالضبط نسبة التشابه بينهما!
إلا أن النصوص ليست كرات ملونة، فكيف نحوِّل المفهوم؟ نستخدم تقنية التقطيع Shingling: فجملة “الشمس مشرقة اليوم والسماء صافية” في الوسع تقطيعها إلى مجموعات من ثلاث كلمات:
● “الشمس مشرقة اليوم” ● “مشرقة اليوم والسماء” ● “اليوم والسماء صافية”
لعله مٌلاحَظٌ الآن أن كل نص قد أصبح مجموعةً من القطع، تماما مثل الكرات الملونة.
إذن فقد وصلنا الآن إلى استخلاص بصمات رقمية من النصوص، ولكن ماذا عن مقارنة البصمة المراد الفحص عنها مع كل البصمات الآخرى؟ لدينا: O(n²) مقارنة ولنفترض أن عندنا خمسة مليارات منشورا، فهذا يعني 25 مليار عملية مقارنة، إذن ما زلنا في نفس المأزق، ولكن هنالك حيلة عبقرية تستطيع أن تنقذنا: التجزئة الحساسة للموقع Locality-Sensitive Hashing - LSH، ولنعد لتقريب الصورة: نأخذ البصمة الرقمية (مثلا 100 رقم) ونقسمها إلى 20 مجموعة، كل مجموعة من 5 أرقام، فعلى سبيل المثال: سيتطابق نصان متشابهان بنسبة 80% في مجموعة واحدة على الأٌل باحتمال: P(collision) = 1 - (1 - 0.8^5)^20 = 99.96% بينما نصان متشابهان بنسبة 30% فقط سيتطابقان باحتمال أقل من 1%!
والآن لنقم بتنفيذ الإجراءات عمليًّا: بعد أن نأخذ المنشور من فيسبوك، نقطِّعه إلى شرائح كما سلف الذكر، ثم 1) تقوم خوازمية MinHash بحساب 256 قيمة، ليجري توليد بصمة في حجم مضغوط جدا (1 كيلوبايت فقط). وبعد ذلك 2) تٌقسم البصمة إلى 20 مجموعة، وكل مجموعة تبحث في نطاقها الخاص، و3) أخيرا تجمع النتائج المحتملة (التي غالبا سوف تكون أقل من 100 نتيجة، من أصل 5 مليارات).
كل ذلك قد لا يستغرق 25 ميللي ثانية!
إذن فقد وفَّرت الحوسبة أدوات سرَّعت المقارنة من 57 مليون سنة إلى 25 ميللي ثانية، أسرع ب72 تريليون مرة!