레플리
글 수 59

챗봇 알고리즘의 발전 과정

조회 수 18386 추천 수 0 2018.04.20 17:13:37


챗봇이란 대화를 할 수 있는 컴퓨터 프로그램을 의미합니다. 그 기원을 거슬러 올라가면 앨런 튜링이 제안했던 튜링 테스트를 들 수 있습니다. 기계가 인간과 구분할 수 없을 정도로 대화가 가능하다면 지능이 있다고 판별하는 것을 의미합니다.

 

최근 인공지능이 발전하면서 챗봇 역시 큰 관심을 받고 있습니다. 메신저 기반의 챗봇 뿐만 아니라 인공지능 스피커에서도 대화 인터페이스가 큰 역할을 하고 있습니다. 지금부터 이런 챗봇을 구현하기 위해 어떤 알고리즘을 사용해 왔는지 간단하게 살펴보겠습니다.

 

 

 

ELIZA

 

1_H_TfVCNxz-a2cXak6W5cKw.jpg

 

최초의 챗봇으로 알려진 것은 1966년 MIT의 교수였던 조셉 바이젠바움(Joseph Weizenbaum)이 만든 ELIZA입니다. 환자와 대화하면서 심리치료사의 역할을 수행하는 역할을 하였는데, 실제로 메사추세츠 종합병원에서 사람들을 대상으로 시험한 결과 다수가 자신이 대화한 상대가 컴퓨터라는 것을 알지 못했다고 합니다.

 

 

 

ELIZA에서 사용하는 방법 중 하나는 이전에 했던 말을 조금 변경해 질문을 하는 것입니다. 다음과 같이 'I want to'라는 문자열이 나오면 그 뒤에 나오는 말을 그대로 사용해서 물어봅니다.

 

Me : I want to travel around world

ELIZA : What if you don't get to travel around world

 

 

 

또 다른 방식으로 키워드 매칭을 들 수 있습니다. 특정 단어가 나오면 미리 설정되어 있는 문장을 대답합니다. 

 

Me : Go away

ELIZA : Do you want to be left alone?

 

 

 

< 참고 자료 >

- ELIZA 대화 프로그램

- ELIZA의 C 코드

 

 

 

AIML

 

chatbot-ai-alice.jpg

 

AIML(Artificial Intelligence Markup Language)은 리차드 월러스(Richard Wallace)가 개발했던 ALICE 챗봇에 사용되었던 것으로 XML 형식의 스크립트를 통해 대화 인공지능을 구현한 방식입니다. ALICE는 챗봇 대회인 뢰브너 상에서 3번이나 우승을 하였으며 2001년에 오픈소스로 AIML이 공개되었습니다.

 

 

 

AIML은 아래와 같이 <pattern>에 있는 문장이 나오면 <template>에 있는 말을 대답하도록 되어있습니다.

 

<aiml>
 
    <category>
 
        <pattern>hi</pattern>
 
        <template>Hello!</template>
 
    </category>
 
</aiml>
 

 

 

 

정확히 일치하는 문장이 아니라 일부분만 포함되는 것을 표현하기 위해서 아래와 같이 * 기호를 사용할 수도 있습니다. 그 밖에도 조건 검사, 변수 설정, 주제 분류 등 다양한 기능을 지원합니다.

 

<aiml>
 
    <category>
 
        <pattern>* coffee *</pattern>
 
        <template>I love coffee</template>
 
    </category>
 
</aiml>
 
 

 

 

 

< 참고 자료 >

- Mitsuku 챗봇

- AIML 사용법

 

 

 

ChatScript

 

K-001.png

 

ChatScript는 브루스 윌콕스(Bruce Wilcox)가 2011년 공개하였으며 AIML과 마찬가지로 뢰브너 상에서 여러번 우승하기도 했습니다. 기능은 AIML과 거의 비슷하지만 복잡한 태그를 사용하지 않기 때문에 훨씬 간단하게 스크립트를 구현할 수 있습니다. 

 

 

 

Concept: ~fruit(apple banana orange)
Topic: ~food(~fruit fruit food eat)
 
t: What is your favorite food?
    a: (~fruit) I like fruit also.
    a: (* icecream *) I like icecream too.
 

 

