얼마 전, 삼성전자에서 보안에 대한 우려로 임직원들에게 생성형AI의 사용을 전면 금지한다는 소식을 접했는데요. 삼성전자뿐만 아니라, JP모건을 포함해 아마존, 소프트뱅크, 뱅크오브아메리카 등 chatGPT가 등장한 후 많은 글로벌 기업에서 임직원들을 대상으로 GPT사용을 제한하고 있습니다. 이러한 추세에 따라 openAI측에서는 채팅의 기록을 남기지 않고, 학습 데이터로도 사용하지 않는 비공개 모드를 발표했지요.
오늘은 이렇게 AI가 스스로 학습하고, 텍스트를 만들어 내기까지 그 발전 과정에 대해 정리해보려 합니다.
이 글도 두 편으로 나누어 게재될 예정인데요, 1편에 해당하는 이 글에서는 챗봇의 가장 기초적인 내용을 다루고, 2편에서 2023년 현재의 관점에서 바라본 챗봇의 변화에 대해 적어 보겠습니다.
1. 챗봇의 구성요소
먼저 챗봇의 가장 기본적인 요소부터 말씀드릴게요!
챗봇은 사용자가 말하는 문장, 즉 '의도'에 해당하는 인텐트(Intents)와 이 문장 안에서의 가장 핵심적인 단어에 해당하는 엔티티(Entities)로 구성됩니다.
인텐트는 신뢰도에 영향을 미치는데요. 미리 학습해 둔 인텐트들 중, 해당 문장이 어떤 의도에 가장 가까운지에 따라 분류됩니다. 놀이터의 시소를 떠올려보면 조금 더 쉽게 이해하실 수 있는데요, 조금 더 무거운 쪽으로 기우는 것처럼 컴퓨터가 의도를 분류할 때 신뢰도가 가장 높은 쪽의 의도로 기웁니다.(분류합니다.)
'핵심 단어'에 해당하는 엔티티는 신뢰도에 영향을 미치지 않습니다. 그럼 어떤 역할을 하느냐구요?
엔티티의 경우, 변수로 활용할 수 있기에 제품명이나 날씨, 시간 등으로 활용이 됩니다.
2. 챗봇의 기본적인 동작원리
그렇다면, 챗봇의 가장 기본적인 동작 원리는 무엇일까요?
음성이나 문자로 이루어진 사용자의 발화 문장은 자연어이해, NLU로 전달이 됩니다.
자연어이해인 NLU엔진에서 사용자가 발화한(입력한) 문장을 이해하는데요, 이때 사전에 학습해 둔 의도들 중에서 신뢰도가 가장 높은 의도로 분류가 되고, 해당 의도에서 설정해 둔 Dialog를 통해 응답을 하게 됩니다.
예를 들어, 챗봇으로 레스토랑을 예약한다고 가정해 볼게요! 레스토랑을 예약할 때 예약자로부터 받아야 할 필수적인 정보들이 있습니다. ①날짜 ②시간 ③인원수 ④예약자명 ⑤연락처 등이 있지요.
이때, 예약자는 "내일 저녁7시에 6명 예약 가능할까요?"라고 발화한다면, "~~~예약 가능 할까요?"라는 문장을 통해 예약을 한다는 의도로 분류됩니다.
여기서, 날짜와 시간, 인원수에 해당하는 키워드를 사전에 엔티티로 설정해 뒀다면,
@날짜=내일에 해당하는 날짜(보통 yyyymmdd형식)
@시간=19
@인원수=6
이라는 값이 잡히고 이는 곧 변수가 되어 해당 레스토랑의 예약시스템으로 전달할 수 있는 형태가 됩니다.
즉, 예약자가 말한 문장에서 '의도'는 신뢰도에 따라 챗봇이 어떤 답변을 하는지를 설정해주는 것이고, '엔티티'는 실제 예약시스템에 예약이 필요한 값을 넘겨줌에 따라 실제 예약을 잡아주는(처리해 주는) 챗봇으로 동작합니다.
3. 신뢰도에 영향을 미치는 인텐트
여기서, '신뢰도'는 어떻게 측정이 되는지 궁금하실 것 같은데요.
챗봇의 대화를 설계할 때 가장 먼저 대화의 전반적인 흐름을 스케치하고, 중복되지 않도록 명확한 기준에 따라 의도를 분류합니다. 이후 각 의도 별로 사용자가 말할 법한 예제들을 학습시키는데요,
위 레스토랑 예약에서 '#예약'이라는 하나의 의도가 있을 때 학습 예제들은 아래 예시와 같아요.
#예약
① 식당 예약 하려구요
② 식사 예약이 가능할까요?
③ 저녁 모임장소를 찾고있는데요,
④ 소개팅이 있어서 미리 자리좀 잡으려구요
...
예약변경 의도의 학습예제들도 예시를 들어볼까요?
#예약변경
① 예약했었는데 바꾸려구요
② 예약시간을 미룰 수 있을까요?
③ 식사자리 잡아뒀던거 변경가능합니까?
④ 이전에 전화드렸었는데, 모임 날짜가 당겨졌어요.
이처럼 사용자의 예상발화, 즉 학습셋의 구성은 ①해당 의도를 벗어나지 않고 ②되도록이면 다양하고, 다채로운 발화를 예제로 등록합니다.
사람들마다 선택하는 어휘가 다르고, 자주 쓰는 문장이 다르기에 표현하는 방법은 아주 다채롭기 때문이지요!
한 가지를 더 예를 들어본다면, '#배고픔'이라는 의도의 학습 예제는 '배가고파요', '배고파요'등의 발화는 물론이고, '할아버지가 시장하시대', '배와 등이 뽀뽀하겠어' 등 다양하게 발화될 수 있는 문장으로 학습을 시킬 수 있습니다.
이렇게 설정된 학습예제(학습셋)에 따라 "식사 장소 좀 잡으려구요"라는 사용자 발화가 입력됐을 때, 머신러닝(ML)결과에 따라 신뢰도가 가장 높은 의도인 '#예약'이라는 의도로 분류(인식)됩니다.