아래 사이트(Machine Learning For Kids)에서 정말 간단하게 챗봇을 위한 인공지능 모델을 구축하고 사용해 볼 수 있다. 앱 인벤터를 이용하면 이 챗봇을 간단하게 앱으로도 구현해 볼 수 있다. 플랫폼과 파이썬을 사용하여 간단한 인공지능 챗봇을 구축해보고자 한다. 

 

Machine Learning for Kids

An educational tool for teaching kids about machine learning, by letting them train a computer to recognise text, pictures, numbers, or sounds, and make things with it in Scratch.

machinelearningforkids.co.uk

 

챗봇(ChatBot)이란?

우선, 챗봇이 무엇인지부터 알아보자. 챗봇은 ChatterBot의 약자로서, 말 그대로 이야기를 주고받는 로봇을 의미한다.

챗봇은 크게 트랜잭션 챗봇대화형 챗봇으로 나눌 수 있다.

  1. 트랜잭션 챗봇 : 하나의 기능을 수행하거나 자동화하는 데 주력하는 단일 용도의 챗봇을 말한다. 예를 들어 레스토랑이나 택배 회사, 은행 등에서 간단한 질문에 답하거나 업무를 수행할 때 사용된다. 
  2. 대화형 챗봇 : 보다 개인 맞춤화된 상호 작용에 사용되는 챗봇을 말한다. 트랜잭션 챗봇처럼 단일 용도로 사용되는 것이 아니라 사용자와 상호작용하며 마치 사람과 대화를 하듯 답변하도록 설계된다. 대표적으로 ChatGPT가 있을 것이다. 

챗봇 구현하기

이제 실제 챗봇을 구현하기 위한 모델을 위 플랫폼을 사용하여 구축해보자. 여기서는 호텔 안내 서비스 챗봇을 만들어 볼 예정이다.

1. 프로젝트 만들기

가장 먼저 머신러닝 프로젝트를 만들어야 한다. 우측에 있는 프로젝트 추가 버튼을 클릭한다.

그다음, 프로젝트의 세부사항을 입력한다. 여기서는 호텔 안내 챗봇을 만들어볼 것이기 때문에 프로젝트 이름은 "Hotel", 인식은 "텍스트", 언어는 "Korean"으로 선택하였다.

2. 훈련

프로젝트를 생성하면 다음과 같은 페이지가 나온다. 모델을 훈련시키기 위하여 가장 좌측에 있는 [훈련] 버튼을 클릭하자.

[훈련] 버튼을 클릭하면 다음과 같은 페이지가 나온다. 여기서 우측에 있는 [새로운 레이블 추가] 버튼을 누르고 자신의 챗봇에 맞는 질문 레이블을 추가하면 된다. 여기서는 호텔 안내 서비스이기 때문에 총 6개의 레이블(reservation, facility, location, service, price, checkinout)을 추가하였다. 

그다음, 각 질문 레이블에 맞는 데이터를 추가한다. 데이터는 고객이 질문할 만한 질문 데이터들을 입력해 주면 된다. 한 레이블당 약 7개 정도의 데이터를 추가하였다. 데이터는 당연히 많을수록 좋다. 

3. 학습 & 평가

이제 좌측 상단에 있는 [프로젝트로 돌아가기] 버튼을 누른 후, 학습&평가 버튼을 클릭하면 다음과 같은 화면이 나온다. 하단에 있는 [새로운 머신러닝 모델을 훈련시켜 보세요] 버튼을 클릭하자.

잘 학습이 완료되면 다음과 같은 페이지가 나온다. 모델이 잘 학습되었는지 간단하게 문자를 넣어 테스트도 해볼 수 있다.

간단하게 테스트를 진행해 본 결과는 다음과 같다. 인식된 레이블의 이름과 confidence 값이 함께 출력되는 것을 확인할 수 있다.

4. 만들기

이제 이 구축된 모델을 이용하여 챗봇을 만들어볼 것이다. 프로젝트로 돌아가서 만들기를 누르면 다음과 같은 화면이 나온다. 보다시피 스크래치나 파이썬, 앱 인벤터로 간단하게 챗봇을 만들 수 있다. 여기서는 파이썬을 이용해 볼 것이다. 

[파이썬] 버튼을 클릭하면 다음과 같은 화면이 나온다. 여러 방법이 소개되어 있는데, 코랩에 연결하여 사용하기 위해 우측에 있는 [내 컴퓨터에서 실행하도록 코드를 복사하세요.] 버튼을 클릭한다. 

