في هذه المدونة، سوف نقدم لك مفهوم زخارف الماتريوشكا ونشرح سبب فائدتها. سنناقش كيفية تدريب هذه النماذج نظريًا وكيف يمكنك تدريبها باستخدام محولات الجملة.

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

جدول المحتويات

فهم التضمينات

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

سينتج نموذج التضمين دائمًا عمليات تضمين بنفس الحجم الثابت. يمكنك بعد ذلك حساب تشابه الكائنات المعقدة عن طريق حساب تشابه التضمينات المعنية!

تضمين التشابه

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

🪆 زخارف ماتريوشكا

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

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

نموذج ماتريوشكا

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

🪆 دمى ماتريوشكا

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

نماذج ماتريوشكا

لماذا تستخدم 🪆 نماذج تضمين ماتريوشكا؟

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

  1. القائمة المختصرة وإعادة الترتيب: بدلاً من تنفيذ مهمتك النهائية (على سبيل المثال، بحث أقرب جار) على عمليات التضمين الكاملة، يمكنك تقليص عمليات التضمين إلى حجم أصغر و”قائمة مختصرة” للتضمينات الخاصة بك بكفاءة عالية. بعد ذلك، يمكنك معالجة التضمينات المتبقية باستخدام أبعادها الكاملة.
  2. المقايضات: ستسمح لك نماذج Matryoshka بتوسيع نطاق حلول التضمين الخاصة بك بما يتناسب مع تكلفة التخزين وسرعة المعالجة والأداء المطلوبة.

كيف يتم تدريب نماذج 🪆 تضمين الماتريوشكا؟

نظريا

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

بالنسبة لنماذج تضمين ماتريوشكا، تتضمن خطوة التدريب أيضًا إنتاج عمليات التضمين لدفعة التدريب الخاصة بك، ولكن بعد ذلك تستخدم بعض وظائف الخسارة لتحديد ليس فقط جودة عمليات التضمين بالحجم الكامل، ولكن أيضًا جودة عمليات التضمين بأبعاد مختلفة مختلفة. على سبيل المثال، أبعاد المخرجات هي 768، و512، و256، و128، و64. وتتم إضافة قيم الخسارة لكل أبعاد معًا، مما يؤدي إلى قيمة الخسارة النهائية. سيحاول المُحسِّن بعد ذلك ضبط أوزان النموذج لتقليل قيمة الخسارة هذه.

من الناحية العملية، يحفز هذا النموذج على تحميل المعلومات الأكثر أهمية في بداية عملية التضمين، بحيث يتم الاحتفاظ بها في حالة اقتطاع التضمين.

في الجملة المحولات

يعد Sentence Transformers إطار عمل شائع الاستخدام لتدريب نماذج التضمين، وقد قام مؤخرًا بتنفيذ دعم لنماذج Matryoshka. يعد تدريب نموذج تضمين ماتريوشكا باستخدام محولات الجملة أمرًا أساسيًا تمامًا: فبدلاً من تطبيق بعض وظائف الخسارة على عمليات التضمين كاملة الحجم فقط، فإننا نطبق أيضًا نفس وظيفة الخسارة على الأجزاء المقطوعة من عمليات التضمين.

على سبيل المثال، إذا كان النموذج يحتوي على بُعد تضمين أصلي قدره 768، فيمكن الآن تدريبه على 768 و512 و256 و128 و64. وستتم إضافة كل خسارة من هذه الخسائر معًا، اختياريًا مع بعض الوزن:

from sentence_transformers import SentenceTransformer
from sentence_transformers.losses import CoSENTLoss, MatryoshkaLoss

model = SentenceTransformer("microsoft/mpnet-base")

base_loss = CoSENTLoss(model=model)
loss = MatryoshkaLoss(
    model=model,
    loss=base_loss,
    matryoshka_dims=[768, 512, 256, 128, 64],
    matryoshka_weight=[1, 1, 1, 1, 1],
)

model.fit(
    train_objectives=[(train_dataset, loss)],
    ...,
)

التدريب مع MatryoshkaLoss لا يتحمل نفقات عامة ملحوظة في وقت التدريب.

مراجع:

راجع البرامج النصية الكاملة التالية كأمثلة لكيفية تطبيق MatryoshkaLoss في الممارسة العملية:

  • matryoshka_nli.py: يستخدم هذا المثال MultipleNegativesRankingLoss مع MatryoshkaLoss لتدريب نموذج تضمين قوي باستخدام بيانات استدلال اللغة الطبيعية (NLI). إنه تعديل لوثائق NLI.
  • matryoshka_nli_reduced_dim.py: يستخدم هذا المثال MultipleNegativesRankingLoss مع MatryoshkaLoss لتدريب نموذج تضمين قوي مع بُعد إخراج أقصى صغير يبلغ 256. وهو يتدرب باستخدام بيانات استدلال اللغة الطبيعية (NLI)، وهو عبارة عن تعديل لوثائق NLI.
  • matryoshka_sts.py: يستخدم هذا المثال CoSENTLoss مع MatryoshkaLoss لتدريب نموذج التضمين على مجموعة التدريب الخاصة بـ STSBenchmark dataset. إنه تعديل لوثائق STS.

كيف أستخدم نماذج 🪆 تضمين ماتريوشكا؟

