파인튜닝을 하여 챗봇 만들어보기

 

1. 챗봇 모양 만들기

import gradio as gr
import random
import time

with gr.Blocks() as demo:
    chatbot = gr.Chatbot()
    msg = gr.Textbox()
    clear = gr.Button("Clear")

    def respond(message, chat_history):
        bot_message = random.choice(["How are you?", "I love you", "I'm very hungry"]) # 3가지 답변만 랜덤하게 대답하는 챗봇
        chat_history.append((message, bot_message))
        time.sleep(1)
        return "", chat_history

    msg.submit(respond, [msg, chatbot], [msg, chatbot])
    clear.click(lambda: None, None, chatbot, queue=False)

if __name__ == "__main__":
    demo.launch()

2. 파인튜닝할 데이터 준비

'AI > ChatGPT' 카테고리의 다른 글

[AI] ChatGPT API 기초 [번역기 만들기]  (1) 2023.05.05
[AI] ChatGPT 기초  (0) 2023.05.05

ChatGPT의 추가적인 설정을 할 수 있다.

ChatGPT Playground를 활용하자

 

https://platform.openai.com/playground 접속 후 회원가입을 한다.

 

https://platform.openai.com/account/usage 화면으로 이동하면

Free trial usage를 확인할 수 있다.

처음 가입 시  5달러가 제공되며 3개월까지 이용 가능하다. (Upgrade시 매달 20달러 구독 결제)

 

Mode는 4가지가 존재한다.

Edit, Insert, Chat, Complete

 

<Edit Mode>

<Insert Mode>

<Chat Mode>

<Complete Mode>

Complete Mode는 우리가 일반적으로 사용하는 ChatGPT처럼 자유롭게 요청해서 생성할 수 있는 모드이다.

 

다음은 Model 선택인데 Model마다 특징이 있다. 가장 많이 사용하는 Model이 text-davinci-003이다.

문장을 생성하는데 최대 4000 tokens까지 이용 가능하다.

보통 1000 tokens에 750 word를 이용할 수 있다고 하니 3000 word까지 작성이 가능한 것이다.

davinci Model은 1000 tokens에 0.02 달러에 이용할 수 있다. (대략 27원 정도)

 

Temperature는 1에 가까울 수록 크리에이터한 창의적인 문장을 만들고 0에 가까울 수록 딱딱한 기계적인 느낌의 글로

생성된다. 보통 0.6 ~ 0.7 정도에 놓고 사용하는데 필요에 따라 조정하면 된다.

 

Maximun length는 앞서 설명한 Token 길이를 최대 4000까지 사용할 수 있는데 4000을 놓고 사용한다고 해도

ChatGPT가 모두 사용하지는 않는다. 보통 1000 정도를 사용한다고 보면 된다.

 

Top P는 독창성과 조금 다르게 다향성을 나타내는 값인데 다양한 주제를 갖고 작성하느냐인데 0에 가까울 수록

글 하나의 주제로 설명하는 반면, 1에 가까울 수록 다양한 주제로 설명을 한다.

 

Presence penalty는 중복을 제거하는 기능으로 최대 2까지 올릴 수 있는데 수치가 높을수록 반복되는 문장을

줄여주는 역할을 한다.

 

Best of는 결과로 만들 개수를 나타낸다. 만약 5로 설정되면 5개의 결과를 만들어서 1개를 선택해서 주게 된다.

 

기본 설정은 다음과 같다.

이제 API KEY를 발급받자

https://platform.openai.com/account/api-keys 접속해서 Create new secret key 버튼을 클릭한다.

Name에 임의의 값을 입력 후 Create secret key 버튼을 클릭한다.

생성된 KEY를 사용할 것이다. 이 KEY는 꼭 따로 기록하여 보관하도록 한다.

 

API를 이용한 챗봇을 만들려면 가장 잘되어 있는 레퍼런스 문서를 보는 게 답이다.

https://platform.openai.com/docs/api-reference 사이트로 이동 후 하나씩 따라해보자

 

VSCode TERMINAL 창에 pip install openai를 입력하여 openai를 설치한다.

 

ChatGPT의 통신 원리를 간단히 살펴보자

import openai

openai.api_key = "당신의 KEY"

completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "user", "content": "Hello!"}
  ]
)
print(completion.choices[0].message.content)