그러면 다음과 같은 페이지가 나오고, 이 코드를 복사하여 그대로 코랩에 붙여 넣기 한다. 사진에서 빨간색 부분만 수정가능하다. 

각 질문 레이블에 맞는 답변을 다음과 같이 구성하였다.

while True:
    question = input("호텔에 대해서 궁금한 것을 저에게 물어보세요! 질문이 끝나시면 '나가기'를 입력해주세요.")

    if (question == "나가기") :
      break

    answer = classify(question)

    label = answer["class_name"]
    confidence = answer["confidence"]

    if confidence < 60 :
        print("제가 질문을 잘 이해하지 못했어요. 다시 질문해주세요.")

    elif (label == "reservation") : 
        print("호텔 예약과 관련된 정보는 저희 호텔 홈페이지에서 확인하실 수 있습니다.")
        print("답변 정확도 :", confidence)

    elif (label == "facility") :
        print("저희 호텔에는 헬스장, 수영장, 식당 등이 있습니다. 자세한 사항은 저희 호텔 홈페이지를 참고해주세요.")
        print("답변 정확도 :", confidence)

    elif (label == "location") :
        print("저희 호텔은 서울특별시 강남구에 위치해있습니다. 강남역 바로 앞에 위치해 있어 교통이 편리합니다.")
        print("답변 정확도 :", confidence)

    elif (label == "service") :
        print("저희 호텔은 전 객실 와이파이가 가능하며, 룸서비스 및 어메니티 서비스를 이용하실 수 있습니다.")
        print("답변 정확도 :", confidence)

    elif (label == "price") :
        print("호텔 객실 요금 정보는 저희 호텔 홈페이지에서 확인해주세요.")
        print("답변 정확도 :", confidence)

    elif (label == "checkinout") :
        print("체크인 시간은 오후 3시이며, 체크아웃 시간은 오후 12시입니다.")
        print("답변 정확도 :", confidence)

5. 실행결과

실행 결과는 다음과 같다.
  • 입력 : 호텔 예약을 하고 싶어요.
  • 출력 : 호텔 예약과 관련된 정보는 저희 호텔 홈페이지에서 확인하실 수 있습니다. / 답변 정확도 : 82
  • 입력 : 체크인은 언제부터 가능한가요.
  • 출력 : 체크인 시간은 오후 3시이며, 체크아웃 시간은 오후 12시입니다. / 답변 정확도 : 98
  • 입력 : 헬스장을 이용할 수 있나요.
  • 출력 : 제가 질문을 잘 이해하지 못했어요. 다시 질문해주세요. 

마치며..

Dialogflow로도 간단하게 챗봇을 구축할 수 있지만, 인공지능을 처음 배우는 학생들에게는 조금 난이도가 어려울 것 같아서 machine learning for kids 플랫폼을 사용하였다. 요즘 핫한 ChatGPT 정도의 챗봇을 만드는 것은 당연히 불가능하지만 난이도도 어렵지 않고 다양하게 활용이 가능해서 학생들이나 처음 인공지능을 공부하는 사람들에게는 한 번쯤 활용해 볼 만한 플랫폼인 것 같다. 

 

반응형
SMALL

챗GPT, 알파고 이후 최대 임팩트

2022년 11월 30일에 공개된 ChatGPT는 5일만에 100만 사용자를 달성하였고, 40일만에 1000만, 2달만에 월 사용자 1억을 달성하였다. 틱톡(TikTok)이 9개월만에 달성했던 것에 비교하면 상당히 빠른 시일내에 많은 사용자를 달성했음을 알 수 있다.

챗GPT, 흥행 성공의 이유

  • 쉬운 사용 방법 : 누구나 쉽게 가입 가능하며, 기존 프롬프트 엔지니어링에서 필요했던 명령어에 대한 지식 없이 일반인도 누구나 질의 응답이 가능하다.
  • 자연스러운 답변 : 무엇보다도 질문에 대한 답변이 상당히 자연스럽다는 것이다. 여기서 자연스럽다는 것은 마치 인간과 대화를 하는 것처럼 느껴진다는 것이다.
  • 강력한 성능 : 광범위한 부분에서 굉장히 강력한 성능을 보인다. 논문을 작성해주기도 하며, 프로그래밍, 언어 변역 등 다양한 콘텐츠를 창의적인 방식으로 제작 가능하다.

챗GPT란?

그렇다면 ChatGPT란 도대체 무엇일까? 

