“단언컨대”는 “단언컨데”로 자주 쓰이는, 맞춤법이 빈번하게 틀리는 단어이다. 이런 경우 자주 틀리는 부분에 와일드카드를 사용함으로써 사용자 입력을 놓치지 않을 수 있다. 즉 u: (단언* 한류 그룹) 예. 정말 독창적인 그룹이지요. 이런 미봉책이 아니라 보다 근본적인 방법으로는 replace 명령어로 보조 사전을 만들어 매칭을 시도하기 전에 먼저 사용자가 틀리게 입력한 문장을 교정하는 것이다. replace: 단언컨데 단언컨대replace: 단언건데 단언컨대 이렇게 replace를 이용해서 만들어진 보조사전은 TOPIC폴더 내에 private1.txt로 저장되고 반영된다.[1] 맞춤법이 흔히 틀리는 단어로는 역할, 오랜만이다, 설거지, 하마터면 등 많은 단어가 있는데 특히 채팅 상황에서는 오타가 흔히 ..
메신저로 문자 대화를 하는 경우 문자 이모티콘을 사용하는 경우가 있다. 예를 들면 :-(, :-), OTL 등 키보드 자판을 이용하여 말로 하기 곤란한 답을 간단히 대신하는 경우이다. 챗봇이 이런 이모티콘을 알아듣도록 하기 위해서는 LiveData 폴더에 있는 texting.txt 파일에 이 내용을 등록해 주면 된다. 이 파일을 열어보면 널리 쓰이는 문자 이모티콘 7개가 이미 등록되어 있는 것을 볼 수 있을 것이다. 이곳에 추가해 주면 되는데 등록할 때 그 이모티콘이 슬픔을 뜻하는 것인지, 기쁨을 뜻하는 것인지 등에 따라 옆에 적합한 컨셉을 함께 적어 주면 된다. 맨 마지막 줄의 신규등록은 사용자가 추가한 것이라 가정을 한 것이다. LiveData폴더 아래의 texting.txt 파일에 위의 내용을 입력..
대화의 문맥상 상대방이 투애니원의 "내가 제일 잘 나가"를 언급할 것이 예상된다고 가정해 보자. 그럼 이때 어떻게 하면 "내가 제일 잘 나가"를 4개 어절의 보통명사가 아니라 한 단어의 고유명사로 취급하게 할 수 있을까? 패턴에 겹 따옴표를 사용하면 된다. u: (“내가 제일 잘 나가” 들어 봤*) 그럼요, 저도 그 곡을 즐겨 들어요. 사용자가 겹따옴표 안에 들어있는 내용과 동일한 단어와 순서로 입력을 하면 CS는 그 일련의 단어들을 한 단어의 고유명사로 취급한다. 만약 겹 따옴표를 하지 않으면, CS는 저 4개의 어절을 각각 별도의 단어로 취급하여 아주 다른 결과를 내 놓을 수 있게 된다. 따라서 사람 이름, 회사 이름, 브랜드, 특히 영화 제목, 책 제목, 노래 제목 등 두 어절 이상으로 이뤄진 고유..
외래어 또는 외국어를 글로 표기할 때는 원어를 그대로 쓰는 경우도 있고 발음 나는 대로 한글로 쓰는 경우도 있다. 문제는 한글로 쓸 때인데 표준 표기법을 따르지 않고 제각각 다양하게 쓰는 것이 현실이기 때문에 표기가 달라도 동일한 단어로 인식하는 방법이 필요하다. 예를 들어 TV를 한글로 쓸 때는 티비, 티브이, 텔레비전, 텔레비죤, 텔레비, 테레비 등으로 사람마다 다양하게 표기한다.위의 대화 예제에서도 씨엘을 CL, 씨에루(팬들이 부르는 애칭) 등으로 표기할 수 있으므로 이를 컨셉으로 묶어 사용자가 어떻게 표기하든 놓치지 않도록 할 필요가 있다. concept: ~씨엘 [ 씨엘 씨에루 CL 이채린 “투애니원 리더” ]b: (~씨엘 *~2 좋아*) 그렇군요. 저는 박봄이 좀 더 좋아요. 위의 씨엘 컨셉에..
위의 표는 기본형 “좋아하다”의 활용형을 정리한 것이다. 존칭형은 생략하였고 과거완료, 미래완료 등의 완료시제와 완료진행시제도 생략하였으며 접속형도 대표적인 것 일부만 정리하였다. 그나마 “좋아하다”는 규칙 활용을 하기 때문에 쉬운 것이고 “반갑다” 등과 같이 불규칙 활용을 하는 경우는 더욱 변화무쌍하다.문제는 우리말의 모든 동사와 형용사가 위와 같이 활용을 한다는 점인데 이를 어떻게 챗봇에게 가르칠 것이냐 하는 점이다. 다행히 챗봇은 사용자가 입력한 문장을 올바르게 이해하기만 하면 되지만 (출력문은 챗봇의 개발자가 작성하므로) 대화 상대방이 문장의 형태에 따라, 시제에 따라, 뒤따르는 단어의 형태에 따라, 그리고 본인이 생각하는 챗봇과의 위계 질서에 따라 저 활용형 중 하나를 선택하여 입력문에 포함시킬..
사용자가 “좋아하는 노래 있어요?” 라고 질문하는 경우를 생각해 보자. 이때 사용자는 노래대신에 음악, 팜송, K-POP, 곡 등 여러 표현으로 물어볼 수 있다. 즉 비슷한 말을 어떻게 알아 듣게 할 것인가 하는 문제이다. 이 역시 선택매칭([ ], 꺽은괄호) 또는 concept을 이용하여 처리할 수 있다. 선택매칭과 concept의 구문형식에 대해서는 이미 제3장 2절 듣고 말하기에서 설명하였기 때문에 이곳에서는 그 용도와 확장 사용에 대해서만 설명하기로 하겠다.[1] A. u: ( 좋아* [노래, 곡, 음악, 가사, song] 있어요) 예. I love you를 좋아해요 B. concept: ~노래 [노래, 곡, 음악, 가사, Song] u: ( 좋아* ~노래 있어요) 예. I love you를 좋아..
챗봇의 질문에 사용자가 늘 기대한 형식대로 답변을 하는 것은 아니다. 예를 들어 “좋아하는 가수 있어요?”라고 물었을 때 사용자의 답변은 크게 아래와 같이 두 가지가 가능하다. A. 저는 2NE1을 좋아해요B. 저는 2NE1을 안 좋아해요 위 답변의 어려운 점은 구문 형식은 흡사한데 뜻은 정반대라는 점이다. 우선 예제 A를 위한 패턴을 작성해 보자. C. u: ( ~2NE1 좋아* ) 이 패턴은 “저는 2NE1을 좋아해요”, “저는 2NE1이 좋아요” 등의 입력문과 매칭될 수 있다. 이제 사용자가 “무척 좋아해요”, “아주 많이 좋아해요” 등의 강조형으로 입력할 경우를 대비하여 패턴을 수정하면, D. u: ( ~2NE1 *~2 좋아* ) 그런데 이 패턴은 예제 B와도 매칭이 된다는 점이 문제이다. 이런 ..
챗봇이 예-아니오 형식의 질문을 한다면 사용자의 가능한 응답은 예, 아니오, 왜 물어요? 정도가 되겠지만 챗봇이 열린 질문을 한다면 그 때는 대비해야 할 사용자 예상 응답이 무척 많게 된다. 예를 들어 “라면 좋아하세요?”라는 질문에는 예, 아니오, 왜 물어요? 정도의 사용자 답변이 가능하지만 “좋아하는 요리가 뭐에요?”라는 열린 질문에 대해서는 수 십 개에서 수 백 개의 사용자 답변이 가능할 것이다. 더구나 각각의 답변이 다시 꼬리에 꼬리를 물며 대화가 이어질 수도 있기 때문에 각 상황에 맞는 답변을 준비하는 것은 내용상으로도 쉽지 않을 뿐만 아니라 형식상으로도 복잡할 수 있다. 위의 대화 예제는 이러한 열린 질문을 약식으로 정리해 본 것이다. 예제에서 보는 것처럼 열린 질문을 할 경우 그 답변은 크게..
사용자가 챗봇에게 “좋아하는 노래 있어요?”라고 묻는 상황을 가정해 보자. 이때 사용자는 아래와 같이 물어볼 수 있다. A. 좋아하는 노래 있어요?B. 노래 좋아하는 거 있어요? 어순이 중요한 영어에서도 구어의 경우 어순을 무시하는 경우가 많다고 하는데, 한국어와 같이 어순이 중요하지 않은 언어의 경우는 어순이 더더욱 무시될 수 있다. 이런 경우에는 순서에 상관없이 패턴과 사용자 입력문을 비교하는 것이 필요하다. 이때 사용하는 명령어가 >이다. C. u: (>) 예. I love you를 좋아해요. 패턴에 > 명령어가 있으면 CS엔진은 단어의 나열된 순서에 상관없이 그 단어들이 사용자 입력문에 나타나는가를 조사하여 매칭여부를 판단한다. 이제 룰C가 어떻게 사용자 입력문 B와 매칭되는지 확인해 보기로 하자..
챗봇이 K-POP을 좋아하냐고 물은 후, 사용자의 대답을 듣고 그에 적합한 응대를 함으로써 대화를 이어 나가는 예제이다. 이와 같은 대화가 가능하기 위해서는 첫째 사용자의 말을 “잘” 들어야 하며 둘째 “들은” 말에 대응하는 규칙이 준비되어 있어야 한다 사용자의 말을 잘 듣는다는 것은, 사용자가 이렇게 말할 것이다라고 예상하여 그 말과 매칭이 가능하도록 패턴을 준비해 놓는 것을 뜻한다. 위의 대화를 위한 스크립트를 보면, 로 작성되어 있는데 먼저 룰의 형식을 다시 한 번 복습해 보자. 이 룰은 사용자 입력문(u:)이 패턴(괄호 안의 내용)과 일치하면 오른쪽의 출력문을 출력하라는 룰이다. 이런 형식의 룰을 응답하기(responder) 룰이라고 부른다. 즉 사용자의 말에, 그것이 의문문이든 평서문이든 관계없..