تتضمن تشابه الجيبي عدة تطبيقات حقيقية العالم، وباستخدام متجهات التعبئة، يمكننا مقارنة المعاني الحقيقية في طريقة برمجية. يعد Python أحد اللغات الأكثر شهرة لعلوم البيانات، ويوفر مكتبات متعددة لحساب تشابه الجيبي بسهولة. في هذا المقال، سنناقش كيف يمكنك تنفيذ تشابه الجيبي في Python بمساعدة Scikit-Learn و NumPy المكتبات.
ما هو تشابه الجيبي؟
تشابه الجيبي هو مقياس للتشابه بين متجهين غير الصفريين في الفضاء ذو البعد n. يتم استخدامه في تطبيقات مختلفة، مثل تحليل النصوص وأنظمة التوصية، لتحديد مدى تشابه متجهين من حيث اتجاههما في الفضاء المتجه.
صيغة تشابه الجيبي
يتم حساب تشابه الجيبي بين متجهين، A و B، باستخدام الصيغة التالية:
تشابه الجيبي (A, B) = (A · B) / (||A|| * ||B||)
في هذه الصيغة، يمثل A · B الجداء النقطي للمتجهين A و B. يتم حساب هذا بضرب المكونات المقابلة للمتجهين وجمع النتائج. ||A|| يمثل القيمة المطلقة (الحجم) الإقليدية للمتجه A، وهي الجذر التربيعي لمجموع مربعات مكوناته. يتم حسابها كما يلي ||A|| = √(A₁² + A₂² + … + Aₙ²). ||B|| يمثل القيمة المطلقة (الحجم) الإقليدية للمتجه B، ويتم حسابها بنفس طريقة حساب ||A||.
كيفية حساب تشابه جيب التمام
لحساب تشابه جيب التمام، يجب أولا إكمال حساب الجداء النقطي للمتجهين. ثم، قسمة الناتج على حاصل ضرب أحجامهما. القيمة الناتجة ستكون في نطاق من -1 إلى 1، حيث:
- إذا كان تشابه جيب التمام هو 1، فهذا يعني أن المتجهات لها نفس الاتجاه ومتشابهة تمامًا.
- إذا كان تشابه جيب التمام هو 0، فهذا يعني أن المتجهات متعامدة مع بعضها البعض وليس لها تشابه.
- إذا كان تشابه جيب التمام هو -1، فهذا يعني أن المتجهات لها اتجاهات معاكسة ومتضادة تمامًا.
في تحليل النصوص، يتم استخدام تشابه جيب التمام لقياس التشابه بين متجهات الوثيقة، حيث يمثل كل وثيقة متجهًا في فضاء عالي الأبعاد، وكل بُعد يتوافق مع كلمة أو مصطلح في المجموعة. من خلال حساب تشابه جيب التمام بين متجهات الوثيقة، يمكن تحديد مدى تشابه أو اختلاف وثيقتين.
مكتبات لحساب تشابه جيب التمام
NumPy
: مثالية للعمليات العددية، ومحسنة للسرعة.scikit-learn
: يقدم خوارزميات تعلم الآلة المختلفة ويشمل طريقة التشابه الجيبي في حزمة مقاييسه.
الأمثلة التالية توضح كيف يمكن حساب التشابه الجيبي باستخدام Python. سنستخدم متجهات مراجعتنا الكتبية المعتادة الآن [5,3,4] و [4,2,4].
بيثون مباشرة
فيما كنا نحسب هذا يدويًا سابقًا، بالطبع يمكن للكمبيوتر القيام بذلك! هذه هي الطريقة التي يمكنك بها حساب التشابه الجيبي باستخدام Python بدون مكتبات إضافية:
A = [5, 3, 4]
B = [4, 2, 4]
# Calculate dot product
dot_product = sum(a*b for a, b in zip(A, B))
# Calculate the magnitude of each vector
magnitude_A = sum(a*a for a in A)**0.5
magnitude_B = sum(b*b for b in B)**0.5
# Compute cosine similarity
cosine_similarity = dot_product / (magnitude_A * magnitude_B)
print(f"Cosine Similarity using standard Python: {cosine_similarity}")
NumPy
المتجهات المضمنة عادة ما تحتوي على أبعاد كثيرة – مئات، آلاف، حتى ملايين، أو أكثر! باستخدام NumPy، يمكنك حساب التشابه الجيبي باستخدام عمليات المصفوفة، والتي هي محسنة بشكل كبير.
import numpy as np
A = np.array([5, 3, 4])
B = np.array([4, 2, 4])
dot_product = np.dot(A, B)
magnitude_A = np.linalg.norm(A)
magnitude_B = np.linalg.norm(B)
cosine_similarity = dot_product / (magnitude_A * magnitude_B)
print(f"Cosine Similarity using NumPy: {cosine_similarity}")
Scikit-Learn
تجعل وظيفة cosine_similarity
في scikit-learn أسهل في حساب عمليات التشابه الجيبي المحسنة بشكل كبير:
from sklearn.metrics.pairwise import cosine_similarity
A = np.array([[5, 3, 4]])
B = np.array([[4, 2, 4]])
cosine_similarity_result = cosine_similarity(A, B)
print(f"Cosine Similarity using scikit-learn: {cosine_similarity_result[0][0]}")
نصائح لتحسين حسابات التشابه الجيبي في Python
إذا كنت ستستخدم Python لحساب التشابه الجيبي مباشرة، هناك بعض الأشياء التي يجب مراعاتها:
- استخدام مكتبات محسنة مثل NumPy أو scikit-learn: هذه المكتبات محسنة للأداء وعمومًا أسرع من بيثون العادي.
- استخدام Numba: Numba هو مُعالج ترجمة على الطاقة الفورية مفتوح المصدر للتعليمات البرمجية في Python وNumPy، تصميمه خصيصًا لتحسين وظائف الحوسبة العلمية.
- استخدام GPUs: إذا كان لديك الوصول إلى GPU، استخدم مكتبات Python مثل Tensorflow التي تم تحسينها للاستخدام على GPU.
- توزيع الحسابات: إذا كان لديك القدرات الأجهزية، ضع في اعتبارك توزيع حساباتك لتسريعها.
البحث في أعداد كبيرة من المتجهات باستخدام Vector Search في AstraDB
إذا كنت بحاجة إلى البحث في أعداد كبيرة من المتجهات، قد تجد أنه من الأكثر كفاءة وقابلية للتوسع استخدام قاعدة بيانات المتجه مثل قدرة البحث المتجه في DataStax Astra. Vector Search في Astra DB توفر منصة قوية لمساعدتك في تنفيذ بحث المتجهات مع حسابات تشابه جيب التمام المدمجة حتى تتمكن من الحصول على رؤى أكثر من بياناتك.
Source:
https://dzone.com/articles/how-to-implement-cosine-similarity-in-python