مقدمة إلى التضمين

1.1. ما هي التضمينات

التضمينات، في مجال تعلم الآلة، وخاصة في معالجة مشاكل معالجة اللغة الطبيعية (NLP)، هي تقنية لتحويل البيانات النصية إلى متجهات عددية. في اللغة البشرية، يتم تحديد معنى الكلمات والعبارات بواسطة سياقها واستخدامها. هدف التضمينات هو التقاط معاني هذه الوحدات اللغوية، مما يمكن الكمبيوتر من فهمها ومعالجتها.

الفكرة الأساسية للتضمينات هي ربط الكلمات ذات المعاني المشابهة بنقاط قريبة في الفضاء الرياضي، ممثلة الكلمات كنقاط في فضاء عالي الأبعاد. بهذه الطريقة، ستكون الكلمات ذات المعاني القريبة (مثل "ملك" و"ملكة") قريبة في الفضاء. عادةً، تتألف التضمينات من مصفوفات عائمة النقطة، مما يسمح حتى للشظايا النصية المختلفة تمامًا (مثل "كلب" و"كلبي") بأن تكون لديها تمثيلات تضمينية مماثلة.

نصيحة: بوصفك مطور تطبيقات، يمكنك ببساطة فهم أن تشابه متجه التضمين لجملتي نص معاني متشابهة عالي.

1.2. تطبيقات التضمينات

تُستخدم التضمينات على نطاق واسع في مختلف السيناريوهات، وإليك بعض حالات الاستخدام الرئيسية:

  1. البحث: استخدام ميزات التضمين لتصنيف نتائج البحث استنادًا إلى ارتباطها بنص الاستعلام.
  2. التجميع: يمكن أن تساعد التضمينات في تحديد وتصنيف الشظايا النصية ذات المعاني المشابهة.
  3. أنظمة التوصية: يمكن أن يساعد توصيف العناصر بناءً على التشابه في اكتشاف وتوصية العناصر الأخرى المشابهة لتلك المعروفة.
  4. كشف الشذوذ: يمكن استخدام التضمينات لتحديد نقاط البيانات المختلفة بشكل كبير عن البيانات الرئيسية.
  5. قياس التنوع: يمكن استخدام التضمينات أيضًا لتحليل توزيع التشابه بين النصوص المختلفة.
  6. التصنيف: مقارنة النص مع مجموعة من تضمينات العلامات المعروفة لتصنيفه في الفئة الأكثر تشابهًا.

2. مقدمة إلى تضمينات OpenAI

2.1. نظرة عامة على نماذج تضمينات OpenAI

توفر OpenAI نماذج تضمينات من الجيل الثالث، بما في ذلك "text-embedding-3-small" و"text-embedding-3-large". تم بناء هذه النماذج باستخدام تكنولوجيا الشبكات العصبية العميقة الفريدة لدى OpenAI، بهدف توفير أداء متعدد اللغات بشكل كبير مع محاولة تقليل التكاليف.

تتمتع هذه النماذج بخصائص فريدة عند معالجة التضمينات. على سبيل المثال، تقدم "text-embedding-3-small" نواتج تضمينية بأبعاد 1536، بينما توفر "text-embedding-3-large" نواتج تضمينية بأبعاد 3072 لتغطية مزيد من الملامح النصية المعقدة. من خلال ضبط المعلمات، يمكن التحكم في بُعد التضمينات لتلبية احتياجات السيناريوات التطبيقية المحددة.

2.2. اختيار النموذج واستخدامه

