글 수 92

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

조회 수 3520 추천 수 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
제목 글쓴이 날짜 조회 수
꿈많은청년들이 만드는 챗봇의 미래 깊은바다 2017-09-23 168
챗봇 시장상황과 각 플랫폼별 특징 깊은바다 2017-09-07 383
네이버 톡톡 챗봇 API file 깊은바다 2017-08-31 958
인공지능에게 아직 대화는 어렵다 [2] 깊은바다 2017-08-23 324
mindmap.ai 누구나 만드는 챗봇플랫폼 서비스 [1] mindmap.ai 2017-07-09 648
대학생을 위한 챗봇인 라이언봇 개발일지 [1] 깊은바다 2017-06-16 601
챗봇이 잘 하는 것과 못 하는 것 깊은바다 2017-06-02 475
세계 챗봇 생태계 분석 깊은바다 2017-05-20 328
챗봇에 대한 10가지 질문과 답변 깊은바다 2017-05-16 360
카카오톡 챗봇 부산모아 제작기 깊은바다 2017-05-01 559
챗봇에서 자연어처리 적용 방법 깊은바다 2017-04-29 3520
페이스북 메신저에서 챗봇 기능 강화 깊은바다 2017-04-28 155
최근 챗봇이 주목받는 이유와 앞으로의 미래 file 깊은바다 2017-04-19 443
챗봇은 무엇인가? file 깊은바다 2017-03-30 463
챗봇에 대한 개념 및 CJ오쇼핑의 톡주문 소개 깊은바다 2017-03-27 721