본문 바로가기
기타

Chat GPT와 수식기호 포함하여 대화하기(feat. GPT의 수능 문제 풀이)

by 코딩공장공장장 2023. 4. 27.

안녕하세요.

 

오늘은 Chat GPT와 수식기호를 포함하여 대화하는 방법과

 

Chat GPT의 수학문제 풀이 능력에 대해서도 알아보겠습니다.

 

우선, Chat GPT와의 대화는 텍스트만으로 한정되어있습니다.

 

이미지를 포함하거나, 표를 포함하여 대화할 수 없습니다.

 

순수한 텍스트만으로 표현을 해야하니 수학기호를 사용하려면 프로그래밍 문법을 사용해야합니다.

 

개발자가 아닌 분들은 프로그래밍 문법에 익숙하지 않아 문법을 사용하여 대화하는게 쉽지 않을 것입니다.

 

한글 문서 프로그램이 있으시다면 한글 문서 프로그램을 통해 수식을 입력하고 문법으로 변환 시킬 수 있습니다.

 

아래 스크립트를 실행하면 수식의 문법이 추출되니 복붙하여 사용하시면 될 것입니다.

 

function OnScriptMacro_formulToText()
{
var code=HeadCtrl;  // 문서 중 첫 번째 컨트롤 읽기 
    // do~while 반복문 시작 
    do
    {
        if(code.CtrlID=="eqed")  // 수식이 존재할 때까지 반복문 제어 
        { 
			HAction.GetDefault("Goto", HParameterSet.HGotoE.HSet);
			with (HParameterSet.HGotoE)
			{
				HSet.SetItem("DialogResult", 37);
				SetSelectionIndex = 5;
			}
			HAction.Execute("Goto", HParameterSet.HGotoE.HSet);
			FindCtrl();
			HAction.GetDefault("EquationPropertyDialog", HParameterSet.HShapeObject.HSet);
			with (HParameterSet.HShapeObject)
			{
				HSet.SetItem("ShapeType", 3);
				num=VisualString;
			}
			HAction.Execute("EquationPropertyDialog", HParameterSet.HShapeObject.HSet);
			HAction.Run("Delete");
			if(num != ""){
				HAction.GetDefault("InsertText", HParameterSet.HInsertText.HSet);
				HParameterSet.HInsertText.Text =num.replace(/\r\n/gi, "  ");
				HAction.Execute("InsertText", HParameterSet.HInsertText.HSet);
			}
        } // if문 종료 
        code=code.Next; // 다음 컨트롤 읽기 
    }while(code)    // do~while 반복문 종료 
}

 

 

한글 매크로 사용법을 모르시는 분들을 아래 링크 참조해주세요.

 

 

https://help.hancom.com/hoffice/webhelp/9.0/ko_kr/hwp/tools/macro/scriptdefinemacro.htm

 

스크립트 매크로 정의

일시 중지 스크립트 매크로 기록을 잠깐 멈추고 다른 작업을 수행할 수 있습니다. 눌려 있는 [일시 중지]를 다시 누르면 스크립트 매크로 기록을 계속 이어서 진행합니다.

help.hancom.com

 

Chat GPT의 답변 또한 프로그래밍 문법으로 답변하니 문법을 이해하기 어려운신 분들은 Chat GPT의 답변을

 

한글 문서프로그램에 복사한 후 아래 스크립트 매크로를 실행시켜주세요.

 

function OnScriptMacro_textToFormul(){
    HAction.Run("SelectAll")
    str = GetTextFile("TEXT", "saveblock");

    hangeul = /[가-힣ㄱ-ㅎㅏ-ㅣ]/
    result = []
    curType = hangeul.test(str.substr(0, 1)) ? "text" : "formul"
    curStr = str.substr(0, 1)

      for (i = 1; i < str.length; i++) {
          if(str.substr(i, 1)==="\n"){
            result.push({ contentsType: curType, contents: curStr });
            curType="breakPara"
            curStr = "";
            continue;
        } 

    isHangeul = hangeul.test(str.substr(i, 1)+str.substr(i, 1));

        if (isHangeul === hangeul.test(str.substr(i-1, 1)) && curType!="breakPara") {
          curStr += str.substr(i, 1);
        } else {
          result.push({ contentsType: curType, contents: curStr });
          curType = isHangeul ? "text" : "formul";
          curStr = str.substr(i, 1);
        }
      }

      // 마지막 문자열을 result에 추가
      result.push({ contentsType: curType, contents: curStr });

        //공백만 있는 경우 한글타입으로 변경
      for (i = 1; i < result.length; i++) {
           if (result[i].contentsType === "formul" && result[i].contents === " ") {
                result[i].contentsType = "text"
           }
    } 

        for(i=0; i<result.length;i++){
            if(result[i].contentsType == "formul"){
                if(result[i].contents[0] == " "){
                    if(i!==0){
                        result[i-1].contents=result[i-1].contents+" "
                    }

                }
                if(result[i].contents[result[i].contents.length-1] == " "){
                    if(i!==result.length-1){
                        result[i+1].contents=" "+result[i+1].contents
                    }
                }
            }
        }

    for(i=0; i<result.length;i++){
      if(result[i].contentsType=="text"){
            HAction.GetDefault("InsertText", HParameterSet.HInsertText.HSet)
            HParameterSet.HInsertText.Text =result[i].contents
            HAction.Execute("InsertText", HParameterSet.HInsertText.HSet)
       }else if(result[i].contentsType=="formul"){
            HAction.GetDefault("EquationCreate", HParameterSet.HEqEdit.HSet)
            HParameterSet.HEqEdit.EqFontName = "HancomEQN"
            HParameterSet.HEqEdit.string = result[i].contents
            HParameterSet.HEqEdit.BaseUnit = PointToHwpUnit(9.0)  
            HParameterSet.HEqEdit.TreatAsChar = 1  
            HAction.Execute("EquationCreate",  HParameterSet.HEqEdit.HSet)  
       }else if(result[i].contentsType=="breakPara"){
            HAction.Run("BreakPara")
       }
    }
}

 

한글 문서 프로그램에는 텍스트만 존재해야합니다.

 

다른 이미지나 표와 같은 개체들 추가하면 정상 작동 안될 수 있습니다.

 

 

 

23년 수능 1번 문제 풀이 테스트(오답)

 

 

위 문제는 23년 수능 1번 문제입니다. 위 문제를 수식문법으로 변환시키면 아래와 같습니다.

 

LEFT ( {4} over {2 ^{sqrt {2}}} RIGHT ) ^{2+ sqrt {2}}의 값은?

 

위 텍스트로 GPT에게 물어봤더니 아래와 같이  답을 하네요.

 

 

라고 답을 하네요. 

 

정답은 5번인 4입니다. 

 


23년 수능 6번 문제 풀이 테스트(정답)

 

 

함수 f LEFT ( x RIGHT ) =2x ^{3} -9x ^{2} +ax+5는
x=1에서 극대이고, x=b에서 극소이다. a+b의 값은? (단, a, b는 상수이다.)

 

 

 

이번에는 정답 14를 맞혔습니다. 

 

모 대학에서 그림이 없는 텍스트로 구성된 23년 수능 문제를 테스트 했는데 정답률이 30%정도 되었다고 합니다. 

 

자연어 처리에 탁월한 chat gpt가 수학 능력에는 탁월하지는 않는 것 같습니다. 

 

하지만 문제 풀이가 아니더라도 활용할 수 있는 부분은 많기에 다른 테스트를 좀더 진행해보겠습니다. 

 

 

23년 수능 30번 문제 풀이 테스트(오답)

 

최고차항의 계수가 양수인 삼차함수 f LEFT ( x RIGHT )와 함수 g LEFT ( x RIGHT ) =e ^{sin pi x} -1에
대하여 실수 전체의 집합에서 정의된 합성함수 h LEFT ( x RIGHT ) =g LEFT ( f LEFT ( x RIGHT ) RIGHT )가 
다음 조건을 만족시킨다.