يعتمد اختيار النموذج التضمين المناسب على متطلبات التطبيق المحدد. إليك كيفية اتخاذ الاختيار في سيناريوهات التطبيق المختلفة:

  1. في السيناريوهات المركزة على الأداء: إذا كنت بحاجة إلى التقاط مزيد من المعلومات الدقيقة الدلالية، مثل في أنظمة التوصية دقيقة أو تصنيف النصوص عالية الدقة، فمن المعتاد عادةً استخدام "text-embedding-3-large". على الرغم من أنه أكثر تكلفة من النماذج الأصغر حجمًا، إلا أنه يمكنه توفير تمثيل أكثر غنى للملامح النصية.

  2. في التطبيقات المحدودة التكاليف: بالنسبة للتطبيقات التي تتطلب معالجة كميات كبيرة من البيانات ولكن ليست لديها متطلبات دقة خاصة، مثل استكشاف البيانات الأولية أو إنشاء النماذج الأولية بسرعة، "text-embedding-3-small" هو خيار أكثر اقتصادية. إنه يحتفظ بأداء نسبياً عالي في حين يقلل بشكل كبير من التكاليف.

  3. في بيئات متعددة اللغات: تتمتع هذه النماذج بأداء متعدد اللغات، مما يجعلها مفيدة بشكل خاص في سيناريوهات عبر اللغات أو متعددة اللغات، مما يجعلها خيارًا مثاليًا للتطبيقات العالمية.

سيعتمد اختيار النموذج التضمين المناسب على المتطلبات المحددة وتعقيد البيانات ونقطة التوازن المطلوبة بين الأداء والتكلفة.

3. كيفية استخدام التضمينات

3.1 استخدام أداة curl لاستدعاء واجهة برمجة التطبيقات (API) للتضمين

curl هي أداة سطر الأوامر المستخدمة بشكل شائع لإرسال طلبات HTTP. يُظهر المثال التالي كيفية استخدام curl للحصول على تمثيل التضمين للنص:

curl https://api.openai.com/v1/embeddings \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $OPENAI_API_KEY" \
    -d '{
        "input": "Machine learning is a branch of artificial intelligence.",
        "model": "text-embedding-3-small"
    }'

في الأمر أعلاه, المتغير $OPENAI_API_KEY يحتوي على مفتاح API الخاص بالمستخدم، والذي يجب استبداله بمفتاح صالح للاستخدام الفعلي.

بعد تنفيذ هذا الأمر، ستقوم واجهة برمجة التطبيقات لتضمين OpenAI بإرجاع استجابة تحتوي على تمثيل التضمين للنص. ها هو مثال على نتيجة استدعاء واجهة برمجة التطبيقات:

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [  // هنا توجد متجه الخاصية
        -0.006929283495992422,
        -0.005336422007530928,
        ...  // Remaining numbers omitted for display
        -4.547132266452536e-05,
        -0.024047505110502243
      ]
    }
  ],
  "model": "text-embedding-3-small",
  "usage": {
    "prompt_tokens": 5,
    "total_tokens": 5
  }
}

3.2 استخدام العميل Python لاستدعاء واجهة برمجة التطبيقات للتضمين

بالإضافة إلى استخدام curl لاستدعاء الواجهة المباشرة من سطر الأوامر، يمكنك أيضًا استخدام عميل Python. هذا يتطلب تثبيت مكتبة openai الرسمية أولاً. فيما يلي مثال على كيفية الحصول على تضمين النصوص باستخدام Python:

import openai

openai.api_key = 'YOUR_OPENAI_API_KEY'  # استبداله بمفتاح OpenAI API الخاص بك

response = openai.Embedding.create(
  input="Artificial intelligence is changing the world.",
  model="text-embedding-3-small"
)

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

من خلال تشغيل هذا السيناريو بالبايثون، ستحصل على متجه تضمين مماثل كما هو الحال عند استخدام curl. هذا المتجه هو قائمة من الأرقام عشرية تمثل التمثيل العددي للنص المُدخل في الفضاء التضمين.

نتيجة الاستدعاء هي كما يلي:

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

3.2 التعامل مع متجهات التضمين

OpenAI تقدم نموذج حساب تضمين النصوص فقط. إذا كنت ترغب في استخدام التضمين لتنفيذ وظائف مثل البحث عن التشابه بين النصوص، فيجب عليك أن تتعلم عن قواعد البيانات المتجهة، مثل Qdrant وChroma وMilvus.

يرجى الرجوع إلى دروس قواعد البيانات المتجهة التالية: