🔹 이번 포스팅은 프롬프트를 짜는 방법(제로샷, 원샷, 퓨샷 프롬프팅)과 GPT api를 연결하는 방법을 다루고 있습니다.
- LLM : 인간의 언어를 이해하고 생성할 수 있는 머신 러닝 모델 (ex. Alexa, Siri, Chat GPT)
- NLP : 컴퓨터가 인간의 언어를 이해, 생성, 조작할 수 있도록 해주는 인공지능의 한 분야. (자연어 처리 기술)
✔ 프롬프트 엔지니어링을 통해 학습 분석하기!
우선, 학습 분석을 하기 위해 필요한 정보와 학습 분석을 통해 나와야 하는 정보들을 정리해보자
- 학습 분석을 하기 위해 필요한 정보
- 사용자가 푼 퀴즈들이 각각 요약된 리스트 (생성한 퀴즈 자체를 가져다 써도 되겠지만, 토큰 수를 고려하여 퀴즈를 생성할 때 해당 퀴즈를 한 줄로 요약하였고, 분석 시 이 요약본을 가져다 쓰기로 하였다.)
- 사용자가 해당 퀴즈를 맞혔는지 틀렸는지에 관한 정보
- 학습 분석을 통해 나와야 하는 정보
- 생성된 퀴즈들을 기반으로 카테고리를 만들고 퀴즈들을 카테고리 별로 분류한다.
- 퀴즈의 정답률을 기반으로 사용자의 학습을 평가한다.
- 취약한 부분을 보완할 수 있도록 학습 요령을 제안한다.
1) 프롬프트 "잘" 짜기
프롬프트를 잘 짜기 위해서는
1. 역할 설정을 전제로 깔기
2. 해야할 일의 순서를 정해주기
3. 출력 형식을 명시해주기 (ex. json)
4. 변수 지정하기
이 4가지의 기본 방법을 숙지해야 한다.
user1에 대해 프롬프트를 작성해보았다.
1. [카테고리 제목] : 하단의 """으로 구분된 [퀴즈요약]을 이해한 후 [퀴즈요약]에 있는 [노트]를 카테고리 별로 크게 분류합니다. 만약 기존의 카테고리에 속한다면 새롭게 카테고리를 생성하지 않고 해당 카테고리로 분류합니다. 분류하는 기준은 대학교 학과를 기준으로 합니다.
2. [평균 정답률] : 카테고리 별로 노트를 분류하고, 노트들의 정답률을 평균 내어 새로운 [평균 정답률]을 구합니다.
3. [취약 카테고리] : [평균 정답률]이 가장 낮은 카테고리를 보여줍니다.
4. [학습 평가] : 사용자가 푼 퀴즈들을 요약한 [퀴즈요약] 이해하고 사용자가 잘 이해하고 있는 카테고리부터 사용자가 잘 이해하지 못하는 카테고리까지 알려주며 사용자의 학습을 평가합니다.
5. [학습 분석] : 전문적인 배경 지식을 활용해 학습 분석을 합니다.
6. [학습 요령] : 앞으로 사용자가 해야 할 학습 요령을 제안합니다.
다음 JSON 형식의 출력을 이용하세요.
{
category : [카테고리제목]은 여기,
avg_correct_rate : [평균 정답률]은 여기,
Vulnerable Category: [취약카테고리]는 여기,
Learning_result : [학습 평가]는 여기,
analysis : [학습 분석]은 여기,
action_list : [학습 요령]은 여기,
}
[퀴즈요약]:
"""
""안의 내용을 기반으로 퀴즈를 생성하였고 각 퀴즈 요약 옆에 사용자가 해당 퀴즈를 맞혔는지 틀렸는지를 괄호로 구분하였습니다.
[정답률] : 2/5, 40%
[노트1] : "CNN (Convolutional Neural Network) 관련 노트"
[노트1]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. CNN은 컴퓨터 비전 분야에서 사용되는 Deep Learning 신경망 아키텍처 중 하나입니다. (맞힘)
2. 입력 레이어는 모델에 입력을 제공하는 역할을 합니다. (맞힘)
3. 출력 계층은 각 클래스의 출력을 확률 점수로 변환하는 역할을 합니다. (틀림)
4. 손실 함수는 네트워크가 얼마나 잘 작동하는지 측정하는 데 사용됩니다. (틀림)
5. 역전파는 오류를 계산하고 손실을 최소화하기 위해 사용되는 기법입니다. (틀림)
[정답률] : 3/5, 60%
[노트2] : "도메인 이름 시스템(DNS) 관리, 트래픽 라우팅, 로드 밸런싱, DNS 레코드 유형 및 라우팅 정책에 관한 노트"
[노트2]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. Amazon Route53을 사용하면 사용자는 도메인 이름을 등록하고 관리할 수 있습니다. (맞힘)
2. Route 53의 글로벌 DNS 확인 기능을 통해 사용자는 전 세계 어디서나 웹 사이트와 서비스에 즉시 액세스할 수 있습니다. (맞힘)
3. Route53의 지리적 위치 라우팅 정책을 사용하면 사용자의 지리적 위치를 기반으로 트래픽을 리소스로 라우팅할 수 있습니다. (맞힘)
4. CNAME 레코드는 사용자를 웹 사이트에 연결하는 데 도움을 줍니다. (틀림)
5. 다중값 라우팅 정책을 사용하면 DNS 쿼리에 대한 응답으로 여러 값을 반환할 수 있습니다. (틀림)
[정답률] : 3/5, 60%
[노트3] : "Amazon EC2를 사용하여 Linux 인스턴스를 시작하고 관리하는 방법에 관한 노트"
[노트3]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. Amazon EC2의 보안 그룹은 수신 및 발신 트래픽을 제어하는 역할을 합니다. (틀림)
2. Amazon EC2 인스턴스를 시작할 때 키 페어를 생성해야 합니다. (맞힘)
3. Amazon EC2를 사용하여 인스턴스를 시작합니다. (맞힘)
4. Amazon EC2의 가용 영역은 AWS 리전 내에 있는 격리된 위치를 의미합니다. (틀림)
5. Amazon EC2에서 사용할 수 있는 무료 인스턴스 유형은 t2.micro입니다. (맞힘)
[정답률] : 5/5, 100%
[노트4] : "물질의 전하(charge), 전압, 전류, 저항과 같은 전자공학을 이루는 기본적인 요소들에 관한 노트"
[노트4]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. 전자기력은 양전하와 음전하로 구성되어 있습니다. (맞힘)
2. 전류는 전자의 흐름을 나타내는 개념입니다. (맞힘)
3. 전압은 전자를 이동시키는 힘을 나타냅니다. (맞힘)
4. 저항은 전자의 흐름을 방해하는 부품입니다. (맞힘)
5. 전압의 단위는 볼트(V)입니다. (맞힘)
[정답률] : 4/5, 80%
[노트5] : "다국적 기업의 외국인 비용에 관한 노트"
[노트5]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. 다국적기업이 현지 시장의 특성을 잘 모르기 때문에 부담하는 일종의 유무형상의 모든 비용은 현지화 비용입니다. (맞힘)
2. CAGE Framework에서 다국적기업이 부담할 외국인비용은 문화, 제도, 지리, 경제적 차이로부터 발생합니다. (맞힘)
3. 다국적기업은 문화적 차이를 줄임으로써 외국인비용을 감소시키고 경제적 차이를 극복할 수 있습니다. (맞힘)
4. 외국인 비용의 예시로는 커뮤니케이션 비용, 정보수집 비용, 국제 교통, 통신비 등이 있습니다. (맞힘)
5. '자본집약적 산업'에서 기업은 규모의 경제를 통해 비용을 절감하고 효율성을 높이려고 합니다. (틀림)
이 프롬프트를 가지고 gpt에게 답변을 요구해보자.
2) GPT api 연결하기
웹 상의 gpt를 이용할 수도 있지만, 실제 프로젝트에서는 gpt api를 이용할 것이므로 react 프레임워크를 이용해 CRA로 개발환경을 세팅하여 학습 분석을 위한 버튼을 하나 만들어주었다.
이제 gpt api를 연결해보자.
1️⃣ gpt api key가 없다면 아래 링크로 들어가 create new secret key 버튼을 눌러 나만의 키를 발급받는다.
https://platform.openai.com/api-keys
✅ api 키는 생성할 때 딱 한 번만 보여주니 따로 저장해두는 것이 좋다! (사실 그래야만 한다.)
2️⃣ create-react-app으로 세팅한 프로젝트 폴더에 .env 파일을 추가하여 발급받은 키를 입력한다.
✅ Node.js에서 OpenAI API를 사용하려면 npm install openai 를 터미널에 입력해야 한다.
3️⃣ gpt.js 파일에 CallGPT 함수를 생성하고 아래와 같이 코드를 작성한다. 아까 짜두었던 프롬프트를 넣어준다.
export const CallGPT = async ({ prompt }) => {
console.log("CallGPT");
const messages = [
{
role: "system",
content: `You are an analyst who analyzes users' learning based on their quizzes. Follow these steps`,
},
{
role: "user",
content: `1. [카테고리 제목] : 하단의 """으로 구분된 [퀴즈요약]을 이해한 후 [퀴즈요약]에 있는 [노트]를 카테고리 별로 크게 분류합니다.
분류한 카테고리들을 전부 나열합니다. 만약 기존의 카테고리에 속한다면 새롭게 카테고리를 생성하지 않고 해당 카테고리로 분류합니다.
분류하는 기준은 대학교 학과를 기준으로 합니다.
2. [평균 정답률] : 카테고리 별로 노트를 분류하고, 노트들의 정답률을 평균 내어 새로운 [평균 정답률]을 구합니다.
3. [취약 카테고리] : [평균 정답률]이 가장 낮은 카테고리를 보여줍니다.
4. [학습 평가] : 사용자가 푼 퀴즈들을 요약한 [퀴즈요약] 이해하고 사용자가 잘 이해하고 있는 카테고리부터 사용자가 잘 이해하지 못하는 카테고리까지 알려주며 사용자의 학습을 평가합니다.
5. [학습 분석] : 전문적인 배경 지식을 활용해 학습 분석을 합니다.
6. [학습 요령] : 앞으로 사용자가 해야 할 학습 요령을 제안합니다.
다음 JSON 형식의 출력을 이용하세요.
{
category : [카테고리제목]은 여기,
avg_correct_rate : [평균 정답률]은 여기,
Vulnerable Category: [취약카테고리]는 여기,
Learning_result : [학습 평가]는 여기,
analysis : [학습 분석]은 여기,
action_list : [학습 요령]은 여기,
}
`,
},
{
role: "user",
content: `
"""
${prompt}
`,
},
];
const apiKey = process.env.REACT_APP_GPT_API_KEY;
console.log("REACT_APP_GPT_API_KEY:", apiKey);
try {
const response = await fetch("https://api.openai.com/v1/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${apiKey}`,
},
body: JSON.stringify({
model: "gpt-3.5-turbo",
messages,
temperature: 1.0,
max_tokens: 2048,
top_p: 1,
presence_penalty: 0,
frequency_penalty: 0,
n: 1,
}),
});
if (!response.ok) {
throw new Error(`API request failed with status ${response.status}`);
}
const responseData = await response.json();
console.log(">>responseData", responseData);
const message = responseData.choices[0].message.content;
return message;
} catch (error) {
console.error("Error calling GPT API:", error);
throw error;
}
};
✅ 여기서 잠깐!
ChatGPT API의 기본 파라미터와 고급 파라미터를 이해하고 넘어가보자.
기본 파라미터
- model : chat gpt를 호출하고 사용할 언어 모델을 지정한다. 여기서는 gpt-3.5-turbo 모델을 사용했다.
- messages : GPT에 전달할 내용을 담은 변수이다. 리스트의 형태로 입력하며 [{"role":"user", "content": "prompt"}]의 형태로 사용한다.
- "role"은 질문 시 "messages" 개체에 역할을 부여하는 것을 의미한다.
- system : ChatGPT가 어떻게 행동을 할지, 즉 채팅 내에서 어떤 성격을 가저야 하는지 나타낸다.
- user : "사용자"의 역할은 ChatGPT에 일반적으로 질문하는 주체를 나타낸다.
- assistance : "보조자"의 역할은 질문을 요청하기보다는, 대화의 연속성을 유지하기 위해 현재 요청에서 모델의 이전 응답을 설정하는 데 사용한다.
- "content"는 각 역할에게 전달하는 prompt (내용)을 입력한다.
- "role"은 질문 시 "messages" 개체에 역할을 부여하는 것을 의미한다.
고급 파라미터 : 고급 파라미터를 이용해 ChatGPT의 세부적인 성능을 조정할 수 있다.
- temperature : 모델의 출력 결정에 대한 확률성(랜덤성)을 제어한다. 0~2 사이의 값을 가질 수 있고, 디폴트 값은 1이다. 값이 높을수록 더 많은 무작위성을 가져 다양하고 창의적인 응답을 생성하고, 값이 낮을수록 더 예측 가능하고 일관된 경향의 응답을 생성한다.
- Max_tokens : GPT 모델이 생성하는 답변의 최대 토큰 수를 제한한다. 모델에 따라 가능한 최대 토큰 수는 다양하며 gpt-3.5-turbo의 경우 4096토큰까지 생성할 수 있다.
- Top-p : Top-p는 확률 p 내에서 토큰을 선택한다. 예를 들어, top_p가 0.8인 경우, 모델은 확률 분포 상에서 상위 80%의 토큰을 고려하여 출력을 생성한다. top_p값은 0~1사이의 값을 가질 수 있고, 디폴트 값은 1이다. top_p값을 낮게 설정하면 모델의 출력을 좁은 확률 분포 내에서 선택하게 만들어 일관된 응답을 얻을 수 있고, 높게 하면 다양한 스타일의 응답을 얻을 수 있다.
- presence_penalty : 이전에 생성된 응답에 나타난 토큰이 모델의 응답에서 나타날 확률을 제어한다. 이 값을 높이면 이전에 생성된 텍스트에 나타난 토큰이 다시 생성되는 것을 방지할 수 있어 대화가 더 다양해질 수 있다. 값을 낮추면 이전에 생성된 텍스트에 나타난 토큰이 다시 생성될 가능성이 높아진다. presence_penalty를 잘 조절하면 모델이 대화에서 새로운 주제를 탐색할 가능성이 더 높아진다. 값이 낮을수록 중복 토큰이 더 많이 생성될 가능성이 있어 같은 말을 반복할 수 있다. -2~2 사이의 값을 가지며 디폴트 값은 0이다.
- frequency_penalty : 이전에 생성된 응답과 중복되는 토큰에 대한 확률 penalty를 적용하는 데 사용된다. 이 값이 높을수록 이전에 생성된 텍스트와 중복되는 토큰이 더 높은 확률로 페널티를 받게 되므로 모델이 이전에 생성된 텍스트를 반복하지 않도록 유도할 수 있다. -2~2 사이의 값을 가지며 디폴트 값은 0이다.
- n : 입력 메시지에 대해 생성할 채팅 답변의 수를 설정한다. 디폴트 값은 1이다.
자.. 그럼 다시 돌아와서
4️⃣ 버튼을 눌렀을 때 수행할 APICall 함수를 만들어보자
//App.js
const handleClickAPICall = async () => {
try {
setIsLoading(true);
const message = await CallGPT({
prompt: //데이터 입력,
});
setData(message);
} catch (error) {
} finally {
setIsLoading(false);
}
};
5️⃣ [데이터 입력] 부분에 아까 정리해두었던 인풋을 넣으면 된다.
prompt: `
""안의 내용을 기반으로 퀴즈를 생성하였고 각 퀴즈 요약 옆에 사용자가 해당 퀴즈를 맞혔는지 틀렸는지를 괄호로 구분하였습니다.
[정답률] : 2/5, 40%
[노트1] : "CNN (Convolutional Neural Network) 관련 노트"
[노트1]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. CNN은 컴퓨터 비전 분야에서 사용되는 Deep Learning 신경망 아키텍처 중 하나입니다. (맞힘)
2. 입력 레이어는 모델에 입력을 제공하는 역할을 합니다. (맞힘)
3. 출력 계층은 각 클래스의 출력을 확률 점수로 변환하는 역할을 합니다. (틀림)
4. 손실 함수는 네트워크가 얼마나 잘 작동하는지 측정하는 데 사용됩니다. (틀림)
5. 역전파는 오류를 계산하고 손실을 최소화하기 위해 사용되는 기법입니다. (틀림)
[정답률] : 3/5, 60%
[노트2] : "도메인 이름 시스템(DNS) 관리, 트래픽 라우팅, 로드 밸런싱, DNS 레코드 유형 및 라우팅 정책에 관한 노트"
[노트2]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. Amazon Route53을 사용하면 사용자는 도메인 이름을 등록하고 관리할 수 있습니다. (맞힘)
2. Route 53의 글로벌 DNS 확인 기능을 통해 사용자는 전 세계 어디서나 웹 사이트와 서비스에 즉시 액세스할 수 있습니다. (맞힘)
3. Route53의 지리적 위치 라우팅 정책을 사용하면 사용자의 지리적 위치를 기반으로 트래픽을 리소스로 라우팅할 수 있습니다. (맞힘)
4. CNAME 레코드는 사용자를 웹 사이트에 연결하는 데 도움을 줍니다. (틀림)
5. 다중값 라우팅 정책을 사용하면 DNS 쿼리에 대한 응답으로 여러 값을 반환할 수 있습니다. (틀림)
[정답률] : 3/5, 60%
[노트3] : "Amazon EC2를 사용하여 Linux 인스턴스를 시작하고 관리하는 방법에 관한 노트"
[노트3]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. Amazon EC2의 보안 그룹은 수신 및 발신 트래픽을 제어하는 역할을 합니다. (틀림)
2. Amazon EC2 인스턴스를 시작할 때 키 페어를 생성해야 합니다. (맞힘)
3. Amazon EC2를 사용하여 인스턴스를 시작합니다. (맞힘)
4. Amazon EC2의 가용 영역은 AWS 리전 내에 있는 격리된 위치를 의미합니다. (틀림)
5. Amazon EC2에서 사용할 수 있는 무료 인스턴스 유형은 t2.micro입니다. (맞힘)
[정답률] : 5/5, 100%
[노트4] : "물질의 전하(charge), 전압, 전류, 저항과 같은 전자공학을 이루는 기본적인 요소들에 관한 노트"
[노트4]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. 전자기력은 양전하와 음전하로 구성되어 있습니다. (맞힘)
2. 전류는 전자의 흐름을 나타내는 개념입니다. (맞힘)
3. 전압은 전자를 이동시키는 힘을 나타냅니다. (맞힘)
4. 저항은 전자의 흐름을 방해하는 부품입니다. (맞힘)
5. 전압의 단위는 볼트(V)입니다. (맞힘)
[정답률] : 4/5, 80%
[노트5] : "다국적 기업의 외국인 비용에 관한 노트"
[노트5]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. 다국적기업이 현지 시장의 특성을 잘 모르기 때문에 부담하는 일종의 유무형상의 모든 비용은 현지화 비용입니다. (맞힘)
2. CAGE Framework에서 다국적기업이 부담할 외국인비용은 문화, 제도, 지리, 경제적 차이로부터 발생합니다. (맞힘)
3. 다국적기업은 문화적 차이를 줄임으로써 외국인비용을 감소시키고 경제적 차이를 극복할 수 있습니다. (맞힘)
4. 외국인 비용의 예시로는 커뮤니케이션 비용, 정보수집 비용, 국제 교통, 통신비 등이 있습니다. (맞힘)
5. '자본집약적 산업'에서 기업은 규모의 경제를 통해 비용을 절감하고 효율성을 높이려고 합니다. (틀림)
`,
3) 0-shot / one-shot / few-shot 프롬프팅
성능 비교를 위해 0-shot, one-shot, few-shot 프롬프팅을 각각 할 것이다.
0-shot / one-shot / few-shot 프롬프팅은 GPT 모델에 답변 예시를 얼마나 제공하는가에 따라 구분한다.
- zero-shot : 모델에 구체적인 예시를 제공하지 않고 주어진 작업을 수행하라고 요청하는 것
- 예를 들어, "이 문장을 긍정적으로 바꿔줘" 와 같이 구체적인 예시 없이 작업을 수행하도록 요청하는 것이다.
- one-shot : AI 모델에게 작업에 대한 예시를 하나만 제공하는 것
- 예를 들어, "이 문장을 긍정적으로 바꾸면 '오늘은 좋은 날이네요'가 되겠어. 이와 같이 바꿔줘" 처럼 하나의 예시를 제공하는 것이다.
- few-shot : AI 모델에게 작업에 대한 예시를 2~5개 정도 제공하는 것
- 예를 들어, "이 문장을 긍정적으로 바꾸면 '오늘은 좋은 날이네요', '날씨가 정말 좋아요' 와 같이 바꿀 수 있겠어. 이와 유사하게 바꿔줘" 처럼 여러 개의 예시를 제공하는 것이다.
📌 우선 0-shot으로 프롬프팅을 해봤다.
아래와 같이 프롬프트를 짜보았다.
const messages = [
{
role: "system",
content: `You are an analyst who analyzes users' learning based on their quizzes. Follow these steps`,
},
{
role: "user",
content: `1. [카테고리 제목] : 하단의 """으로 구분된 [퀴즈요약]을 이해한 후 [퀴즈요약]에 있는 [노트]를 카테고리 별로 크게 분류합니다.
분류한 카테고리들을 전부 나열합니다. 만약 기존의 카테고리에 속한다면 새롭게 카테고리를 생성하지 않고 해당 카테고리로 분류합니다.
분류하는 기준은 대학교 학과를 기준으로 합니다.
2. [평균 정답률] : 카테고리 별로 노트를 분류하고, 노트들의 정답률을 평균 내어 새로운 [평균 정답률]을 구합니다.
3. [취약 카테고리] : [평균 정답률]이 가장 낮은 카테고리를 보여줍니다.
4. [학습 평가] : 사용자가 푼 퀴즈들을 요약한 [퀴즈요약] 이해하고 사용자가 잘 이해하고 있는 카테고리부터 사용자가 잘 이해하지 못하는 카테고리까지 알려주며 사용자의 학습을 평가합니다.
5. [학습 분석] : 전문적인 배경 지식을 활용해 학습 분석을 합니다.
6. [학습 요령] : 앞으로 사용자가 해야 할 학습 요령을 제안합니다.
다음 JSON 형식의 출력을 이용하세요.
{
category : [카테고리제목]은 여기,
avg_correct_rate : [평균 정답률]은 여기,
Vulnerable Category: [취약카테고리]는 여기,
Learning_result : [학습 평가]는 여기,
analysis : [학습 분석]은 여기,
action_list : [학습 요령]은 여기,
}
`,
},
{
role: "user",
content: `
"""
${prompt}
`,
},
];
prompt: `
""안의 내용을 기반으로 퀴즈를 생성하였고 각 퀴즈 요약 옆에 사용자가 해당 퀴즈를 맞혔는지 틀렸는지를 괄호로 구분하였습니다.
[정답률] : 6/10, 60%
[노트1] : "수 체계, 연산, 코드 및 핵심 용어 관련 노트"
[노트1]를 기반으로 생성한 10개의 퀴즈 내용 요약
1. 아날로그 양은 연속적인 값을 가지고 있습니다. (맞힘)
2. 2진 체계에는 2개의 숫자가 있습니다. (맞힘)
3. '비트'는 바이너리 디지트의 약어이며, 2진수에서 사용됩니다. (틀림)
4. 양의 2진수는 0의 부호 비트를 가지고 있습니다. (틀림)
5. 16진수 체계는 10개의 숫자와 A~F 알파벳으로 표현됩니다. (틀림)
6. 10진수는 8로 나누어서 8진수로 변환될 수 있습니다. (맞힘)
7. 2진수의 1의 보수는 1을 0으로, 0을 1로 변환하여 얻습니다. (맞힘)
8. ASCII는 정보의 입출력을 위한 영숫자 코드로 사용됩니다. (맞힘)
9. BCD는 10진 숫자를 4비트 그룹으로 표현하는 디지털 코드입니다. (틀림)
10. CRC는 오류 검출 코드의 한 종류로 사용되며, Cyclic Redundancy Check의 약자입니다. (맞힘)
[정답률] : 5/10, 50%
[노트2] : "상담의 본질과 원리, 상담사의 역할과 덕목에 관한 노트"
[노트2]를 기반으로 생성한 10개의 퀴즈 내용 요약
1. 상담은 내담자의 행동 변화를 돕기 위한 인간관계를 통한 조언을 포함합니다. (맞힘)
2. 상담의 구조는 진실성, 공감적 이해, 수용의 세 가지 요소를 포함합니다. (맞힘)
3. 상담사는 자기수용 덕목을 가져야 합니다. (맞힘)
4. 상담의 목적은 자아정체감 확립을 포함합니다. (틀림)
5. 상담의 형태는 위기 상담을 포함합니다. (틀림)
6. 상담의 기본원리 중 하나는 비심판적 태도의 원리입니다. (맞힘)
7. 상담의 과정은 내담자의 느낌과 생각을 수용하는 것이 중요합니다. (틀림)
8. 상담사의 세 가지 원소는 진실성, 공감적 이해, 수용으로 구성됩니다. (틀림)
9. 상담의 목적은 대처 기술의 향상을 위한 것입니다. (틀림)
10. 상담의 형태는 발달 상담을 포함합니다. (맞힘)
[정답률] : 3/5, 60%
[노트3] : "프랑스어 문법과 관련된 노트"
[노트3]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. 프랑스어 명사는 남성과 여성의 두 가지 성별로 나누어집니다. (틀림)
2. 프랑스어 명사는 단수와 복수로 나누어집니다. (맞힘)
3. 프랑스어에는 주격, 목적격, 소유격의 세 가지 격이 있습니다. (맞힘)
4. 프랑스어 형용사는 명사의 성과 수에 따라 굴절됩니다. (틀림)
5. 프랑스어 부사는 동사, 형용사, 또는 다른 부사를 수정하는데 사용됩니다. (맞힘)
[정답률] : 4/5, 80%
[노트4] : "중국어 문법과 관련된 노트"
[노트4]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. 중국어의 1성 성조는 고르고 평평하게 소리를 내며, 성조에 따라 의미가 달라집니다. (맞힘)
2. 중국어의 기본 어순은 주어-동사-목적어(SVO)로 구성됩니다. (맞힘)
3. 중국어에서 시제는 시간 표현 부사를 통해 나타납니다. (맞힘)
4. 중국어에서 명사를 셀 때에는 양사를 사용합니다. (맞힘)
5. 중국어 대명사는 성별에 따라 구분되지 않습니다. (틀림)
[정답률] : 5/5, 100%
[노트5] : "독일어 문법과 관련된 노트"
[노트5]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. 명사의 성별은 Genus로 나타내며, 주로 세 가지로 분류됩니다: 남성, 여성, 중성. (맞힘)
2. 독일어에서 명사의 격은 네 가지로 분류됩니다: 주격, 목적격, 소유격, 여격. (맞힘)
3. 독일어 동사는 인칭과 시제에 따라 굴절됩니다. (맞힘)
4. 명사의 성, 수, 격에 따라 변화하는 것은 형용사입니다. (맞힘)
5. 독일어 문장의 기본 구조는 주어-동사-목적어 (SVO)입니다. (맞힘)
`,
GPT api 호출 결과는 다음과 같다.
정말.. 당황스러운 응답이 나왔다. 웹 상에서 gpt에 똑같은 입력을 넣어주었을 때는 그럭저럭 괜찮은 응답이 나왔는데 (적어도 분류는 잘 해주었다.) api 연결 후 테스트를 해보니 분류도 잘 되지 않고 정답률 계산에도 오류가 있었다.
(너무 많은 요구사항이 있어서 그런 건가?!)
참고로 웹 상에서 gpt에 주제만 다른, 동일한 포맷의 입력을 넣어주었을 때의 응답 결과를 첨부한다.
{
"category": {
"컴퓨터 공학": [
{
"노트": "CNN (Convolutional Neural Network) 관련 노트",
"정답률": 40
},
{
"노트": "도메인 이름 시스템(DNS) 관리, 트래픽 라우팅, 로드 밸런싱, DNS 레코드 유형 및 라우팅 정책에 관한 노트",
"정답률": 60
},
{
"노트": "Amazon EC2를 사용하여 Linux 인스턴스를 시작하고 관리하는 방법에 관한 노트",
"정답률": 60
}
],
"전자공학": [
{
"노트": "물질의 전하(charge), 전압, 전류, 저항과 같은 전자공학을 이루는 기본적인 요소들에 관한 노트",
"정답률": 100
}
],
"경영학": [
{
"노트": "다국적 기업의 외국인 비용에 관한 노트",
"정답률": 80
}
]
},
"avg_correct_rate": {
"컴퓨터 공학": 53.33,
"전자공학": 100,
"경영학": 80
},
"Vulnerable Category": "컴퓨터 공학",
"Learning_result": {
"잘 이해하고 있는 카테고리": [
"전자공학",
"경영학"
],
"이해가 필요한 카테고리": [
"컴퓨터 공학"
]
},
"analysis": "사용자는 전자공학과 경영학 분야에서 높은 이해도를 보이고 있습니다. 특히 전자공학에서는 모든 문제를 맞히며 매우 높은 이해도를 보여주고 있습니다. 반면, 컴퓨터 공학 분야에서는 상대적으로 낮은 정답률을 보이며 추가 학습이 필요합니다.",
"action_list": [
"컴퓨터 공학 분야의 기초 개념을 다시 복습하고 이해도를 높이기 위한 추가 학습을 진행하세요.",
"CNN, DNS, 그리고 Amazon EC2와 관련된 심화 학습 자료를 참고하여 학습하세요.",
"퀴즈 문제 풀이를 통해 부족한 부분을 찾아내고 반복적으로 학습하세요.",
"실제 프로젝트나 실습을 통해 이론을 실습으로 강화하세요."
]
}
위의 응답처럼 퀴즈마다 카테고리를 정하고 그 카테고리들을 전부 "category"의 값으로 넣어주기를 바랐는데, "컴퓨터과학" 하나의 응답만 나왔다. 평균 정답률도 노트들의 정답률을 전부 보여주는 게 아니라, 60% 하나만 나왔다.
응답을 보완하기 위해 이 LLM 모델에게 예시를 하나 추가해주었다.
📌 즉, one-shot 프롬프팅을 해주었다.
const messages = [
{
role: "system",
content: `You are an analyst who analyzes users' learning based on their quizzes. Follow these steps`,
},
{
role: "user",
content: `1. [카테고리 제목] : 하단의 """으로 구분된 [퀴즈요약]을 이해한 후 [퀴즈요약]에 있는 [노트]를 카테고리 별로 크게 분류합니다.
분류한 카테고리들을 전부 나열합니다. 만약 기존의 카테고리에 속한다면 새롭게 카테고리를 생성하지 않고 해당 카테고리로 분류합니다.
분류하는 기준은 대학교 학과를 기준으로 합니다.
2. [평균 정답률] : 카테고리 별로 노트를 분류하고, 노트들의 정답률을 평균 내어 새로운 [평균 정답률]을 구합니다.
3. [취약 카테고리] : [평균 정답률]이 가장 낮은 카테고리를 보여줍니다.
4. [학습 평가] : 사용자가 푼 퀴즈들을 요약한 [퀴즈요약] 이해하고 사용자가 잘 이해하고 있는 카테고리부터 사용자가 잘 이해하지 못하는 카테고리까지 알려주며 사용자의 학습을 평가합니다.
5. [학습 분석] : 전문적인 배경 지식을 활용해 학습 분석을 합니다.
6. [학습 요령] : 앞으로 사용자가 해야 할 학습 요령을 제안합니다.
다음 JSON 형식의 출력을 이용하세요.
{
category : [카테고리제목]은 여기,
avg_correct_rate : [평균 정답률]은 여기,
Vulnerable Category: [취약카테고리]는 여기,
Learning_result : [학습 평가]는 여기,
analysis : [학습 분석]은 여기,
action_list : [학습 요령]은 여기,
}
`,
},
{
role: "user",
content: `
"""
첫번째 예시입니다.
입력이 다음과 같은 경우,
""안의 내용을 기반으로 퀴즈를 생성하였고 각 퀴즈 요약 옆에 사용자가 해당 퀴즈를 맞혔는지 틀렸는지를 괄호로 구분하였습니다.
[정답률] : 2/5, 40%
[노트1] : "CNN (Convolutional Neural Network) 관련 노트"
[노트1]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. CNN은 컴퓨터 비전 분야에서 사용되는 Deep Learning 신경망 아키텍처 중 하나입니다. (맞힘)
2. 입력 레이어는 모델에 입력을 제공하는 역할을 합니다. (맞힘)
3. 출력 계층은 각 클래스의 출력을 확률 점수로 변환하는 역할을 합니다. (틀림)
4. 손실 함수는 네트워크가 얼마나 잘 작동하는지 측정하는 데 사용됩니다. (틀림)
5. 역전파는 오류를 계산하고 손실을 최소화하기 위해 사용되는 기법입니다. (틀림)
[정답률] : 3/5, 60%
[노트2] : "도메인 이름 시스템(DNS) 관리, 트래픽 라우팅, 로드 밸런싱, DNS 레코드 유형 및 라우팅 정책에 관한 노트"
[노트2]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. Amazon Route53을 사용하면 사용자는 도메인 이름을 등록하고 관리할 수 있습니다. (맞힘)
2. Route 53의 글로벌 DNS 확인 기능을 통해 사용자는 전 세계 어디서나 웹 사이트와 서비스에 즉시 액세스할 수 있습니다. (맞힘)
3. Route53의 지리적 위치 라우팅 정책을 사용하면 사용자의 지리적 위치를 기반으로 트래픽을 리소스로 라우팅할 수 있습니다. (맞힘)
4. CNAME 레코드는 사용자를 웹 사이트에 연결하는 데 도움을 줍니다. (틀림)
5. 다중값 라우팅 정책을 사용하면 DNS 쿼리에 대한 응답으로 여러 값을 반환할 수 있습니다. (틀림)
[정답률] : 3/5, 60%
[노트3] : "Amazon EC2를 사용하여 Linux 인스턴스를 시작하고 관리하는 방법에 관한 노트"
[노트3]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. Amazon EC2의 보안 그룹은 수신 및 발신 트래픽을 제어하는 역할을 합니다. (틀림)
2. Amazon EC2 인스턴스를 시작할 때 키 페어를 생성해야 합니다. (맞힘)
3. Amazon EC2를 사용하여 인스턴스를 시작합니다. (맞힘)
4. Amazon EC2의 가용 영역은 AWS 리전 내에 있는 격리된 위치를 의미합니다. (틀림)
5. Amazon EC2에서 사용할 수 있는 무료 인스턴스 유형은 t2.micro입니다. (맞힘)
[정답률] : 5/5, 100%
[노트4] : "물질의 전하(charge), 전압, 전류, 저항과 같은 전자공학을 이루는 기본적인 요소들에 관한 노트"
[노트4]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. 전자기력은 양전하와 음전하로 구성되어 있습니다. (맞힘)
2. 전류는 전자의 흐름을 나타내는 개념입니다. (맞힘)
3. 전압은 전자를 이동시키는 힘을 나타냅니다. (맞힘)
4. 저항은 전자의 흐름을 방해하는 부품입니다. (맞힘)
5. 전압의 단위는 볼트(V)입니다. (맞힘)
[정답률] : 4/5, 80%
[노트5] : "다국적 기업의 외국인 비용에 관한 노트"
[노트5]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. 다국적기업이 현지 시장의 특성을 잘 모르기 때문에 부담하는 일종의 유무형상의 모든 비용은 현지화 비용입니다. (맞힘)
2. CAGE Framework에서 다국적기업이 부담할 외국인비용은 문화, 제도, 지리, 경제적 차이로부터 발생합니다. (맞힘)
3. 다국적기업은 문화적 차이를 줄임으로써 외국인비용을 감소시키고 경제적 차이를 극복할 수 있습니다. (맞힘)
4. 외국인 비용의 예시로는 커뮤니케이션 비용, 정보수집 비용, 국제 교통, 통신비 등이 있습니다. (맞힘)
5. '자본집약적 산업'에서 기업은 규모의 경제를 통해 비용을 절감하고 효율성을 높이려고 합니다. (틀림)
답변은 다음과 같아야 합니다.
{
"category" : {
"컴퓨터 공학": [ "CNN (Convolutional Neural Network) 관련 노트","도메인 이름 시스템(DNS) 관리, 트래픽 라우팅, 로드 밸런싱, DNS 레코드 유형 및 라우팅 정책에 관한 노트", "Amazon EC2를 사용하여 Linux 인스턴스를 시작하고 관리하는 방법에 관한 노트"],
"전자공학": ["물질의 전하(charge), 전압, 전류, 저항과 같은 전자공학을 이루는 기본적인 요소들에 관한 노트"],
"경영학": ["다국적 기업의 외국인 비용에 관한 노트"],
},
"avg_correct_rate" : {
"컴퓨터 공학": "53.33% (8/15)",
"전자공학": "100% (5/5)",
"경영학": "80% (4/5)",
},
"Vulnerable Category" : "컴퓨터 공학",
"Learning_result" : {
"잘 이해하고 있는 카테고리": [
"전자공학",
"경영학"
],
"이해가 필요한 카테고리": [
"컴퓨터 공학"
]
},
"analysis" : "사용자는 전자공학과 경영학 분야에서 높은 이해도를 보이고 있습니다. 특히 전자공학에서는 모든 문제를 맞히며 매우 높은 이해도를 보여주고 있습니다. 반면, 컴퓨터 공학 분야에서는 상대적으로 낮은 정답률을 보이며 추가 학습이 필요합니다.",
"action_list" : [
"컴퓨터 공학 분야의 기초 개념을 다시 복습하고 이해도를 높이기 위한 추가 학습을 진행하세요.",
"특히 CNN (Convolutional Neural Network) 관련 노트에 대한 학습이 부족하므로 CNN에 대한 개념을 다시 학습하고 관련된 예제 및 응용을 풀어보는 것이 도움이 될 것입니다.",
"CNN을 자세히 다룬 웹사이트를 추천해드리겠습니다 {https://jarikki.tistory.com/26, https://www.coursera.org/learn/convolutional-neural-networks}",
"실제 프로젝트나 실습을 통해 이론을 실습으로 강화하세요."
],
}
`,
},
{
role: "user",
content: `
"""
${prompt}
`,
},
];
이렇게 프롬프트를 짜서 학습 분석하기 버튼을 눌러 보았다.
다행히 0-shot으로 했을 때보다 결과가 괜찮게 나왔다. 노트 별로 분류도 잘 되었고 평균 정답률도 지시한대로 잘 나왔다. 프랑스어, 중국어, 독일어 관련 노트를 [외국어] 하나의 카테고리로 분류한 것을 볼 수 있다.
😢 아쉬운 점이 있다면,, 학습 요령을 제안하는 "action_list"가 여전히 추상적인 도움을 주고 있다는 것이었다. 취약한 파트를 언급하여 더 공부하라고 말하고 있긴 하지만, 실질적으로 도움이 되는 웹사이트나 공부 방법을 추천해주고 있지는 않았다.
이를 해결하기 위해..! 두번째 예시에서는 아예 새로운 파라미터 "additional_resources" 를 추가해주었다.
📌 few-shot 프롬프팅을 해주었다.
{
role: "user",
content: `
"""
두번째 예시입니다.
입력이 다음과 같은 경우,
""안의 내용을 기반으로 퀴즈를 생성하였고 각 퀴즈 요약 옆에 사용자가 해당 퀴즈를 맞혔는지 틀렸는지를 괄호로 구분하였습니다.
[정답률] : 6/10, 60%
[노트1] : "완전경쟁시장과 관련된 경제이론에 관한 노트"
[노트1]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. 완전경쟁시장은 다양한 기업이 시장에 자유롭게 진입할 수 있는 시장입니다. (맞힘)
2. 완전경쟁시장에서 기업의 이윤극대화는 MR=MC 조건을 충족할 때 이루어집니다. (맞힘)
3. 완전경쟁시장에서 기업의 생산량 변동에 따라 시장균형가격은 거의 변하지 않습니다. (틀림)
4. 완전경쟁시장에서 가격이 높아지면 기업은 생산량을 줄여서 가격을 높일 수 있습니다. (틀림)
5. 완전경쟁시장에서 공급곡선은 기업의 생산비용의 증감을 나타냅니다. (틀림)
6. 완전경쟁시장에서 생산물의 대체성이 높아지면 해당 제품에 대한 수요가 증가합니다. (맞힘)
7. 완전경쟁시장에서 고정비용이 매몰비용인 경우, 기업은 손실을 보면서도 생산을 지속합니다. (맞힘)
8. 완전경쟁시장에서 기업의 이윤극대화는 MR=MC이며 MC가 증가할 때 이루어집니다. (맞힘)
9. 완전경쟁시장에서 기업의 공급곡선은 가격에 따른 생산량 변화를 나타냅니다. (틀림)
10. 완전경쟁시장에서 산업의 장기공급곡선은 무이윤 상태에서 시장균형점을 연결한 곡선을 나타냅니다. (맞힘)
[정답률] : 4/10, 40%
[노트2] : "비교정치학에 관한 노트"
[노트2]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. 종속적 구조론은 중심부와 주변부 국가 사이의 수탈적 관계를 다루는 이론입니다. (맞힘)
2. 조합주의는 국가의 주요 사회적 단위를 중심으로 정치적 관계를 이해하는 이론입니다. (맞힘)
3. 관료권위주의는 관료와 군부 중심의 정치체제를 가리킵니다. (맞힘)
4. 정치문화론은 심리적, 정치적 요소를 결합하여 정치현상을 분석하는 이론입니다. (틀림)
5. 합리적 선택이론은 목표 과정상의 방법적 합리성을 연구하는 이론입니다. (틀림)
6. 신제도주의는 정치현상을 공식조직과 비공식적 규칙을 통해 연구하는 이론입니다. (틀림)
7. 종속이론에서 발전 저해 주장은 사회경제 구조에 대한 이야기입니다. (맞힘)
8. 조합주의에서는 국가-노동-기업의 대표가 집합적으로 이해관계를 대표하고 조정합니다. (틀림)
9. 관료권위주의는 권위주의 정치체제에서 나타나는 현상입니다. (틀림)
10. 정치문화론은 정치문화를 중심으로 정치행위에 영향을 미치는 요소를 연구합니다. (틀림)
[정답률] : 7/10, 70%
[노트3] : "선형 회귀에 관한 노트"
[노트3]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. 종속 변수는 다른 변수의 값에 의해 결정되는 변수입니다. (틀림)
2. 다중 선형 회귀 분석에서는 여러 개의 변수를 사용합니다. (맞힘)
3. 선형 회귀의 가설은 독립 변수와 가중치를 곱한 값에 편향을 더한 예측값입니다. (맞힘)
4. 평균 제곱 오차는 예측값과 실제값 간의 오차를 나타냅니다. (틀림)
5. 다중 선형 회귀 분석은 변수들 간의 관계를 모델링하는 회귀 분석 방법입니다. (맞힘)
6. 가중치와 편향은 예측값을 계산하는 요소입니다. (맞힘)
7. 목적 함수는 최적의 가중치와 편향을 찾는 데 사용됩니다. (맞힘)
8. 비용 함수는 예측값과 실제값 간의 오차를 계산합니다. (맞힘)
9. 선형 회귀의 가설은 독립 변수와 종속 변수의 관계를 모델링합니다. (틀림)
10. 평균 제곱 오차는 예측값과 실제값 간의 차이를 측정합니다. (맞힘)
[정답률] : 4/5, 80%
[노트4] : "건축법 및 건축 규정에 관한 노트"
[노트4]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. 공통규정은 건축물과 관련된 다양한 사항을 규정합니다. (맞힘)
2. 제도규정은 건축물과 대지에 관한 실체적 기준의 이행여부를 확인합니다. (맞힘)
3. 실체규정은 건축물과 대지에 적용되는 실체적인 기준을 말합니다. (맞힘)
4. 개체규정은 건축물의 안전성을 확보하기 위해 적용됩니다. (틀림)
5. 집단규정은 건축물이 밀집하여 집단화되었을 때 적용됩니다. (맞힘)
[정답률] : 5/5, 100%
[노트5] : "식품 위생학 관련 정리 노트"
[노트5]를 기반으로 생성한 5개의 퀴즈 내용 요약
1. 다당류는 여러 개의 단당류 분자로 이루어진 탄수화물입니다. (맞힘)
2. 탄수화물은 우리 몸에 필요한 에너지를 제공하는 주요 공급원입니다. (맞힘)
3. 건강보균자는 감염병 발생의 3대 요소 중 하나가 아닙니다. (맞힘)
4. 인공수동면역은 다른 사람이나 동물의 항체를 얻어 형성되는 면역입니다. (맞힘)
5. 한센병은 예방접종을 통해 관리가 가능한 감염병 중 하나입니다. (맞힘)
답변은 다음과 같아야 합니다.
{
"category" : {
"경제학": [ "완전경쟁시장과 관련된 경제이론에 관한 노트"],
"정치외교학": ["비교정치학에 관한 노트"],
"컴퓨터공학": ["선형 회귀에 관한 노트"],
"건축학" : ["건축법 및 건축 규정에 관한 노트"],
"식품영양학" : ["식품 위생학 관련 정리 노트"],
},
"avg_correct_rate" : {
"경제학" : "60% (6/10)",
"정치외교학" : "40% (4/10)",
"컴퓨터공학" : "70% (7/10)",
"건축학" : "80% (4/5)",
"식품영양학" : "100% (5/5)",
},
"Vulnerable Category" : "정치외교학",
"Learning_result" : {
"잘 이해하고 있는 카테고리": [
"식품영양학","건축학"
],
"이해가 필요한 카테고리": [
"정치외교학"
]
},
"analysis" : "사용자는 식품영양학과 건축학 분야에서 높은 이해도를 보이고 있습니다. 특히 식품영양학에서는 지금까지 모든 문제를 맞히며 매우 높은 이해도를 보여주고 있습니다! 반면, 정치외교학 분야에서는 상대적으로 낮은 정답률을 보이며 추가 학습이 필요합니다.",
"action_list" : [
"정치외교학 분야의 기초 개념을 다시 복습하고 이해도를 높이기 위한 추가 학습을 진행하세요.",
"틀린 문제와 관련된 이론을 다시 복습하며, 이해한 내용을 정리합니다."
"추가 자료를 이용해 부족한 부분을 학습하세요"
],
"additional_resources": [
{
"title": "정치외교학 기초 개념 학습",
"link": "https://www.coursera.org/learn/political-science"
},
{
"title": "정치이론 및 국제관계 이론에 대한 심화 학습",
"link": "https://ocw.mit.edu/courses/political-science/"
},
{
"title": "정치문화론에 대한 심도 있는 이해를 위해 추가 학습",
"link": "https://www.amazon.com/Political-Culture-Democratization-Lawrence-Harrison/dp/0415324075"
},
{
"title": "합리적 선택이론의 기초와 응용 학습",
"link": "https://www.cambridge.org/core/books/foundations-of-social-theory/6AA5B6D5A1A6C4D6F9C60E6A56A5B634"
},
{
"title": "신제도주의 관련 논문 및 강의 수강",
"link": "https://www.jstor.org/stable/2782030"
},
{
"title": "권장 도서: 정치문화론",
"link": "https://www.amazon.com/Political-Culture-Democratization-Lawrence-Harrison/dp/0415324075"
},
{
"title": "권장 도서: 합리적 선택이론",
"link": "https://www.cambridge.org/core/books/foundations-of-social-theory/6AA5B6D5A1A6C4D6F9C60E6A56A5B634"
},
{
"title": "권장 도서: 신제도주의",
"link": "https://www.cambridge.org/core/books/institutionalism-in-political-science/2B704D2C9291678EBE12C55B09A9B2B7"
},
{
"title": "온라인 강의: 정치외교학 기초",
"link": "https://www.coursera.org/learn/political-science"
},
{
"title": "온라인 강의: MIT 정치학",
"link": "https://ocw.mit.edu/courses/political-science/"
}
],
}
`,
},
one-shot 프롬프트에 더하여 위의 예시를 하나 더 추가해주었다.
<두 개의 예시 + 새롭게 추가된 파라미터 " additional_resources ">를 가지고 응답을 낼 것이므로 내가 원하는 응답에 좀 더 가까워질 것을 기대하며 학습 분석하기 버튼을 눌러보았다.
결과를 보면 알 수 있듯, 분류도 잘 되어있고, 정답률도 잘 계산되어 취약한 카테고리도 잘 보여주고 있다. 또한, 상담심리학이 가장 정답률이 낮은 것을 인식하고 상담심리학과 관련된 추가 자료를 제시해주고 있다.
few shot 프롬프팅으로 GPT 모델을 사용하면 어느정도, 납득할 수 있는 정도로는 학습 분석을 해주는 것을 볼 수 있었다.
하지만 여전히 문제점은 남아있다.
1. 동일한 입력으로 학습 분석하기를 여러번 클릭하였을 때 미세하게 내용이 바뀐다.
-> 일관성 있는 응답이 나오도록 만들어야 한다.
2. 더 구체적인 학습 방법을 제안해주어야 한다.
-> 지금은 공식 사이트를 추천해주고 있는데, 내 목표는 사용자가 보면 좋을만한 다른 사람들의 개인 기술블로그를 추천해주는 것이다. 혹은 지금보다는 좀 더 구체적이고 자세한 학습 자료를 제안해주는 것이다.
이러한 문제점을 해결하기 위해서, "내가 원하는 format의 응답이 나오도록", "[학습 분석]이라는 새로운 작업에 맞게 다시 학습시키기 위해", "아웃풋의 reliability를 얻기 위해" 파인튜닝을 이용해 다시 테스트할 예정이다.
파인튜닝은 LLM 모델을 특정 작업에 맞게 세밀하게 조정하는 방법을 말한다.
파인튜닝 관련 포스팅은 후에 게재하도록 하겠습니다. 😊
'CSE > Capstone Design' 카테고리의 다른 글
[Chat GPT - prompt engineering] LLM으로 유저의 학습을 분석하는 NLP 작업을 수행해보자! (1/2) (0) | 2024.05.25 |
---|