Mathematics for AI/Vectors/Lesson 07
Dot product ও similarity
গুণ করো আর যোগ করো, তাতেই dot product। এই একটা অঙ্ক দিয়ে চলে linear model-এর prediction (w·x + b), neural network-এর প্রতিটা neuron, আর দুটো লেখা বা শব্দ কতটা মেলে তার মাপ (cosine similarity)।
- সময়
- 24 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
দুটো vector-এর dot product: জোড়ায় জোড়ায় গুণ করো, তারপর সব যোগ করো।
ফলাফল একটা সংখ্যা, vector না।
কেন দরকার?
ML-এ সবচেয়ে বেশি হিসাব হওয়া অঙ্ক সম্ভবত এটাই:
- Linear model-এর prediction: । প্রতিটা feature-কে তার weight দিয়ে গুণ করে যোগ।
- Neural network: প্রতিটা neuron একটা dot product (তারপর activation)। Deep Learning path-এর perceptron মনে আছে?
- Similarity: দুটো embedding কতটা মেলে। Search, recommendation আর RAG-এর ভিত্তি।
- Transformer-এর attention: প্রতিটা শব্দ অন্য প্রতিটা শব্দের সাথে কতটা সম্পর্কিত, তা মাপা হয় dot product দিয়ে।
অর্থ ১: weighted sum
মানে প্রতিটা feature-কে তার গুরুত্ব অনুযায়ী মিলিয়ে একটা score:
ধনাত্মক weight মানে ওই feature বাড়লে score বাড়ে, আর ঋণাত্মক weight মানে কমে। Training-এর কাজ হলো সঠিক খুঁজে বের করা।
অর্থ ২: দিক কতটা মেলে
জ্যামিতিতে dot product দুটো তীরের মাঝের কোণ -এর সাথে সম্পর্কিত:
| কোণ | Dot product | মানে | |
|---|---|---|---|
| 0° | 1 | সবচেয়ে বড় ধনাত্মক | একই দিক |
| 90° | 0 | 0 | লম্ব, সম্পর্কহীন |
| 180° | −1 | সবচেয়ে বড় ঋণাত্মক | উল্টো দিক |
( মানে vector-এর দৈর্ঘ্য। পরের lesson-এ বিস্তারিত।)
Cosine similarity
দৈর্ঘ্য দিয়ে ভাগ করে দিলে শুধু কোণটা থাকে, অর্থাৎ শুধু দিকের মিল:
এতে দৈর্ঘ্যের প্রভাব থাকে না। একটা ১০ শব্দের লেখা আর একটা ১০০০ শব্দের লেখা একই বিষয়ে হলে similarity বেশি আসে, শুধু লম্বা লেখাটার শব্দ বেশি বলে নয়।
short আর long একই দিকে, তাই cosine = 1। Dot product শুধু বলে "long অনেক বড়", যেটা similarity-র জন্য প্রাসঙ্গিক না।
NumPy-তে dot product
তিনটাই একই ফল দেয়। @ সবচেয়ে প্রচলিত, আর matrix-এও কাজ করে (Module 3)। ⚠️ a * b শুধু element-wise গুণ, যোগ করে না। Dot product পেতে শেষে .sum() লাগে।
Exercise
Exercise
Dot product নিজে লেখো
dot(a, b) লেখো, NumPy-র np.dot বা @ ছাড়া: দুটো সমান দৈর্ঘ্যের list-এর component-গুলো জোড়ায় জোড়ায় গুণ করে যোগফল দেবে।
তারপর একটা linear model-এর prediction হিসাব করো:
- weight w = [2.0, 0.5, -1.0] (study_hours, attendance, absences)
- bias b = -40
- একজন ছাত্র x = [10, 90, 4]
- score = dot(w, x) + b
Quiz
Challenge
Challenge
কোন দুটো লেখা সবচেয়ে কাছাকাছি?
প্রতিটা লেখাকে একটা word-count vector বানাও, তারপর cosine similarity দিয়ে তুলনা করো।
1. count_vectors(docs) — Return (vocab, M):
- vocab — সব লেখার সব আলাদা শব্দ (space দিয়ে ভাগ করা), বর্ণানুক্রমে sorted list
- M — NumPy array, shape (লেখার সংখ্যা, vocab-এর দৈর্ঘ্য); M[i, j] = লেখা i-তে শব্দ j কতবার আছে
2. cosine_matrix(M) — সব জোড়ার cosine similarity-র matrix, shape (n, n), loop ছাড়া
3. most_similar_pair — সবচেয়ে বেশি similarity-র দুটো আলাদা লেখার index, (i, j) tuple, যেখানে i < j
বাস্তবে কোথায় ব্যবহার হয়?
Challenge-এ তুমি একটা ছোট search engine-এর মূল অংশ বানালে। বাস্তব search-এ দুটো উন্নতি থাকে:
- TF-IDF: "the", "এবং"-এর মতো সব লেখায় থাকা শব্দের weight কমানো
- Embedding: Word count-এর বদলে অর্থের vector, তাই "গাড়ি" আর "car" মেলে (Generative AI path-এর embeddings lesson)
কিন্তু তুলনার অঙ্কটা সবসময় একই: cosine similarity = দৈর্ঘ্য দিয়ে ভাগ করা dot product।
Interview প্রশ্ন
- Beginner: Dot product কীভাবে হিসাব করে? ফলাফল কী ধরনের?
- Intermediate: Cosine similarity কী? কখন dot product-এর বদলে এটা ব্যবহার করবে?
- Advanced: Embedding আগে থেকে normalize (দৈর্ঘ্য 1) করা থাকলে cosine আর dot product-এর সম্পর্ক কী? Vector database কেন প্রায়ই normalized vector-এ dot product ব্যবহার করে?
এরপর কী?
, অর্থাৎ vector-এর দৈর্ঘ্য, এখানে কয়েকবার এসেছে। দুটো বিন্দুর মধ্যে দূরত্ব কীভাবে মাপে, আর কেন feature-এর scale ঠিক না করলে দূরত্ব ভুল তথ্য দেয়? Module-এর শেষ lesson: Norm ও দূরত্ব।