ChatGPT를 이용한 질문 분류 - Input - Classification
최근 모든 기술 트랜드가 ChatGPT를 이용한 프로그램이 대세인듯 합니다. 저도 프로그램을 만들어 본지는 오래 되었지만 다시 파이썬 코드와 "https://chat.openai.com/" 를 이용해서 소스코드를 검증하고 샘플을 만들어 보고 있습니다.
먼저 ChatGPT를 이용한 질문의 분류 (Classification) 하는 방법을 소스로 정리해 보았습니다.
소스를 작성 하려면 {YOUR_API_KEY} 부분은 본인의 OpenAI API 키를 입력 해야 합니다. 그런데 chatGPT의 API_KEY를 이용하여 사용 하려면 개인계정을 유료 결제를 해야 합니다.
ㅁ ChatGPT API 이용가이드
https://platform.openai.com/docs/api-reference
ㅁ API keys 생성 및 관리
https://platform.openai.com/docs/api-reference
OpenAI를 이용한 질문 분류 소스 작성 : input-Classification
ChatGPT를 사용하여 질문을 분류하는 간단한 Python 스크립트를 만들어 보겠습니다.
import openai
openai.api_key = "{YOUR_API_KEY}"
* "{YOUR_API_KEY}"는 openAI 사이트에 가입하여 발급을 받은 개인 키입니다. gpt는 유료로 전환되어 개인 계정에서 billing을 해서 사용 할 수 있습니다.
def get_completion_from_messages(messages,
model="gpt-3.5-turbo",
temperature=0,
max_tokens=500):
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=temperature,
max_tokens=max_tokens,
)
return response.choices[0].message["content"]
- messages: 대화를 구성하는 메시지들의 리스트입니다. message는 role 과 메시지 내용을 담는 content로 구성됩니다.
- temperature : 생성된 텍스트의 다양성을 제어하는 매개변수로, 0에 가까울수록 보수적이고 1에 가까울수록 더 다양한 결과를 생성합니다.
- max_tokens : 생성된 텍스트의 최대 토큰 수를 제한하는 매개변수입니다. 이를 통해 생성된 텍스트의 길이를 제어할 수 있습니다
- response.choices[0] : 응답 결과의 통해 첫 번째 메시지 내용을 가져옵니다.
Role은 메시지를 보내는 주체의 역할을 가리키는 매개변수 입니다. system, user, assitance 로 구성되어 있습니다.
"system"
: 시스템 역할은 주로 채팅의 맥락이나 지침으로 언어 모델에게 어떤 방식으로 응답할지에 대한 지침을 제공합니다.
"user"
: 사용자 역할은 실제 사용자가 모델에게 보내는 메시지로 질문, 명령의 유형으로 system과 상호 작용을 합니다.
"assistant"
: 어시스턴트 역할은 모델이 이전에 생성한 메시지로 이전 응답과 일관성을 유지하도록 합니다.
[질문1 : 질문에 대한 설명과 응답을 위한 category 분류 정리]
system_message에 delimiter를 이용하여 사용자의 질문을 전달하겠다고 설명 되어 있습니다.
{'role':'user', 'content': f"{delimiter}{user_message}{delimiter}"},
카테고리 범주별로 아래와 같이 확장하면 해당 유형에 적합한 category로 분류 응답이 가능합니다.
delimiter = "####"
system_message = f"""
You will be provided with customer service queries. \
The customer service query will be delimited with \
{delimiter} characters.
Classify each query into a primary category \
and a secondary category.
Provide your output in json format with the \
keys: primary and secondary.
Primary categories: Human resource, Billing, Technical Support, \
Account Management, or General Inquiry.
Human resource categories:
on-boarding date
vacation
profile photo
Billing secondary categories:
Unsubscribe or upgrade
Add a payment method
Explanation for charge
Dispute a charge
Technical Support secondary categories:
General troubleshooting
Device compatibility
Software updates
Account Management secondary categories:
Password reset
Update personal information
Close account
Account security
General Inquiry secondary categories:
Product information
Pricing
Feedback
Speak to a human
"""
user_message = f"""\
I want you to delete my profile and all of my user data"""
messages = [
{'role':'system',
'content': system_message},
{'role':'user',
'content': f"{delimiter}{user_message}{delimiter}"},
]
response = get_completion_from_messages(messages)
print(response)
user_message = f"""\
I want you to delete my photo """
messages = [
{'role':'system',
'content': system_message},
{'role':'user',
'content': f"{delimiter}{user_message}{delimiter}"},
]
response = get_completion_from_messages(messages)
print(response)
{ "primary": "Human resource", "secondary": "profile photo" }
[질문2 : 한국어로 질문한 category 분류]
각 system_message를 한글로 번역하여 정리하여 작성하여도 category 분류가 작동이 됩니다.
delimiter = "####"
system_message = f"""
고객 서비스 쿼리가 제공될 것입니다. \
고객 서비스 쿼리는 {delimiter} 문자로 구분될 것입니다.
각 쿼리를 주요 범주와 보조 범주로 분류하십시오.
json 형식으로 출력을 제공하며 primary 및 secondary 키를 사용하십시오.
주요 범주: 인사, 청구, 기술 지원, 계정 관리 또는 일반 문의.
인사 지원 범주:
입사일
휴가일
프로필 사진 등록
청구 보조 범주:
구독 취소 또는 업그레이드
결제 방법 추가
요금 설명
요금 이의 제기
기술 지원 보조 범주:
일반 문제 해결
장치 호환성
소프트웨어 업데이트
계정 관리 보조 범주:
비밀번호 재설정
개인 정보 업데이트
계정 닫기
계정 보안
일반 문의 보조 범주:
제품 정보
가격
피드백
인간 상담원과 통화
"""
user_message = f"""\
내 프로필과 모든 사용자 데이터를 삭제하려고 합니다."""
messages = [
{'role':'system',
'content': system_message},
{'role':'user',
'content': f"{delimiter}{user_message}{delimiter}"},
]
response = get_completion_from_messages(messages)
print(response)
{ "primary_category": "계정 관리", "secondary_category": "계정 닫기" }
[질문 3 : 인사 category]
user_message에 "프로필"과 "사진" 등의 키워드로 입력하면 "인사" category로 분류 됩니다.
user_message = f"""\
내 프로필 사진을 수정하고 싶다"""
messages = [
{'role':'system',
'content': system_message},
{'role':'user',
'content': f"{delimiter}{user_message}{delimiter}"},
]
response = get_completion_from_messages(messages)
print(response)
{ "primary_category": "인사", "secondary_category": "프로필 사진 등록" }
'BigData' 카테고리의 다른 글
ChatGPT의 연쇄적 사고 사슬과 추론답변 - Chain of Thought Reasoning 와 한국어 답변 만들기 (70) | 2023.10.07 |
---|---|
ChatGPT의 입력 처리 - Inputs: Chaining Prompts (90) | 2023.10.06 |
ChatGPT의 올바른 언어 사용을 위한 질문 검증 - Inputs - Moderation (63) | 2023.10.06 |
실시간데이터처리 Cloud-Native Singlestore DB 특징과 Linux 설치 가이드 (79) | 2023.10.04 |
[SQLite] SQLite 설치하기 (0) | 2023.03.29 |
실시간 데이터 처리를 위한 Redpanda와 pinot 활용 (0) | 2022.12.22 |
실시간분석을 위한 OLAP 저장소 Apache pinot (0) | 2022.12.18 |