اليوم 41 من بناء عامل الذكاء الاصطناعي في 365 يوما - المحولات باستخدام كود Python
Image credits : Hugging Face

اليوم 41 من بناء عامل الذكاء الاصطناعي في 365 يوما - المحولات باستخدام كود Python

تمت ترجمة هذا المقال آليًا من اللغة الإنجليزية وقد يحتوي على معلومات غير دقيقة. معرفة المزيد
عرض النص الأصلي

في جوهرها ، تم بناء معظم LLMs على إطار عمل رائد يعرف باسم هندسة المحولات. تم تقديم هذه البنية لأول مرة في عام 2017 وتم نشرها من خلال نماذج مثل BERT من Google ، وتدور حول مفهوم رياضي قوي يسمى "الانتباه" ، والذي يسمح للنماذج بفهم سياق اللغة والفروق الدقيقة فيها بطريقة شبيهة بالإنسان بشكل ملحوظ.

ستفصل هذه المقالة المكونات الأساسية ل LLMs ، من مخططاتها المعمارية إلى العملية المعقدة التي يستخدمونها لإنشاء نص.

ثلاثة أنواع من المحولات

بنية المحولات ليست حلا واحدا يناسب الجميع. يمكن تكوينه بثلاث طرق أساسية ، كل منها مناسب لمهام مختلفة.

فيما يلي ثلاثة مقتطفات مميزة من كود Python تعرض كل نوع من نماذج المحولات أثناء العمل. لتشغيل هذه ، ستحتاج أولا إلى تثبيت مكتبة المحولات من Hugging Face.

pip install transformers torch
        

1. نماذج التشفير فقط: مستخلصات المعنى

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

مثال رائد: بيرت (تمثيلات التشفير ثنائي الاتجاه من المحولات) من Google.

حالات الاستخدام الشائعة:

  • تحليل المشاعر: تحديد ما إذا كانت مراجعة الفيلم إيجابية أم سلبية.
  • البحث الدلالي: العثور على المستندات المرتبطة من الناحية المفاهيمية باستعلام، وليس فقط المستندات التي تشترك في الكلمات الرئيسية.
  • التعرف على الكيان المسمى: تحديد الأشخاص والأماكن والمنظمات في مقالة.

الحجم النموذجي: هذه النماذج قوية ولكنها غالبا ما تكون أصغر ، وعادة ما تحتوي على ملايين المعلمات.

يستخدم هذا المثال مدربا مسبقا بيرت نموذج لإجراء تحليل المشاعر. يحلل الجملة ويصنفها على أنها إيجابية أو سلبية.

from transformers import pipeline

# Load a pre-trained sentiment analysis model (an encoder).
sentiment_analyzer = pipeline("sentiment-analysis")

# Analyze a movie review.
result = sentiment_analyzer("This movie was fantastic and the acting was superb!")

# Print the result.
# The label 'POSITIVE' and a high score indicate the model understood the positive sentiment.
print(result)
# Expected Output: [{'label': 'POSITIVE', 'score': 0.9998...}]        

2. نماذج وحدة فك التشفير فقط: منشئو المحتوى

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

مثال رائد: عائلة عارضات الأزياء اللاما من ميتا.

حالات الاستخدام الشائعة:

  • روبوتات الدردشة الذكاء الاصطناعي للمحادثة: تعزيز الحوار التفاعلي بطلاقة.
  • إنشاء المحتوى: كتابة رسائل البريد الإلكتروني والمقالات والنسخ التسويقية.
  • إنشاء الكود: مساعدة المطورين من خلال كتابة مقتطفات من كود الكمبيوتر.

الحجم النموذجي: لتحقيق قوتها التوليدية ، تكون هذه النماذج ضخمة ، وغالبا ما تحتوي على مليارات المعلمات.

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

from transformers import pipeline

# Load a pre-trained text generation model (a decoder).
text_generator = pipeline("text-generation", model="gpt2")

# Generate text based on a prompt.
# max_length controls how long the output can be.
result = text_generator("In a world powered by AI,", max_length=25)

# Print the generated text.
print(result)        

3. نماذج جهاز التشفير وفك التشفير: المترجمون والملخصون

يعرف أيضا باسم التسلسل إلى التسلسل (Seq2Seq) النماذج ، تجمع هذه البنية بين نقاط القوة في كل من أجهزة التشفير وأجهزة فك التشفير. يقرأ برنامج التشفير أولا تسلسل الإدخال ويفهمه (مثل جملة بالفرنسية)، ثم يستخدم وحدة فك التشفير هذا الفهم لإنشاء تسلسل إخراج جديد (مثل نفس الجملة المترجمة إلى اللغة الإنجليزية).

الأمثلة الرائدة: ت5 (محول نقل النص إلى نص) و BART (محولات ثنائية الاتجاه وذاتية الانحدار).

حالات الاستخدام الشائعة:

  • الترجمة الآلية: ترجمة النص من لغة إلى أخرى.
  • تلخيص النص: تكثيف مستند طويل في ملخص موجز ودقيق.
  • اقوال: إعادة كتابة جملة ليكون لها نفس المعنى ولكن صياغة مختلفة.

الحجم النموذجي: على غرار أجهزة التشفير ، غالبا ما تعمل هذه النماذج في نطاق ملايين المعلمات.

يستخدم هذا المثال نموذج T5 مدرب مسبقا لترجمة النص الإنجليزي إلى الألمانية. يقرأ برنامج التشفير الجملة الإنجليزية ، ويقوم وحدة فك التشفير بإنشاء الترجمة الألمانية.

from transformers import pipeline

# Load a pre-trained translation model (an encoder-decoder).
translator = pipeline("translation_en_to_de", model="t5-small")

# Translate a sentence from English to German.
result = translator("Large Language Models are powerful tools.")

# Print the translated text.
print(result)
# Expected Output: [{'translation_text': 'Große Sprachmodelle sind leistungsstarke Werkzeuge.'}]        

التنبؤ بالرمز المميز التالي

على الرغم من تعقيدها ، فإن الهدف الأساسي ل LLM بسيط بشكل ملحوظ: توقع "الرمز المميز" التالي في تسلسل.

"الرمز المميز" هو الوحدة الأساسية للنص التي يعالجها LLM. بينما نفكر بالكلمات ، تقوم LLMs بتقسيم النص إلى أجزاء أصغر وأكثر قابلية للإدارة. هذا فعال لأن مفردات محدودة من الرموز المميزة (على سبيل المثال ، 32,000 لاما 2) يمكن أن تمثل لغة واسعة. على سبيل المثال ، يمكن تقسيم كلمة "مثير للاهتمام" إلى رمزين: interest و ing. يسمح هذا للنموذج بفهم واستخدام الاختلافات مثل "مهتم" أو "غير مثير للاهتمام" دون الحاجة إلى تعلمها ككلمات منفصلة تماما.

يوضح هذا البرنامج النصي كيف يقوم الرمز المميز بتقسيم النص إلى وحدات أصغر (الرموز) ويضيف رموز خاصة للنموذج لفهم الهيكل.

from transformers import AutoTokenizer

# Load a tokenizer from a pre-trained model (Llama 3).
# You may need to accept terms on the Hugging Face model page to access it.
# As a fallback, we can use a widely available tokenizer like GPT-2.
try:
    tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B")
except Exception:
    tokenizer = AutoTokenizer.from_pretrained("gpt2")


# The text we want to process.
text = "interesting"
special_text = "<|begin_of_text|>User: Hello!<|eot_id|>"

# Convert the text into tokens.
tokens = tokenizer.tokenize(text)
special_tokens = tokenizer.tokenize(special_text)

# The tokenizer breaks "interesting" into smaller, more manageable parts.
print(f"The word '{text}' is tokenized into: {tokens}")

# Special tokens are preserved to structure the input.
print(f"The phrase '{special_text}' is tokenized into: {special_tokens}")        

دور الرموز الخاصة

لإدارة تدفق المحادثة والإرشادات، تستخدم LLMs الرموز الخاصة. هذه علامات محجوزة تنظم المدخلات والمخرجات. على سبيل المثال ، يخبرون النموذج بالمكان الذي تنتهي فيه مطالبة المستخدم وأين يجب أن تبدأ استجابته. يختلف التنسيق الدقيق لهذه الرموز بين النماذج:

  • اللاما 3: يستخدم الرموز المميزة مثل \
  • بدأ_من_نص|> للبدء، \
  • بدء_راس_معرف|> و \
  • انتهاء_راس_معرف|> لتأطير الأدوار (مثل النظام أو المستخدم)و \
  • EOT_معرف|> لإنهاء المنعطف.
  • سلسلة GPT: غالبا ما يستخدم نظام الأدوار داخل استدعاء واجهة برمجة التطبيقات ولكنه يعتمد داخليا على الرموز المميزة مثل \
  • نهاية النص|> للإشارة إلى الانتهاء.
  • ChatML (تستخدم من قبل نماذج مختلفة): يستخدم تنسيقا منظما مع رموز مميزة مثل \
  • الدردشه_بدء|> و \
  • الدردشه_انتهاء|> لتحديد الرسائل من النظام والمستخدم والمساعد.

كيف تقوم LLMs بإنشاء نص: حلقة الانحدار الذاتي

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

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

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

# --- This is a conceptual example to explain the logic. ---

