
แพ็คเกจ Python อย่างง่ายที่ห่อหุ้มโมเดลการปรับแต่งและสคริปต์รุ่นที่มีอยู่สำหรับรุ่น GPT-2 Text Generation ของ OpenAI (โดยเฉพาะรุ่น "ขนาดเล็ก" 124m และ "Medium" 355m Hyperparameter) นอกจากนี้แพ็คเกจนี้ช่วยให้การสร้างข้อความที่ง่ายขึ้นสร้างไฟล์เพื่อการดูแลง่ายช่วยให้คำนำหน้าสามารถบังคับให้ข้อความเริ่มต้นด้วยวลีที่กำหนด
แพ็คเกจนี้รวมและทำการเปลี่ยนแปลงระดับต่ำน้อยที่สุดเป็น:
สำหรับ Finetuning ขอแนะนำ อย่างยิ่ง ให้ใช้ GPU แม้ว่าคุณจะสามารถสร้างโดยใช้ CPU (แม้ว่าจะช้ากว่ามาก) หากคุณกำลังฝึกอบรมในระบบคลาวด์ให้ใช้สมุดบันทึก colaboratory หรือ Google Compute Engine VM พร้อมภาพการเรียนรู้เชิงลึกของ Tensorflow (เป็นโมเดล GPT-2 ที่โฮสต์บน GCP)
คุณสามารถใช้ GPT-2-Simple เพื่อฝึกอบรมแบบจำลองโดยใช้ GPU ฟรี ในสมุดบันทึก colaboratory นี้ซึ่งยังสาธิตคุณสมบัติเพิ่มเติมของแพ็คเกจ
หมายเหตุ: การพัฒนา GPT-2-Simple ส่วนใหญ่ได้รับการสนับสนุนจาก Aitextgen ซึ่งมีความสามารถในการสร้างข้อความ AI ที่คล้ายคลึงกันพร้อมเวลาการฝึกอบรมที่มีประสิทธิภาพมากขึ้นและการใช้ทรัพยากร หากคุณไม่จำเป็นต้องใช้ TensorFlow ฉันขอแนะนำให้ใช้ Aitextgen แทน จุดตรวจที่ได้รับการฝึกฝนโดยใช้ GPT-2-SIMPLE สามารถโหลดได้โดยใช้ Aitextgen เช่นกัน
GPT-2-SIMPLE สามารถติดตั้งผ่าน PYPI:
pip3 install gpt-2-simple คุณจะต้องติดตั้งรุ่น TensorFlow 2.x ที่สอดคล้องกัน (ขั้นต่ำ 2.5.1) สำหรับระบบของคุณ (เช่น tensorflow หรือ tensorflow-gpu )
ตัวอย่างสำหรับการดาวน์โหลดโมเดลไปยังระบบท้องถิ่นโดยใช้งานในชุดข้อมูล และสร้างข้อความบางส่วน
คำเตือน: โมเดล 124m ที่ได้รับการฝึกฝนไว้ล่วงหน้าและทำให้โมเดล Finetuned ใด ๆ คือ 500 MB! (รุ่น 355m ที่ได้รับการฝึกฝนคือ 1.5 GB)
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 หรือบอท) โดยใช้พารามิเตอร์ return_as_list
single_text = gpt2 . generate ( sess , return_as_list = True )[ 0 ]
print ( single_text ) คุณสามารถผ่านพารามิเตอร์ run_name ไปยัง finetune และ load_gpt2 หากคุณต้องการจัดเก็บ/โหลดหลายรุ่นในโฟลเดอร์ checkpoint
นอกจากนี้ยังมีอินเทอร์เฟซบรรทัดคำสั่งสำหรับทั้ง finetuning และการสร้างที่มีค่าเริ่มต้นที่แข็งแกร่งสำหรับการทำงานบนคลาวด์ 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 เล็กน้อย (โดยเฉพาะการสร้างลำดับข้อความแบบเต็มใน GPU และถอดรหัสในภายหลัง) ซึ่งไม่สามารถแก้ไขได้อย่างง่ายดายโดยไม่ต้องแฮ็ครหัสรุ่นพื้นฐาน เป็นผลให้:
truncate ไปยังฟังก์ชัน generate เพื่อรวบรวมข้อความเท่านั้นจนกว่าจะมีโทเค็นสิ้นสุดที่ระบุคุณอาจต้องการลด length อย่างเหมาะสม)prefix การกำหนดเป้าหมายลำดับโทเค็นเริ่มต้นและ truncate การกำหนดเป้าหมายลำดับโทเค็นสิ้นสุด นอกจากนี้คุณยังสามารถตั้งค่า include_prefix=False เพื่อทิ้งโทเค็นคำนำหน้าในขณะที่สร้าง (เช่นถ้าเป็นสิ่งที่ไม่ต้องการเช่น <|startoftext|> ).csv คอลัมน์เดียวไปยัง finetune() มันจะแยกวิเคราะห์ CSV เป็นรูปแบบที่เหมาะสำหรับการฝึกอบรมกับ GPT-2 โดยอัตโนมัติ (รวมถึงการเตรียมการ <|startoftext|> และคำ truncate <|endoftext|> สำหรับเอกสารข้อความทุกฉบับ นี่เป็นสิ่งจำเป็นในการจัดการทั้งคำพูดและใหม่ในเอกสารข้อความแต่ละฉบับอย่างถูกต้องbatch_size ที่แบ่งออกเป็น nsamples ส่งผลให้เกิดการสร้างที่เร็วขึ้นมาก ทำงานได้ดีกับ GPU (สามารถตั้ง batch_size ได้มากถึง 20 บน K80 ของ Colaboratory)!batch_size=1 และประมาณ 88% ของ V100 GPUoverwrite=True เป็น finetune ซึ่งจะดำเนินการฝึกอบรมต่อไปและลบการวนซ้ำก่อนหน้าของโมเดลโดยไม่ต้องสร้างสำเนาซ้ำ สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับการถ่ายโอนการเรียนรู้ (เช่น Finetune GPT-2 อย่างหนักในชุดข้อมูลหนึ่งจากนั้น finetune ในชุดข้อมูลอื่น ๆ เพื่อรับ "การรวม" ของชุดข้อมูลทั้งสอง)gpt2.encode_dataset(file_path) เอาต์พุตเป็นไฟล์ .npz ที่บีบอัดซึ่งจะโหลดได้เร็วขึ้นใน GPU สำหรับ Finetuninggpt2.load_gpt2(sess, model_name='774M') และ gpt2.generate(sess, model_name='774M')Max Woolf (@minimaxir)
โครงการโอเพ่นซอร์สของแม็กซ์ได้รับการสนับสนุนจาก Patreon ของเขา หากคุณพบว่าโครงการนี้มีประโยชน์การมีส่วนร่วมทางการเงินใด ๆ ที่มีต่อ Patreon จะได้รับการชื่นชมและจะถูกนำไปใช้อย่างสร้างสรรค์ที่ดี
มิกซ์
repo นี้ไม่มีส่วนเกี่ยวข้องหรือความสัมพันธ์กับ Openai