[AI 모델 탐험기] #2 챗봇이 뭐지? NLP 기술을 활용한 Open chat
[편집자주] 본 글은 커먼컴퓨터에서 Developer Relations Engineer를 맡고 있는 성창엽님이 오픈소스 AI모델을 정리하고 인사이트를 공유하는 글로 시리즈로 기획돼 발행되고 있습니다. 두번째 글은 NLP 기술을 활용한 Open chat에 대한 글입니다.
관련 영상 보기
제가 처음으로 소개드릴 AI 모델은 hyunwoongko님의 openchat입니다.
hyunwoongko님은 카카오 브레인에서 근무를 하시다가 최근 TUNiB이라는 스타트업에서 자연어처리를 연구하고 계십니다. hyunwoongko님께서 코드 1줄이면 간편하게 인공지능과 대화를 해볼 수 있는 BlenderBot, DialoGPT, GPT-Neo 기반의 오픈도메인 챗봇 패키지를 개발해 주셔서 이를 가지고 글을 작성해보겠습니다. (pip install openchat
으로 손쉽게 설치할 수 있습니다.)
프로젝트를 바로 확인해 보시고 싶으신 분은 다음 링크를 참조해 주세요.
Github: https://github.com/hyunwoongko/openchat
DEMO: https://main-openchat-fpem123.endpoint.ainize.ai/
API: https://ainize.ai/fpem123/openchat
Youtube : https://link.ainize.ai/3fDLRFy
이 대화가 어색하다고 느껴지나요? 이 대화는 Open chat을 사용하여 나눈 대화의 일부분입니다. 즉 사람과 대화를 나눈 것이 아니라 인공지능과 대화를 나눈 것입니다.
영화 아이언맨의 자비스처럼 인공지능과 인간이 자유롭게 대화하는 것은 아직 무리지만 지난 수년간 인공지능의 기술이 비약적으로 발전하면서 인공지능은 이처럼 사람과 간단하게 대화할 수 있는 수준으로 발전하였습니다.
챗봇이 뭘까?
‘시리(Siri)’하면 무엇이 떠오르나요? 20년전 이라면 여러분의 지인 중에서 시리를 찾았겠지만, 지금이라면 분명 애플이 떠오를 겁니다. 이 시리가 바로 오늘 지금까지 설명했던 챗봇 중 하나입니다.
챗봇의 시발점은 1966년에 MIT 인공지능 연구소에서 개발한 ELIZA라고 볼 수 있을 거 같습니다. 이 당시 ELIZA는 간단한 패턴 매칭 수법을 사용하였습니다. 초기형 유사 인공지능에 불과했던 이 챗봇이 발전에 발전을 거쳐 오늘날 애플의 시리가 나오게 된 것입니다.
2011년 시리가 출시되었을 때 시리의 유용성에 대한 이슈는 있었지만, 대화의 문맥을 파악하는 능력은 놀라웠고 일상에 챗봇을 적용하려고 하는 움직임을 보였습니다. 시간이 흘러 알파고의 등장에 따라 인공지능이 주목 받게 되었고 자연스럽게 언어를 처리할 수 있는 인공지능 모델에 대한 관심이 높아지며 자연어 처리 모델이 많이 발전하였습니다.
이에 GPT, BERT와 같은 모델이 소개되었고, 이런 모델들의 파라미터를 새로운 목적에 맞게 파인 튜닝(Fine-tuning)하여 챗봇의 성능을 더욱 높였습니다. 앞으로의 챗봇의 성장 가능성은 매우 클 것으로 예상하고 있습니다.
Open chat에서는 어떤 모델이 사용됐을까?
이 Open chat에서는 BlenderBot, DialoGPT, GPT-Neo 중 한 언어 모델을 선택하여 대화를 할 수 있습니다. 여기서 언어 모델이란 학습데이터로 주어진 사람의 언어가 얼마나 자연스러운가를 수치로 계산하여 학습하고 확률을 할당하는 역할을 하는 모델을 의미합니다. 모델들의 특징에 대해 살펴보겠습니다.
데이터 좀 섞어 볼까? : BlenderBot
BlenderBot은 Facebook에서 발표한 오픈 도메인 챗봇 모델입니다. openchat에서 사용된 BlenderBot은 파라미터의 개수가 다른 5종류의 모델인데, 각각 90M(small), 400M(medium), 1B(large), 3B(xlarge), 9B(xxlarge) 개의 파라미터를 가집니다.
Facebook AI Research에서 개발한 NLP 프레임 워크인 Fairseq 툴킷으로 사전 학습을 진행하였고 사전 학습의 데이터 세트는 Reddit에 쓰인 글 중 조건에 맞는 글로 진행하였습니다. 파인 튜닝(Fine-tuning)을 진행할 때는 Facebook AI Research에서 대화 모델의 학습 및 평가를 위해 개발한 ParlAI 툴킷을 사용하였으며 이는 다양한 종류의 챗봇 모델, 학습, 데이터 세트 등을 제공합니다.
파인 튜닝에서 사용된 데이터 세트는 ConvAI2(성격과 관련된 데이터 세트), Empathetic Dialogues (공감과 관련된 데이터 세트), Wizard of Wikipedia (지식과 관련된 데이터 세트), Blended Skill Talk(앞에 제시된 데이터 세트 혼합)를 사용하였습니다. 이전의 데이터 세트(ConvAI2, Wizard of Wikipedia, Empathetic Dialogues)를 개별적으로 학습하는 것보다는 이를 적절히 혼합한 데이터 세트(Blended Skill Talk)를 가지고 학습을 하여 모델의 성능을 높였다고 합니다.
모델에 대한 자세한 정보는 여기에서 확인할 수 있습니다.
이 모델에 대해 간략하게 요약하자면
- Facebook에서 발표한 챗봇 모델
- Fairseq 툴킷과 ParlAI 툴킷 사용
- Reddit에 쓰여진 글 중 조건에 맞는 데이터(사전 학습 데이터) + ConvAI2 + Empathetic Dialogues + Wizard of Wikipedia + Blended Skill Talk를 학습 데이터로 사용
GPT2에서 살짝 바꿔보자 : DialoGPT
DialoGPT은 Microsoft에서 발표한 챗봇 모델입니다. 이름에서 볼 수 있듯이 GPT-2의 아키텍처를 기반으로 설계되어 있으며 이를 대화 형식에 맞게 변형한 모델입니다. openchat에서 사용된 DialoGPT은 파라미터의 개수가 다른 3종류의 모델인데, 각각 117M(small), 345M(medium), 762M(large) 개의 파라미터로 BlenderBot의 파라미터 수에 비해 적은 것을 확인할 수 있습니다.
학습에 사용된 데이터 세트는 2005~2017년까지 Reddit에 쓰인 글 중 필터링을 거쳐 조건에 맞는 데이터를 뽑아 학습에 사용하였습니다. 소스 혹은 타겟에 URL이 있는 경우, 타겟이 적어도 3개 이상의 단어 반복이 존재하는 경우, 자주 등장하는 영단어 top 50(a, the, of …)가 하나도 포함되어 있지 않은 경우(외국어로 판단), 공격적인 단어를 포함하는 경우 등 이와 같은 조건은 필터링 조건이 되어 학습에 사용하지 않았습니다. 필터링 후 약 1억 4천 개의 대화를 구성하였습니다. 모델에 대한 자세한 정보는 여기에서 확인할 수 있습니다.
이 모델에 대해 간략하게 요약하자면
- Microsoft에서 발표한 챗봇 모델
- GPT2의 모델에서 대화체에 맞게 변형
- Reddit에 쓰여진 글 중 조건에 맞는 데이터들만 크롤링하여 학습데이터로 사용
오픈소스판 GPT-3 : GPT-Neo
OpenAI에서 개발한 GPT-3는 인간의 언어를 완벽하게 구현하는 모습에 세계를 놀라게 했습니다. 하지만 이 놀람은 곧 아쉬움으로 변했습니다. OpenAI가 Microsoft와 GPT-3 독점 라이센싱 계약을 맺었고 GPT-3를 활용한 서비스들이 종료되었기 때문이죠. 이에 오픈소스판 GPT-3를 만들자는 움직임이 생겼고 이에 따라 개발된 것이 EleutherAI의 GPT-Neo입니다.
이 모델의 특징은 Few-Shot Learning이 사용되었다는 점입니다. 최근의 모델들은 대부분 대량의 데이터로 학습한 후 파인튜닝을 거쳐 다양한 테스크들에 대해서 좋은 성능을 얻었습니다. 하지만 파인튜닝은 많은 데이터를 필요로 하여 시간과 비용이 많이 들뿐만 아니라 해당 테스크 외에서 모델을 사용할 수 없다는 단점이 있습니다. Few-Shot Learning은 이런 단점을 보완하기 위해 파인튜닝 과정을 삭제하고 적용하고 싶은 테스크에 대한 데이터 몇개의 예시를 보고 문제를 푸는 학습법입니다.
openchat에서 사용된 GPT-Neo은 파라미터의 개수가 다른 4종류의 모델인데, 각각 125M(small), 350M(medium), 1.3B(large), 2.7B(xlarge)개의 파라미터로 구성되어있습니다.
이 모델에 대해 간략하게 요약하자면
- 오픈소스로 공개된 GPT-3 서비스
- Few-Shot Learning 사용
“거인의 어깨 위에 올라선 난쟁이는 거인보다 더 멀리 본다.” — 조지 허버트
위와 같은 챗봇을 사용하기 위해서는 모델을 소개하는 논문을 보고 논문에서 제시된 방법대로 코드를 설계하여 사용해야 합니다. 또한 모델을 학습시킬 데이터를 구해야하고, 학습 환경을 조성하기위해 GPU를 준비해야합니다. 이 방법은 시간과 노력이 많이 투자되어야 하는 작업이므로 비효율적이라고 생각됩니다. 하지만 우리는 오픈소스라는 거인의 도움을 받으면 넓은 세상을 쉽게 볼 수 있습니다.
많은 오픈소스 개발자들이 이러한 작업을 대신하여 결과물을 오픈소스로 배포를 해주기 때문에 오픈소스로 배포된 챗봇을 이용하면 보다 쉽게 챗봇을 이용할 수 있습니다. 오픈소스를 배포하는 사이트로는 GitHub, Hugging Face, Ainize 등이 있습니다.
Hugging Face는 AI 커뮤니티로 Facebook, Google 등과 같은 기업에서 제공하는 모델, NLP 라이브러리 등을 오픈소스로 제공해줍니다. Ainize는 오픈소스 AI 프로젝트들을 배포하고 오픈 소스 코드를 확장 가능한 API 서비스로 전환하는 등 오픈소스에 대한 다양한 기능을 제공해주는 서비스입니다.
그래서 어떻게 쓰는데요?
- Ainize의 Openchat DEMO 사용하기
먼저 Openchat을 코드 없이 사용해보겠습니다.
Ainize에서 제공하는 Openchat DEMO 페이지에서 유저 닉네임, 봇 닉네임, 대화하고 싶은 주제를 입력 후, 모델은 선택하면 준비는 끝입니다. 원하는 말을 작성 후 Send 버튼을 누르게 되면 입력한 말이 전송되고 대답이 돌아오게 됩니다. 위에서 사용한 DEMO는 여기에서 사용할 수 있습니다.
- pip install openchat하여 사용하기
이번에는 Open chat을 설치하여 사용해보겠습니다. 먼저 Open chat을 사용하기 위해 Open chat install을 진행합니다. 그 후 Open chat을 설치하고 원하는 모델과 사이즈를 파라미터로 넣어주고 실행하면 Open chat을 사용할 수 있습니다.
실행 환경은 Ainize Workspace로 설정하였으며 여기에서 확인하실 수 있습니다.
- Ainize의 Open chat API 사용하기
이번에는 Ainize에서 제공하는 Open chat API를 사용하여 Open chat을 사용해보겠습니다. Open chat을 다른 서비스에서 활용하고 싶을 때는 이 방법을 사용하면 편할겁니다! Open chat은 POST 메소드를 사용하며
curl -X POST “https://main-openchat-fpem123.endpoint.ainize.ai/send/{유저 닉네임}” -H “accept: application/json” -H “Content-Type: multipart/form-data” -F “text={전달하고 싶은 메세지}”
와 같은 방식으로 호출할 수 있습니다. 그 후 잠시 기다리면
{“output”:” I am a teacher as well, I love my job. What kind of work do you like?”}
와 같은 응답을 받을 수 있습니다. 자세한 내용은 여기에서 확인할 수 있습니다.
챗봇의 현재와 미래
현재 챗봇이 일상에 미치는 영향은 극히 일부분입니다. 이러한 이유는 크게 보면 2가지라고 볼 수 있는데 첫 번째로 챗봇이 아직 완벽하게 사람의 말을 이해하지 못합니다. 인간의 대화 방식은 매우 복잡합니다. 단지 단어의 의미를 이해한다고 대화할 수 있는 것이 아니라 대화의 상황과 맥락 또한 함께 이해해야 합니다. 이처럼 사람에게도 복잡한 대화 방식을 인공지능에 학습시키기란 매우 어렵습니다.
두 번째로 모델을 학습시킬 데이터가 부족합니다. 인공지능을 다루는 사람들 사이에서 유명한 말 중 하나가 GIGO(Garbage-In, Garbage-Out)입니다. 즉, 질이 좋지 않은 데이터로 학습을 시키면 질 나쁜 예측값이 나온다는 의미입니다. 이처럼 챗봇의 성능을 높이기 위해서는 질 좋은 데이터가 필요하지만, 현재는 그렇지 못한 상황입니다.
하지만 이런 문제점들이 개선된다면, 챗봇은 지금보다 더 많은 분야에서 활용될 가능성이 높아질 것입니다. 미래에 챗봇이 활용될 분야 중 한가지인 교육 부분에서 살펴 보겠습니다.
대부분의 사람들은 도움을 요청하는 것을 부끄러워하는 경향을 보입니다. 아마 누군가에게 도움을 받으려고 하지 않은 것은, 이전에 도움을 받으려고 했을 때 “이것도 못해?”와 같은 소리를 들어서 그럴 것 입니다. 하지만 챗봇은 그러지 않습니다. 교육 측면에서 챗봇이 사람보다 탁월한 부분이 바로 이 부분일 것입니다. 기계는 사람을 평가할 수 없습니다. 같은 질문을 몇백번 하든, 챗봇은 불평없이 똑같은 대답을 해줍니다. 챗봇의 성능이 좋아진 후, 챗봇의 특성을 활용한다면 교육 분야에서 챗봇의 유용성은 높아질 것입니다.
아직은 완벽하지 않지만, 인공지능의 기술이 지금보다 더욱 발전하여 로봇들이 인간의 말들을 100% 구현한다면 인공지능이 인간의 삶을 편리하게 해주는 것을 넘어 친구가 될 수도 있을 거 같다는 생각이 들었습니다.
커뮤니티의 공통적인 관심사를 가지고 글을 써주는 모델로 글을 쓴다면, 여러분들은 이 글이 사람이 쓴 건지 기계가 쓴 건지 구분하실 수 있으신가요? 다음 글로 알아보도록 하겠습니다. 긴 글 읽어주셔서 감사합니다!
레퍼런스
AI 네트워크는 블록체인 기반 플랫폼으로 인공지능 개발 환경의 혁신을 목표로 하고 있습니다. 수백만 개의 오픈 소스 프로젝트가 라이브로 구현되는 글로벌 백엔드 인프라를 표방합니다.
최신 소식이 궁금하시다면 아래 커뮤니케이션 채널을 참고해주시기 바랍니다. 다시 한 번 감사합니다.
AI네트워크 공식 홈페이지: https://ainetwork.ai/
공식 텔레그램: telegram.com/ainetwork_kr
아이나이즈(Ainize): https://ainize.ai
유튜브: https://www.youtube.com/channel/UCnyBeZ5iEdlKrAcfNbZ-wog
페이스북:https://www.facebook.com/ainetworkofficial/
포럼:https://forum.ainetwork.ai/
AIN Price chart: https://coinmarketcap.com/currencies/ai-network/onchain-analysis/