(가) 함수 h LEFT ( x RIGHT )는 x=0에서 극댓값 0을 갖는다.
(나) 열린구간 LEFT ( 0,3 RIGHT )에서 방정식 h LEFT ( x RIGHT ) =1의 서로 다른 실근의 개수는 7이다.

f LEFT ( 3 RIGHT ) = {1} over {2}, f prime LEFT ( 3 RIGHT ) =0일 때,
f LEFT ( 2 RIGHT ) = {q} over {p}이다. p+q의 값을 구하시오. (단, p와 q는 서로소인 자연수이다.)

 

위 내용을 Chat GPT에게 질문했더니 

 

 

위와 같이 답변을 해주네요. 

 

GPT가 문제의 답을 29라고 했는데 정답은 31입니다. 

 

 

 

모 대학에서 Chat GPT의 수학 연산 능력을 테스트 해보았는데 23년 수능문제에서 30%정도의

 

정답률로 9등급 정도의 실력이라고 합니다.

 

영어는 2등급을 맞았다고 하던데 수학 풀이 능력을 많이 떨어지는 것 같습니다.

 

 

237곱하기 172는 40764입니다.

 

곱하기도 잘 못하니 수능 9등급을 맞았다는 것에 신빙성이 더해집니다.

 

 

유사 문제 추천

 

Chat GPT는 자연어 처리에 특화되어있다고 하니 혹시 유사한 문제를 만드는데는 탁월하지 않나해서

 

테스트를 해보았습니다.

 

 

23년 수능 3번 문제와 유사한 문제를 만들어달라고 부탁했습니다.

 

 

문법을 수식으로 변환해서 표현해보니 아래와 같은 문제였네요.

 

꽤나 잘 만든것 같습니다.

 

 

이번에는 수능 문제 뿐만 아니라 중등 문제도 테스트 해보겠습니다. 

 

 

꽤 괜찮게 만들어줬습니다. 

 

몇가지 조건이 빠진것 같긴 하지만 이정도라면 그래도 양호한 것 같습니다. 

 

AI의 답변에서 부족한 부분만 수정해서 문제를 만들어도

 

문제 만드는데 걸리는 시간을 상당히 줄여 줄 수 있을 것 같습니다.

 

 

이외에도 많은 문제를 가지고 테스트 해보았지만 모든 결과를 공유하기 어려워 간단히 요약하자면

 

실생활 활용문제 처럼 수학기호보다 상황설정과 같은 언어적인 부분으로 표현된 수학 문제일수록

 

유사 문제 제작에 탁월합니다. 

 

계산 위주의 문제는 문제의 큰틀이 변화되는 건 거의 없고 숫자만 바뀌는 수준입니다. 

 

또한 수능 고득점 유형의 문제를 변형시켜달라고 하더라도 개념에 입각해서

 

창조적인 문제를 만들기 보다는 문제의 숫자와 조건만 바뀌는 정도입니다.

 

 

아무쪼록 풀이능력은 다소 떨어지지만 그래도 유사문제를 만드는 부분에서는 괜찮은 것 같습니다. 

 

이외에도 다양하게 활용될 수 있을 것 같은데 의견 공유해주시면 감사합니다. 

 

 

참고.

 

텍스트를 수식으로 변환시키는 소스코드는 한글을 제외한 영문, 특수문자를 모두 수식으로 변환시키는 코드입니다.

 

다소 정확도가 떨어질 수 있습니다. 

 

또한, Chat GPT가 한글 문서 프로그램에서 사용하는 Tex가 아닌 LaTex와 같은 다른 프로그래밍 언어로 표현할 수 있습니다. 

 

Tex로 물어보면 일반적으로 Tex로 대답해주기는 하지만 수식 없이 한글로만 물어보면 LaTex로 답할 때가 있습니다. 

 

"답변을 Tex로 대답해줘, $ 기호는 사용금지" 이런식의 조건을 사용하면 Tex 문법으로 대답해주지만

 

LaTex로 답변을 해주는 경우도 있습니다. 

 

사실 이부분은 Latex와 Tex 문법 이해하고 있는 분 아니라면 차이점 구분이 힘들수도 있습니다.

반응형