شیدهوش
فصل ۳ · درس ۶ از ۱۲

۶. امبدینگ و شباهت معنایی

دو جمله می‌توانند هیچ کلمهٔ مشترکی نداشته باشند و یک معنا بدهند — یا همهٔ کلمه‌هایشان یکی باشد و دو معنای متضاد. برای سنجیدن «معنا» باید متن را به عدد تبدیل کنیم. به این عددها امبدینگ می‌گویند.

زمان مطالعه: ۲۴ دقیقهمرجع در کتاب: فصل ۳، بخش‌های Semantic similarity و Introduction to Embedding — صفحهٔ ۲۶۴

ظاهر یا معنا؟

شباهت واژگانی می‌سنجد دو متن چقدر شبیه به نظر می‌رسند، نه اینکه چقدر یک معنا دارند. «چه خبر؟» و «حالت چطوره؟» تقریباً هیچ کلمهٔ مشترکی ندارند، ولی معنایشان نزدیک است.

برعکسش هم هست. جملهٔ معروف «بخشش لازم نیست، اعدامش کنید» و «بخشش، لازم نیست اعدامش کنید» دقیقاً همان کلمه‌ها را دارند و فقط جای یک ویرگول فرق کرده — ولی سرنوشت یک آدم را عوض می‌کند. هر سنجهٔ واژگانی این دو را «تقریباً یکسان» می‌بیند.

شباهت معنایی می‌خواهد خود معنا را مقایسه کند. برای این کار اول هر متن را به یک نمایش عددی تبدیل می‌کند که به آن امبدینگ (embedding) می‌گویند. برای همین به شباهت معنایی «شباهت امبدینگ» هم می‌گویند.

امبدینگ چیست؟

کامپیوترها با عدد کار می‌کنند. امبدینگ یک نمایش عددی است که تلاش می‌کند معنای داده را نگه دارد. امبدینگ یک بردار است — یعنی فهرستی از عددها. مثلاً جملهٔ «گربه روی فرش نشسته» ممکن است این‌طور نمایش داده شود: [0.11, 0.02, 0.54]. در واقعیت این فهرست بین صد تا ده هزار عدد دارد.

طول ۱۰٬۰۰۰ زیاد به نظر می‌رسد، ولی از بُعد دادهٔ خام خیلی کمتر است؛ برای همین امبدینگ را نمایش داده در فضایی کم‌بُعدتر می‌دانند. به‌جز مدل‌های امبدینگ سند، مدل‌هایی مثل word2vec و GloVe برای واژه امبدینگ می‌سازند.

مدلطول امبدینگ
BERT گوگلbase: ۷۶۸ · large: ۱۰۲۴
CLIPContrastive Language–Image Pre-trainingپیش‌آموزش تقابلی زبان و تصویر از OpenAIتصویر: ۵۱۲ · متن: ۵۱۲
API امبدینگ OpenAItext-embedding-3-small: ۱۵۳۶ · large: ۳۰۷۲
Embed v3 از Cohereenglish-v3.0: ۱۰۲۴ · light-3.0: ۳۸۴

یادتان هست در درس ۳ فصل ۲، اولین لایهٔ ترنسفورمر «لایهٔ امبدینگ» بود؟ هر مدل زبانی هم در درونش امبدینگ می‌سازد و اگر به لایه‌های میانی‌اش دسترسی داشته باشید می‌توانید از آن‌ها امبدینگ بیرون بکشید. ولی معمولاً امبدینگ مدل‌هایی که مخصوص همین کار آموزش دیده‌اند بهتر است.

شباهت کسینوسی

حالا دو متن را چطور مقایسه کنیم؟ امبدینگ هر دو را حساب کنید و زاویهٔ بین دو بردار را بسنجید. سنجهٔ رایج شباهت کسینوسی است: دو بردار کاملاً هم‌جهت نمرهٔ ۱ می‌گیرند، دو بردار بی‌ربط حدود ۰، و دو بردار کاملاً مخالف ۱-.

گربه روی فرش نشستهسگ روی چمن بازی می‌کندپژوهش هوش مصنوعی جذاب استزاویهٔ کوچک بین دو بردار ← کسینوس نزدیک ۱ ← معنای نزدیکبردارهای واقعی صدها یا هزاران بُعد دارند؛ این‌جا فقط دو بُعد کشیده شده
سه جمله در یک فضای امبدینگ (ساده‌شده به دو بُعد). «گربه» و «سگ» دربارهٔ حیوان‌اند و بردارشان زاویهٔ کمی دارد؛ جملهٔ پژوهش هوش مصنوعی جهت دیگری دارد.
cosine_demo.py
import math


def cosine(a, b):
    dot = sum(x * y for x, y in zip(a, b))       # ضرب داخلی
    na = math.sqrt(sum(x * x for x in a))        # طول بردار a
    nb = math.sqrt(sum(y * y for y in b))        # طول بردار b
    return dot / (na * nb)


