GeekAlerts

جایی برای گیک‌ها

·

همه‌چیز درباره امبدینگ (Embedding)

همه‌چیز درباره امبدینگ (Embedding)

نام درس: آشنایی با امبدینگ (Embedding) و بردارهای معنایی

مدت زمان مطالعه: حدود ۱۲ دقیقه

پیش‌نیازها: آشنایی خیلی کلی با مفاهیم هوش مصنوعی. لازم نیست برنامه‌نویس باشید.

اهداف این درس:

  • یاد میگیریم امبدینگ دقیقا چی هست و چرا انقدر در هوش مصنوعی مهمه.
  • می‌بینیم که چطور میشه کلمات و جمله‌ها رو به زبان اعداد ترجمه کرد.
  • با مفهوم «فاصله کسینوسی» آشنا میشیم و می‌فهمیم چطور شباهت بین جمله‌ها رو اندازه می‌گیره.
  • چندتا از کاربردهای اصلی امبدینگ در دنیای واقعی مثل جستجوی هوشمند و سیستم‌های پیشنهادگر رو بررسی می‌کنیم.

فصل اول: امبدینگ یعنی چی؟ یکم ساده‌اش کنیم

بذارید خیلی ساده و راحت شروع کنیم. کامپیوترها، با همه هوش و ذکاوتی که به نظر میرسه دارن، در اصل با کلمات و جمله‌های ما میونه خوبی ندارن. اونها دنیای اعداد رو میفهمن. پس وقتی ما یک جمله مثل «امروز هوا خیلی خوبه» رو به یک مدل هوش مصنوعی میدیم، اون مدل نمیتونه مستقیم با خود این کلمات کار کنه. اولین قدم اینه که این جمله به یک فرمت عددی تبدیل بشه که برای کامپیوتر قابل درک باشه.

اینجاست که مفهومی به اسم امبدینگ (Embedding) وارد بازی میشه. امبدینگ در واقع یک جور نماینده یا یک نسخه عددی از یک مفهوم، کلمه یا جمله است. فکر کنید ما به هر کلمه یا هر مفهومی یک سری مختصات عددی در یک فضای چند بعدی میدیم. این اعداد الکی و شانسی انتخاب نمیشن. اونها طوری طراحی شدن که روابط معنایی بین کلمات رو حفظ کنن.

یعنی چی؟ یعنی کلماتی که از نظر معنایی به هم نزدیک هستن، بردارهای عددی یا همون امبدینگ‌های شبیه به همی دارن. مثلا امبدینگ کلمه «گربه» به امبدینگ کلمه «سگ» خیلی نزدیک‌تره تا به امبدینگ کلمه «ماشین». این لیست‌های بلند از اعداد که نماینده کلمات ما هستن رو بردار یا وکتور (Vector) صدا میزنیم. پس به زبان ساده، امبدینگ یعنی تبدیل کردن متن به بردار.

این فرایند به مدل‌های هوش مصنوعی اجازه میده تا «معنی» پشت کلمات رو درک کنن و بتونن شباهت‌ها و تفاوت‌های بین جمله‌های مختلف رو تحلیل کنن.

فصل دوم: بیایید یکم عملی کار کنیم

خب، تئوری کافیه. بیایید ببینیم این فرایند در عمل چطور اتفاق میفته. برای این کار، مدل‌های هوش مصنوعی خاصی وجود دارن که وظیفه‌شون دقیقا همینه: گرفتن یک متن و تحویل دادن یک بردار عددی. یکی از مدل‌های معروف برای این کار، مدلی به اسم sentence-transformers/all-MiniLM-L6-v2 هست. اسمش شاید یکم عجیب به نظر برسه، اما کارش خیلی سرراسته.

این مدل هر جمله‌ای که بهش بدید رو میگیره و در خروجی یک لیست ۳۸۴ تایی از اعداد به شما میده. به عبارت دیگه، هر جمله رو به یک بردار ۳۸۴ بعدی تبدیل میکنه. هر کدوم از این ۳۸۴ عدد، یک ویژگی یا یک بُعد از معنای اون جمله رو نشون میده.

