العلامات | مجموعات البيانات | المقاييس | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
تقدم الورقة LongRoPE، وهي طريقة لتوسيع نافذة السياق لنماذج اللغات الكبيرة (LLMs) إلى ما يتجاوز 2 مليون رمز مميز.
الأفكار الرئيسية هي:
تحديد واستغلال شكلين من أشكال عدم التماثل في التضمين الموضعي لتقليل فقدان المعلومات أثناء الاستيفاء. يتيح ذلك تمديد السياق بمقدار 8x دون الضبط الدقيق.
استخدم إستراتيجية تمديد تقدمية فعالة مع ضبط دقيق لـ 256 كيلو بايت للوصول إلى سياق 2048 كيلو بايت، بدلاً من الضبط المباشر لسياق كبير للغاية.
اضبط التضمينات للسياقات الأقصر لاستعادة الأداء ضمن حجم النافذة الأصلي.
يتم تطبيق الطريقة على LLaMA2 وMistral. تُظهر التجارب عبر المهام المختلفة فعالية LongRoPE في الحفاظ على الأداء من أطوال السياق من 4k إلى 2048k.
تكافح بنية المحولات مع التعقيد الحسابي التربيعي للانتباه الذاتي وافتقارها إلى التعميم على المواقف الرمزية غير المرئية في وقت التدريب. لتوسيع نطاق حساب الاهتمام الذاتي إلى سياق كبير، تم اقتراح طرق مختلفة، مثل RoPE وAliBi وأحواض الانتباه وما إلى ذلك. ومع ذلك، لا يمكن لأي من هذه الحلول التوسع بشكل فعال في السياق بملايين الرموز المميزة مع الحفاظ على دقة النموذج .
تقدم هذه الورقة تقنية جديدة، LongRoPE، تعمل على توسيع نافذة سياق LLMs إلى أكثر من 2 مليون رمز مميز.
يستخدم LongRoPE إستراتيجية تمديد تدريجية للوصول إلى نافذة سياق 2048 كيلو بايت دون الحاجة إلى الضبط الدقيق المباشر للنصوص الطويلة للغاية، والتي تعتبر نادرة ويصعب الحصول عليها. تبدأ هذه الإستراتيجية بامتداد 256 كيلو بايت على ماجستير إدارة الأعمال المدرب مسبقًا، يليه الضبط الدقيق على هذا الطول.
لمعالجة الانخفاضات المحتملة في الأداء في نافذة السياق الأصلية (الأقصر)، تقوم LongRoPE أيضًا بضبط عوامل إعادة قياس RoPE على LLM الموسعة، مع تقليص حجمها إلى نوافذ سياق 4k و8k على LLM المضبوطة بدقة 256k باستخدام خوارزمية البحث الخاصة بها لتقليل الاستيفاء الموضعي. أثناء الاستدلال للتسلسلات التي يقل طولها عن 8 كيلو، يتم تحديث RoPE بعوامل إعادة القياس التي تم البحث عنها بدقة.
لقد أثبت الاختبار عبر العديد من دورات LLM والمهام التي تتطلب سياقات طويلة فعالية LongRoPE. تحافظ الطريقة بشكل كبير على مستوى منخفض من الارتباك عبر أطوال التقييم من 4k إلى 2048k من الرموز المميزة، وتحقق دقة تزيد عن 90% في استرجاع مفتاح المرور، وتوفر دقة مماثلة للمعايير القياسية ضمن نافذة سياق 4096
نظرة متعمقة على التعديلات الهيكلية وآثارها على أداء النموذج.
تم تصميم بنية نموذج LongRoPE لتوسيع نافذة السياق لنماذج اللغات الكبيرة (LLMs) إلى أكثر من 2 مليون رمز مميز، مما يعالج قيود بنيات المحولات التقليدية. يكمن الابتكار الرئيسي في استراتيجية التمديد التدريجي وتعديل التضمين الموضعي.
تشمل المكونات الرئيسية ما يلي:
class RoPEPositionalEncoding ( nn . Module ):
def __init__ ( self , d_model , max_len = 1000000 , base = 10000 ):
super (). __init__ ()
self . d_model = d_model
self . max_len = max_len
self . base = base
self . theta = torch . tensor ([ base ** ( - 2 * ( i // 2 ) / d_model ) for i in range ( d_model )])
def forward ( self , positions ):
angles = positions . unsqueeze ( - 1 ) * self . theta
sin_cos = torch . stack ([ angles . cos (), angles . sin ()], dim = - 1 )
return sin_cos . view ( * sin_cos . shape [: - 2 ], - 1 )
def non_uniform_interpolation ( pos_embed , extension_ratio , lambda_factors , n_hat ):
d_model = pos_embed . shape [ - 1 ]
interpolated_pos = pos_embed . clone ()
for i in range ( d_model // 2 ):
mask = torch . arange ( pos_embed . shape [ - 2 ], device = pos_embed . device ) < n_hat
scale = torch . where ( mask , torch . ones_like ( pos_embed [..., 0 ], device = pos_embed . device ),
1 / ( lambda_factors [ i ] * extension_ratio ))
interpolated_pos [..., 2 * i ] *= scale
interpolated_pos [..., 2 * i + 1 ] *= scale
return interpolated_pos
def progressive_extension ( model , data , base_length , target_length , population_size , num_mutations , num_crossovers , max_iterations ):
# Extend to 128k
lambda_factors_128k , n_hat_128k = search_lambda_factors ( model , data , 128000 / base_length , population_size , num_mutations , num_crossovers , max_iterations )
model = fine_tune ( model , data , 128000 , lambda_factors_128k , n_hat_128k , steps = 400 )
# Extend to 256k
lambda_factors_256k , n_hat_256k = search_lambda_factors ( model , data , 256000 / base_length , population_size , num_mutations , num_crossovers , max_iterations )
model = fine_tune ( model , data , 256000 , lambda_factors_256k , n_hat_256k , steps = 600 )
# Extend to target length
if target_length > 256000 :
final_lambda_factors , final_n_hat = search_lambda_factors ( model , data , target_length / base_length , population_size // 2 , num_mutations // 2 , num_crossovers // 2 , max_iterations // 2 )
model . lambda_factors [ "2048k" ] = final_lambda_factors
model . n_hat [ "2048k" ] = final_n_hat
return model , final_lambda_factors , final_n_hat , lambda_factors_256k , n_hat_256k
تبدأ البنية ببرنامج LLM مُدرب مسبقًا وتوسع نافذة السياق الخاصة به بشكل تدريجي. في البداية، تم ضبط النموذج بدقة للتعامل مع طول سياق يبلغ 256 ألف رمز مميز. يتجنب هذا النهج التقدمي الحاجة إلى الضبط الدقيق المباشر للنصوص الطويلة للغاية، والتي تعتبر نادرة ومكلفة من الناحية الحسابية. من خلال زيادة طول السياق تدريجيًا، يمكن للنموذج التكيف بشكل أكثر فعالية مع التسلسلات الأطول.
للحفاظ على الأداء عبر أطوال السياق المختلفة، تقوم LongRoPE بضبط التضمينات الموضعية الدوارة (RoPE). يحدد النموذج ويستغل عدم الاتساق في التضمينات الموضعية لتقليل فقدان المعلومات أثناء الاستيفاء. يسمح هذا بتوسيع سياق 8x دون الحاجة إلى الضبط الدقيق. بالإضافة إلى ذلك، يستخدم النموذج خوارزمية بحث للعثور على عوامل إعادة القياس المثالية للسياقات الأقصر (على سبيل المثال، رموز 4k و8k) على 256k LLM المضبوطة بدقة. تضمن هذه التعديلات احتفاظ النموذج بالأداء العالي حتى ضمن حجم نافذة السياق الأصلي.
تشتمل البنية على العديد من التعديلات الهيكلية للتعامل مع طول السياق المتزايد بكفاءة:
تحجيم الطبقة : يتم إجراء التعديلات على تحجيم الطبقات لضمان الاستقرار والأداء مع نمو نافذة السياق.
إدارة الذاكرة : يتم استخدام تقنيات إدارة الذاكرة الفعالة للتعامل مع أحجام السياق الكبيرة دون إثقال موارد النظام.
آليات الانتباه : يتم دمج آليات الاهتمام المعززة لضمان قدرة النموذج على التركيز على الأجزاء ذات الصلة من تسلسل الإدخال، حتى مع السياق الموسع.
الانتباه الرمزي : يتم تقديم آليات الانتباه الرمزي لالتقاط العلاقات السياقية بين الرموز المميزة، مما يسمح للنموذج بفهم المعنى الدلالي للمدخلات بشكل أفضل.
توضح التجارب أن LongRoPE تحافظ على مستوى منخفض من الارتباك عبر أطوال التقييم من 4k إلى 2048k رمز مميز وتحقق دقة عالية في المهام التي تتطلب سياقات طويلة. وهذا يجعلها مناسبة لمختلف التطبيقات، بما في ذلك التعلم في السياق، وتلخيص المستندات الطويلة، والتعلم في لقطات قليلة.
لمزيد من المعلومات التفصيلية، يرجى الرجوع إلى الورقة الكاملة هنا.
نظرة ثاقبة على تفاصيل الترميز والتشغيل التي تمكن وظائف LongRoPE. قد يتضمن ذلك مقتطفات أو كودًا زائفًا يوضح المكونات الرئيسية.
لمزيد من المعلومات التفصيلية، يرجى الرجوع إلى الورقة.
أمثلة شاملة توضح كيفية الاستفادة من LongRoPE في العديد من التطبيقات، بدءًا من تحليل النص وحتى إنشاء مستندات شاملة.
# Example usage
data_path = "path/to/your/dataset"
d_model = 512
n_heads = 8
num_layers = 6
base_length = 4096
target_length = 2048 * 1024
data = load_data ( data_path )
model = LongRoPEModel ( d_model , n_heads , num_layers , base_length )
model = model . extend_context ( data , target_length )
input_ids = torch . randn ( 2 , target_length , d_model )
output = model ( input_ids )
print ( output . shape ) # Expected shape: (batch_size, target_length, d_model)
التدريب على مجموعة البيانات المخصصة
للتدريب على مجموعة بيانات مخصصة:
قد يكون أداء Hyperparameter Tuning LongRoPE حساسًا للمعلمات الفائقة. تشمل المعلمات الرئيسية التي يجب ضبطها ما يلي:
population_size
و num_mutations
و num_crossovers
في عامل لامدا يبحثون عن معدل التعلم ومعلمات الجدولة لضبط gradient_accumulation_steps
لتحقيق استقرار التدريب
إن تنفيذي لـ LongRoPE يحقق النتائج التالية:
الحيرة:
دقة استرجاع مفتاح المرور:
دقة:
مقارنة مع نماذج خط الأساس:
@article { ding2024longrope ,
title = { LongRoPE: Extending LLM Context Window Beyond 2 Million Tokens } ,
author = { Ding, Yiran and Zhang, Li Lyna and Zhang, Chengruidong and Xu, Yuanyuan and Shang, Ning and Xu, Jiahang and Yang, Fan and Yang, Mao } ,
journal = { arXiv preprint arXiv:2402.13753 } ,
year = { 2024 }
}
ملاحظة: هذا المستودع قيد التنفيذ وليس جاهزًا بعد للاستخدام الإنتاجي. يرجى الرجوع إلى الورقة لمزيد من التفاصيل.