레플리
글 수 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
제목 글쓴이 날짜 조회 수
Replika, GPT3 도입 준비 깊은바다 2020-07-02 483
일상대화 챗봇이 쉽게 지루해지는 이유 file 깊은바다 2020-05-09 1211
시리의 개발자, 애덤 체이어의 발표 영상 깊은바다 2020-04-10 235
드라마 반의반, 사람의 인격을 가상의 인공지능으로 구현 깊은바다 2020-04-04 258
인공지능을 의인화하는 일라이자 효과(ELIZA Effect) file 깊은바다 2020-03-26 1162
핑퐁 빌더를 도입하면 챗봇이 2배 더 좋아지는 이유 - 일상대화 장점 깊은바다 2019-12-12 445
설문조사에서 구글홈보다 아마존 알렉사의 선호도가 높은 이유 깊은바다 2019-11-04 678
정신과와 외과 의사는 인공지능에서 자유로울까 - 가상 상담사 엘리 깊은바다 2019-10-14 444
챗봇 접객 자동화 3가지 영역 - 웹 컨시어지 챗봇 깊은바다 2019-10-03 4831
챗봇 열풍을 불러온 페이스북, 이제 딥러닝 자연어처리에 집중 깊은바다 2019-09-27 431
사용자가 직접 대답을 작성하는 알렉사 앤서(Alexa Answers) file 깊은바다 2019-09-17 335
AI스피커 보급 3년...“쓸만해요?” 물었더니 - 국내 설문조사 깊은바다 2019-09-01 594
챗봇이 '챗'봇이어야 하는 이유 - 의도분류를 넘어 일관된 대화를 하려면 깊은바다 2019-08-11 661
챗봇의 대화 자체는 수익 모델이 아니다 file 깊은바다 2019-08-06 939
알렉사 스킬 블루프린트(Skill Blueprints) - 웹사이트에서 쉽게 제작하는 스킬 깊은바다 2019-07-27 259