تصور کنید در یک موتور جستوجو عبارت «حیوان سریع» را مینویسید و سیستم، نتیجهای با عنوان «سگ تندرو» را به شما برمیگرداند، در حالی که هیچ کلمهای بین این دو جمله مشترک نیست. چرا باید جستوجوی «حیوان سریع» منجر به یافتن «سگ تندرو» شود وقتی حتی یک کلمه هم تطبیق ندارد؟ پاسخ در شباهت کسینوسی (Cosine Similarity) نهفته است؛ موتور ریاضی که به هوش مصنوعی مدرن اجازه میدهد معنا را از طریق هندسه بفهمد.
بیشتر موتورهای جستوجوی سنتی بر تطبیق کلمات کلیدی تکیه میکنند و وقتی کاربر از مترادفها یا مفاهیم مرتبط استفاده میکند، شکست میخورند. برای حل این مشکل، مهندسان پردازش زبان طبیعی (NLP)، متن را به بردار معنایی (Embedding) تبدیل میکنند. اینها بردارهایی در ابعاد بالا هستند که در آنها «جهت»، نمایندهی معناست. بردارها در واقع کارت معرفی عددی برای هر واژه هستند که میگوید این کلمه «همسایهی» چه کلمات دیگری است. همانطور که در تحلیل قبلی ما دربارهی بصریسازی این بردارها با استفاده از PCA و t-SNE در روز پانزدهم اشاره کردیم، گام بعدی این است که محاسبه کنیم این بردارها در واقعیت چقدر به هم نزدیک هستند.
هندسهی معنا
شباهت کسینوسی زاویه بین دو بردار را اندازه میگیرد و طول آنها را نادیده میگیرد. دو فلش را تصور کنید که از یک نقطه مرکزی خارج شدهاند؛ اگر این دو فلش در یک جهت باشند، زاویه بین آنها کوچک است و امتیاز شباهت به ۱ نزدیک میشود. اگر فلشها در زاویه قائمه (۹۰ درجه) نسبت به هم باشند، امتیاز ۰ میشود و اگر در جهتهای کاملاً مخالف باشند، امتیاز به ۱- میرسد.
در بردار معنایی، جهت حامل اصلی معناست. کلماتی مثل «سگ» و «تولهسگ» در فضای برداری به جهتهای مشابهی اشاره میکنند و در نتیجه امتیاز کسینوسی بالایی میگیرند. این رویکرد با فاصله اقلیدسی (Euclidean distance) که فاصله خط مستقیم بین نوک فلشها را میسنجد، متفاوت است. در پردازش زبان طبیعی، اندازه یا بزرگی بردار معمولاً اهمیت کمتری نسبت به جهت آن دارد.
دو بردار ممکن است از نظر فاصله اقلیدسی بسیار از هم دور باشند، اما چون در یک جهت تقریباً یکسان اشاره میکنند، شباهت کسینوسی بالایی داشته باشند. به همین دلیل است که شباهت کسینوسی معیار ترجیحی برای ثبت روابط معنایی است.
سازوکار محاسباتی
به نقل از یک آموزش در dev.to که در ۱۲ سپتامبر ۲۰۲۶ منتشر شد، فرمول شباهت کسینوسی برابر است با حاصلضرب داخلی دو بردار تقسیم بر حاصلضرب نرم (طول) آنها:
Cosine similarity = (A · B) / (||A|| * ||B||)
حاصلضرب داخلی (A · B) هر جفت مؤلفه متناظر را در هم ضرب کرده و سپس آنها را با هم جمع میکند. نرم (||A||) نیز نشاندهنده طول بردار است که از طریق به توان دو رساندن هر مؤلفه، جمع کردن آنها و در نهایت گرفتن جذر کل به دست میآید.
نرمالسازی (Normalization) در اینجا گام حیاتی است. بدون این مرحله، بردارهای بلندتر صرفاً به دلیل اندازه یا بزرگیشان، با همه چیز شبیهتر به نظر میرسند. با تقسیم بر نرم، سیستم تضمین میکند که فقط زاویه — و در نتیجه معنای مفهومی — اهمیت داشته باشد. این دقیقاً مثل دو نفر است که از مرکز یک تخته، دارت پرتاب میکنند؛ اگر دارتها در یک جهت بروند، شباهت بالاست، فارغ از اینکه با چه قدرتی یا تا چه فاصلهای پرتاب شدهاند.
مثال ریاضی گامبهگام
برای درک بهتر این سازوکار در عمل، دو بردار A = [1, 2] و B = [2, 4] را در نظر بگیرید:
- حاصلضرب داخلی: (1 × 2) + (2 × 4) = 2 + 8 = 10
- نرم A: جذر (1² + 2²) = جذر (5) ≈ 2.236
- نرم B: جذر (2² + 4²) = جذر (20) ≈ 4.472
- محاسبه نهایی: 10 / (2.236 × 4.472) ≈ 10 / 10 = 1
امتیاز ۱ نشان میدهد که دو فلش دقیقاً در یک جهت اشاره میکنند.
مثال کاربردی: گربه در برابر سگ
برای نمایش تفاوتهای معنایی، بردارهای دوبعدی سادهای را برای یک دایره لغات کوچک در نظر بگیرید: «گربه» [1, 2]، «سگ» [0.9, 2.1]، «ماشین» [-2, 0.5] و «سیب» [0.2, -1].
- گربه در برابر سگ: حاصلضرب داخلی برابر است با (1 × 0.9) + (2 × 2.1) = 5.1. حاصلضرب نرمهای آنها تقریباً 5.12 است. این منجر به امتیاز شباهت 0.996 میشود که نشاندهنده همراستایی تقریباً کامل است.
- گربه در برابر ماشین: حاصلضرب داخلی برابر است با (1 × -2) + (2 × 0.5) = -1. حاصلضرب نرمها برابر است با 2.236 × 2.06 ≈ 4.605. در نتیجه شباهت -0.217 میشود.
- گربه در برابر سیب: حاصلضرب داخلی برابر است با (1 × 0.2) + (2 × -1) = -1.8. حاصلضرب نرمها برابر است با 2.236 × 1.02 ≈ 2.28. در نتیجه شباهت -0.789 میشود.
امتیازات منفی برای «ماشین» و «سیب» ثابت میکند که این کلمات در جهتهای متفاوت یا حتی مخالف هستند و این سیگنالی است که نشان میدهد آنها از نظر معنایی هیچ ارتباطی با هم ندارند.
پیادهسازی جستوجوی معنایی
جستوجوی معنایی (Semantic Search) این منطق را به مقیاس میلیونها سند تعمیم میدهد. سیستم بهجای گشتن دنبال کلمه دقیق «چیتا»، بردارهایی را مییابد که جهتشان به عبارت «حیوان سریع» نزدیکتر است. این یعنی سیستم میتواند «سگ تندرو» یا «روباه سریع» را پیدا کند چون بردارهای آنها در فضای برداری همسایه هستند.
این فرآیند در سه سطح اصلی عمل میکند:
- سطح کلمه: شناسایی مترادفها یا کلماتی که ارتباط بسیار نزدیکی دارند.
- سطح جمله: تطبیق معنای عبارات، حتی اگر کلمات به کار رفته در آنها کاملاً متفاوت باشد.
- سطح سند: بازیابی کل متون و پاراگرافهایی که تمهای مرتبط با هم دارند.
در یک پیادهسازی ساده با استفاده از کتابخانه NumPy در پایتون، فرآیند شامل نرمالسازی بردار پرسوجو (Query) و محاسبه حاصلضرب داخلی آن در برابر مجموعهای از بردارهای نرمالشده در دایره لغات است. در نهایت، N نتیجهای که بالاترین امتیازها را کسب کردهاند، به عنوان شبیهترین موارد از نظر معنایی بازگردانده میشوند.
چرخش در منطق جستوجو
این سازوکار، فرض بنیادی بازیابی اطلاعات را تغییر میدهد. ما از دنیای «تطبیق دقیق» (Exact Match) به دنیای «مجاورت مفهومی» (Conceptual Proximity) میرویم. برای توسعهدهنده، این یعنی کیفیت یک سیستم جستوجو اکنون بیشتر به کیفیت مدل بردارساز (Embedding Model) وابسته است تا پیچیدگی عبارت جستوجو.
برای کاربر نهایی، این فناوری نیاز به حدس زدن اصطلاحات دقیقی که نویسنده استفاده کرده است را از بین میبرد. این رویکرد شکاف بین نحوه تفکر انسان (که به صورت مفهومی است) و نحوه ذخیره داده توسط کامپیوتر (که به صورت رشتههای متنی است) را پر میکند.
گام بعدی شما
- اگر در حال ساخت یک سیستم تولید بازیابیافزا (RAG) — مثل دانشآموزی که قبل از جواب دادن، اول کتاب درسی را باز میکند و از آن نقل میآورد — هستید، اولویت بعدی شما باید انتخاب یک پایگاهداده برداری (Vector Database) باشد که محاسبات کسینوسی را در مقیاس بالا بهینه کند.
- بررسی کنید که آیا مدل بردارساز فعلی شما برای دامنه تخصصی شما (مثلاً پزشکی یا حقوقی) تنظیم شده است یا خیر.
- تفاوت نتایج جستوجوی متنی (Keyword) و معنایی (Semantic) را در دادههای خود مقایسه کنید تا نقاط ضعف هر کدام را بشناسید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است؛ در روز هفدهم بررسی خواهیم کرد که معماریهای شبکه عصبی چگونه بهطور خاص برای بهینهسازی و پالایش این فضاهای برداری بازطراحی میشوند.




گفتگو