레플리
글 수 188

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

조회 수 5402 추천 수 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
제목 글쓴이 날짜 조회 수
일상대화 챗봇의 가장 핵심은 방대한 데이터에 기반한 다양성 깊은바다 2021-10-06 778
일상대화 챗봇이 사람들간의 관계를 약화시키는게 아닐까 깊은바다 2021-08-31 1025
상담챗봇에 대한 뉴욕타임즈의 기사 깊은바다 2021-06-03 290
일상대화 챗봇 레플리카(Replika)의 의상과 AR 기능 file 깊은바다 2021-05-30 627
챗봇 분석을 위한 20가지 측정 항목 깊은바다 2021-05-19 992
챗봇을 위한 대화는 어떻게 디자인할까 - 챗봇의 기본 요소 정리 깊은바다 2021-04-20 445
컨슈머인사이트, 2019~2020 AI스피커 이용현황-만족도 비교 깊은바다 2021-03-26 231
목적지향 대화인 알렉사 프라이즈 태스크봇(Alexa Prize TaskBot) 대회 깊은바다 2021-03-17 203
제조사만의 음성비서를 만들 수 있는 Alexa Custom Assistant 깊은바다 2021-03-02 210
챗봇이란, 챗봇 개념 쉽게 이해하기 깊은바다 2021-02-19 626
전문가보다 아기 같은 페르소나를 가진 챗봇이 사용자에게 호감 깊은바다 2021-02-08 333
타로챗봇 라마마 대표 인터뷰 깊은바다 2021-02-05 335
챗봇 대화만으로 수익을 얻을 수 있을까 file 깊은바다 2021-02-01 407
인공지능 챗봇(Chatbot), 챗봇 역사의 모든 것 깊은바다 2021-01-27 373
일상대화 챗봇 이루다, 일시 중단 결정 깊은바다 2021-01-14 168