🧮ML গণিত গুরু
linear-algebraমাঝারি10 মিনিট

Cosine Similarity — কোণের মিল

Cosine Similarity

🍕

বাজারে রুচির মিল

ধর মামা, তুই আর তোর দোস্ত ফাহিম বাজারে গেছস। তোর কেনাকাটা vector: [চাল=১০কেজি, মুরগি=২কেজি, পেঁয়াজ=৫কেজি]। ফাহিমের: [চাল=২০কেজি, মুরগি=৪কেজি, পেঁয়াজ=১০কেজি]। ফাহিম সব দ্বিগুণ কিনছে — কিন্তু রুচি তো same! দুইজনেই চাল বেশি, মুরগি কম, পেঁয়াজ মাঝামাঝি কিনতেছস। আবার তোর আরেক দোস্ত জামাল কিনছে [চাল=১কেজি, মুরগি=১০কেজি, পেঁয়াজ=১কেজি] — পরিমাণ কম কিন্তু রুচি সম্পূর্ণ আলাদা!

Cosine Similarity পরিমাণ ignore করে শুধু 'রুচি' (direction) দেখে! তোর আর ফাহিমের cosine similarity ≈ 1.0 (same রুচি), কিন্তু তোর আর জামালের cosine similarity অনেক কম (আলাদা রুচি)। পরিমাণ যতই হোক, pattern match করলেই similar! বুঝলা?

সংজ্ঞা

Cosine Similarity দুইটা vector-এর মধ্যকার কোণের cosine মাপে। +১ মানে একই দিকে (identical), ০ মানে perpendicular (কোনো মিল নাই), -১ মানে বিপরীত দিকে। Magnitude ignore করে শুধু direction compare করে।

Cosine Similarity — dot product ÷ (norms-এর গুণফল)
\[\cos(\theta) = \frac{\vec{a} \cdot \vec{b}}{\|\vec{a}\| \|\vec{b}\|} = \frac{\sum_{i=1}^{n} a_i b_i}{\sqrt{\sum_{i=1}^{n} a_i^2} \cdot \sqrt{\sum_{i=1}^{n} b_i^2}}\]

ব্যাখ্যা

Cosine Similarity vs Dot Product

Dot product magnitude-দ্বারা affected হয় — বড় vector-এর dot product বড় হবেই। কিন্তু cosine similarity normalize করে ফেলে, তাই শুধু 'দিক'-এর মিল দেখে। তোর বাজারের ১০কেজি চাল আর ফাহিমের ২০কেজি চাল — পরিমাণ আলাদা কিন্তু pattern same!

\[\text{dot: } \vec{a} \cdot \vec{b} = 150, \quad \text{cosine: } \frac{150}{\|a\| \cdot \|b\|} = 1.0\]

Value Range আর Interpretation

Cosine similarity সবসময় -১ থেকে +১ এর মধ্যে থাকে। +১ = হুবহু same direction, ০ = কোনো সম্পর্ক নাই, -১ = সম্পূর্ণ উল্টা। NLP-তে সাধারণত ০ থেকে +১ পাই কারণ word count negative হয় না।

\[-1 \leq \cos(\theta) \leq 1\]

Unit Vector-এর সাথে সম্পর্ক

যদি দুইটা vector আগেই unit vector হয় (norm = ১), তাইলে cosine similarity = dot product! কারণ denominator ১×১ = ১ হইয়া যায়। তাই embedding-গুলা normalize করে রাখলে cosine similarity হিসাব অনেক fast হয়!

\[\text{If } \|\hat{a}\| = \|\hat{b}\| = 1: \quad \cos(\theta) = \hat{a} \cdot \hat{b}\]

বাজারের রুচির Similarity

তোর কেনাকাটা a = [10, 2, 5] আর ফাহিমের b = [20, 4, 10]। দুইজনের রুচির cosine similarity হিসাব কর।

Step 1: Dot Product

Component-wise গুণ করে যোগ কর

\[\vec{a} \cdot \vec{b} = 10 \times 20 + 2 \times 4 + 5 \times 10 = 200 + 8 + 50 = 258\]

Step 2: Norms বাইর কর

দুইটা vector-এর L2 norm

\[\|\vec{a}\| = \sqrt{100+4+25} = \sqrt{129} \approx 11.36, \quad \|\vec{b}\| = \sqrt{400+16+100} = \sqrt{516} \approx 22.72\]

Step 3: ভাগ কর

Dot product ÷ norms-এর গুণফল

\[\cos(\theta) = \frac{258}{11.36 \times 22.72} = \frac{258}{258.01} \approx 1.0\]
উত্তর:

Cosine similarity ≈ ১.০! ফাহিম তোর ঠিক দ্বিগুণ কিনছে, তাই direction same — রুচি ১০০% match! পরিমাণ আলাদা কিন্তু taste identical, মামা!

ML-এ কোথায় লাগে?

💡

মনে রাখার ট্রিক

Cosine Similarity = বাজারের রুচি match — কে কতটুকু কিনছে (পরিমাণ) সেইটা বাদ দাও, কী ধরনের জিনিস কিনছে (pattern) সেইটা দেখো। +১ = টুইন রুচি, ০ = কোনো মিল নাই!

#cosine-similarity#similarity#recommendation#search#NLP#RAG#face-verification