print(cosine([1, 2, 3], [2, 4, 6]))     # 1.0  — هم‌جهت
print(cosine([1, 0], [0, 1]))           # 0.0  — بی‌ربط
print(cosine([1, 2], [-1, -2]))         # -1.0 — مخالف
این تکهیعنی چه
zip(a, b)عددهای هم‌جای دو بردار را جفت کن: اولی با اولی، دومی با دومی…
sum(x * y ...)ضرب داخلی: ضرب هر جفت و جمع همه. هرچه دو بردار هم‌جهت‌تر، بزرگ‌تر
math.sqrt(sum(x * x ...))طول بردار (با قضیهٔ فیثاغورس). تقسیم بر طول‌ها باعث می‌شود فقط جهت مهم باشد، نه بزرگی
فرمول
cos(A, B) = (A · B) / (‖A‖ ‖B‖)
‖A‖ = √(0.11² + 0.02² + 0.54²)    # برای A = [0.11, 0.02, 0.54]

سنجه‌های معروف این خانواده BERTScore و MoverScore‌اند. شباهت معنایی به فهرست کامل پاسخ‌های مرجع نیاز ندارد، چون پاسخ هم‌معنی با کلمه‌های دیگر هم نمرهٔ بالا می‌گیرد.

امبدینگ خوب چیست؟

بردار [0.11, 0.02, 0.54] هیچ شباهتی به جملهٔ «گربه روی فرش نشسته» ندارد. پس از کجا بفهمیم امبدینگی خوب است؟ قاعدهٔ کلی: متن‌های شبیه‌تر باید امبدینگ‌های نزدیک‌تری داشته باشند. امبدینگ «گربه روی فرش نشسته» باید به «سگ روی چمن بازی می‌کند» نزدیک‌تر باشد تا به «پژوهش هوش مصنوعی خیلی جذاب است».

راه دوم، سنجیدن فایدهاش در کار شماست: دسته‌بندی، پیشنهاد، جست‌وجو یا RAGRetrieval-Augmented Generationتولید تقویت‌شده با بازیابی. آزمون MTEBMassive Text Embedding Benchmarkآزمون گستردهٔ امبدینگ متن کیفیت امبدینگ‌ها را در ده‌ها کار مختلف می‌سنجد.

امبدینگ فقط مال متن نیست. فروشگاه‌های اینترنتی برای محصول‌ها امبدینگ دارند و Pinterest برای تصویر، جست‌وجو و حتی کاربر. مرز تازه، امبدینگ مشترک برای چند نوع داده است: CLIP تصویر و متن را در یک فضا می‌گذارد، طوری که امبدینگ عکس یک ماهیگیر به امبدینگ متن «ماهیگیر» نزدیک باشد تا به «نمایش مد». همین امکان «جست‌وجوی عکس با متن» را می‌دهد. ImageBind این کار را برای شش نوع داده — از جمله صدا — انجام می‌دهد.

جفت آموزشی: عکس ماهیگیررمزگذار تصویرامبدینگ تصویرجفت آموزشی: متن «یک ماهیگیر»رمزگذار متنامبدینگ متنفضای مشترکنزدیک همهدف آموزش: امبدینگ یک عکس به امبدینگ متن همان عکس نزدیک شود.
معماری CLIP: عکس و متنی که کنار هم آمده‌اند با دو رمزگذار جدا امبدینگ می‌شوند و در فضایی مشترک به هم نزدیک می‌شوند.

ULIP متن، تصویر و ابر نقطهٔ سه‌بعدی را یک‌جا می‌آورد. در فضای مشترک متن-تصویر، جست‌وجوی عکس با متن ممکن می‌شود: نزدیک‌ترین عکس‌ها به یک متن را پیدا می‌کنید. شباهت معنایی برای هر نوع داده‌ای کار می‌کند؛ برای متن گاهی به آن شباهت معنایی متن می‌گویند.

امبدینگ کوچک ذهن‌یار

در درس ۱۱ یک امبدینگ ساده از صفر می‌سازیم، بر پایهٔ یک ایدهٔ قدیمی زبان‌شناسی: «معنای هر واژه را از همسایه‌هایش بشناس.» اگر «دما» و «top-p» در درس‌ها مدام کنار واژه‌های مشترکی مثل «احتمال» و «نمونه‌برداری» بیایند، بردارشان هم شبیه می‌شود — بی‌آنکه کسی به مدل گفته باشد این دو به هم ربط دارند. مدل‌های امبدینگ واقعی همین ایده را روی میلیاردها جمله و با شبکه‌های عصبی پیاده می‌کنند.

آزمایشگاه درس قبل را این بار با نمونه‌های معنایی امتحان کنید و به نوار آخر — شباهت معنایی — نگاه کنید:

خودآزمایی

کدام جفت را شباهت معنایی می‌تواند نزدیک ببیند ولی شباهت واژگانی نه؟
شباهت کسینوسی دو امبدینگ ۱- است. یعنی…
از کجا بفهمیم یک الگوریتم امبدینگ خوب است؟

مرور فلش‌کارت‌های این درس

تعریف

امبدینگ چیست؟

برای دیدن پاسخ کلیک کنید یا Space بزنید

کارت ۱ از ۸

آکادمی هوش مصنوعی شیدهوش — بخشی از shidhoosh.com