মূল content-এ যাও

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: জোড়ায় জোড়ায় গুণ করো, তারপর সব যোগ করো।

a⋅b=∑i=1naibi=a1b1+a2b2+⋯+anbn\mathbf{a} \cdot \mathbf{b} = \sum_{i=1}^{n} a_i b_i = a_1 b_1 + a_2 b_2 + \dots + a_n b_n [1,2,3]⋅[4,5,6]=1⋅4+2⋅5+3⋅6=32[1, 2, 3] \cdot [4, 5, 6] = 1 \cdot 4 + 2 \cdot 5 + 3 \cdot 6 = 32

ফলাফল একটা সংখ্যা, vector না।

কেন দরকার?

ML-এ সবচেয়ে বেশি হিসাব হওয়া অঙ্ক সম্ভবত এটাই:

  • Linear model-এর prediction: y^=w⋅x+b\hat{y} = \mathbf{w} \cdot \mathbf{x} + b। প্রতিটা feature-কে তার weight দিয়ে গুণ করে যোগ।
  • Neural network: প্রতিটা neuron একটা dot product (তারপর activation)। Deep Learning path-এর perceptron মনে আছে?
  • Similarity: দুটো embedding কতটা মেলে। Search, recommendation আর RAG-এর ভিত্তি।
  • Transformer-এর attention: প্রতিটা শব্দ অন্য প্রতিটা শব্দের সাথে কতটা সম্পর্কিত, তা মাপা হয় dot product দিয়ে।

অর্থ ১: weighted sum

w⋅x\mathbf{w} \cdot \mathbf{x} মানে প্রতিটা feature-কে তার গুরুত্ব অনুযায়ী মিলিয়ে একটা score:

main.py

ধনাত্মক weight মানে ওই feature বাড়লে score বাড়ে, আর ঋণাত্মক weight মানে কমে। Training-এর কাজ হলো সঠিক w\mathbf{w} খুঁজে বের করা।

অর্থ ২: দিক কতটা মেলে

জ্যামিতিতে dot product দুটো তীরের মাঝের কোণ θ\theta-এর সাথে সম্পর্কিত:

a⋅b=∥a∥ ∥b∥cos⁡θ\mathbf{a} \cdot \mathbf{b} = \lVert \mathbf{a} \rVert \, \lVert \mathbf{b} \rVert \cos\theta
কোণcos⁡θ\cos\thetaDot productমানে
0°1সবচেয়ে বড় ধনাত্মকএকই দিক
90°00লম্ব, সম্পর্কহীন
180°−1সবচেয়ে বড় ঋণাত্মকউল্টো দিক

(∥a∥\lVert \mathbf{a} \rVert মানে vector-এর দৈর্ঘ্য। পরের lesson-এ বিস্তারিত।)

Cosine similarity

দৈর্ঘ্য দিয়ে ভাগ করে দিলে শুধু কোণটা থাকে, অর্থাৎ শুধু দিকের মিল:

cos⁡θ=a⋅b∥a∥ ∥b∥\cos\theta = \frac{\mathbf{a} \cdot \mathbf{b}}{\lVert \mathbf{a} \rVert \, \lVert \mathbf{b} \rVert}

এতে দৈর্ঘ্যের প্রভাব থাকে না। একটা ১০ শব্দের লেখা আর একটা ১০০০ শব্দের লেখা একই বিষয়ে হলে similarity বেশি আসে, শুধু লম্বা লেখাটার শব্দ বেশি বলে নয়।

main.py

short আর long একই দিকে, তাই cosine = 1। Dot product শুধু বলে "long অনেক বড়", যেটা similarity-র জন্য প্রাসঙ্গিক না।

NumPy-তে dot product

main.py

তিনটাই একই ফল দেয়। @ সবচেয়ে প্রচলিত, আর matrix-এও কাজ করে (Module 3)। ⚠️ a * b শুধু element-wise গুণ, যোগ করে না। Dot product পেতে শেষে .sum() লাগে।

Exercise

Exercise

Dot product নিজে লেখো

+20 XP

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

solution.py

Quiz

  1. Q1[1, 2, 3] · [4, 0, −1] কত?
  2. Q2দুটো vector-এর dot product 0। জ্যামিতিকভাবে এর মানে কী?
  3. Q3Cosine similarity আর সাধারণ dot product-এর পার্থক্য কী?
0/3 answered

Challenge

Challenge

কোন দুটো লেখা সবচেয়ে কাছাকাছি?

+50 XP

প্রতিটা লেখাকে একটা 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

solution.py

বাস্তবে কোথায় ব্যবহার হয়?

Challenge-এ তুমি একটা ছোট search engine-এর মূল অংশ বানালে। বাস্তব search-এ দুটো উন্নতি থাকে:

  1. TF-IDF: "the", "এবং"-এর মতো সব লেখায় থাকা শব্দের weight কমানো
  2. Embedding: Word count-এর বদলে অর্থের vector, তাই "গাড়ি" আর "car" মেলে (Generative AI path-এর embeddings lesson)

কিন্তু তুলনার অঙ্কটা সবসময় একই: cosine similarity = দৈর্ঘ্য দিয়ে ভাগ করা dot product।

main.py

Interview প্রশ্ন

  • Beginner: Dot product কীভাবে হিসাব করে? ফলাফল কী ধরনের?
  • Intermediate: Cosine similarity কী? কখন dot product-এর বদলে এটা ব্যবহার করবে?
  • Advanced: Embedding আগে থেকে normalize (দৈর্ঘ্য 1) করা থাকলে cosine আর dot product-এর সম্পর্ক কী? Vector database কেন প্রায়ই normalized vector-এ dot product ব্যবহার করে?

এরপর কী?

∥a∥\lVert \mathbf{a} \rVert, অর্থাৎ vector-এর দৈর্ঘ্য, এখানে কয়েকবার এসেছে। দুটো বিন্দুর মধ্যে দূরত্ব কীভাবে মাপে, আর কেন feature-এর scale ঠিক না করলে দূরত্ব ভুল তথ্য দেয়? Module-এর শেষ lesson: Norm ও দূরত্ব।