1. معرفی به Embeddings

1.1. چیستی Embeddings

در حوزه یادگیری ماشین، به ویژه در حل مسائل پردازش زبان طبیعی (NLP)، Embeddings یک تکنیک است که به منظور تبدیل داده‌های متنی به بردارهای عددی استفاده می‌شود. در زبان انسان، معنای کلمات و عبارات توسط متن‌واژه و استفاده آن‌ها تعیین می‌شود. هدف Embeddings این است که معنای این واحدهای زبانی را ضبط کند و امکان درک و پردازش آن‌ها را برای رایانه فراهم کند.

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

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

1.2. کاربردهای Embeddings

Embeddings به طور گسترده در صحنه‌های مختلف مورد استفاده قرار می‌گیرند. در زیر چند کاربرد اصلی ذکر شده است:

  1. جستجو: استفاده از ویژگی‌های Embeddings برای رتبه‌بندی نتایج جستجو بر اساس ارتباط آن‌ها با متن پرس‌وجو.
  2. خوشه‌بندی: Embeddings می‌تواند به تشخیص و طبقه‌بندی قطعه‌های متنی با معانی مشابه کمک کند.
  3. سیستم‌های پیشنهادی: پیشنهاد دادن موارد بر اساس شباهت، به کشف و پیشنهاد دادن سایر موارد مشابه به موارد شناخته‌شده کمک می‌کند.
  4. تشخیص نقض: Embeddings می‌تواند برای تشخیص نقاط داده به طور چشمگیری متفاوت از مجموعه داده اصلی استفاده شود.
  5. اندازه‌گیری تنوع: Embeddings همچنین می‌توانند برای تحلیل توزیع شباهت بین متن‌های مختلف استفاده شوند.
  6. دسته‌بندی: تطبیق متن با یک مجموعه Embeddings برچسب شناخته شده برای دسته‌بندی آن را در بیشترین شباهت ممکن قرار دهد.

2. معرفی به Embeddings OpenAI

2.1. بررسی اجمالی مدل‌های Embeddings OpenAI

OpenAI مدل‌های Embeddings نسل سوم را ارائه می‌دهد که شامل text-embedding-3-small و text-embedding-3-large می‌شود. این مدل‌ها بر اساس تکنولوژی یادگیری عمیق منحصربه‌فرد OpenAI ساخته شده‌اند و هدف آن‌ها ارائه عملکرد بسیار چندزبانه و همچنین تلاش برای کاهش هزینه است.

این مدل‌ها ویژگی‌های منحصربه‌خود را در پردازش Embeddings دارند. به عنوان مثال text-embedding-3-small بردارهای Embedding 1536 بعدی را ارائه می‌دهد، در حالی که text-embedding-3-large بردارهای Embedding 3072 بعدی را فراهم می‌کند تا ویژگی‌های متن پیچیده‌تر را پوشش دهد. با تنظیم پارامترها، بعدیت Embeddings می‌تواند کنترل شود تا با نیازهای خاصی از سناریوهای کاربردی مطابقت داشته باشد.

2.2. انتخاب و استفاده از مدل

انتخاب مدل Embedding مناسب بستگی به نیازهای خاص برنامه دارد. در زیر نحوه انتخاب در سناریوهای کاربردی مختلف آورده شده است:

  1. در سناریوهای متمرکز بر عملکرد: اگر نیاز به گرفتن اطلاعات معنایی دقیق‌تری دارید، مانند در سیستم‌های پیشنهاد دقیق یا دسته‌بندی متن با دقت بالا، معمولا توصیه می‌شود که از text-embedding-3-large استفاده شود. با اینکه این مدل گرانتر از مدل‌های کوچک‌تر است، اما می‌تواند نمایشی غنی از ویژگی‌های متنی فراهم کند.

  2. در برنامه‌های حساس به هزینه: برای برنامه‌هایی که نیاز به پردازش مقدار زیادی از داده دارند اما نیاز به دقت ویژه‌ای ندارند، مانند بررسی اولیه داده یا پروتونیپ‌سازی سریع، استفاده از text-embedding-3-small یک انتخاب اقتصادی‌تر است. این مدل عملکرد نسبتا بالایی را حفظ می‌کند در حالیکه هزینه‌ها را به طور قابل توجهی کاهش می‌دهد.

  3. محیط‌های چندزبانه: این مدل‌های Embeddings عملکرد چندزبانه بالایی دارند که آن‌ها را در سناریوهای متقاطع‌زبانی یا چندزبانه کاربردی می‌کند و انتخاب ایده‌آلی برای برنامه‌های جهانی می‌شود.