def conceptual_autoregressive_loop(prompt):
    """
    Simulates how an LLM generates text step-by-step.
    """
    # 1. Tokenization: The input prompt is converted to a sequence of tokens.
    input_sequence = f"[{prompt}]"
    print(f"Step 1: Input is '{input_sequence}'")

    for i in range(4): # Loop to generate 4 new tokens
        # 2. Processing & Prediction: The model predicts the next most likely token.
        # (In a real model, this involves complex neural network calculations.)
        # Here, we'll just pretend to predict a new token.
        predicted_token = f"token_{i+1}"
        print(f"\nStep {i+2}: Model processes '{input_sequence}'")
        print(f" -> Predicts next token is '{predicted_token}'")

        # 3. Selection & Loop: The new token is added to the sequence.
        # This updated sequence becomes the input for the next step.
        input_sequence += f" {predicted_token}"

        # 4. The loop repeats until an End of Sequence (EOS) token is generated.
        if i == 3:
            input_sequence += " [EOS]"
            print(f"\nModel predicts End of Sequence. Final output:")

    return input_sequence.replace("[EOS]", "").strip()

# Run the conceptual loop.
final_text = conceptual_autoregressive_loop("The cat sat on the")
print(f"\nGenerated Text: {final_text}")        

كيف يختار النموذج الرمز المميز التالي من بين آلاف الاحتمالات؟

فك التشفير الجشع: هذه هي أبسط طريقة. يختار النموذج دائما الرمز المميز الذي حصل على أعلى درجة على الإطلاق. إنه سريع ولكن يمكن أن يكون قصير النظر ، مما يؤدي أحيانا إلى صياغة متكررة أو محرجة.

بحث الشعاع: هذه استراتيجية أكثر تقدما. بدلا من مجرد اختيار أفضل رمز مميز فردي ، فإنه يتتبع العديد من التسلسلات الأكثر احتمالا ("الحزم"). يستكشف هذه المسارات المتوازية للعثور على تسلسل أكثر تماسكا بشكل عام ، حتى لو تطلب اختيار كلمة أقل احتمالا في خطوة مبكرة.

مثل: تخيل أن الموجه هو "ذهب الأطفال إلى الحديقة من أجل ..."

  • فك التشفير الجشع قد يرى "اللعب" على أنها الكلمة التالية الأعلى تسجيلا والالتزام بها على الفور.
  • البحث عن الشعاع قد يستكشف مسارات متعددة ، مثل "اللعب على الأراجيح" و "رؤية أصدقائهم" و "تحير طائرة ورقية". ثم سيقيم أي من هذه المسارات متعددة الكلمات ينشئ الجملة الأكثر احتمالية وتماسكا.

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

from transformers import AutoModelForCausalLM, AutoTokenizer

# Define the model and tokenizer
model_name = "gpt2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# Define a prompt
prompt = "The children went to the park to"
inputs = tokenizer(prompt, return_tensors="pt")

# --- 1. Greedy Decoding ---
# This strategy always picks the single token with the highest probability.
greedy_output = model.generate(
    **inputs,
    max_new_tokens=10,
    num_beams=1, # Setting num_beams=1 is equivalent to greedy search.
    early_stopping=True,
    no_repeat_ngram_size=2 # Prevents repeating pairs of words
)
print("--- Greedy Decoding ---")
print(tokenizer.decode(greedy_output[0], skip_special_tokens=True))


# --- 2. Beam Search ---
# This strategy explores multiple "beams" or sequences at each step.
beam_output = model.generate(
    **inputs,
    max_new_tokens=10,
    num_beams=5, # Using 5 beams to explore more options.
    early_stopping=True,
    no_repeat_ngram_size=2
)
print("\n--- Beam Search (more creative) ---")
print(tokenizer.decode(beam_output[0], skip_special_tokens=True))        

اهتمام

العنصر الثوري في هندسة المحولات هو آلية الانتباه. تسمح هذه الآلية للنموذج بتقييم أهمية الكلمات المختلفة في نص الإدخال عند التنبؤ بالكلمة التالية. إنه يدرك أنه ليست كل الكلمات تحمل أهمية متساوية.

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

للتنبؤ بالكلمة التالية ، فإن LLM الذي يستخدم آلية الانتباه سيولي اهتماما أكبر بشكل حدسي ل "الحفلة الموسيقية" و "الملعب" وأقل ل "التنقل" أو "الطويل". هذه القدرة على التركيز على السياق الأكثر صلة هي ما يجعل LLMs قوية جدا في الحفاظ على التماسك على فترات طويلة من النص. ال طول السياق يشير نموذج إلى الحد الأقصى لعدد الرموز المميزة التي يمكن أن "ينتبه" إليها في وقت واحد.

Bilkis Jahan Eva

sales representative @AgentGrow

٤ شهر

You're right, LLMs might seem like magic, but there's so much complex science underneath. Given how versatile they are, what are some unexpected areas you think they'll influence next?

لعرض أو إضافة تعليق، يُرجى تسجيل الدخول

استعرَض الآخرون أيضًا