برای مثال، دو تا جمله زیر رو در نظر بگیرید:

  • جمله اول: «The cat sits on the mat» (گربه روی حصیر نشسته است)
  • جمله دوم: «The dog eats my homework» (سگ تکالیف من را میخورد)

وقتی این دو جمله رو به مدل all-MiniLM-L6-v2 میدیم، دو تا بردار ۳۸۴ بعدی به ما برمیگردونه. هر بردار یک لیست خیلی طولانی از اعداد اعشاری مثل [۰.۰۰۷۲, -۰.۰۲۱, ۰.۰۵۵, ...] هست. این لیست‌ها همون امبدینگ‌های جملات ما هستن.

حالا ما برای هر جمله یک نماینده عددی داریم. سوال بعدی اینه که چطور بفهمیم این دو تا نماینده عددی چقدر به هم شبیه هستن؟ این موضوع ما رو به فصل بعدی میرسونه.

فصل سوم: فاصله کسینوسی، خط‌کش دنیای بردارها

حالا که برای هر جمله یک بردار طولانی از اعداد داریم، باید یک راهی پیدا کنیم تا شباهت بین این بردارها رو اندازه بگیریم. اینجا مفهومی به اسم شباهت کسینوسی (Cosine Similarity) یا فاصله کسینوسی (Cosine Distance) به کمک ما میاد.

شباهت کسینوسی یک فرمول ریاضیه که زاویه بین دو بردار رو در یک فضای چند بعدی اندازه میگیره. خروجی این فرمول عددی بین ۱- و ۱+ هست.

  • اگر شباهت کسینوسی دو بردار نزدیک به ۱ باشه: یعنی زاویه بین اونها خیلی کمه و این دو بردار تقریبا در یک جهت هستن. در دنیای امبدینگ، این یعنی دو جمله از نظر معنایی خیلی به هم شبیه هستن.
  • اگر شباهت کسینوسی نزدیک به ۰ باشه: یعنی دو بردار تقریبا به هم عمود هستن و ارتباط معنایی خاصی با هم ندارن.
  • اگر شباهت کسینوسی نزدیک به ۱- باشه: یعنی دو بردار دقیقا در خلاف جهت هم هستن و معنای متضادی دارن.

بیایید با چند مثال ببینیم این مفهوم چطور کار میکنه. فرض کنید شباهت کسینوسی جملات زیر رو با همون مدل قبلی حساب کردیم:

جمله اولجمله دومشباهت کسینوسیتحلیل
«I am a sentence for an example»«I am a sentence for an example»۱.۰۰۰دو جمله کاملا یکسان هستن، پس شباهت‌شون بیشترین مقدار ممکن یعنی ۱ است.
«The cat sits on the mat»«The dog eats my homework»۰.۶۰۲هر دو جمله درباره حیوانات خانگی هستن و ساختار گرامری مشابهی دارن. شباهت نسبتا بالایی دارن.
«A man is eating food»«A man is eating a piece of bread»۰.۷۶۲این دو جمله از نظر معنایی خیلی به هم نزدیک هستن. «خوردن نان» حالت خاصی از «خوردن غذا» است. برای همین شباهت بالایی دارن.
«A man is eating food»«A man is eating pasta»۰.۸۶۱اینجا شباهت حتی بیشتره. چون «پاستا» نوع مشخصی از «غذا» است و به مفهوم اصلی نزدیک‌تره.
«A man is driving a car»«A man is driving a truck»۰.۸۰۸هر دو درباره رانندگی یک وسیله نقلیه چهارچرخ هستن. شباهت معنایی خیلی بالا است.
«The cat sits on the mat»«A man is driving his car»۰.۰۱۵این دو جمله هیچ ربط معنایی به هم ندارن. یکی درباره یک حیوان خانگی و دیگری درباره رانندگی است. برای همین شباهت‌شون نزدیک به صفره.

