איך ליישם דמיון קוסינוס בפייתון

דמיון קוסינוס יש מספר יישומים בעולם האמיתי, ועל ידי שימוש בוקטורי הטמעה, אנו יכולים להשוות בין משמעויות בעולם האמיתי באופן תכנותי. פייתון הוא אחד השפות הפופולריות ביותר למדעי הנתונים, והוא מציע מגוון של ספריות לחישוב דמיון קוסינוס בקלות. במאמר זה, נדון באיך ניתן ליישם דמיון קוסינוס בפייתון בעזרת הסיוע של 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 ישיר

למרות שחישבנו זאת בעבר ביד, כמובן, שמחשב יכול לעשות זאת! הנה כיצד ניתן לחשב את דמיון הקוסינוס באמצעות Python וללא שימוש בספריות נוספות:

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, ניתן לחשב את דמיון הקוסינוס באמצעות פעולות מערך, שהן מאוד מושלמות. 

Python

 

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 מקלה אף יותר על חישוב פעולות דמיון קוסינוס מאוד מושלמות:

Python

 

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:ספריות אלה מושלמות לביצועים ובדרך כלל מהירות יותר מ-Python רגיל.
  • השתמש ב-Numba:Numba היא ממשק פתוח למהירת קוד JIT עבור Python ו-NumPy, שנבנה במיוחד כדי להפוך פונקציות מדעיות למהירות יותר.
  • השתמש במכוניות GPU: אם יש לך גישה למכונית GPU, השתמש בספריות Python כמו Tensorflow שהותאמו לשימוש על מכונית GPU.
  • הפרדה מרובה של חישובים: אם יש לך את היכולות החומריות, שקול להפריד את החישובים שלך כדי להאיץ אותם.

חיפוש במספרים גדולים של וקטורים עם חיפוש וקטורי ב-AstraDB

אם אתה זקוק לחיפוש במספרים גדולים של וקטורים, עשוי להיות יעיל ונסיערי יותר להשתמש במסד נתונים וקטורי כמו יכולת חיפוש וקטורי של DataStax Astra. חיפוש וקטורי ב-Astra DB מציע פלטפורמה חזקה לעזור לך לבצע חיפושים וקטוריים עם חישובי דמיון קוסינוס מובנים כך שתוכל לקבל תובנות רבות יותר מהנתונים שלך.

Source:
https://dzone.com/articles/how-to-implement-cosine-similarity-in-python