OpenAI의 GPT-2 텍스트 생성 모델 (특히 "작은"124m 및 "중간"355m 하이퍼 파라미터 버전)을위한 기존 모델 미세 조정 및 생성 스크립트를 래핑하는 간단한 파이썬 패키지. 또한이 패키지는 더 쉬운 텍스트 생성을 허용하여 파일을 쉽게 큐 레이션 할 수 있도록 파일을 생성하여 접두사가 주어진 문구로 시작하도록 강요 할 수 있습니다.
이 패키지는 다음과 같이 최소한의 저수준 변경을 통합하고 변경합니다.
Finetuning의 경우 CPU를 사용하여 생성 할 수 있지만 GPU를 사용하는 것이 좋습니다 (훨씬 더 느리게). 클라우드에서 훈련하는 경우 공동 노트북 또는 Google Compute Engine VM을 사용하여 Tensorflow 딥 러닝 이미지를 강력하게 권장합니다. (GPT-2 모델이 GCP에서 호스팅됩니다)
이 공동 노트북에서 GPU를 사용 하여 GPU를 사용하여 모델을 재교육하여 패키지의 추가 기능도 데모 할 수 있습니다.
참고 : GPT-2 단순에 대한 개발은 주로 AitextGen에 의해 대체되었습니다. AITEXTGEN은보다 효율적인 교육 시간과 리소스 사용을 가진 유사한 AI 텍스트 생성 기능을 갖추고 있습니다. TensorFlow를 사용하지 않아도 AitextGen을 대신 사용하는 것이 좋습니다. gpt-2 simple을 사용하여 훈련 된 체크 포인트는 AitextGen을 사용하여로드 할 수 있습니다.
GPT-2- 단순은 PYPI를 통해 설치할 수 있습니다.
pip3 install gpt-2-simple
또한 시스템 (예 : tensorflow
또는 tensorflow-gpu
)에 해당 Tensorflow 2.X 버전 (최소 2.5.1)을 설치해야합니다.
모델을 로컬 시스템에 다운로드하여 데이터 세트에서 결합하는 예입니다. 텍스트를 생성합니다.
경고 : 사전 각인 된 124m 모델과 모든 Finetuned 모델은 500MB입니다! (사전 예방 된 355m 모델은 1.5GB입니다)
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과 마찬가지로 return_as_list
매개 변수를 사용하여 나중에 사용하기 위해 텍스트를 생성하고 저장할 수 있습니다.
single_text = gpt2 . generate ( sess , return_as_list = True )[ 0 ]
print ( single_text )
checkpoint
폴더에 여러 모델을 저장/로드하려면 run_name
매개 변수를 finetune
및 load_gpt2
로 전달할 수 있습니다.
또한 클라우드 vm w/ gpu에서 실행하기위한 강력한 기본값을 갖춘 Finetuning 및 Generation에 대한 명령 줄 인터페이스도 있습니다. 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 세션을 다시 시작하십시오 .
GPT-2가 텍스트를 생성하는 데 사용하는 방법은 TextGenrnn과 같은 다른 패키지와 같은 것과 약간 다릅니다 (특히 GPU에서 순수하게 전체 텍스트 시퀀스를 생성하고 나중에 디코딩). 기본 모델 코드를 해킹하지 않으면 쉽게 수정할 수 없습니다. 결과적으로:
truncate
매개 변수를 generate
함수로 전달하십시오. length
적절하게 줄이려고 할 수 있습니다.)prefix
와 엔드 토큰 시퀀스 truncate
대상으로하는자를 지정할 수 있습니다. 또한 include_prefix=False
설정하여 생성하는 동안 접두사 토큰을 버릴 수도 있습니다 (예 : <|startoftext|>
와 같은 원치 않는 경우)..csv
파일을 finetune()
에 전달하면 CSV를 GPT-2로 훈련하기에 이상적인 형식으로 자동 구문 분석합니다 ( <|startoftext|>
및 모든 텍스트 문서에 접미사 <|endoftext|>
포함하여 위의 truncate
Trick은 출력을 생성 할 때 도움이됩니다). 이는 각 텍스트 문서에서 따옴표와 신생을 모두 처리하는 데 필요합니다.nsamples
로 나눌 수있는 batch_size
설정하여 텍스트를 병렬로 생성 할 수 있습니다. GPU와 매우 잘 작동합니다 (공동 작업의 K80에서 batch_size
최대 20까지 설정할 수 있음)!batch_size=1
, V100 GPU의 약 88%에서도 GPU의 100%를 사용합니다.overwrite=True
설정할 수 있습니다. 이는 전송 학습에 특히 유용 할 수 있습니다 (예 : 하나의 데이터 세트에서 GPT-2가 크게 미세한 다음 다른 데이터 세트에서 미세한 채로 두 데이터 세트의 "병합"을 얻습니다).gpt2.encode_dataset(file_path)
사용하여 데이터 세트를 사전에 압축하고 압축 할 수 있습니다. 출력은 압축 된 .npz
파일로, Finetuning을 위해 GPU에 훨씬 더 빨리로드됩니다.gpt2.load_gpt2(sess, model_name='774M')
및 gpt2.generate(sess, model_name='774M')
사용하여 기본 사전 상환 모델에서 계속 생성 할 수 있습니다.Max Woolf (@MinImaxir)
Max의 오픈 소스 프로젝트는 그의 Patreon에 의해 지원됩니다. 이 프로젝트가 도움이된다는 것을 알게되면 Patreon에 대한 금전적 기여도를 높이고 창의적으로 잘 활용할 것입니다.
MIT
이 repo에는 OpenAI와의 제휴 또는 관계가 없습니다.