TERMINAL 창에 python 파일명.py 입력 후 실행을 하면

Hello에 대한 user의 답변 Greetings! How Can I assist you today?를 확인할 수 있다.

 

실행 후 원래는 아래와 같이 JSON 형식으로 리턴 값을 받게 된다.

{
   "id":"chatcmpl-abc123",
   "object":"chat.completion",
   "created":1677858242,
   "model":"gpt-3.5-turbo-0301",
   "usage":{
      "prompt_tokens":13,
      "completion_tokens":7,
      "total_tokens":20
   },
   "choices":[
      {
         "message":{
            "role":"assistant",
            "content":"\n\nThis is a test!"
         },
         "finish_reason":"stop",
         "index":0
      }
   ]
}

이번엔 ChatGPT API를 이용한 번역기를 간단히 만들어보자

 

먼저 TERMINAL창에서 pip install gradio를 입력해 gradio를 설치한다.

 

ChatGptCode3.py를 만들고 아래 코드를 입력한다.

import gradio as gr

def greet(name):
    return "Hello " + name + "!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")

demo.launch()

TERMINAL창에서 python ChatGptCode3.py를 입력해 실행하면 외부에서 접속할 수 있는 URL 주소가 생성된다.

 

URL 주소로 들어가 보면 아래와 같이 간단한 웹 사이트가 만들어진다.

이번엔 ChatGPT API 챗봇 기능을 gradio에 적용한다.

ChatGptCode3.py의 코드를 아래와 같이 변경해준다.

import openai
import gradio as gr
openai.api_key = "당신의 KEY"

def greet(content):
    completion = openai.ChatCompletion.create(
        model="gpt-3.5-turbo", messages=[{"role": "user", "content": content}]
    )
    return completion.choices[0].message.content

demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch(share=True)

일단 gradio에서 메세지를 입력 후 '제출하기' 버튼을 클릭하면 greet() 함수를 호출한다.

greet() 함수 호출 시 content 값으로 당신의 입력값을 openai로 보내고 openai로부터 넘겨받은 메세지를

다시 gradio의 output으로 내보내는 코드이다.

 

다시 TERMINAL창에서 python ChatGptCode3.py를 입력해 실행하면 외부에서 접속할 수 있는 URL 주소가 생성된다.

(현재 실행 중인 명령을 종료하려면 Ctrl + c를 눌러준다.)

'안녕'이라고 입력 후 제출을 했을 때, 뒤에 어울릴 메세지를 넘겨준 것을 확인할 수 있다.

 

이번에는 content 뒤에 "영어로 번역해줘" 라는 문자열을 추가한 후 다시 실행해보자

import openai
import gradio as gr
openai.api_key = "당신의 KEY"

def greet(content):
    completion = openai.ChatCompletion.create(
        model="gpt-3.5-turbo", messages=[{"role": "user", "content": content + "영어로 번역해줘"}]
    )
    return completion.choices[0].message.content

demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch(share=True)

'안녕 나의 블로그를 방문해줘서 고마워'를 입력 후 제출했을 때

'Hello, thank you for visiting my blog!'라는 결과를 넘겨준다.

'AI > ChatGPT' 카테고리의 다른 글

[AI] ChatGPT API 기초 [파인튜닝]  (0) 2023.05.30
[AI] ChatGPT 기초  (0) 2023.05.05

ChatGPT는 OpenAI가 개발한 프로토타입 대화형 인공지능 챗봇이다.

 

GPT에 대해 알아보자

Generative (생성 모델)

Pre-Trained (사전 훈련)

Transformer (Transformer AI 모델)

 

ChatGPT의 장점

1. 간단한 정보(특정 주제 / 개념)에 대해 알 수 있다.

2. 질문의 의도와 맥락을 파악하여 사람과 같은 글쓰기와 대화 능력으로 사용자 맞춤형 정보를 제공한다.

3. 사용자가 대화에서 말한 것을 기억하고 해당 답변에 대한 추가 질문을 통해 대화를 이어갈 수 있다.

   - 사용자가 대화에서 말한 것을 기억한다.

   - 답변을 보고 사용자가 내용 수정을 요청할 수 있다.

4. 단순 검색 결과보다 사람과 같은 표현을 사용하여 편하고 생동감이 있다.

5. 잘못된 전제를 짚어내고 부적절한 요청을 거부할 수 있다.

   - 사회통념상 논란이 될 수 있는 답변은 거부하거나, 윤리적인 규범에 맞춰 답변한다.

6. 간단한 회원가입으로 18세 이상이라면 누구나 무료로 사용이 가능하다.

   - 유료 버전도 출시되었다.

 

ChatGPT의 단점

1. 다양한 윤리적 역기능 예방 교육이 필요하다.

   - 표절 논란, 데이터 편향성, 저작권, 정보 도용 등

2. 잘못된 답변 제공으로 인한 신뢰성 논란이 있다.

   - 답변의 출처를 알 수 없다. (출처가 있는 답변을 요청하면 됨)

3. 2021년까지의 정보만 학습되어 있어 최신성이 부족하고 현재를 기준으로 정확한 답변을 받을 수 없다.

4. 영어 기반 모델이므로, 한글로 질문할 경우 다소 속도가 느리고 답변이 짧거나 중간에 끊기는 경우가 있다.

    또한 잘못된 번역을 답하기도 한다.

   - 영어로 질문할 경우 더 빠르고 정교한 답변을 제공한다.

5. 텍스트 기반이므로 이미지, 음성은 사용할 수 없다.

6. 유료 버전(월 20달러)의 서비스 질이 더 높다.

 

ChatGPT에 대해 알아보기 전에 https://chat.openai.com/auth/login 접속 후 회원 가입을 하자

질문에 다음과 같은 답변을 받았다.

 

이번에는 계산기 프로그램을 만드는 파이썬 코드를 생성해달라고 요청해봤다.

 

파이썬 설치가 되어있지 않은 경우 https://www.python.org/ 파이썬 사이트에 접속해서 Downloads 메뉴에

최신 버전을 다운 받아서 실행한다.

설치 화면에서 Add python.exe to PATH 체크를 꼭 해주도록 한다.

IDE(통합 개발 환경)는 VSCode를 사용했다. https://code.visualstudio.com/

 

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.  Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com

VSCode 실행 후 좌측 큐브 모양의 메뉴를 클릭 후 python 검색 후 첫 번째 Python 패키지를 설치한다.

좌측 종이 모양 메뉴 클릭 후 Open Folder 클릭 후 작업할 폴더를 지정한다.

파일명은 뒤에 .py를 붙여준다.

 

ChatGPT에게 계산기 프로그램을 만드는 파이썬 코드를 생성해달라고 요청한 화면이다.

ChatGPT가 생성해준 파이썬 코드는 다음과 같다.

# 덧셈 함수
def add(x, y):
    return x + y

# 뺄셈 함수
def subtract(x, y):
    return x - y

# 곱셈 함수
def multiply(x, y):
    return x * y

# 나눗셈 함수
def divide(x, y):
    return x / y

# 사용자로부터 입력 받기
print("계산할 두 수를 입력하세요.")
num1 = float(input("첫 번째 숫자: "))
num2 = float(input("두 번째 숫자: "))

print("사용할 연산자를 선택하세요.")
print("1. 덧셈")
print("2. 뺄셈")
print("3. 곱셈")
print("4. 나눗셈")

# 사용자로부터 연산자 입력 받기
choice = input("선택한 연산자(1/2/3/4): ")

# 입력된 연산자에 따라 연산 수행
if choice == '1':
    print(num1, "+", num2, "=", add(num1, num2))
elif choice == '2':
    print(num1, "-", num2, "=", subtract(num1, num2))
elif choice == '3':
    print(num1, "*", num2, "=", multiply(num1, num2))
elif choice == '4':
    print(num1, "/", num2, "=", divide(num1, num2))
else:
    print("잘못된 입력입니다.")

실행하면 계산할 두 수를 물어보고 숫자 입력 시 연산자를 선택할 수 있다.

연산자까지 입력을 마치면 결과를 보여준다.

 

나는 한글로 질문, 요청을 했지만 영어를 사용하는 것이 좋다.

'AI > ChatGPT' 카테고리의 다른 글

[AI] ChatGPT API 기초 [파인튜닝]  (0) 2023.05.30
[AI] ChatGPT API 기초 [번역기 만들기]  (1) 2023.05.05

+ Recent posts