분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
ChatGPT 활용 AI 경진대회 월간 데이콘
[잡설 포함] "프롬프트 엔지니어링"을 보다 인공지능 개발자의 시선으로 생각해보기 (+ 논문 추천)
안녕하세요!
프롬프트 엔지니어링 이라는 새로운 분야의 대회가 열려서 찍먹해보고 있는 이세의인공지능 입니다.
ChatGPT가 나오고 한동안 공돌/공순이가 사라지고 글 잘 쓰는 문과의 시대가 온다 라는 말이 들릴 정도로
많은 관심이 몰렸던 것 같습니다.
하지만 해당 분야에서 만들어진 도구를 활용을 더 못하는 건 대부분 이해하려하지 않고 사용하기 때문인 것 같습니다!
그래서 토크에서 이 ChatGPT와 대화하는 방법들을 좀 더 "공학적"으로 접근해보는건 어떨까 생각했습니다.
요즘 제가 관심이 생긴게 몇 개 있습니다.
1. "유의미한" 대화 하기, 대화 유도하기
방송 예능을 보다 보면 아는 사람에게 전화해서, 원하는 단어나 문장 듣는 게임을 하는 걸 보신 적 있으신가요?
ChatGPT와 대화를 하다보면 대답하는 방식이 정말 사람과 유사하다고 느끼게 됩니다!
원하는 답변을 잘 해주지 않기도 하고, 이 대회처럼 원하는 답변을 하도록 "유도" 해야 하기도 합니다.
사람과 대화를 하면서 어떤 대답을 듣기 위해 대화를 "유도"해보신 분들이라면 본능적으로 아시기도 하고,
대화의 기술이나 관련 심리학에 관심이 있으셨다면 들어보셨을 듯도 합니다.
대화의 흐름에 큰 영향을 주는 "단어"의 선택이 중요한데요.
우리가 "단어"라고 하는 것을 NLP적으로 생각하면 "토큰"으로 바꿔 말할 수 있겠네요!
GPT에 이 "토큰"들이 들어오면 그에 맞는 답변을 추론해서 만들어주게 됩니다.
그렇다면, 사람과의 대화처럼 "쓸데없는 토큰"보다 "유의미한 토큰"을 나눠야 혼란이 오지 않겠군요!
(흐름에 혼란을 주지 않는 일관성 있는 "토큰"을 계속해서 입력하는 것도 중요하다고 생각합니다! + 이 내용은 단어보단 문맥의 느낌이 들기에 괄호로 빼두겠습니다. )
대화를 유도함에 있어서 제일 좋은 방법은 예시를 들어주는 것입니다.
"이런 이런게 있는데, 이럴 땐 이렇게 해야 해." 라는 말을 해주면, 서로 생각하는 부분이 일치해지기 때문에 더 원하는 대답을 듣기 유리해지죠.
베이스라인에서 공유해주신 방법과 같이 자세한 상황을 설명해주는 것도 좋습니다.
제가 애용하는 파이프라인을 공유해봅니다!
1) ChatGPT가 지금부터 수행할 역할을 배정해주기
2) 답변 받고 싶은 방식을 설명해주기 (때론 1번과 함께 말합니다. 넌 무슨 전공 대학원생인데, 이런 문제를 해결해서 교수님께 보고해야 해 ㅎㅎ)
3) 주어진 문제나 상황을 설명해주기 (3번을 2번보다 먼저 쓰기도 하지만, 3번을 설명하면 바로 문제해결을 들어가기도 해서 안전하게 역할배정부터 해줍니다.)
4) 문제에 대한 자세한 설명하고, 작업 시작시키기
+
5) 문제에 대한 피드백
코드 디버깅과 피드백에 대해선 약간 어렵게 느껴집니다.
문제 해결에서 새로운 문제를 주는 느낌이라 해결 후에 원래 주제로 돌아오게 하는 것과,
잘못된 디버깅을 한 경우 되돌리는 것이 상당히 귀찮아서,
새로운 대화를 만들어서 디버깅을 한 후, 다시 문제해결로 진입하는 방식을 쓰고 있습니다.
2. 조금씩 물어보기? 차근차근 생각하기?
토크의 "캣 지피티"님이 써주신 프롬프팅 성능을 늘릴 수 있는 인사이트들을 공유합니다 :) 글에서 2. 조금씩 물어보기
부분인데요!
이 부분에 대해서 저는 끊어서 물어보기보단, 생각을 차근차근하게 만들어보고 있습니다.
이 아이디어는 작년 초 인공지능을 배우기 시작할 때, ChatGPT가 나오기 전에 제 눈에 들어온 논문에서 배운 것입니다.
(출처 : https://arxiv.org/abs/2205.11916 , 굉장히 흥미로운 논문이니 번역을 해서라도 읽어보시거나, 이미 올라와 있는 리뷰들을 찾아보시는 것도 추천드립니다!)
이제 이 마법의 문구를 아시게 되셨을 것 같습니다.
"Let's think step by step" / (or "Thinking aloud")
차근차근 생각해보자 / 말하면서 생각해봐
이 문장의 추가로 나오는 답변이 굉장히 달라지는데요,
하나하나 끊어서 질문할 때, 하나의 질문에 대해 충분한 생각(=연산)을 하고 답변을 할 수 있다고 생각합니다.
한편, 끊어서 질문하기 어려운 문제에 대해서도 이 "차근차근 생각해보자"를 쓰면 복잡한 질문에 대해서도
끊어서 받고, 끊어서 충분한 연산을 하는 것처럼 느껴지고 있습니다.
마찬가지로 "답변을 할 수 있을 때까지 "Thinking"을 말해봐"라고 해도 충분한 연산을 하고 답변을 해주는 것 같이 느껴집니다.
생각할 시간을 충분히 주고, 충분히 답변할 기회를 주는 것이 답변의 퀄리티도 올릴 수 있는 것 같네요.
3. 너네끼리 싸워라
이건 이 대회를 하면서 얻은 아이디어입니다.
서로 다른 역할을 주면, 다른 답변을 하게 되는데요.
나온 답변을 다수결로 판단하는 방식입니다.
투표하는 방식과 같죠!
이번 대회에서
class 1이라고 판단한게 4모델,
class 4라고 판단한게 1모델이면,
class 1일 확률이 높으니 1로 처리하는 방법으로 사용해보고 있습니다.
수학문제 풀게 해보니 굉장히 유용하더라구요...(축소판 실험..)
여러분도 한번 테스트 해 보시는 것도 추천드립니다!
일단 본문은 (갑자기) 여기까지 적겠습니다!
지금 제 등수가 높게 나오고 있는 것은 오버피팅일 가능성이 굉장히 높아보이네요ㅠㅠ...
1년 내내 모든 데이콘 대회를 참여해보니
오버피팅된 결과물이면 알 수 없는 본능으로 느끼기 시작했습니다...
이제 안정성을 찾는게 중요하겠습니다..
좋은 아이디어나 공학적인 접근 방식이 있으신 분들은 댓글로 남겨주세요!
읽어주셔서 감사합니다 :)
잘봤습니다! 유용한 팁인것 같습니다. 본문과는 좀 거리가 있는 질문입니다만, 혹시 오버피팅으로인해 순위 변동이 많이 되는 편인가요?
코드가 점점 길어지니까 변수 변경, 훨씬 이전 코드 참조 등... 지피티가 요구사항에 맞춰서 작성을 잘 못하더라구요. 그래서 저는 참조하라고 코드 전문을 붙여넣고, 이 코드를 참조해서 요구사항을 들어달라고 답변을 하는데 그렇게 하니까 지피티가 실수를 안하게 되더라구요.
당연한 소릴 하자면, 상위권 사람들이 오버피팅이 많이 있으면, 순위 변동이 많이 됩니다!
제출 기회가 많은 대회에서 많이 생기더라구요!
네! 고치고 싶은 코드의 코드 전문을 넣고, In line [~~], 이런식으로 타겟해서 문제 일어난 부분을 설명해주면 나은 것 같네요!
데이콘(주) | 대표 김국진 | 699-81-01021
통신판매업 신고번호: 제 2021-서울영등포-1704호
서울특별시 영등포구 은행로 3 익스콘벤처타워 901호
이메일 dacon@dacon.io | 전화번호: 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved
그리고 저는 항상 Please를 붙여서 요청합니다..