همونطور که می‌بینید، شباهت کسینوسی ابزار قدرتمندیه که به ما اجازه میده «نزدیکی معنایی» رو به صورت یک عدد دقیق بیان کنیم.

فصل چهارم: امبدینگ به چه دردی میخوره؟ کاربردهای واقعی

خب، حالا که فهمیدیم امبدینگ چیه و چطور شباهت بین مفاهیم رو اندازه میگیره، سوال اصلی اینه که این تکنولوژی در دنیای واقعی چه کاربردهایی داره؟ امبدینگ‌ها ستون فقرات خیلی از سیستم‌های هوشمند امروزی هستن. در ادامه چندتا از مهم‌ترین کاربردهاش رو با هم بررسی می‌کنیم.

۱. جستجو (Search)

این شاید واضح‌ترین کاربرد امبدینگ باشه. موتورهای جستجوی سنتی بر اساس کلمات کلیدی کار میکنن. یعنی اگر شما کلمه «ماشین» رو جستجو کنید، فقط دنبال صفحاتی میگردن که دقیقا کلمه «ماشین» توشون باشه.

اما جستجوی معنایی یا Semantic Search که با امبدینگ کار میکنه، خیلی هوشمندتره. در این روش:

  1. اول، تمام اسناد و مدارک موجود (مثلا همه مقاله‌های یک سایت یا همه محصولات یک فروشگاه) به امبدینگ تبدیل و در یک پایگاه داده مخصوص به اسم «Vector Database» ذخیره میشن.
  2. وقتی کاربر یک عبارتی رو جستجو میکنه (مثلا «یه وسیله نقلیه برای رفت و آمد روزانه میخوام»)، عبارت کاربر هم به یک بردار امبدینگ تبدیل میشه.
  3. بعد، سیستم با استفاده از شباهت کسینوسی، بردار کاربر رو با تمام بردارهای موجود در پایگاه داده مقایسه میکنه.
  4. در نهایت، اسنادی که امبدینگ‌هاشون بیشترین شباهت رو با امبدینگ عبارت کاربر دارن، به عنوان نتیجه برگردونده میشن.

اینطوری، حتی اگر در عبارت کاربر کلمه «ماشین» یا «خودرو» وجود نداشته باشه، سیستم میفهمه که منظور کاربر چیه و نتایج مرتبط رو بهش نشون میده. این تکنیک پایه و اساس سیستم‌های RAG (Retrieval-Augmented Generation) هم هست که در اونها مدل‌های زبانی برای جواب دادن به سوالات، اول اطلاعات مرتبط رو از یک پایگاه داده استخراج میکنن.

۲. خوشه‌بندی (Clustering)

خوشه‌بندی یعنی گروه‌بندی کردن آیتم‌های مشابه با هم، بدون اینکه از قبل بدونیم این گروه‌ها چی هستن. فرض کنید هزاران نظر از مشتریان یک سایت داریم و میخوایم اونها رو دسته‌بندی کنیم تا بفهمیم مردم بیشتر درباره چه موضوعاتی حرف میزنن.

با استفاده از امبدینگ، این کار خیلی ساده میشه:

  1. همه نظرات مشتریان رو به بردارهای امبدینگ تبدیل می‌کنیم.
  2. بعد، از الگوریتم‌های خوشه‌بندی استفاده می‌کنیم تا این بردارها رو در فضای چند بعدی گروه‌بندی کنیم. بردارهایی که به هم نزدیک هستن، در یک خوشه قرار میگیرن.
  3. در نهایت، ما چندتا خوشه از نظرات داریم. مثلا یک خوشه ممکنه مربوط به نظرات درباره «کیفیت محصول» باشه، یک خوشه درباره «سرعت ارسال» و یک خوشه دیگه درباره «مشکلات پرداخت».

این روش برای تحلیل موضوعی اخبار، دسته‌بندی اسناد و بخش‌بندی مشتریان خیلی کاربرد داره.

۳. طبقه‌بندی (Classification)

