অধ্যায় 2 · ভেক্টর ও ম্যাট্রিক্স
ভেক্টর: সংখ্যার তালিকা হিসেবে ডেটা
- পৃষ্ঠা 2 / 17
- 3 মিনিট পড়া
ভেক্টর হলো সংখ্যার একটা ক্রমানুসারী তালিকা। এটুকুই — কিন্তু AI সবকিছু এভাবেই দেখে। একটা বাড়ি হয়ে যায় [আকার, শোবার ঘর, দূরত্ব]। একটা পিক্সেল [লাল, সবুজ, নীল]। একটা বাক্য, এমবেডিং মডেল পড়ার পর, হয়ে যায় ১,৫৩৬টা সংখ্যার তালিকা। ডেটা একবার ভেক্টর হলে তা মাপা, তুলনা করা আর তা দিয়ে হিসাব করা যায়।
দুটো সংখ্যার ভেক্টরকে গ্রিডে একটা তীর হিসেবে কল্পনা করতে পারেন: [3, 4] মানে "ডানে ৩, ওপরে ৪"। ১,৫৩৬টা সংখ্যা হলে কল্পনা করা যায় না, কিন্তু নিচের প্রতিটা নিয়ম ঠিক একইভাবে খাটে।
যোগ আর স্কেল
import numpy as np
a = np.array([3, 4])
b = np.array([1, 2])
print(a + b) # উপাদান ধরে ধরে যোগ
print(a - b)
print(2 * a) # স্কেল: প্রতিটা উপাদান গুণ 2
print(np.linalg.norm(a)) # দৈর্ঘ্য: 3² + 4²-এর বর্গমূল[4 6]
[2 2]
[6 8]
5.0- দুটো ভেক্টর যোগ করলে মিলে যাওয়া উপাদানগুলো যোগ হয়। তীর হিসেবে: একটা ধরে হাঁটুন, তারপর অন্যটা।
- স্কেল করা মানে প্রতিটা উপাদানকে একই সংখ্যা দিয়ে গুণ: দিক একই, দৈর্ঘ্য বড় বা ছোট।
- দৈর্ঘ্য বা নর্ম, লেখা হয়
‖a‖, যেকোনো মাত্রায় পিথাগোরাস: বর্গগুলোর যোগফলের বর্গমূল।[3, 4]-এর জন্য √(৯ + ১৬) = ৫।
দূরত্ব: দুটো জিনিস কতটা আলাদা?
দুটো ভেক্টরের দূরত্ব হলো তাদের পার্থক্যের দৈর্ঘ্য। দূরত্ব কম মানে জিনিস দুটো একই রকম:
import numpy as np
# তিনটা ফ্ল্যাট: [আকার ১০০ m²-এ, শোবার ঘর, কেন্দ্র থেকে দূরত্ব km-এ]
flat_a = np.array([0.9, 2, 3.0])
flat_b = np.array([1.0, 2, 3.5])
flat_c = np.array([2.4, 4, 12.0])
print(round(np.linalg.norm(flat_a - flat_b), 2)) # a আর b কাছাকাছি
print(round(np.linalg.norm(flat_a - flat_c), 2)) # a আর c অনেক দূরে
unit = flat_c / np.linalg.norm(flat_c) # একই দিক, দৈর্ঘ্য 1
print(unit.round(3), round(np.linalg.norm(unit), 3))0.51
9.34
[0.186 0.311 0.932] 1.0একটা ভেক্টরকে তার নিজের দৈর্ঘ্য দিয়ে ভাগ করলে পাওয়া যায় ইউনিট ভেক্টর: একই দিক, দৈর্ঘ্য ঠিক ১। একে বলে নরমালাইজ করা, আর এমবেডিং সার্চে এটা সবসময় লাগে (পরের পাতা)।
মাপের দিকে খেয়াল রাখুন। ওপরের ফ্ল্যাটগুলোতে কিলোমিটারের দূরত্ব (৩.০ বনাম ১২.০) পুরো দূরত্বকে নিয়ন্ত্রণ করছে, অথচ আকারের পার্থক্য প্রায় গোনাই হচ্ছে না। আলাদা এককে মাপা ফিচারকে আগে একই মাপকাঠিতে আনতে হয় — পাতা ১০-এ কীভাবে, তা দেখানো আছে।
এমবেডিং: দিক হিসেবে অর্থ
এমবেডিং হলো একটা মডেলের বানানো ভেক্টর, যাতে একই রকম অর্থের জিনিসগুলো কাছাকাছি থাকে। আসল এমবেডিংয়ে বিপুল লেখা থেকে শেখা শত শত সংখ্যা থাকে। এখানে হাতে বানানো তিনটা সংখ্যার একটা খেলনা সংস্করণ, সেই বিখ্যাত ধারণা দেখাতে যে সম্পর্কগুলো দিক হয়ে যায়:
import numpy as np
# খেলনা ৩-সংখ্যার "এমবেডিং": [রাজকীয়তা, পুরুষালি, মানুষ-কিনা]
words = {
"king": np.array([0.95, 0.90, 1.0]),
"queen": np.array([0.95, 0.05, 1.0]),
"man": np.array([0.05, 0.92, 1.0]),
"woman": np.array([0.05, 0.04, 1.0]),
"apple": np.array([0.00, 0.00, 0.0]),
}
target = words["king"] - words["man"] + words["woman"]
print(target.round(2))
closest = min(words, key=lambda w: np.linalg.norm(words[w] - target))
print(closest)[0.95 0.02 1. ]
queenking − man + woman সবচেয়ে কাছে পড়ে queen-এর: man বিয়োগ করলে "পুরুষালি" ভাবটা সরে যায়, woman যোগ করলে অন্য মানটা ফিরে আসে, আর রাজকীয়তা থেকে যায়। আসল এমবেডিং মডেল এরকম দিক নিজে নিজেই শেখে — সিমান্টিক সার্চ, রেকমেন্ডেশন আর RAG এই কারণেই সম্ভব।
নিজে চেষ্টা করুন
[1, 2, 2]-এর দৈর্ঘ্য হাতে হিসাব করুন, তারপর NumPy দিয়ে মিলিয়ে নিন।- দূরত্বের উদাহরণে চতুর্থ একটা ফ্ল্যাট যোগ করুন আর দেখুন সেটা আগের কোনটার সবচেয়ে কাছে।
- অ্যানালজিতে
queen − woman + manহিসাব করুন। কোন শব্দ সবচেয়ে কাছে?