chatGPT 응답 품질 점검 - Check outputs
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
#chatGPT- hallucination #chatGPT_환각방지 #chatGPT_응답품질 #GPT_응답검증 #GPT_응답품질점검 #OpenAI환각
chatGPT 환각(Hallucination) 개선을 위한 응답 품질 점검 - Check outputs
인공지능의 환각
환각은 AI가 잘못된 데이터를 학습하거나 오류로 인해 도출한 결과를 믿을 수 없게 만든다는 것입니다. GPT의 창의적인 답변으로 원하는 결과를 전달하지 못하는 것으로 모델의 환각은 사실이 아닌것을 사실처럼 꾸며내는 것입니다.
OpenAI의 응답 품질과 환각을 방지하기 위해서 형성된 모델의 결과를 검증해 보는 것이 중요합니다.
따라서 오픈AI는 주어진 쿼리에 대한 최종 답변에 보상하는 ‘결과 감독(outcome supervision)’ 대신 각각의 추론 단계별 답변에 보상하는 ‘과정 감독(process supervision)’ 방식으로 LLM을 훈련하는 것에 대하여 알아 보고자 합니다.
1. OpenAI 기본 소스를 작성 합니다.
1. 응답을 위한 기본 환경을 설정합니다.
import openai
openai.api_key = "{YOUR_API_KEY}"
#* temperature=0 -> 1 클수록 응답의 창의성이 커집니다.
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"]
2. 최적의 응답에 대한 위험성을 점검 합니다.
다음과 같이 AI가 생성한 여러 모델의 응답에서 사용자에게 보여주기 위해 가장 좋은 모델을 선택합니다.
최종적인 내용을 아래와 같이 입력하여 결과를 검증하는 방법입니다.
final_response_to_customer = f"""
스마트엑스 프로 폰은 6.1인치 디스플레이, 128GB 저장 공간, 12MP 듀얼 카메라,
그리고 5G를 지원합니다. 포토스냅 DSLR 카메라는 24.2MP 센서, 1080p 비디오, 3인치 LCD,
그리고 교체 가능한 렌즈를 갖추고 있습니다. CineView 4K TV와 같은 다양한 TV 제품도 보유하고 있습니다.
이 제품은 55인치 디스플레이, 4K 해상도, HDR, 그리고 스마트 TV 기능을 갖추고 있습니다. 또한 SoundMax
홈 시어터 시스템도 보유하고 있는데, 이는 5.1 채널, 1000W 출력, 무선 서브우퍼, 그리고 블루투스를 지원합니다.
이 제품들이나 다른 제품들에 관해 특별한 질문이 있으신가요?
"""
response = openai.Moderation.create(
input=final_response_to_customer
)
moderation_output = response["results"][0]
print(moderation_output)
[실행결과]
{ "categories": { "harassment": false, "harassment/threatening": false, "hate": false, "hate/threatening": false, "self-harm": false, "self-harm/instructions": false, "self-harm/intent": false, "sexual": false, "sexual/minors": false, "violence": false, "violence/graphic": false },
"category_scores": { "harassment": 4.34441858487844e-07, "harassment/threatening": 1.405030491952175e-08, "hate": 8.495604220115638e-08, "hate/threatening": 2.117733322037907e-09, "self-harm": 8.214954938523533e-09, "self-harm/instructions": 3.876750298559273e-08, "self-harm/intent": 1.2853090147757484e-08, "sexual": 2.2440094653575215e-06, "sexual/minors": 1.228512331863385e-07, "violence": 3.7130064356460935e-06, "violence/graphic": 1.2576457208979264e-07 },
"flagged": false }
* 이 응답은 괴롭힘, 혐오, 자해, 성적 콘텐츠, 폭력과 관련된 카테고리 중 어느 하나에도 해당하지 않으며, 이에 대한 점수도 극히 낮습니다.
* 이 응답은 위험성이 거의 없거나 전혀 없다고 판단합니다.
3. 응답 결과의 사실성을 확인 합니다.
- GPT는 창의적인 답변이 있을수 있으므로 학습된 제품 정보를 기반으로 출력이 사실에 기반하고 있는지 확인합니다.
system_message = f"""
당신은 고객 서비스 대리자 응답이 고객의 질문에 충분히 답하는지를 평가하며,
또한 제품 정보에서 언급된 모든 사실이 정확한지 확인하는 어시스턴트입니다.
제품 정보와 사용자 및 고객 서비스 대리자 메시지는 3개의 역따옴표로 구분됩니다. ```
Y 또는 N 문자로 응답하세요.
구두점 없이:
Y - 출력이 충분히 질문에 답하고 제품 정보를 올바르게 사용하는 경우
N - 그렇지 않은 경우
단일 문자만 출력하세요.
"""
customer_message = f"""
스마트엑스 프로 폰과 포토스냅 카메라, DSLR 모델에 대해 알려주세요. \
또한 귀사의 TV 제품에 대해 알려주세요.
"""
product_information = """
{ "name": "SmartX ProPhone",\
"category": "스마트폰 및 액세서리",
"brand": "SmartX", "model_number": "SX-PP10", "warranty": "1년", "rating": 4.6,
"features": [ "6.1인치 디스플레이", "128GB 저장 공간", "12MP 듀얼 카메라", "5G" ],
"description": "고급 카메라 기능을 갖춘 강력한 스마트폰입니다.", "price": 899.99 }
{ "name": "FotoSnap DSLR 카메라", "category": "카메라 및 캠코더",
"brand": "FotoSnap", "model_number": "FS-DSLR200", "warranty": "1년", "rating": 4.7, "features": [ "24.2MP 센서", "1080p 비디오", "3인치 LCD", "교체 가능한 렌즈" ], "description": "다재다능한 DSLR 카메라로 멋진 사진과 비디오를 촬영하세요.", "price": 599.99 }
{ "name": "CineView 4K TV", "category": "텔레비전 및 홈 시어터 시스템",
"brand": "CineView", "model_number": "CV-4K55", "warranty": "2년", "rating": 4.8, "features": [ "55인치 디스플레이", "4K 해상도", "HDR", "스마트 TV" ], "description": "생동감 넘치는 색상과 스마트 기능을 갖춘 멋진 4K TV입니다.", "price": 599.99 }
{ "name": "SoundMax 홈 시어터", "category": "텔레비전 및 홈 시어터 시스템",
"brand": "SoundMax", "model_number": "SM-HT100", "warranty": "1년", "rating": 4.4, "features": [ "5.1 채널", "1000W 출력", "무선 서브우퍼", "블루투스" ], "description": "몰입적인 오디오 경험을 위한 강력한 홈 시어터 시스템입니다.", "price": 399.99 }
{ "name": "CineView 8K TV", "category": "텔레비전 및 홈 시어터 시스템",
"brand": "CineView", "model_number": "CV-8K65", "warranty": "2년", "rating": 4.9, "features": [ "65인치 디스플레이", "8K 해상도", "HDR", "스마트 TV" ], "description": "이 멋진 8K TV로 텔레비전의 미래를 경험하세요.", "price": 2999.99 }
{ "name": "SoundMax 사운드바", "category": "텔레비전 및 홈 시어터 시스템",
"brand": "SoundMax", "model_number": "SM-SB50", "warranty": "1년", "rating": 4.3, "features": [ "2.1 채널", "300W 출력", "무선 서브우퍼", "블루투스" ], "description": "이 세련되고 강력한 사운드바로 TV 오디오를 업그레이드하세요.", "price": 199.99 }
{ "name": "CineView OLED TV", "category": "텔레비전 및 홈 시어터 시스템",
"brand": "CineView", "model_number": "CV-OLED55", "warranty": "2년", "rating": 4.7, "features": [ "55인치 디스플레이", "4K 해상도", "HDR", "스마트 TV" ], "description": "이 OLED TV로 진정한 검은색과 생동감 넘치는 색상을 경험하세요.","price": 1499.99 }
"""
4. 응답에 대한 품질 점검 규칙 정의
- 답변에 대한 검증 내용에 손님의 메시지와 상품정보, 상담원의 답변이 올바른지 확인하도록 정의 합니다. (Y가 나와야함)
customer_message = "OLED 55인치 텔레비전은 어떤 것이 있나요"
another_response = f"""
CineView의 55인치 CV-OLED55제품은 OLED TV로 진정한 검은색과 생동감 넘치는 색상을 제공합니다.
warranty를 2년 제공하며, 가격은 1499.99 달러입니다.
"""
q_a_pair = f"""
손님 질문: ```{customer_message}```
상품 정보 : ```{product_information}```
상담원 답변: ```{another_response}```
상담원 답변으로 상품 정보를 검색하여 올바르게 사용했는지 확인되나요?
손님 질문에 충분히 답했나요?
결과표시는 Y 또는 N
"""
messages = [
{'role': 'system', 'content': system_message},
{'role': 'user', 'content': q_a_pair}
]
response = get_completion_from_messages(messages)
print(response)
[실행결과]
Y
5. 올바르지 않은 답변을 한 경우에 대한 사실성 검증
- GPT의 응답이 엉뚱하게 답변을 하였다면 올바른 품질인지 검증해 봅니다. 결과(N)
customer_message = "55인치 텔레비전은 어떤 것이 있나요"
another_response = f"""
CineView 8K TV 모델로 CV-8K65 가 8K 해상도 입니다.
"""
q_a_pair = f"""
손님 질문: ```{customer_message}```
상품 정보 : ```{product_information}```
상담원 답변: ```{another_response}```
상담원 답변으로 상품 정보를 검색하여 올바르게 사용했는지 확인되나요?
손님 질문에 충분히 답했나요?
결과표시는 Y 또는 N
"""
messages = [
{'role': 'system', 'content': system_message},
{'role': 'user', 'content': q_a_pair}
]
response = get_completion_from_messages(messages)
print(response)
another_response = "인생은 초콜렛 박스 같은거야 "
q_a_pair = f"""
손님 메세지: ```{customer_message}```
상품 정보 : ```{product_information}```
상담원 답변: ```{another_response}```
응답으로 검색한 정보를 올바르게 사용했는지 확인되나요?
질문의 응답에 충분히 답했나요?
결과표시는 Y 또는 N
"""
messages = [
{'role': 'system', 'content': system_message},
{'role': 'user', 'content': q_a_pair}
]
response = get_completion_from_messages(messages)
print(response)
N
[참고]
댓글
댓글 쓰기