챗봇 서비스를 의미하는 Chat과 Generative Pre-trained transformer라고 하는 언어 모델의 약자인 GPT를 이어붙인 합성어이다. 여기서 GPT는 OpenAI가 만든 대형언어모델(LLM, Large Language Model)이다. OpenAI는 일론 머스크 등이 인간 친화적 AI 개발을 목적으로 2015년 설립된 회사이다. OpenAI에서는 GPT 뿐만 아니라 Codex나 Dall-E 등을 개발하였다.

언어 처리 AI 기술의 발전

  • Transformer (2017) : 어텐션 모델, 병렬 학습에 유리
  • GPT-1 (2018) : 질문에 어울리는 답변 생성, 학습 파라미터 (1.17억개)
  • GPT-2 (2019) : 파라미터 (15억개), 다양한 스타일과 어조의 답변 생성
  • GPT-3 (2020) : 파라미터 (1750억개), 다양한 자연어 처리 가능
  • Codex (2021) : 파라미터 (60억), 프로그래밍 언어 중심
  • ChatGPT (2022.11.30) : 대화에 특화된 GPT 모델
  • GPT-4 (2023.3.14) 

ChatGPT의 학습

인공지능 모델에서 학습(training)은 빼놓을 수 없는 과정이다. 그렇다면 ChatGPT는 대체 어떠한 방식으로 학습시켰을까? 

ChatGPT의 training 과정은 크게 세 가지 단계(Pre-training, Fine-tuning, In-Context Learning)로 나눌 수 있다.

출처 :&nbsp;https://medium.com/@bijit211987/the-evolution-of-language-models-pre-training-fine-tuning-and-in-context-learning-b63d4c161e49

1. Pre-training(사전 훈련) 

이 단계에서는 대규모의 비지도 학습 데이터를 사용하여 모델을 사전 훈련한다. 이때의 학습 데이터는 책, 웹페이지, 논문 등의 다양한 데이터를 포함하고, 약 45TB(미국 의회 도서관 4.5배에 해당)의 대용량 데이터이다. 이러한 사전 훈련된 모델은 문장에서의 다음 단어를 예측하도록 최적화된다. 예를 들어, "나는 공원에 갔다"라는 문장이 주어졌을 때, 모델은 "나는 공원에" 다음에 올 단어로 "갔다"를 예측하도록 학습되는 것이다. 이 단계에서는 레이블이 없는 데이터를 사용(비지도 학습)하기 때문에 큰 규모의 데이터를 활용하여 모델이 언어의 패턴과 통계를 학습하도록 한다. 

2. Fine-tuning(미세 조정)

Pre-training 후에는 모델을 미세하게 조정하는 단계를 거친다. ChatGPT의 경우 프롬프트 샘플링과 40명이 작성한 정답을 기반으로 지도 학습을 진행한다. Fine-tuning은 보다 구체적인 작업에 맞게 모델을 특화시키는 데 도움이 된다.

3. In-context learning(문맥 학습)

마지막으로 GPT 모델은 대화식 환경에서 적합한 응답을 생성하기 위해서 추가적인 문맥 학습을 수행한다. 즉, 특정 사용자와의 대화 내에서 발생한 문맥을 사용하여 모델을 조정한다. 이를 통해 GPT 모델이 사용자의 질문이나 대화 히스토리에 따라 적합한 응답을 생성할 수 있도록 개선된다.

ChatGPT 학습에서 사람의 역할

흔히 인공지능이라고 하면 마치 사람의 개입이 전혀 없이 스스로 학습하는 것으로 생각된다. 하지만, ChatGPT 또한 사람, 전문가의 개입이 필수적이라고 할 수 있다.

ChatGPT 학습에서 사람의 개입

Reviewer Instructions(리뷰어 지침)은 GPT 모델의 Fine-tuning 단계에서 사용되는 데이터셋을 개발하기 위해 OpenAI employees (직원)이 작성한 지침이다. 이 지침은 리뷰어에게 어떤 종류의 데이터를 수집하고 어떤 방식으로 모델을 조정해야 하는지에 대한 가이드를 제공한다. 리뷰어들은 이 지침을 참고하여 Fine-tuning 데이터셋을 구성하고, 모델을 특정 작업에 맞게 조정하는 것이다. 

Fine-tuning 데이터셋은 리뷰어들이 조정 작업을 위해 사용하는 데이터입니다. 일반적으로, 이 데이터셋은 특정 작업에 관련된 문장 쌍이 포함되어 있다. 예를 들어, 질문 응답 작업을 위한 Fine-tuning 데이터셋에는 질문과 해당 질문에 대한 정답이 포함될 수 있는 것이다. 리뷰어들은 이 데이터셋을 사용하여 모델을 조정하고 성능을 향상시키는 역할을 한다. 

