۶. امبدینگ و شباهت معنایی
دو جمله میتوانند هیچ کلمهٔ مشترکی نداشته باشند و یک معنا بدهند — یا همهٔ کلمههایشان یکی باشد و دو معنای متضاد. برای سنجیدن «معنا» باید متن را به عدد تبدیل کنیم. به این عددها امبدینگ میگویند.
ظاهر یا معنا؟
شباهت واژگانی میسنجد دو متن چقدر شبیه به نظر میرسند، نه اینکه چقدر یک معنا دارند. «چه خبر؟» و «حالت چطوره؟» تقریباً هیچ کلمهٔ مشترکی ندارند، ولی معنایشان نزدیک است.
برعکسش هم هست. جملهٔ معروف «بخشش لازم نیست، اعدامش کنید» و «بخشش، لازم نیست اعدامش کنید» دقیقاً همان کلمهها را دارند و فقط جای یک ویرگول فرق کرده — ولی سرنوشت یک آدم را عوض میکند. هر سنجهٔ واژگانی این دو را «تقریباً یکسان» میبیند.
شباهت معنایی میخواهد خود معنا را مقایسه کند. برای این کار اول هر متن را به یک نمایش عددی تبدیل میکند که به آن امبدینگ (embedding) میگویند. برای همین به شباهت معنایی «شباهت امبدینگ» هم میگویند.
امبدینگ چیست؟
کامپیوترها با عدد کار میکنند. امبدینگ یک نمایش عددی است که تلاش میکند معنای داده را نگه دارد. امبدینگ یک بردار است — یعنی فهرستی از عددها. مثلاً جملهٔ «گربه روی فرش نشسته» ممکن است اینطور نمایش داده شود: [0.11, 0.02, 0.54]. در واقعیت این فهرست بین صد تا ده هزار عدد دارد.
طول ۱۰٬۰۰۰ زیاد به نظر میرسد، ولی از بُعد دادهٔ خام خیلی کمتر است؛ برای همین امبدینگ را نمایش داده در فضایی کمبُعدتر میدانند. بهجز مدلهای امبدینگ سند، مدلهایی مثل word2vec و GloVe برای واژه امبدینگ میسازند.
| مدل | طول امبدینگ |
|---|---|
| BERT گوگل | base: ۷۶۸ · large: ۱۰۲۴ |
| CLIPContrastive Language–Image Pre-trainingپیشآموزش تقابلی زبان و تصویر از OpenAI | تصویر: ۵۱۲ · متن: ۵۱۲ |
| API امبدینگ OpenAI | text-embedding-3-small: ۱۵۳۶ · large: ۳۰۷۲ |
| Embed v3 از Cohere | english-v3.0: ۱۰۲۴ · light-3.0: ۳۸۴ |
یادتان هست در درس ۳ فصل ۲، اولین لایهٔ ترنسفورمر «لایهٔ امبدینگ» بود؟ هر مدل زبانی هم در درونش امبدینگ میسازد و اگر به لایههای میانیاش دسترسی داشته باشید میتوانید از آنها امبدینگ بیرون بکشید. ولی معمولاً امبدینگ مدلهایی که مخصوص همین کار آموزش دیدهاند بهتر است.
شباهت کسینوسی
حالا دو متن را چطور مقایسه کنیم؟ امبدینگ هر دو را حساب کنید و زاویهٔ بین دو بردار را بسنجید. سنجهٔ رایج شباهت کسینوسی است: دو بردار کاملاً همجهت نمرهٔ ۱ میگیرند، دو بردار بیربط حدود ۰، و دو بردار کاملاً مخالف ۱-.
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 این کار را برای شش نوع داده — از جمله صدا — انجام میدهد.
ULIP متن، تصویر و ابر نقطهٔ سهبعدی را یکجا میآورد. در فضای مشترک متن-تصویر، جستوجوی عکس با متن ممکن میشود: نزدیکترین عکسها به یک متن را پیدا میکنید. شباهت معنایی برای هر نوع دادهای کار میکند؛ برای متن گاهی به آن شباهت معنایی متن میگویند.
امبدینگ کوچک ذهنیار
در درس ۱۱ یک امبدینگ ساده از صفر میسازیم، بر پایهٔ یک ایدهٔ قدیمی زبانشناسی: «معنای هر واژه را از همسایههایش بشناس.» اگر «دما» و «top-p» در درسها مدام کنار واژههای مشترکی مثل «احتمال» و «نمونهبرداری» بیایند، بردارشان هم شبیه میشود — بیآنکه کسی به مدل گفته باشد این دو به هم ربط دارند. مدلهای امبدینگ واقعی همین ایده را روی میلیاردها جمله و با شبکههای عصبی پیاده میکنند.
آزمایشگاه درس قبل را این بار با نمونههای معنایی امتحان کنید و به نوار آخر — شباهت معنایی — نگاه کنید:
خودآزمایی
مرور فلشکارتهای این درس
امبدینگ چیست؟
برای دیدن پاسخ کلیک کنید یا Space بزنید
کارت ۱ از ۸