글 수 92

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

조회 수 3608 추천 수 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
제목 글쓴이 날짜 조회 수sort
챗봇의 종류 및 적용 분야 file 깊은바다 2018-03-04 16770
챗봇에서 자연어처리 적용 방법 깊은바다 2017-04-29 3608
챗봇의 한계와 미래 file 깊은바다 2018-10-15 2885
대화 인터페이스, 챗봇, 그리고 자연어처리 깊은바다 2018-04-06 2639
MS의 Bot Framework 챗봇 세미나 후기 file [2] 깊은바다 2017-09-24 1248
구글은 챗봇이 나쁜 생각이었다고 인정했다 file 깊은바다 2018-10-29 1169
플로차트로 만드는 챗봇서비스 - 단비(danbee.Ai) 깊은바다 2017-11-19 1079
AMICA.ai - 네이버에서 만든 챗봇 API 깊은바다 2017-02-28 1074
대화 프로그램 - ELIZA 깊은바다 2016-03-25 1070
네이버 톡톡 챗봇 API file 깊은바다 2017-08-31 972
챗봇 기술과 서비스 사례 소개 깊은바다 2018-02-28 778
챗봇에 대한 개념 및 CJ오쇼핑의 톡주문 소개 깊은바다 2017-03-27 736
mindmap.ai 누구나 만드는 챗봇플랫폼 서비스 [1] mindmap.ai 2017-07-09 654
대학생을 위한 챗봇인 라이언봇 개발일지 [1] 깊은바다 2017-06-16 603
사용자 인터페이스(UI) 챗봇의 구조 깊은바다 2018-11-29 601