이처럼 GPT의 학습에는 전문가들과 리뷰어들이 개입하여 모델의 조정과 품질 평가에 참여하며, 이를 통해 모델의 성능을 개선하는데 기여한다.

프롬프트 엔지니어링

프롬프트 엔지니어링(Prompt Engineering)이란 자연어 처리 모델인 GPT와 같은 언어 모델을 사용할 때, 원하는 결과를 얻기 위하여 프롬프트를 설계하고 조정하는 기술을 말한다. GPT는 사용자가 제공한 프롬프트(명령어나 지시 사항)을 기반으로 문맥을 이해하고 답변을 생성하는데, 프롬프트 엔지니어링은 이 프로세스를 효율적으로 이끌기 위한 방법들을 연구하고 개발하는 것을 의미한다. 즉, ChatGPT와 제대로 대화하고 이해하기 위해서는 프롬프트 엔지니어링에 대한 이해가 필수적이다. 

ChatGPT와 제대로 대화하는 요령

그렇다면 ChatGPT와 제대로 대화하는 요령에 대해서 알아보자. 우선, ChatGPT에게 "ChatGPT와 제대로 대화할 수 있는 요령"을 물어보았다. 답변은 다음과 같았다.

위의 답변에 나오는 요령들도 모두 다 중요한 요령이다. 하지만, 내가 지금까지 ChatGPT를 사용해보면서 알아낸 좋은 답변을 위한 요령을 정리하면 다음과 같다.

1. 시작은 간결하고 뚜렷하게.

처음부터 너무 많은 것을 한꺼번에 해결하려고 하면 안 된다. 이것은 마치 사람에게 1시간짜리 강의를 쉴 틈 없이 하는 것과 마찬가지이다. 시작 질문은 질의응답의 목적이나 정의 등으로 시작하자.

2. 확장 가능한 질의.

ChatGPT는 위의 설명과 같이 In-context learning(문맥 학습)을 한다. 즉, 사람과 대화하듯 대화의 문맥과 질문의 방향성 등으로 학습을 진행하며 답변을 생성해낸다. 그렇기 때문에 유연하고 관련성 높은 답변을 위해서는 확장이 가능한 질문을 던지는 것이 좋다. 

3. 불필요한 정보 제거, 프롬프트 간소화.

사람도 나에게 불필요한 정보에는 관심이 없고, 혼란을 야기한다. ChatGPT도 마찬가지이다. 불필요한 단어, 모호한 단어, 이해할 수 없는 단어 등의 사용은 지양해야 한다. 

"Act as~" Hack

"Act as~" hack는 ChatGPT에게 특정 인물이나 캐릭터, 역할을 취하도록 지시하는 기술을 말한다. 이를 통하여 특정 역할을 수행하는 "척" 하도록 유도하여 더 구체적이고 일관된 답변을 얻을 수 있다.

아래 깃허브 링크에서 이 "Act as~" hack를 활용한 예시들을 확인할 수 있다.

 

GitHub - f/awesome-chatgpt-prompts: This repo includes ChatGPT prompt curation to use ChatGPT better.

This repo includes ChatGPT prompt curation to use ChatGPT better. - GitHub - f/awesome-chatgpt-prompts: This repo includes ChatGPT prompt curation to use ChatGPT better.

github.com

대표적인 예시 하나를 소개하면 다음과 같다.
 
Act as a Stand-up Comedian (스탠드업 코미디언으로서 행동하기)

"I want you to act as a stand-up comedian. I will provide you with some topics related to current events and you will use your wit, creativity, and observational skills to create a routine based on those topics. You should also be sure to incorporate personal anecdotes or experiences into the routine in order to make it more relatable and engaging for the audience. My first request is "I want an humorous take on politics."
  1. I want you to act as a stand-up comedian. : 앞으로 스탠드업 코미디언으로서 행동하도록 변경
  2. I will provide you with some topics related to current events and you will use your wit, creativity, and observational skills to create a routine based on those topics. : 사용자가 어떤 역할을 할 것인지 명시
  3. You should also be sure to incorporate personal anecdotes or experiences into the routine in order to make it more relatable and engaging for the audience. : 답변에 대한 추가적인 조건 제시
  4. My first request is "I want an humorous take on politics." : 첫 번째 요청 제시

 

반응형
SMALL

'인공지능 > NLP' 카테고리의 다른 글

[NLP] 간단하게 인공지능 챗봇 만들기  (8) 2023.06.29

+ Recent posts