نظريا

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

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

ضع في اعتبارك أنه على الرغم من أن معالجة عمليات التضمين الأصغر حجمًا للمهام النهائية (الاسترجاع والتجميع وما إلى ذلك) ستكون أسرع، إلا أن الحصول على عمليات التضمين الأصغر من النموذج يكون بنفس سرعة الحصول على عمليات التضمين الأكبر حجمًا.

في الجملة المحولات

في Sentence Transformers، يمكنك تحميل نموذج Matryoshka Embedding تمامًا مثل أي نموذج آخر، ولكن يمكنك تحديد حجم التضمين المطلوب باستخدام truncate_dim دعوى. بعد ذلك، يمكنك إجراء الاستدلال باستخدام SentenceTransformers.encode الوظيفة، وسيتم اقتطاع التضمينات تلقائيًا إلى الحجم المحدد.

دعونا نحاول استخدام النموذج الذي تدربت عليه matryoshka_nli.py مع microsoft/mpnet-base:

from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim

matryoshka_dim = 64
model = SentenceTransformer("tomaarsen/mpnet-base-nli-matryoshka", truncate_dim=matryoshka_dim)

embeddings = model.encode(
    [
        "The weather is so nice!",
        "It's so sunny outside!",
        "He drove to the stadium.",
    ]
)
print(embeddings.shape)



similarities = cos_sim(embeddings[0], embeddings[1:])
print(similarities)

لا تتردد في تجربة استخدام قيم مختلفة لـ matryoshka_dim ولاحظ كيف يؤثر ذلك على أوجه التشابه. يمكنك القيام بذلك إما عن طريق تشغيل هذا الرمز محليًا، على السحابة كما هو الحال مع Google Colab، أو عن طريق الاطلاع على العرض التوضيحي.

مراجع:

انقر هنا لمعرفة كيفية استخدام نموذج Nomic v1.5 Matryoshka

ملحوظة: يتطلب Nomic على وجه التحديد ملف F.layer_norm قبل اقتطاع التضمين. ونتيجة لذلك، يستخدم المقتطف التالي الاقتطاع اليدوي للبعد المطلوب. بالنسبة لجميع الموديلات الأخرى، يمكنك استخدام truncate_dim الخيار في المنشئ، كما هو موضح في المثال السابق.

from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim
import torch.nn.functional as F

model = SentenceTransformer("nomic-ai/nomic-embed-text-v1.5", trust_remote_code=True)

matryoshka_dim = 64
embeddings = model.encode(
    [
        "search_query: What is TSNE?",
        "search_document: t-distributed stochastic neighbor embedding (t-SNE) is a statistical method for visualizing high-dimensional data by giving each datapoint a location in a two or three-dimensional map.",
        "search_document: Amelia Mary Earhart was an American aviation pioneer and writer.",
    ],
    convert_to_tensor=True,
)

embeddings = F.layer_norm(embeddings, normalized_shape=(embeddings.shape[1],))
embeddings[..., :matryoshka_dim]  

similarities = cos_sim(embeddings[0], embeddings[1:])

نتائج

الآن بعد أن تم تقديم نماذج ماتريوشكا، دعونا نلقي نظرة على الأداء الفعلي الذي قد نكون قادرين على توقعه من نموذج تضمين ماتريوشكا مقابل نموذج التضمين العادي. في هذه التجربة، قمت بتدريب نموذجين:

تم تدريب كلا النموذجين على مجموعة بيانات AllNLI، وهي عبارة عن سلسلة من مجموعات بيانات SNLI وMultiNLI. لقد قمت بتقييم هذه النماذج في مجموعة اختبار STSBenchmark باستخدام أبعاد تضمين متعددة ومختلفة. النتائج موضحة في الشكل التالي:

نتائج

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

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

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

تجريبي

في هذا العرض التوضيحي، يمكنك تقليص أبعاد الإخراج للملف ديناميكيًا nomic-ai/nomic-embed-text-v1.5 نموذج تضمين ماتريوشكا ولاحظ مدى تأثيره على أداء الاسترجاع. يتم حساب جميع التضمينات في المتصفح باستخدام 🤗 Transformers.js.

مراجع

  • كوسوباتي، أ.، بهات، جي.، ريج، أ.، والينجفورد، إم.، سينها، أ.، رامانوجان، في.، … وفرهادي، أ. (2022). تعلم تمثيل الماتريوشكا. التقدم في أنظمة معالجة المعلومات العصبية، 35، 30233-30249. https://arxiv.org/abs/2205.13147
  • تضمينات ماتريوشكا — وثائق محولات الجملة. (اختصار الثاني). https://sbert.net/examples/training/matryoshka/README.html
  • UKPLab. (اختصار الثاني). جيثب. https://github.com/UKPLab/sentence-transformers
  • Unboxing Nomic Embed v1.5: تضمينات إنتاج يمكن تغيير حجمها مع تعلم تمثيل ماتريوشكا. (اختصار الثاني). https://blog.nomic.ai/posts/nomic-embed-matryoshka

مشاركات المدونات المصاحبة

للتدريب على تضمين النماذج باستخدام تعلم تمثيل الماتريوشكا، أو دمجها مع تقنيات محولات الجملة الأخرى:

شاركها.
اترك تعليقاً