انتخاب مدل Embedding مناسب بستگی به نیازهای خاص، پیچیدگی داده و نقطه تعادل مورد نظر بین عملکرد و هزینه مدنظر است.

3. چگونگی استفاده از Embeddings

3.1 استفاده از curl برای فراخوانی API های Embeddings

curl ابزار خط فرمانی معمول برای ارسال درخواست‌های HTTP می‌باشد. در مثال زیر نشان داده شده است که چگونه از curl برای دریافت بازنمایی توکن استفاده می‌شود:

curl https://api.openai.com/v1/embeddings \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $OPENAI_API_KEY" \
    -d '{
        "input": "یادگیری ماشین یکی از شاخه‌های هوش مصنوعی است.",
        "model": "text-embedding-3-small"
    }'

در دستور بالا، متغیر $OPENAI_API_KEY شامل کلید API OpenAI کاربر می‌باشد که برای استفاده واقعی باید با یک کلید معتبر جایگزین شود.

پس از اجرای این دستور، API Embeddings OpenAI یک پاسخ شامل بازنمایی توکن متن را برمی‌گرداند. یک مثال از نتیجه فراخوانی API به صورت زیر است:

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [  // اینجا بردار ویژگی است
        -0.006929283495992422,
        -0.005336422007530928,
        ...  // اعداد باقی‌مانده برای نمایش حذف شده است
        -4.547132266452536e-05,
        -0.024047505110502243
      ]
    }
  ],
  "model": "text-embedding-3-small",
  "usage": {
    "prompt_tokens": 5,
    "total_tokens": 5
  }
}

3.2 استفاده از مشتری Python برای فراخوانی Embeddings API

علاوه بر استفاده از curl برای مستقیم فراخوانی API از خط فرمان، شما می‌توانید از یک مشتری Python استفاده کنید. این نیاز به ابتدا نصب کتابخانه رسمی openai دارد. در زیر یک مثال از گرفتن جانماهای متن با استفاده از Python آورده شده است:

import openai

openai.api_key = 'YOUR_OPENAI_API_KEY'  # با کلید API OpenAI خود جایگزین کنید

response = openai.Embedding.create(
  input="هوش مصنوعی دنیا را تغییر می‌دهد.",
  model="text-embedding-3-small"
)

vector_embedding = response['data'][0]['embedding']
print(vector_embedding)

با اجرای این اسکریپت Python، یک بردار جانما مشابه استفاده از curl دریافت خواهید کرد. این بردار یک لیست اعداد ممیز‌شناور است که نمایش عددی متن ورودی را در فضای جانما می‌کند.

نتیجه فراخوانی به صورت زیر است:

[-0.0032198824, 0.0022555287, ..., 0.0015886585, -0.0021505365]

3.2 عملیات بردارهای جانما

OpenAI تنها مدل محاسبه بردارهای جانما متن‌ها را ارائه می‌دهد. اگر می‌خواهید از جانما برای اجرای عملیاتی مانند جستجوی هم‌معنای متن استفاده کنید، نیاز به یادگیری درباره پایگاه داده‌های برداری مانند Qdrant، Chroma و Milvus دارید.

لطفا به آموزش‌های پایگاه داده‌های برداری زیر مراجعه کنید: