본문 바로가기
빅데이터

API를 활용한 챗봇 만들기

by 너굴맨_ 2022. 2. 7.

프로젝트

- 기획 의도

일상 속에서 겪는 언어 장벽을 극복하기 쉽도록 Papago와 AI(GPT-3)를 사용하여 대화형 번역 프로그램을 만들어보자.

 

- Process

- output

 

- PaPago API

파파고는 다국적 언어처리가 가능한 번역 엔진으로 번역 결과를 제공하는 서비스입니다. 

 

사용법:

  1.  네이버 개발자(naver.developers)에서 Papago API를 사용할 수 있도록 API 이용신청
  2.  아래의 코드와 같이 파이썬 환경에서 사용
import requests

def translate_ko_en(text):
  data = {'text':text, 'source':'ko','target':'en'}  # 한글 -> 영어

  client_id = <Naver Client_ID> # Client ID를 입력
  client_secret = <Naver Client_Secret> # Client Secret을 입력
  url = "https://openapi.naver.com/v1/papago/n2mt"

  header = {"X-Naver-Client-Id":client_id,"X-Naver-Client-Secret":client_secret}

  response = requests.post(url, headers=header, data= data)
  rescode = response.status_code

  if(rescode==200):
    t_data = response.json()
    
    return t_data['message']['result']['translatedText']
  else:
    print('Error Code: ', rescode)

- 예제

- GPT-3

GPT-3는 OpenAI사에서 개발한 인공지능 모델로 딥러닝을 이용해 인간과 가까운 텍스트를 만드는 자기회귀 언어모델로 GPT-n 시리즈의 3세대 모델이다.

 

- 수행가능한 작업

언어 문제 풀이, 랜덤 글짓시, 번역, 주어진 문장에 따른 간단한 웹코딩이 가능하다.

 

- 사용법

  1. openai 사이트에 등록 후 api_key를 받는다.

https://openai.com/api/

 

OpenAI API

OpenAI is an AI research and deployment company. Our mission is to ensure that artificial general intelligence benefits all of humanity.

openai.com

    2. 아래와 같이 파이썬 환경에서 실행 (colab)
# 간단한 gpt3 예제
!pip install openai

import openai

openai.api_key = <openai_api_key> # openai의 api key를 입력하시오

a_text = input()
response = openai.Completion.create(engine="davinci", prompt=a_text, temperature=0.2, max_tokens=30)
answer = response.choices[0].text.split('.')[0]
answer = answer.replace('\n\n','')
answer = answer.replace('”“', '')

print(answer)

 

프로젝트 코드 작성

위의 papago와 gpt3 api를 활용하여 위 프로젝트에 맞게 코드를 작성하자

# using papago
def translate(text,o_lang,t_lang):
  data = {'text':text, 'source':o_lang,'target':t_lang} 

  client_id = naver_api[0]
  client_secret = naver_api[1]
  url = "https://openapi.naver.com/v1/papago/n2mt"

  header = {"X-Naver-Client-Id":client_id,"X-Naver-Client-Secret":client_secret}

  response = requests.post(url, headers=header, data= data)
  rescode = response.status_code

  if(rescode==200):
    t_data = response.json()
    
    return t_data['message']['result']['translatedText']
  else:
    print('Error Code: ', rescode)
def gpt3(text):
  openai.api_key = openai_api[0]
  response = openai.Completion.create(engine="davinci", prompt=text, temperature=0.4, max_tokens=30)
  
  answer = response.choices[0].text.split('.')[0]
  answer = answer.replace('\n\n','')
  answer = answer.replace('”“', '')

  return answer
text = input("하고 싶은말 입력하시오. \n")
translate(text,'ko','en')
text = translate(text,'ko','en')
print('번역: ',text) # 질문을 영어로 변환
print('\n')

# GPT-3
gpt3(text)
answer = gpt3(text)
print(answer)
translate(answer,'en','ko')
answer = translate(answer,'en','ko')
print('번역: ',answer)
print('\n')

- 결과

GPT-3 모델은 temperature (0~1) 값은 답의 자유도를 나타내며 1에 갈수록 답변이 다양하게 나타난다.

 

- Temperature 값에 따른 응답의 변화를 확인하자

def test_gpt3(text, temp):
  openai.api_key = openai_api[0]
  response = openai.Completion.create(engine="davinci", prompt=text, temperature=temp, max_tokens=30)
  
  answer = response.choices[0].text.split('.')[0]
  answer = answer.replace('\n\n','')
  answer = answer.replace('”“', '')

  return answer

프로젝트 활용

작성한 코드 및 temperature 변화를 4가지 질문을 통해 확인해보자. - 코드는 아래의 링크를 참조

질문 1. 어떤 영화 좋아해?

질문 2. 점심 뭐 먹을래?

질문 3. BTS에 대해 어떻게 생각해?

질문 4. 김정은에 대해 어떻게 생각해?

(약간 민감한 주제에 대한 답변을 확인)

특정한 상황에서 사용가능한 챗봇 만들기

백화점의 상황에 맞게 GPT3에게 학습을 시킨 후 다국적 유저가 이용할 수 있게 코드를 작성하자.

 

학습 과정은 아래의 gpt3 sandbox를 활용하여 학습시킨다.

https://github.com/shreyashankar/gpt3-sandbox 

 

GitHub - shreyashankar/gpt3-sandbox: The goal of this project is to enable users to create cool web demos using the newly releas

The goal of this project is to enable users to create cool web demos using the newly released OpenAI GPT-3 API with just a few lines of Python. - GitHub - shreyashankar/gpt3-sandbox: The goal of th...

github.com

# colab 환경에서 작성하였습니다.
!git clone https://github.com/shreyashankar/gpt3-sandbox.git


cd gpt3-sandbox


!pip install -r api/requirements.txt
from api import GPT,Example
gpt = GPT(temperature=0.3, max_tokens=100)

# 예제 추가하기
# A마트
gpt.add_example(Example(
    "A마트 어디에 있어? ",
    "지하 1층에 위치합니다."
))

gpt.add_example(Example(
    "A마트 언제 쉬어? ",
    "매주 화요일에 쉽니다."
))

gpt.add_example(Example(
    "A마트 언제까지 해? ",
    "10시부터 22시까지 운영합니다."
))

gpt.add_example(Example(
    "A마트에 머 팔어? ",
    "A제품이 가장 잘 팔립니다."
))

gpt.add_example(Example(
    "A제품 얼마야? ",
    "11000원에 판매중입니다."
))

위의 add_example을 통해 상황에 따른 질문과 응답을 추가하여 특정 질문에 응답하도록 학습시킴

 

- 질문 및 응답

질문과 응답에 대한 답변이 잘 나왔습니다. 

마지막으로 위의 코드를 종합하여 다국어 이용자를 위한 chatbot을 작성하였습니다.

# 번역 기능이 추가된 Chatbot
text = input("하고 싶은말 입력하시오. \n")
translate(prompt,'en','ko')
prompt = translate(prompt,'en','ko')
print('번역: ',prompt) # 질문을 영어로 변환
print('\n')

answer = gpt.submit_request(prompt)
print('-----------------')
answer = answer.choices[0]['text']
print(answer)
print("\n")
t_answer=translate(answer,'ko','en')
print('번역: ',t_answer)
print('\n')

C 가게는 3층에 위치한다고 학습시켰으나 2층으로 잘못 응답

주의사항!!

GPT-3 모델은 유료형 모델로써 token 사용량에 따라 돈을 내야합니다. 아쉽게도 아래와 같이 한국에서 결제가 되지않는 문제 사항이 있었습니다. 토큰 값을 너무 크게 설정하지 않고 학습하도록 하시길 바랍니다.

Code

https://github.com/Han-Archives/Colab/blob/main/Chat_with_GPT3.ipynb

Reference

 

'빅데이터' 카테고리의 다른 글

[PySpark] PostgreSQL 연동하기  (4) 2022.03.22
[PySpark] Spark 핵심 DataSource  (0) 2022.03.09
[PySpark] Spark 구성 컴포넌트  (0) 2022.03.08
[PySpark] Spark 란?  (0) 2022.03.07
Yolov5를 이용한 TFT 챔피언 인식하기  (0) 2022.02.18

댓글