레플리
글 수 188

챗봇에서 자연어처리 적용 방법

조회 수 5406 추천 수 0 2017.04.29 00:48:18


챗봇을 구현할때 가장 간단한 방법은 특정 단어가 포함되었을때 반응을 규칙으로 정하는 것입니다. 예를 들어 '피자'와 '주문'이란 단어가 있으면 '어떤 피자를 원하시나요?'라는 대답을 하는 것은 다음과 같이 나타낼 수 있습니다.

 

1
2
3
4
5
def CheckOrder(message):
    if '피자' in message and '주문' in message:
        return '어떤 피자를 원하시나요?'
    else:
        return NO_MATCH
cs

 

보통은 규칙을 스크립트로 만드는 방식으로 많이 사용합니다.

 

1
u: ('피자''주문') 어떤 피자를 원하시나요? 
cs

 

 

 

형태소 단위로 비교

 

위와 같은 방법은 간단하기는 하지만 잘못된 판단을 하는 경우가 많이 발생할 수 있습니다. 만약 '주문진에서 가장 유명한 피자가게 알려줘'라고 했을때 '주문'을 '주문진'과 혼돈하여 사용자의 의도와 전혀 다른 행동을 하게 됩니다. 특히 '옷', '책' 등 한글자로 된 단어일때 이런 문제가 나타날 가능성이 아주 높습니다. 

 

입력된 문장을 먼저 형태소분석으로 처리하면 이와 같은 현상을 방지할 수 있습니다. '주문진에서 가장 유명한 피자가게 알려줘'라는 문장을 다음과 같이 변환이 가능합니다.

 

1
2
주문진에서 가장 유명한 피자가게 알려줘
-> 주문진 + 에서 + 가장 + 유명 + 한 + 피자 + 가게 + 알려주 + 어 
cs

 

문장전체에서가 아니라 이렇게 형태소별로 나누어서 비교를 하면 '주문'과 '주문진'이 다르다는 것을 알 수 있습니다. 그래서 오류없이 사용자의 의도를 보다 정확하게 파악할 수 있습니다

 

 

 

동사의 어근 추출

 

형태소분석을 적용하면 동사의 어근만 비교하여 다양한 변형을 한번에 처리할 수 있습니다. 예를 들어 '피자 살래', '피자 사고싶어', '피자 산다' 등 같은 동사가 여러가지로 표현됩니다.

 

형태소분석을 하면 '사 + ㄹ래', '사 +고 + 싶 + 어', '사 + ㄴ다'로 변환할 수 있습니다. 그리고 각각 별도의 규칙을 만들 필요 없이 '사'라는 동사만 비교하면 됩니다.


 

 

문장의 의도 파악

 

피자를 사려는 사람들은 '피자 살래', '피자 주문할거야', '피자를 원해', '피자 배달해줘', '피자 갖다줄래?' 등 매우 다양한 방식으로 문장을 표현합니다. 하지만 모두 '사다'라는 의도를 가지고 있음을 알 수 있습니다. 이를 구현하는 첫번째 방법은 각각에 대해 따로 규칙을 만드는 것입니다. 

 

만약 '피자 살래'라는 규칙만 있어도 나머지 문장들이 입력되었을때 똑같이 판단할 수 있다면 좀 더 쉽게 챗봇을 만들 수 있습니다. 사실 이 부분이 매우 어렵습니다. 여러가지 의도를 미리 정의해놓고 동의어나 문장의 패턴을 사용하여 입력된 문장이 어떤 의도인지 분류할 수 있습니다. 최근에는 딥러닝을 적용하기도 합니다.

 

 

 

단위 변환

 

숫자, 날짜, 시간 등의 개체(entity) 역시 여러가지로 표현이 가능합니다. '피자 한개', '피자 한판', '피자 1개', '피자 하나' 등의 입력을 '피자 + 1'과 같이 통일된 방식으로 변환하면 보다 쉽게 처리할 수 있습니다. 

 

 

 

자체 구현 또는 챗봇 빌더

 

챗봇을 만드는 방법에는 두가지가 있습니다. 하나는 모든 것을 스스로 구현하는 것이고 다른 하나는 챗봇 빌더를 사용하는 것입니다. 자체 구현은 자신의 서비스에 맞도록 응용하거나 확장하기에 좋지만 복잡한 기능을 혼자 만들기에 어려움이 있습니다.

 

챗봇 빌더는 형태소분석과 개체, 의도 파악 등을 지원해주기 때문에 좀 더 쉽게 원하는 기능을 구현할 수 있습니다. 하지만 한번 만들어 놓으면 다른 챗봇 빌더로 바꾸거나 자체 프로그램으로 변경하기 힘들다는 단점이 있습니다.

 

그래도 처음 챗봇을 개발하려는 분들에게는 자신에게 맞는 챗봇 빌더를 선택하여 이용하는 것도 좋은 방법이라 생각합니다. 다만 wit.ai 같은 유명한 서비스는 아직 개체나 의도 파악 등에서 한글이 잘 지원되지 않습니다. 한국에서도 몇몇 챗봇 빌더가 나왔는데 아직 이러한 기능들이 조금 부족하지 않은가 싶습니다. 하지만 앞으로 점점 나아질 거라 생각합니다.

 

 

 

< 챗봇 개발자 모임 >

- 페이스북 그룹에 가입하시면 챗봇에 대한 최신 정보를 쉽게 받으실 수 있습니다.

https://www.facebook.com/groups/ChatbotDevKR/

엮인글 :
List of Articles
제목 글쓴이 날짜 조회 수
20살 AI '이루다'를 아시나요…그녀를 둘러싼 3가지 논란 깊은바다 2021-01-14 202
중국의 일상대화 챗봇 샤오이스(Xiaoice)에 대한 심층 기사 깊은바다 2020-12-13 619
게임에서 바라본 챗봇 - 캐릭터를 표현하는 챗봇을 구현하기 위한 키워드들 file 깊은바다 2020-11-24 234
구글홈(네스트) 허브의 킬러 콘텐츠는 유튜브 file 깊은바다 2020-11-13 176
알렉사 스킬의 등록 개수가 감소하고 있는 이유 깊은바다 2020-11-09 392
SM엔터테인먼트의 걸그룹 에스파, 인공지능 아바타를 전면에 내세움 깊은바다 2020-10-30 319
AI 스피커에서 맥락 이해를 위한 카이스트의 실험 깊은바다 2020-10-28 272
UX 관점에서 본 챗봇과 음성봇 - 문맥 처리 방법 깊은바다 2020-10-17 386
플로차트 방식의 새로운 챗봇 빌더 - Dialogflow CX file 깊은바다 2020-09-06 1251
'헤이, 카카오!'를 불러야 하는 이유 - 호출어 인식 방법 깊은바다 2020-09-02 257
코로나로 인기를 얻고 있는 챗봇, 셰리 터클의 반대 의견 깊은바다 2020-08-25 332
챗봇 시장 활성화 먼저, 카카오 유료화는 그 후에 깊은바다 2020-07-30 267
AI 챗봇 '루다'와 랜선 친구가 됐다 - 스캐터랩 대표 인터뷰 깊은바다 2020-07-30 424
카카오 i 오픈빌더 유료화의 문제점 깊은바다 2020-07-28 2441
카카오 i 디벨로퍼스 포럼 종료 깊은바다 2020-07-24 202