حزمة Python بسيطة تلتف النصوص النموذجية النموذجية والجيل النصية لنموذج توليد النص GPT-2 من Openai (وتحديداً إصدارات "صغيرة" 124m و "متوسطة" 355 مترًا). بالإضافة إلى ذلك ، تتيح هذه الحزمة توليد نص أسهل ، وتوليد ملف لسهولة التنسيق ، مما يسمح ببادئه لإجبار النص على البدء بعبارة معينة.
تتضمن هذه الحزمة ويجعل التغييرات المنخفضة المستوى المنخفضة في:
من أجل التغذية المحددة ، يوصى بشدة باستخدام وحدة معالجة الرسومات ، على الرغم من أنه يمكنك إنشاء وحدة المعالجة المركزية (وإن كانت ببطء أكبر). إذا كنت تتدرب في السحابة ، فإن استخدام دفتر الملاحظات colaboratory أو محرك Google Compute VM w/ يوصى بشدة صورة التعلم العميق TensorFlow. (حيث يتم استضافة نموذج GPT-2 على GCP)
يمكنك استخدام GPT-2 Simple لإعادة تدريب نموذج باستخدام وحدة معالجة الرسومات مجانًا في دفتر الملاحظات المتوحش ، والذي يعرض أيضًا ميزات إضافية للحزمة.
ملاحظة: تم التنمية على GPT-2 Simple في الغالب بواسطة AitextGen ، والتي لديها إمكانيات مماثلة لتوليد النص من الذكاء الاصطناعي مع وقت تدريب أكثر كفاءة واستخدام الموارد. إذا كنت لا تحتاج إلى استخدام TensorFlow ، فإنني أوصي باستخدام AitextGen بدلاً من ذلك. يمكن تحميل نقاط التفتيش التي تم تدريبها باستخدام GPT-2 Simple باستخدام AitextGen أيضًا.
يمكن تثبيت GPT-2 البسيطة عبر PYPI:
pip3 install gpt-2-simple
ستحتاج أيضًا إلى تثبيت إصدار TensorFlow 2.x المقابل (Min 2.5.1) لنظامك (مثل tensorflow
أو tensorflow-gpu
).
مثال لتنزيل النموذج على النظام المحلي ، وقم بتصنيعه على مجموعة بيانات. وتوليد بعض النص.
تحذير: نموذج 124 مترًا ، وبالتالي أي نموذج محيط ، هو 500 ميغابايت! (طراز 355 متر مسبق هو 1.5 جيجابايت)
import gpt_2_simple as gpt2
import os
import requests
model_name = "124M"
if not os . path . isdir ( os . path . join ( "models" , model_name )):
print ( f"Downloading { model_name } model..." )
gpt2 . download_gpt2 ( model_name = model_name ) # model is saved into current directory under /models/124M/
file_name = "shakespeare.txt"
if not os . path . isfile ( file_name ):
url = "https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt"
data = requests . get ( url )
with open ( file_name , 'w' ) as f :
f . write ( data . text )
sess = gpt2 . start_tf_sess ()
gpt2 . finetune ( sess ,
file_name ,
model_name = model_name ,
steps = 1000 ) # steps is max number of training steps
gpt2 . generate ( sess )
نقاط التفتيش النموذجية التي تم إنشاؤها هي افتراضيًا في /checkpoint/run1
. إذا كنت ترغب في تحميل نموذج من هذا المجلد وإنشاء نص منه:
import gpt_2_simple as gpt2
sess = gpt2 . start_tf_sess ()
gpt2 . load_gpt2 ( sess )
gpt2 . generate ( sess )
كما هو الحال مع TextGenrnn ، يمكنك إنشاء النص وحفظه للاستخدام لاحقًا (مثل API أو BOT) باستخدام معلمة return_as_list
.
single_text = gpt2 . generate ( sess , return_as_list = True )[ 0 ]
print ( single_text )
يمكنك تمرير معلمة run_name
إلى finetune
و load_gpt2
إذا كنت ترغب في تخزين/تحميل نماذج متعددة في مجلد checkpoint
.
هناك أيضًا واجهة سطر الأوامر لكل من Finetuning و Generation مع افتراضات قوية لمجرد التشغيل على سحابة VM W/ GPU. من أجل finetuning (الذي سيقوم أيضًا بتنزيل النموذج إن لم يكن موجودًا):
gpt_2_simple finetune shakespeare.txt
وبالنسبة للجيل ، الذي يولد النصوص إلى الملفات في مجلد gen
:
gpt_2_simple generate
تتوفر معظم المعلمات نفسها المتوفرة في الوظائف كوسائط CLI ، على سبيل المثال:
gpt_2_simple generate --temperature 1.0 --nsamples 20 --batch_size 20 --length 50 --prefix " <|startoftext|> " --truncate " <|endoftext|> " --include_prefix False --nfiles 5
انظر أدناه لمعرفة ما تفعله بعض حجج CLI.
NB: أعد تشغيل جلسة Python أولاً إذا كنت ترغب في FineTune على مجموعة بيانات أخرى أو تحميل نموذج آخر.
تختلف الطريقة التي يستخدمها GPT-2 لإنشاء نص قليلاً عن تلك مثل الحزم الأخرى مثل TextGenrnn (على وجه التحديد ، توليد تسلسل النص الكامل بحت في وحدة معالجة الرسومات وفك تشفيره لاحقًا) ، والتي لا يمكن إصلاحها بسهولة دون اختراق رمز النموذج الأساسي. نتيجة ل:
truncate
generate
وظيفة لجمع النص فقط حتى رمز نهائي محدد. قد ترغب في تقليل length
بشكل مناسب.)prefix
تستهدف تسلسل الرمز المميز للبدء ، truncate
تسلسل الرمز المميز النهائي. يمكنك أيضًا تعيين include_prefix=False
لتجاهل رمز البادئة أثناء توليده (على سبيل المثال إذا كان شيئًا غير مرغوب فيه مثل <|startoftext|>
)..csv
أحادي العمود إلى finetune()
، فسيقوم تلقائيًا بتحليل CSV إلى تنسيق مثالي للتدريب مع GPT-2 (بما في ذلك التحديث <|startoftext|>
واللاحقة <|endoftext|>
إلى كل مستند نصي ، وبالتالي فإن الحيل truncate
أعلاه مفيدة عند توليد الإخراج). هذا ضروري للتعامل مع كل من الاقتباسات والخطوط الجديدة في كل مستند نصي بشكل صحيح.batch_size
قابلة للقسمة إلى nsamples
، مما يؤدي إلى توليد أسرع بكثير. يعمل بشكل جيد للغاية مع GPU (يمكن تعيين batch_size
ما يصل إلى 20 على كولابورتوليز K80)!batch_size=1
، وحوالي 88 ٪ من وحدة معالجة الرسومات V100.overwrite=True
to Finetune ، والتي ستستمر في التدريب وإزالة التكرار السابق للنموذج دون إنشاء نسخة مكررة. يمكن أن يكون هذا مفيدًا بشكل خاص لتعلم النقل (على سبيل المثال Finetune GPT-2 على مجموعة بيانات واحدة ، ثم Finetune على مجموعة بيانات أخرى للحصول على "دمج" من كلتا البيانات).gpt2.encode_dataset(file_path)
. الإخراج هو ملف .npz
مضغوط والذي سيتم تحميله بشكل أسرع بكثير في وحدة معالجة الرسومات للاتفاقية.gpt2.load_gpt2(sess, model_name='774M')
و gpt2.generate(sess, model_name='774M')
.ماكس وولف (minimaxir)
يتم دعم مشاريع ماكس مفتوحة المصدر من قبل باتريون. إذا وجدت هذا المشروع مفيدًا ، فسيتم تقدير أي مساهمات نقدية في Patreon وسيتم استخدامها بشكل جيد.
معهد ماساتشوستس للتكنولوجيا
هذا الريبو ليس له أي انتماء أو علاقة مع Openai.