طبقه‌بندی شبیه خوشه‌بندی هست، با این تفاوت که ما از قبل چندتا برچسب یا کلاس مشخص داریم و میخوایم آیتم‌های جدید رو به یکی از این کلاس‌ها اختصاص بدیم. مثلا میخوایم ایمیل‌های دریافتی رو به صورت خودکار به سه دسته «مهم»، «تبلیغات» و «اسپم» تقسیم کنیم.

روشی مثل k-NN (k-Nearest Neighbors) با امبدینگ به خوبی کار میکنه:

  1. اول تعداد زیادی ایمیل که از قبل برچسب‌گذاری شدن (مثلا ۱۰۰۰ ایمیل مهم، ۱۰۰۰ ایمیل تبلیغاتی و…) رو به امبدینگ تبدیل می‌کنیم.
  2. حالا وقتی یک ایمیل جدید و بدون برچسب میرسه، اون رو هم به امبدینگ تبدیل می‌کنیم.
  3. بعد، در فضای برداری، نزدیک‌ترین همسایه‌ها (مثلا ۵ همسایه نزدیک یا k=5) به بردار ایمیل جدید رو پیدا می‌کنیم.
  4. نگاه می‌کنیم ببینیم برچسب این ۵ همسایه بیشتر چیه. اگر مثلا ۳ تا از اونها برچسب «مهم» داشتن، ایمیل جدید هم به عنوان «مهم» طبقه‌بندی میشه.

۴. شناسایی ناهنجاری (Anomaly Detection)

شناسایی ناهنجاری یعنی پیدا کردن داده‌های پرت و غیرعادی در یک مجموعه داده. مثلا پیدا کردن تراکنش‌های بانکی مشکوک به کلاهبرداری.

امبدینگ‌ها در این زمینه هم خیلی مفید هستن. اگر ما تمام تراکنش‌های عادی یک کاربر رو به بردار تبدیل کنیم، این بردارها معمولا در یک یا چند ناحیه نزدیک به هم در فضای برداری جمع میشن (تشکیل خوشه میدن). حالا اگر یک تراکنش جدید انجام بشه و بردار امبدینگ اون خیلی دور از این خوشه‌های عادی قرار بگیره، این یک زنگ خطره. سیستم میفهمه که این تراکنش یک ناهنجاریه و با الگوهای همیشگی کاربر مطابقت نداره و میتونه اون رو برای بررسی بیشتر علامت‌گذاری کنه.

۵. سیستم‌های پیشنهادگر (Recommendation Systems)

تا حالا فکر کردید که چطور سرویس‌های پخش فیلم یا موسیقی دقیقا چیزهایی رو به شما پیشنهاد میدن که دوست دارید؟ بخش بزرگی از این جادو به لطف امبدینگ‌هاست.

در این سیستم‌ها، نه تنها برای آیتم‌ها (مثل فیلم‌ها، آهنگ‌ها یا محصولات) امبدینگ ساخته میشه، بلکه برای کاربرها هم امبدینگ تعریف میشه.

  • امبدینگ یک آیتم: ویژگی‌های اون آیتم رو نشون میده. مثلا امبدینگ یک فیلم اکشن، به امبدینگ فیلم‌های اکشن دیگه نزدیکه.
  • امبدینگ یک کاربر: سلیقه و علایق اون کاربر رو نشون میده. این بردار معمولا از میانگین بردارهای آیتم‌هایی که کاربر قبلا دوست داشته یا باهاشون تعامل داشته به دست میاد.

حالا برای اینکه سیستم یک فیلم جدید به شما پیشنهاد بده، کافیه امبدینگ شما رو با امبدینگ همه فیلم‌ها مقایسه کنه. فیلم‌هایی که بردارشون به بردار شما نزدیک‌تر باشه (یعنی شباهت کسینوسی بالایی داشته باشن)، به عنوان پیشنهاد به شما نمایش داده میشن. این روش باعث میشه پیشنهادها خیلی شخصی‌سازی شده و دقیق باشن.

منابع

  • [۱] LLM Embeddings Explained: A Visual and Intuitive Guide – a Hugging Face Space by hesamation

دیدگاه‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *