2020년 8월 6일 목요일

OpenAI 기반 GPT3 와 BERT 설치 사용 방법

이 글은 최근 큰 이슈가 되고 있는 자연어 처리 인공지능 모델인 OpenAI 기반 GPT3, BERT 설치 사용 방법을 간략히 나눔해 본다.

GPT3 installation

GPT 개념
GPT-3(Generative Pre-trained Transformer 3)은 OpenAI의 최신 언어 모델이다. 하나의 문장 뒤에 오는 문장을 예측하거나, 하나의 언어에서 다른 언어를 번역할 수 있다. 
GPT-3는 매우 큰 텍스트 데이터에서 훈련된 언어 모델이다. 작동은 간단하다. 텍스트를 제공하면 모델이 비슷한 스타일과 구조에 따라 문장을 생성합니다. 이를 이용해 챗봇 같은 것을 쉽게 개발할 수 있다. 다른 다양한 데모는 여기(예제)를 참고하라.


설치
코딩은 Python 만 필요하다. 그러나 앱을 실행하려면 다음이 필요하다.
먼저 베타 테스트를 신청해 키값을 얻는다.

github에 있는 GPT3-Sandbox를 다운로드한다. 그리고, 다음을 실행한다.
1. 가상환경 생성
python -m venv $ENV_NAME

2. 가상환경 활성화
source $ENV_NAME/bin/activate 

3. 설치
pip install -r api/requirements.txt

다음과 같은 패키지 디펜던시 에러 발생 시 requirements.txt의 해당 패키지 버전을 낮추어 재실행해본다.
패키지 의존성 에러

해당 패키지 버전 다운

제대로 설치된 패키지

4. 보안키 추가
openai.cfg 파일을 생성하고 OPENAI_KEY=$YOUR_SECRET_KEY 를 파일 내에 추가함. $YOUR_SECRET_KEY 는 'sk-somerandomcharacters' 처럼 되어 있음. 참고로, 키가 제대로 설정되어 있지 않으면, 예제 실행 시 다음과 같은 에러가 발생함.

5. 환경 변수 설정
아래와 같이 환경변수openai.cfg 위치를 설정한다.
export OPENAI_CONFIG=/path/to/config/openai.cfg 

6. Yarn 설치
yarn install

이제 설치가 끝나면 다음과 같이 예제를 테스트해본다. 
python examples/run_latex_app.py

실행 결과는 다음과 같다.

관련 예제 사용은 여기서 방법을 확인할 수 있다.

간단한 예시
Python으로 OpenAI GPT-3 API를 사용하여 웹 데모를 만들어 본다. 이 예는 영어를 계산, 수식, LaTeX로 변환하기 위한 GPT 적용 예시이다. 다음과 같이 간단히 Example(Input, Output) 형식으로 예시를 만들어 주면, 비슷한 Input example에 유사한 Output을 대답해준다.

# Construct GPT object and show some examples
gpt = GPT(engine="davinci",
          temperature=0.5,
          max_tokens=100)
gpt.add_example(Example('Two plus two equals four', '2 + 2 = 4'))
gpt.add_example(Example('The integral from zero to infinity', '\\int_0^{\\infty}'))
gpt.add_example(Example('The gradient of x squared plus two times x with respect to x', '\\nabla_x x^2 + 2x'))
gpt.add_example(Example('The log of two times x', '\\log{2x}'))
gpt.add_example(Example('x squared plus y squared plus equals z squared', 'x^2 + y^2 = z^2'))

# Define UI configuration
config = UIConfig(description="Text to equation",
                  button_text="Translate",
                  placeholder="x squared plus 2 times x")

demo_web_app(gpt, config)

이 코드를 python 스크립트로 실행하면, 새로운 입출력을 테스트할 수 있는 웹 앱이 자동으로 시작된다. 참고로, examples 디렉토리에는 이미 3 개의 예제 스크립트가 있다. 

아래는 매우 간단한 사칙연산을 학습하는 예이다. 최소한의 예시로 계산기 모델을 제공한다.
# add some calculation examples
gpt.add_example(Example("add 3+5", "8"))
gpt.add_example(Example("add 8+5", "13"))
gpt.add_example(Example("add 50+25", "75"))

다음은 자연어를 SQL 언어로 변환하는 예이다. 
# Example
gpt.add_example(Example('Fetch unique values of DEPARTMENT from Worker table.', 
                        'Select distinct DEPARTMENT from Worker;'))
gpt.add_example(Example('Print the first three characters of FIRST_NAME from Worker table.', 
                        'Select substring(FIRST_NAME,1,3) from Worker;'))

# Question
prompt = "Display the lowest salary from the Worker table."
output = gpt.submit_request(prompt)
print(output.choices[0].text)
prompt = "Tell me the count of employees working in the department HR."
print(gpt.get_top_reply(prompt))

BERT 

레퍼런스