또 하나의 장점은 여러 비슷한 단어를 Concept으로 묶어서 처리할 수 있다는 것입니다. Topic은 특정 주제로 분류하는 것으로 설정한 단어가 포함된 문장일 경우 해당 토픽의 스크립트를 검사합니다. AIML과 마찬가지로 * 기호를 사용할 수도 있습니다.

 

 

 

< 참고 자료 >

- ChatScript 사용법

 

 

 

심심이

 

3ab82369b2e886f9e8380632ffcbe995.jpg

 

심심이는 이즈메이커가 2002년 개발하였으며 처음에는 MSN 메신저로 대화할 수 있는 봇의 형태였습니다. 그 후 웹, 모바일 등 다양한 플랫폼으로 출시되어 큰 인기를 얻었습니다.

 

AIML과 ChatScript의 경우 상당히 세부적으로 스크립트를 작성할 수 있다는 장점이 있습니다. 하지만 그런 데이터를 일일이 만드는 것이 너무 어렵다는 것이 문제였습니다.

 

하지만 심심이는 단순히 전체 문장의 유사도만 가지고 검사를 하기 때문에 일반 사용자들도 쉽게 원하는 말을 가르칠 수가 있습니다. 그래서 방대한 대화 목록을 구축할 수 있었고 이것이 인기의 가장 큰 비결이었습니다.

 

 

 

비슷한 문장을 판단하는 가장 단순한 방법으로 자카드 유사도(Jaccard similarity)를 들 수 있습니다. 두 문장의 합과 두 문장에서 일치하는 부분의 비율을 계산하여 비교를 합니다.

jaccard.jpg

A = 안녕하세요

B = 안녕하니

J(A, B) = 3 / 6 = 0.5

 

 

 

현재

 

1_K6ckCryol2tsmaWORs-e8g.jpg

 

사실 지금 대부분의 챗봇 빌더는 이전에 스크립트로 하는 방식과 크게 다르지 않습니다. 다만 일상 대화 뿐만 아니라 특정한 목표를 달성하기 위해서 엔터티(Entity)와 인텐트(Intent)라는 개념을 사용합니다.

 

엔터티는 각각의 개체를 뜻하는 것으로 위의 문장에서는 yesterday와 financial을 가리킵니다. 인텐트는 문장이 가지고 있는 의도로 뉴스를 보여달라는 것을 알 수 있습니다. 각 의도에 따라 해당 모듈을 실행하고 인텐트에 맞게 적절한 정보를 보여줍니다.

 

이런 엔터티와 인텐트는 키워드 매칭이나 유사도를 기반으로 판별할 수 있습니다. 또한 형태소분석이나 구문분석 기법을 사용하여 정확도를 더욱 높이기도 합니다. 최근에는 딥러닝을 통해 엔터티와 인텐트를 구분하도록 자동으로 학습하기도 합니다.

 

 

 

< 챗봇 개발자 모임 >

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

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

List of Articles
제목 글쓴이 날짜 조회 수sort
파이썬과 Flask로 만든 간단한 카카오톡 챗봇 file [2] 깊은바다 2017-04-22 25299
챗봇 개발 플랫폼 비교 file [1] 깊은바다 2018-03-07 21377
챗봇 알고리즘의 발전 과정 file 깊은바다 2018-04-20 18386
PHP로 만든 간단한 카카오톡 챗봇 file 깊은바다 2017-04-15 12641
자바 스프링으로 카카오톡 챗봇 만들기 깊은바다 2017-11-26 10481
Python으로 챗봇 만들어보기 - 영화 정보 / 음료 주문 깊은바다 2017-12-22 8938
파이썬과 Django로 카카오톡 챗봇 구현하기 깊은바다 2017-04-18 8328
ChatScript로 한국어 챗봇 개발하기 [2] 깊은바다 2017-03-21 8212
파이썬과 Flask로 만든 간단한 페이스북 챗봇 file 깊은바다 2017-04-30 8022
Api.ai로 Telegram 연동 챗봇 만들기 깊은바다 2017-10-02 5936
카카오i 오픈빌더 문서 file 깊은바다 2018-12-03 5918
카카오i 오픈빌더로 피자챗봇 만들기 깊은바다 2018-12-19 4521
Chatfuel로 코딩없이 타로 챗봇 만들기 file 깊은바다 2017-09-26 4364
Node.js로 카카오봇 만들기 깊은바다 2017-06-20 4167
슬랫봇 30분만에 만들기 깊은바다 2017-04-29 3776